diff --git a/samples/image/image.cpp b/samples/image/image.cpp index 36bbaaa1df..f5e3a73479 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -608,24 +608,33 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.SetTextForeground( wxT("BLACK") ); } - dc.DrawText(_T("XPM bitmap"), 30, 2230); + // For testing transparency + dc.SetBrush( *wxRED_BRUSH ); + dc.DrawRectangle( 20, 2220, 560, 68 ); + + dc.DrawText(_T("XPM bitmap"), 30, 2230 ); if ( m_bmpSmileXpm.Ok() ) dc.DrawBitmap(m_bmpSmileXpm, 30, 2250, TRUE); - dc.DrawText(_T("XPM icon"), 150, 2230); + dc.DrawText(_T("XPM icon"), 110, 2230 ); if ( m_iconSmileXpm.Ok() ) - dc.DrawIcon(m_iconSmileXpm, 150, 2250); + dc.DrawIcon(m_iconSmileXpm, 110, 2250); - dc.DrawText(_T("Enlarged"), 250, 2230); // testing icon -> bitmap conversion wxBitmap to_blit( m_iconSmileXpm ); - dc.SetUserScale( 1.5, 1.5 ); - dc.DrawBitmap( to_blit, (int)(250/1.5), (int)(2250/1.5) ); - dc.SetUserScale( 2, 2 ); - dc.DrawBitmap( to_blit, (int)(300/2), (int)(2250/2) ); - dc.SetUserScale( 1.0, 1.0 ); - dc.DrawText(_T("Blit"), 400, 2230); + dc.DrawText( _T("SubBitmap"), 170, 2230 ); + wxBitmap sub = to_blit.GetSubBitmap( wxRect(0,0,15,15) ); + dc.DrawBitmap( sub, 170, 2250, TRUE ); + + dc.DrawText( _T("Enlarged"), 250, 2230 ); + dc.SetUserScale( 1.5, 1.5 ); + dc.DrawBitmap( to_blit, (int)(250/1.5), (int)(2250/1.5), TRUE ); + dc.SetUserScale( 2, 2 ); + dc.DrawBitmap( to_blit, (int)(300/2), (int)(2250/2), TRUE ); + dc.SetUserScale( 1.0, 1.0 ); + + dc.DrawText( _T("Blit"), 400, 2230); wxMemoryDC blit_dc; blit_dc.SelectObject( to_blit ); dc.Blit( 400, 2250, to_blit.GetWidth(), to_blit.GetHeight(), &blit_dc, 0, 0, wxCOPY, TRUE ); diff --git a/src/gtk/bitmap.cpp b/src/gtk/bitmap.cpp index c2afddf156..b3c604946c 100644 --- a/src/gtk/bitmap.cpp +++ b/src/gtk/bitmap.cpp @@ -963,6 +963,11 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const else { GdkGC *gc = gdk_gc_new( ret.GetBitmap() ); + GdkColor col; + col.pixel = 0xFFFFFF; + gdk_gc_set_foreground( gc, &col ); + col.pixel = 0; + gdk_gc_set_background( gc, &col ); gdk_wx_draw_bitmap( ret.GetBitmap(), gc, GetBitmap(), rect.x, rect.y, 0, 0, rect.width, rect.height ); gdk_gc_destroy( gc ); } @@ -973,7 +978,12 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const mask->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, rect.width, rect.height, 1 ); GdkGC *gc = gdk_gc_new( mask->m_bitmap ); - gdk_wx_draw_bitmap( mask->m_bitmap, gc, M_BMPDATA->m_mask->m_bitmap, 0, 0, rect.x, rect.y, rect.width, rect.height ); + GdkColor col; + col.pixel = 0xFFFFFF; + gdk_gc_set_foreground( gc, &col ); + col.pixel = 0; + gdk_gc_set_background( gc, &col ); + gdk_wx_draw_bitmap( mask->m_bitmap, gc, M_BMPDATA->m_mask->m_bitmap, rect.x, rect.y, 0, 0, rect.width, rect.height ); gdk_gc_destroy( gc ); ret.SetMask( mask ); @@ -1053,14 +1063,18 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight, int old_x = -1; guint32 old_pixval; - for (int w=0; wGetBitmap(), 0, 0, GetWidth(), GetHeight() ); @@ -1112,10 +1125,22 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight, for (int h = 0; h < height; h++) { char outbyte = 0; + int old_x = -1; + guint32 old_pixval; - for (int w=0; wm_bitmap = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) dst, width, height ); bmp.SetMask(mask); - + free( dst ); gdk_image_destroy( img ); } diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 93aefb2cac..6dd76c814b 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1187,7 +1187,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, xsrcMask = xsrc; ysrcMask = ysrc; } - + if (srcDC->m_isMemDC) { if (!memDC->m_selected.Ok()) return FALSE; diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index c2afddf156..b3c604946c 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/bitmap.cpp @@ -963,6 +963,11 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const else { GdkGC *gc = gdk_gc_new( ret.GetBitmap() ); + GdkColor col; + col.pixel = 0xFFFFFF; + gdk_gc_set_foreground( gc, &col ); + col.pixel = 0; + gdk_gc_set_background( gc, &col ); gdk_wx_draw_bitmap( ret.GetBitmap(), gc, GetBitmap(), rect.x, rect.y, 0, 0, rect.width, rect.height ); gdk_gc_destroy( gc ); } @@ -973,7 +978,12 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const mask->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, rect.width, rect.height, 1 ); GdkGC *gc = gdk_gc_new( mask->m_bitmap ); - gdk_wx_draw_bitmap( mask->m_bitmap, gc, M_BMPDATA->m_mask->m_bitmap, 0, 0, rect.x, rect.y, rect.width, rect.height ); + GdkColor col; + col.pixel = 0xFFFFFF; + gdk_gc_set_foreground( gc, &col ); + col.pixel = 0; + gdk_gc_set_background( gc, &col ); + gdk_wx_draw_bitmap( mask->m_bitmap, gc, M_BMPDATA->m_mask->m_bitmap, rect.x, rect.y, 0, 0, rect.width, rect.height ); gdk_gc_destroy( gc ); ret.SetMask( mask ); @@ -1053,14 +1063,18 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight, int old_x = -1; guint32 old_pixval; - for (int w=0; wGetBitmap(), 0, 0, GetWidth(), GetHeight() ); @@ -1112,10 +1125,22 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight, for (int h = 0; h < height; h++) { char outbyte = 0; + int old_x = -1; + guint32 old_pixval; - for (int w=0; wm_bitmap = gdk_bitmap_create_from_data( wxGetRootWindow()->window, (gchar *) dst, width, height ); bmp.SetMask(mask); - + free( dst ); gdk_image_destroy( img ); } diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 93aefb2cac..6dd76c814b 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -1187,7 +1187,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, xsrcMask = xsrc; ysrcMask = ysrc; } - + if (srcDC->m_isMemDC) { if (!memDC->m_selected.Ok()) return FALSE;