memdc and bitmap fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@260 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1998-07-13 17:00:29 +00:00
parent 5a8c929eb4
commit 0180d5daae
11 changed files with 63 additions and 14 deletions

View File

@@ -99,6 +99,7 @@ class wxPaintDC: public wxDC
GdkGC *m_textGC; GdkGC *m_textGC;
GdkGC *m_bgGC; GdkGC *m_bgGC;
GdkColormap *m_cmap; GdkColormap *m_cmap;
bool m_isDrawable;
void SetUpDC(void); void SetUpDC(void);
GdkWindow *GetWindow(void); GdkWindow *GetWindow(void);

View File

@@ -38,7 +38,7 @@ class WXDLLEXPORT wxMemoryDC: public wxPaintDC
wxMemoryDC( wxDC *dc ); // Create compatible DC wxMemoryDC( wxDC *dc ); // Create compatible DC
~wxMemoryDC(void); ~wxMemoryDC(void);
virtual void SelectObject( const wxBitmap& bitmap ); virtual void SelectObject( const wxBitmap& bitmap );
void GetSize( int *width, int *height ); void GetSize( int *width, int *height ) const;
private: private:
friend wxPaintDC; friend wxPaintDC;

View File

@@ -99,6 +99,7 @@ class wxPaintDC: public wxDC
GdkGC *m_textGC; GdkGC *m_textGC;
GdkGC *m_bgGC; GdkGC *m_bgGC;
GdkColormap *m_cmap; GdkColormap *m_cmap;
bool m_isDrawable;
void SetUpDC(void); void SetUpDC(void);
GdkWindow *GetWindow(void); GdkWindow *GetWindow(void);

View File

@@ -38,7 +38,7 @@ class WXDLLEXPORT wxMemoryDC: public wxPaintDC
wxMemoryDC( wxDC *dc ); // Create compatible DC wxMemoryDC( wxDC *dc ); // Create compatible DC
~wxMemoryDC(void); ~wxMemoryDC(void);
virtual void SelectObject( const wxBitmap& bitmap ); virtual void SelectObject( const wxBitmap& bitmap );
void GetSize( int *width, int *height ); void GetSize( int *width, int *height ) const;
private: private:
friend wxPaintDC; friend wxPaintDC;

View File

@@ -89,6 +89,9 @@ wxBitmapRefData::wxBitmapRefData(void)
m_height = 0; m_height = 0;
m_bpp = 0; m_bpp = 0;
m_palette = NULL; m_palette = NULL;
#ifdef USE_GDK_IMLIB
m_image = NULL;
#endif
}; };
wxBitmapRefData::~wxBitmapRefData(void) wxBitmapRefData::~wxBitmapRefData(void)
@@ -121,7 +124,8 @@ wxBitmap::wxBitmap( int width, int height, int depth )
M_BMPDATA->m_mask = NULL; M_BMPDATA->m_mask = NULL;
M_BMPDATA->m_pixmap = M_BMPDATA->m_pixmap =
gdk_pixmap_new( (GdkWindow*) &gdk_root_parent, width, height, depth ); gdk_pixmap_new( (GdkWindow*) &gdk_root_parent, width, height, depth );
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); M_BMPDATA->m_width = width;
M_BMPDATA->m_height = height;
M_BMPDATA->m_bpp = depth; M_BMPDATA->m_bpp = depth;
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -144,6 +148,8 @@ wxBitmap::wxBitmap( char **bits )
M_BMPDATA->m_mask->m_bitmap = mask; M_BMPDATA->m_mask->m_bitmap = mask;
}; };
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
#else #else
M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits ); M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits );
@@ -151,7 +157,6 @@ wxBitmap::wxBitmap( char **bits )
#endif #endif
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
M_BMPDATA->m_bpp = 24; // ? M_BMPDATA->m_bpp = 24; // ?
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -184,7 +189,8 @@ wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth
M_BMPDATA->m_mask = NULL; M_BMPDATA->m_mask = NULL;
M_BMPDATA->m_bitmap = M_BMPDATA->m_bitmap =
gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height ); gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
gdk_window_get_size( M_BMPDATA->m_bitmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); M_BMPDATA->m_width = width;
M_BMPDATA->m_height = height;
M_BMPDATA->m_bpp = 1; M_BMPDATA->m_bpp = 1;
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -377,7 +383,8 @@ void wxBitmap::Render(void)
#ifdef USE_GDK_IMLIB #ifdef USE_GDK_IMLIB
gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height ); gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height );
M_BMPDATA->m_width = M_BMPDATA->m_image->rgb_width;
M_BMPDATA->m_height = M_BMPDATA->m_image->rgb_height;
M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image ); M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image );
GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image ); GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image );
if (mask) if (mask)

View File

@@ -100,6 +100,9 @@ wxPaintDC::wxPaintDC( wxWindow *window )
m_cmap = gtk_widget_get_colormap( window->m_wxwindow ); m_cmap = gtk_widget_get_colormap( window->m_wxwindow );
else else
m_cmap = gtk_widget_get_colormap( window->m_widget ); m_cmap = gtk_widget_get_colormap( window->m_widget );
m_isDrawable = TRUE;
SetUpDC(); SetUpDC();
long x = 0; long x = 0;
@@ -517,7 +520,18 @@ void wxPaintDC::Clear(void)
if (!Ok()) return; if (!Ok()) return;
DestroyClippingRegion(); DestroyClippingRegion();
gdk_window_clear( m_window );
if (m_isDrawable)
{
gdk_window_clear( m_window );
}
else
{
int width = 0;
int height = 0;
GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_brushGC, TRUE, 0, 0, width, height );
};
}; };
void wxPaintDC::SetFont( const wxFont &font ) void wxPaintDC::SetFont( const wxFont &font )

