]> git.saurik.com Git - wxWidgets.git/commitdiff
probably fixed blit crash in X11
authorRobert Roebling <robert@roebling.de>
Sun, 16 Dec 2007 13:54:05 +0000 (13:54 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 16 Dec 2007 13:54:05 +0000 (13:54 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50742 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/x11/dcclient.h
src/x11/dcclient.cpp

index 928edfaf5648c6324f90096fb23e9f54768d1052..3144e6b64dc87ef0ebbcfe917daeaf01982ae630 100644 (file)
@@ -103,7 +103,7 @@ public:
     virtual wxSize GetPPI() const;
 
     virtual void DestroyClippingRegion();
     virtual wxSize GetPPI() const;
 
     virtual void DestroyClippingRegion();
-    WXWindow GetWindow() const { return m_window; }
+    WXWindow X11GetWindow() const { return m_window; }
 
     virtual void ComputeScaleAndOrigin();
 
 
     virtual void ComputeScaleAndOrigin();
 
index 8475d387d0dc7e3f78f35b944329d6c339df784c..fe35b9d0a38c28733623efd256843bfebbe1adf8 100644 (file)
@@ -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))
         {
             /* Draw source window into a bitmap as we cannot scale
         if ((width != ww) || (height != hh))
         {
             /* 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
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
 
             // copy including child window contents
             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 );
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
 
                        (GC) m_penGC, xsrc, ysrc, width, height, 0, 0 );
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
 
@@ -1524,10 +1532,10 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoor
         else
         {
             // No scaling and not a memory dc with a mask either
         else
         {
             // No scaling and not a memory dc with a mask either
-
+            
             // copy including child window contents
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, IncludeInferiors );
             // copy including child window contents
             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 );
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
         }
                        (GC) m_penGC, xsrc, ysrc, width, height, xx, yy );
             XSetSubwindowMode( (Display*) m_display, (GC) m_penGC, ClipByChildren );
         }