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:
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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)
|
||||||
|
@@ -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 )
|
||||||
|
@@ -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())
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
|
@@ -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 )
|
||||||
|
@@ -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())
|
||||||
{
|
{
|
||||||
|
@@ -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 );
|
||||||
|
Reference in New Issue
Block a user