probably fixed blit crash in X11
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50742 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -103,7 +103,7 @@ public:
|
|||||||
virtual wxSize GetPPI() const;
|
virtual wxSize GetPPI() const;
|
||||||
|
|
||||||
virtual void DestroyClippingRegion();
|
virtual void DestroyClippingRegion();
|
||||||
WXWindow GetWindow() const { return m_window; }
|
WXWindow X11GetWindow() const { return m_window; }
|
||||||
|
|
||||||
virtual void ComputeScaleAndOrigin();
|
virtual void ComputeScaleAndOrigin();
|
||||||
|
|
||||||
|
@@ -1487,6 +1487,14 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoor
|
|||||||
}
|
}
|
||||||
else // use_bitmap_method
|
else // use_bitmap_method
|
||||||
{
|
{
|
||||||
|
wxDCImpl *impl = srcDC->GetImpl();
|
||||||
|
wxWindowDCImpl *x11_impl = wxDynamicCast(impl, wxWindowDCImpl);
|
||||||
|
if (!x11_impl)
|
||||||
|
{
|
||||||
|
SetLogicalFunction( old_logical_func );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((width != ww) || (height != hh))
|
if ((width != ww) || (height != hh))
|
||||||
{
|
{
|
||||||
/* Draw source window into a bitmap as we cannot scale
|
/* Draw source window into a bitmap as we cannot scale
|
||||||
@@ -1506,7 +1514,7 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoor
|
|||||||
|
|
||||||
// copy including child window contents
|
// copy including child window contents
|
||||||
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
|
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
|
||||||
XCopyArea( (Display*) m_display, (Window) srcDC->GetWindow(), (Window) bitmap.GetPixmap(),
|
XCopyArea( (Display*) m_display, (Window) x11_impl->X11GetWindow(), (Window) bitmap.GetPixmap(),
|
||||||
(GC) m_penGC, xsrc, ysrc, width, height, 0, 0 );
|
(GC) m_penGC, xsrc, ysrc, width, height, 0, 0 );
|
||||||
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
|
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
|
||||||
|
|
||||||
@@ -1527,7 +1535,7 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoor
|
|||||||
|
|
||||||
// copy including child window contents
|
// copy including child window contents
|
||||||
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
|
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
|
||||||
XCopyArea( (Display*) m_display, (Window) srcDC->GetWindow(), (Window) m_x11window,
|
XCopyArea( (Display*) m_display, (Window) x11_impl->X11GetWindow(), (Window) m_x11window,
|
||||||
(GC) m_penGC, xsrc, ysrc, width, height, xx, yy );
|
(GC) m_penGC, xsrc, ysrc, width, height, xx, yy );
|
||||||
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
|
XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user