X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/62bd5cf059a04bf27edc80ae7437289d26faeffa..c8c0e54c700b29c0ec0d073e536f5b2604e3778d:/src/gtk1/bitmap.cpp diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index 0a2da3f4e9..dec3ff0c40 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/bitmap.cpp @@ -31,16 +31,19 @@ wxMask::wxMask() m_bitmap = (GdkBitmap *) NULL; } -wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap), const wxColour& WXUNUSED(colour) ) +wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour ) { + Create( bitmap, colour ); } -wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap), int WXUNUSED(paletteIndex) ) +wxMask::wxMask( const wxBitmap& bitmap, int paletteIndex ) { + Create( bitmap, paletteIndex ); } -wxMask::wxMask( const wxBitmap& WXUNUSED(bitmap) ) +wxMask::wxMask( const wxBitmap& bitmap ) { + Create( bitmap ); } wxMask::~wxMask() @@ -48,7 +51,60 @@ wxMask::~wxMask() if (m_bitmap) gdk_bitmap_unref( m_bitmap ); } -GdkBitmap *wxMask::GetBitmap(void) const +bool wxMask::Create( const wxBitmap& WXUNUSED(bitmap), + const wxColour& WXUNUSED(colour) ) +{ + if (m_bitmap) + { + gdk_bitmap_unref( m_bitmap ); + m_bitmap = (GdkBitmap*) NULL; + } + + wxFAIL_MSG( _T("TODO") ); + + return FALSE; +} + +bool wxMask::Create( const wxBitmap& WXUNUSED(bitmap), + int WXUNUSED(paletteIndex) ) +{ + if (m_bitmap) + { + gdk_bitmap_unref( m_bitmap ); + m_bitmap = (GdkBitmap*) NULL; + } + + wxFAIL_MSG( _T("not implemented") ); + + return FALSE; +} + +bool wxMask::Create( const wxBitmap& bitmap ) +{ + if (m_bitmap) + { + gdk_bitmap_unref( m_bitmap ); + m_bitmap = (GdkBitmap*) NULL; + } + + if (!bitmap.Ok()) return FALSE; + + wxCHECK_MSG( bitmap.GetBitmap(), FALSE, _T("Cannot create mask from colour bitmap") ); + + m_bitmap = gdk_pixmap_new( (GdkWindow*) &gdk_root_parent, bitmap.GetWidth(), bitmap.GetHeight(), 1 ); + + if (!m_bitmap) return FALSE; + + GdkGC *gc = gdk_gc_new( m_bitmap ); + + gdk_draw_bitmap( m_bitmap, gc, bitmap.GetBitmap(), 0, 0, 0, 0, bitmap.GetWidth(), bitmap.GetHeight() ); + + gdk_gc_unref( gc ); + + return TRUE; +} + +GdkBitmap *wxMask::GetBitmap() const { return m_bitmap; } @@ -60,8 +116,8 @@ GdkBitmap *wxMask::GetBitmap(void) const class wxBitmapRefData: public wxObjectRefData { public: - wxBitmapRefData(void); - ~wxBitmapRefData(void); + wxBitmapRefData(); + ~wxBitmapRefData(); GdkPixmap *m_pixmap; GdkBitmap *m_bitmap; @@ -105,17 +161,27 @@ wxBitmap::wxBitmap() wxBitmap::wxBitmap( int width, int height, int depth ) { wxCHECK_RET( (width > 0) && (height > 0), _T("invalid bitmap size") ) - wxCHECK_RET( (depth > 0) || (depth == -1), _T("invalid bitmap depth") ) - - m_refData = new wxBitmapRefData(); GdkWindow *parent = (GdkWindow*) &gdk_root_parent; + if (depth == -1) depth = gdk_window_get_visual( parent )->depth; + + wxCHECK_RET( (depth == gdk_window_get_visual( parent )->depth) || + (depth == 1), _T("invalid bitmap depth") ) + m_refData = new wxBitmapRefData(); M_BMPDATA->m_mask = (wxMask *) NULL; - M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth ); M_BMPDATA->m_width = width; M_BMPDATA->m_height = height; - M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; + if (depth == 1) + { + M_BMPDATA->m_bitmap = gdk_pixmap_new( parent, width, height, 1 ); + M_BMPDATA->m_bpp = 1; + } + else + { + M_BMPDATA->m_pixmap = gdk_pixmap_new( parent, width, height, depth ); + M_BMPDATA->m_bpp = gdk_window_get_visual( parent )->depth; + } if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this); } @@ -220,33 +286,33 @@ bool wxBitmap::operator != ( const wxBitmap& bmp ) return m_refData != bmp.m_refData; } -bool wxBitmap::Ok(void) const +bool wxBitmap::Ok() const { return (m_refData != NULL); } -int wxBitmap::GetHeight(void) const +int wxBitmap::GetHeight() const { wxCHECK_MSG( Ok(), -1, _T("invalid bitmap") ); return M_BMPDATA->m_height; } -int wxBitmap::GetWidth(void) const +int wxBitmap::GetWidth() const { wxCHECK_MSG( Ok(), -1, _T("invalid bitmap") ); return M_BMPDATA->m_width; } -int wxBitmap::GetDepth(void) const +int wxBitmap::GetDepth() const { wxCHECK_MSG( Ok(), -1, _T("invalid bitmap") ); return M_BMPDATA->m_bpp; } -wxMask *wxBitmap::GetMask(void) const +wxMask *wxBitmap::GetMask() const { wxCHECK_MSG( Ok(), (wxMask *) NULL, _T("invalid bitmap") ); @@ -269,7 +335,7 @@ bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(pal if (type == wxBITMAP_TYPE_PNG) { wxImage image( *this ); - if (image.Ok()) return image.SaveFile( name, type ); + if (image.Ok()) return image.SaveFile( name, type ); } return FALSE; @@ -317,7 +383,7 @@ bool wxBitmap::LoadFile( const wxString &name, int type ) return TRUE; } -wxPalette *wxBitmap::GetPalette(void) const +wxPalette *wxBitmap::GetPalette() const { if (!Ok()) return (wxPalette *) NULL; @@ -352,14 +418,14 @@ void wxBitmap::SetPixmap( GdkPixmap *pixmap ) M_BMPDATA->m_pixmap = pixmap; } -GdkPixmap *wxBitmap::GetPixmap(void) const +GdkPixmap *wxBitmap::GetPixmap() const { wxCHECK_MSG( Ok(), (GdkPixmap *) NULL, _T("invalid bitmap") ); return M_BMPDATA->m_pixmap; } -GdkBitmap *wxBitmap::GetBitmap(void) const +GdkBitmap *wxBitmap::GetBitmap() const { wxCHECK_MSG( Ok(), (GdkBitmap *) NULL, _T("invalid bitmap") );