View File

@@ -51,6 +51,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
} }
SetUpDC(); SetUpDC();
m_isDrawable = FALSE;
} }
else else
{ {
@@ -59,7 +61,7 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
}; };
}; };
void wxMemoryDC::GetSize( int *width, int *height ) void wxMemoryDC::GetSize( int *width, int *height ) const
{ {
if (m_selected.Ok()) if (m_selected.Ok())
{ {

View File

@@ -89,6 +89,9 @@ wxBitmapRefData::wxBitmapRefData(void)
m_height = 0; m_height = 0;
m_bpp = 0; m_bpp = 0;
m_palette = NULL; m_palette = NULL;
#ifdef USE_GDK_IMLIB
m_image = NULL;
#endif
}; };
wxBitmapRefData::~wxBitmapRefData(void) wxBitmapRefData::~wxBitmapRefData(void)
@@ -121,7 +124,8 @@ wxBitmap::wxBitmap( int width, int height, int depth )
M_BMPDATA->m_mask = NULL; M_BMPDATA->m_mask = NULL;
M_BMPDATA->m_pixmap = M_BMPDATA->m_pixmap =
gdk_pixmap_new( (GdkWindow*) &gdk_root_parent, width, height, depth ); gdk_pixmap_new( (GdkWindow*) &gdk_root_parent, width, height, depth );
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); M_BMPDATA->m_width = width;
M_BMPDATA->m_height = height;
M_BMPDATA->m_bpp = depth; M_BMPDATA->m_bpp = depth;
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -144,6 +148,8 @@ wxBitmap::wxBitmap( char **bits )
M_BMPDATA->m_mask->m_bitmap = mask; M_BMPDATA->m_mask->m_bitmap = mask;
}; };
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
#else #else
M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits ); M_BMPDATA->m_image = gdk_imlib_create_image_from_xpm_data( bits );
@@ -151,7 +157,6 @@ wxBitmap::wxBitmap( char **bits )
#endif #endif
gdk_window_get_size( M_BMPDATA->m_pixmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) );
M_BMPDATA->m_bpp = 24; // ? M_BMPDATA->m_bpp = 24; // ?
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -184,7 +189,8 @@ wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth
M_BMPDATA->m_mask = NULL; M_BMPDATA->m_mask = NULL;
M_BMPDATA->m_bitmap = M_BMPDATA->m_bitmap =
gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height ); gdk_bitmap_create_from_data( (GdkWindow*) &gdk_root_parent, (gchar *) bits, width, height );
gdk_window_get_size( M_BMPDATA->m_bitmap, &(M_BMPDATA->m_width), &(M_BMPDATA->m_height) ); M_BMPDATA->m_width = width;
M_BMPDATA->m_height = height;
M_BMPDATA->m_bpp = 1; M_BMPDATA->m_bpp = 1;
if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
@@ -377,7 +383,8 @@ void wxBitmap::Render(void)
#ifdef USE_GDK_IMLIB #ifdef USE_GDK_IMLIB
gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height ); gdk_imlib_render( M_BMPDATA->m_image, M_BMPDATA->m_image->rgb_width, M_BMPDATA->m_image->rgb_height );
M_BMPDATA->m_width = M_BMPDATA->m_image->rgb_width;
M_BMPDATA->m_height = M_BMPDATA->m_image->rgb_height;
M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image ); M_BMPDATA->m_pixmap = gdk_imlib_move_image( M_BMPDATA->m_image );
GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image ); GdkBitmap *mask = gdk_imlib_move_mask( M_BMPDATA->m_image );
if (mask) if (mask)

View File

@@ -100,6 +100,9 @@ wxPaintDC::wxPaintDC( wxWindow *window )
m_cmap = gtk_widget_get_colormap( window->m_wxwindow ); m_cmap = gtk_widget_get_colormap( window->m_wxwindow );
else else
m_cmap = gtk_widget_get_colormap( window->m_widget ); m_cmap = gtk_widget_get_colormap( window->m_widget );
m_isDrawable = TRUE;
SetUpDC(); SetUpDC();
long x = 0; long x = 0;
@@ -517,7 +520,18 @@ void wxPaintDC::Clear(void)
if (!Ok()) return; if (!Ok()) return;
DestroyClippingRegion(); DestroyClippingRegion();
gdk_window_clear( m_window );
if (m_isDrawable)
{
gdk_window_clear( m_window );
}
else
{
int width = 0;
int height = 0;
GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_brushGC, TRUE, 0, 0, width, height );
};
}; };
void wxPaintDC::SetFont( const wxFont &font ) void wxPaintDC::SetFont( const wxFont &font )

View File

@@ -51,6 +51,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
} }
SetUpDC(); SetUpDC();
m_isDrawable = FALSE;
} }
else else
{ {
@@ -59,7 +61,7 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
}; };
}; };
void wxMemoryDC::GetSize( int *width, int *height ) void wxMemoryDC::GetSize( int *width, int *height ) const
{ {
if (m_selected.Ok()) if (m_selected.Ok())
{ {

View File

@@ -348,6 +348,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
wxMemoryDC memDC; wxMemoryDC memDC;
memDC.SelectObject( *my_backstore ); memDC.SelectObject( *my_backstore );
memDC.Clear();
memDC.SetBrush( *wxBLACK_BRUSH ); memDC.SetBrush( *wxBLACK_BRUSH );
memDC.SetPen( *wxWHITE_PEN ); memDC.SetPen( *wxWHITE_PEN );
memDC.DrawRectangle( 0, 0, 150, 150 ); memDC.DrawRectangle( 0, 0, 150, 150 );