wxBitmapRefData didn't have a proper copy ctor but the code in wxGTK wxBitmap
implementation used it nevertheless and then manually patched the newly copied
object to avoid double pointer deletion and other unpleasantness.
Make the code more obviously correct by not using (nor providing) copy ctor at
all. There are no real changes otherwise.
See #12768.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66372
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
int m_height;
int m_bpp;
bool m_alphaRequested;
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)
};
wxBitmapRefData::wxBitmapRefData(int width, int height, int depth)
rect.y + h <= bmpData->m_height,
ret, wxT("invalid bitmap region"));
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);
- newRef->m_width = w;
- newRef->m_height = h;
newRef->m_pixmap, gc, bmpData->m_pixmap, rect.x, rect.y, 0, 0, w, h);
g_object_unref(gc);
}
newRef->m_pixmap, gc, bmpData->m_pixmap, rect.x, rect.y, 0, 0, w, h);
g_object_unref(gc);
}
if (bmpData->m_mask && bmpData->m_mask->m_bitmap)
{
GdkPixmap* sub_mask = gdk_pixmap_new(bmpData->m_mask->m_bitmap, w, h, 1);
if (bmpData->m_mask && bmpData->m_mask->m_bitmap)
{
GdkPixmap* sub_mask = gdk_pixmap_new(bmpData->m_mask->m_bitmap, w, h, 1);
wxGDIRefData* wxBitmap::CloneGDIRefData(const wxGDIRefData* data) const
{
const wxBitmapRefData* oldRef = static_cast<const wxBitmapRefData*>(data);
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_pixmap != NULL)
{
newRef->m_pixmap = gdk_pixmap_new(