-            /* draw source window into a bitmap as we cannot scale
-               a window in contrast to a bitmap. this would actually
-               work with memory dcs as well, but we'd lose the mask
-               information and waste one step in this process since
-               a memory already has a bitmap. all this is slightly
-               inefficient as we could take an XImage directly from
-               an X window, but we'd then also have to care that
-               the window is not outside the screen (in which case
-               we'd get a BadMatch or what not).
-               Is a double XGetImage and combined XGetPixel and
-               XPutPixel really faster? I'm not sure. look at wxXt
-               for a different implementation of the same problem. */
-
-            wxBitmap bitmap( width, height );
-
-            /* copy including child window contents */
-            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-            gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
-                                  srcDC->GetWindow(),
-                                  xsrc, ysrc, width, height );
-            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
-
-            /* scale image */
-            wxImage image = bitmap.ConvertToImage();
-            image = image.Scale( ww, hh );
-
-            /* convert to bitmap */
-            bitmap = wxBitmap(image);
-
-            /* draw scaled bitmap */
-            gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
+            // get clip coords
+            wxRegion tmp( xx,yy,ww,hh );
+            tmp.Intersect( m_currentClippingRegion );
+            wxCoord cx,cy,cw,ch;
+            tmp.GetBox(cx,cy,cw,ch);
+            
+            // rescale bitmap   
+            wxBitmap bitmap = memDC->m_selected.Rescale( cx-xx, cy-yy, cw, ch, ww, hh );