m_bitmap = NULL;
}
+wxMask::wxMask(const wxMask& mask)
+{
+ if ( !mask.m_bitmap )
+ {
+ m_bitmap = NULL;
+ return;
+ }
+
+ // create a copy of an existing mask
+ gint w, h;
+ gdk_drawable_get_size(mask.m_bitmap, &w, &h);
+ m_bitmap = gdk_pixmap_new(mask.m_bitmap, w, h, 1);
+
+ wxGtkObject<GdkGC> gc(gdk_gc_new(m_bitmap));
+ gdk_draw_drawable(m_bitmap, gc, mask.m_bitmap, 0, 0, 0, 0, -1, -1);
+}
+
wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour )
{
m_bitmap = NULL;
int m_height;
int m_bpp;
bool m_alphaRequested;
+
+private:
+ // We don't provide a copy ctor as copying m_pixmap and m_pixbuf properly
+ // is expensive and we don't want to do it implicitly (and possibly
+ // accidentally). wxBitmap::CloneGDIRefData() which does need to do it does
+ // it explicitly itself.
+ wxDECLARE_NO_COPY_CLASS(wxBitmapRefData);
};
wxBitmapRefData::wxBitmapRefData(int width, int height, int depth)
rect.y + h <= bmpData->m_height,
ret, wxT("invalid bitmap region"));
- wxBitmapRefData* newRef = new wxBitmapRefData(*bmpData);
+ wxBitmapRefData * const newRef = new wxBitmapRefData(w, h, bmpData->m_bpp);
ret.m_refData = newRef;
- newRef->m_width = w;
- newRef->m_height = h;
if (bmpData->m_pixbuf)
{
newRef->m_pixmap, gc, bmpData->m_pixmap, rect.x, rect.y, 0, 0, w, h);
g_object_unref(gc);
}
- newRef->m_mask = NULL;
if (bmpData->m_mask && bmpData->m_mask->m_bitmap)
{
GdkPixmap* sub_mask = gdk_pixmap_new(bmpData->m_mask->m_bitmap, w, h, 1);
else
#endif
{
+ wxUnusedVar(type); // The type is detected automatically by GDK.
+
UnRef();
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(name.fn_str(), NULL);
if (pixbuf)
void wxBitmap::SetPixbuf(GdkPixbuf* pixbuf)
{
UnRef();
-
+
if (!pixbuf)
return;
wxGDIRefData* wxBitmap::CloneGDIRefData(const wxGDIRefData* data) const
{
const wxBitmapRefData* oldRef = static_cast<const wxBitmapRefData*>(data);
- wxBitmapRefData* newRef = new wxBitmapRefData(*oldRef);
+ wxBitmapRefData * const newRef = new wxBitmapRefData(oldRef->m_width,
+ oldRef->m_height,
+ oldRef->m_bpp);
if (oldRef->m_pixmap != NULL)
{
newRef->m_pixmap = gdk_pixmap_new(
}
if (oldRef->m_mask != NULL)
{
- newRef->m_mask = new wxMask;
- newRef->m_mask->m_bitmap = gdk_pixmap_new(
- oldRef->m_mask->m_bitmap, oldRef->m_width, oldRef->m_height, 1);
- wxGtkObject<GdkGC> gc(gdk_gc_new(newRef->m_mask->m_bitmap));
- gdk_draw_drawable(newRef->m_mask->m_bitmap,
- gc, oldRef->m_mask->m_bitmap, 0, 0, 0, 0, -1, -1);
+ newRef->m_mask = new wxMask(*oldRef->m_mask);
}
return newRef;