make wxMask pixmap member private

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70951 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2012-03-20 23:07:33 +00:00
parent 045517bea5
commit 2d13e22fbf
2 changed files with 26 additions and 15 deletions

View File

@@ -30,7 +30,7 @@ public:
virtual ~wxMask(); virtual ~wxMask();
// implementation // implementation
GdkPixmap* m_bitmap; wxMask(GdkPixmap*);
GdkPixmap* GetBitmap() const; GdkPixmap* GetBitmap() const;
protected: protected:
@@ -38,6 +38,9 @@ protected:
virtual bool InitFromColour(const wxBitmap& bitmap, const wxColour& colour); virtual bool InitFromColour(const wxBitmap& bitmap, const wxColour& colour);
virtual bool InitFromMonoBitmap(const wxBitmap& bitmap); virtual bool InitFromMonoBitmap(const wxBitmap& bitmap);
private:
GdkPixmap* m_bitmap;
DECLARE_DYNAMIC_CLASS(wxMask) DECLARE_DYNAMIC_CLASS(wxMask)
}; };

View File

@@ -116,6 +116,11 @@ wxMask::wxMask( const wxBitmap& bitmap )
InitFromMonoBitmap(bitmap); InitFromMonoBitmap(bitmap);
} }
wxMask::wxMask(GdkPixmap* bitmap)
{
m_bitmap = bitmap;
}
wxMask::~wxMask() wxMask::~wxMask()
{ {
if (m_bitmap) if (m_bitmap)
@@ -300,8 +305,7 @@ wxBitmap::wxBitmap(const char* const* bits)
if (M_BMPDATA->m_pixmap != NULL && mask != NULL) if (M_BMPDATA->m_pixmap != NULL && mask != NULL)
{ {
M_BMPDATA->m_mask = new wxMask; M_BMPDATA->m_mask = new wxMask(mask);
M_BMPDATA->m_mask->m_bitmap = mask;
} }
} }
@@ -410,9 +414,7 @@ bool wxBitmap::CreateFromImageAsPixmap(const wxImage& image, int depth)
bit_index = (bit_index + 7) & ~7u; bit_index = (bit_index + 7) & ~7u;
} }
} }
wxMask* mask = new wxMask; SetMask(new wxMask(gdk_bitmap_create_from_data(M_BMPDATA->m_pixmap, (char*)out, w, h)));
mask->m_bitmap = gdk_bitmap_create_from_data(M_BMPDATA->m_pixmap, (char*)out, w, h);
SetMask(mask);
delete[] out; delete[] out;
} }
return IsOk(); return IsOk();
@@ -628,14 +630,16 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
newRef->m_pixmap, gc, bmpData->m_pixmap, rect.x, rect.y, 0, 0, w, h); newRef->m_pixmap, gc, bmpData->m_pixmap, rect.x, rect.y, 0, 0, w, h);
g_object_unref(gc); g_object_unref(gc);
} }
if (bmpData->m_mask && bmpData->m_mask->m_bitmap) GdkPixmap* mask = NULL;
if (bmpData->m_mask)
mask = bmpData->m_mask->GetBitmap();
if (mask)
{ {
GdkPixmap* sub_mask = gdk_pixmap_new(bmpData->m_mask->m_bitmap, w, h, 1); GdkPixmap* sub_mask = gdk_pixmap_new(mask, w, h, 1);
newRef->m_mask = new wxMask; newRef->m_mask = new wxMask(sub_mask);
newRef->m_mask->m_bitmap = sub_mask;
GdkGC* gc = gdk_gc_new(sub_mask); GdkGC* gc = gdk_gc_new(sub_mask);
gdk_draw_drawable( gdk_draw_drawable(
sub_mask, gc, bmpData->m_mask->m_bitmap, rect.x, rect.y, 0, 0, w, h); sub_mask, gc, mask, rect.x, rect.y, 0, 0, w, h);
g_object_unref(gc); g_object_unref(gc);
} }
@@ -739,16 +743,20 @@ GdkPixmap *wxBitmap::GetPixmap() const
if (bmpData->m_pixbuf) if (bmpData->m_pixbuf)
{ {
GdkPixmap* pixmap = NULL;
GdkPixmap** mask_pixmap = NULL; GdkPixmap** mask_pixmap = NULL;
if (gdk_pixbuf_get_has_alpha(bmpData->m_pixbuf)) if (gdk_pixbuf_get_has_alpha(bmpData->m_pixbuf))
{ {
// make new mask from alpha // make new mask from alpha
delete bmpData->m_mask; mask_pixmap = &pixmap;
bmpData->m_mask = new wxMask;
mask_pixmap = &bmpData->m_mask->m_bitmap;
} }
gdk_pixbuf_render_pixmap_and_mask( gdk_pixbuf_render_pixmap_and_mask(
bmpData->m_pixbuf, &bmpData->m_pixmap, mask_pixmap, 128); bmpData->m_pixbuf, &bmpData->m_pixmap, mask_pixmap, 128);
if (pixmap)
{
delete bmpData->m_mask;
bmpData->m_mask = new wxMask(pixmap);
}
} }
else else
{ {
@@ -777,7 +785,7 @@ GdkPixbuf *wxBitmap::GetPixbuf() const
const int h = bmpData->m_height; const int h = bmpData->m_height;
GdkPixmap* mask = NULL; GdkPixmap* mask = NULL;
if (bmpData->m_mask) if (bmpData->m_mask)
mask = bmpData->m_mask->m_bitmap; mask = bmpData->m_mask->GetBitmap();
const bool useAlpha = bmpData->m_alphaRequested || mask; const bool useAlpha = bmpData->m_alphaRequested || mask;
bmpData->m_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, useAlpha, 8, w, h); bmpData->m_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, useAlpha, 8, w, h);
if (bmpData->m_pixmap) if (bmpData->m_pixmap)