From: Robert Roebling Date: Sat, 18 Oct 2003 19:23:19 +0000 (+0000) Subject: Further corrections to bitmap and blit code. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f9ebac93e71d7e97259593390dcbbbe306714dce Further corrections to bitmap and blit code. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24227 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/image/image.cpp b/samples/image/image.cpp index 8b45bf81b5..7d6f8acd75 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -716,17 +716,41 @@ 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); + + // testing icon -> bitmap conversion + wxBitmap to_blit( m_iconSmileXpm ); + + 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 ); + dc.SetUserScale( 1.5, 1.5 ); + dc.Blit( (int)(450/1.5), (int)(2250/1.5), to_blit.GetWidth(), to_blit.GetHeight(), &blit_dc, 0, 0, wxCOPY, TRUE ); + dc.SetUserScale( 2, 2 ); + dc.Blit( (int)(500/2), (int)(2250/2), to_blit.GetWidth(), to_blit.GetHeight(), &blit_dc, 0, 0, wxCOPY, TRUE ); + dc.SetUserScale( 1.0, 1.0 ); dc.DrawText( _T("ICO handler (1st image)"), 30, 2290 ); if (my_horse_ico32 && my_horse_ico32->Ok()) diff --git a/src/gtk/bitmap.cpp b/src/gtk/bitmap.cpp index 907d7f634b..38a044b1aa 100644 --- a/src/gtk/bitmap.cpp +++ b/src/gtk/bitmap.cpp @@ -417,16 +417,20 @@ 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() ); @@ -476,10 +479,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 ); } @@ -1130,6 +1144,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 ); } @@ -1140,7 +1159,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 ); diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index 907d7f634b..38a044b1aa 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/bitmap.cpp @@ -417,16 +417,20 @@ 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() ); @@ -476,10 +479,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 ); } @@ -1130,6 +1144,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 ); } @@ -1140,7 +1159,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 );