diff options
author | Iain <qt-info@nokia.com> | 2009-08-21 13:23:16 (GMT) |
---|---|---|
committer | Iain <qt-info@nokia.com> | 2009-08-21 13:23:16 (GMT) |
commit | d2cfe342ff109e7135fe2fcb00f60d918a7bfaa5 (patch) | |
tree | 26a2edc99e561721fad57d27f84a2a6c0be73a3c /src/gui/image | |
parent | 6df41a9378e39f4d46cee1a085463d55fe2af5aa (diff) | |
parent | ab1df6dea670a60bfef5efd81d6687f9534cfc5d (diff) | |
download | Qt-d2cfe342ff109e7135fe2fcb00f60d918a7bfaa5.zip Qt-d2cfe342ff109e7135fe2fcb00f60d918a7bfaa5.tar.gz Qt-d2cfe342ff109e7135fe2fcb00f60d918a7bfaa5.tar.bz2 |
Merge commit 'origin/master' into symbolVisibility
Diffstat (limited to 'src/gui/image')
-rw-r--r-- | src/gui/image/qbitmap.h | 2 | ||||
-rw-r--r-- | src/gui/image/qbmphandler.cpp | 8 | ||||
-rw-r--r-- | src/gui/image/qiconloader_p.h | 1 | ||||
-rw-r--r-- | src/gui/image/qpicture.cpp | 59 | ||||
-rw-r--r-- | src/gui/image/qpicture.h | 9 | ||||
-rw-r--r-- | src/gui/image/qpicture_p.h | 4 | ||||
-rw-r--r-- | src/gui/image/qpixmap.cpp | 59 | ||||
-rw-r--r-- | src/gui/image/qpixmap.h | 5 | ||||
-rw-r--r-- | src/gui/image/qpixmap_mac.cpp | 14 | ||||
-rw-r--r-- | src/gui/image/qpixmap_qws.cpp | 8 | ||||
-rw-r--r-- | src/gui/image/qpixmap_win.cpp | 2 | ||||
-rw-r--r-- | src/gui/image/qpixmap_x11.cpp | 8 | ||||
-rw-r--r-- | src/gui/image/qpixmapcache_p.h | 2 | ||||
-rw-r--r-- | src/gui/image/qpixmapdata_p.h | 1 |
14 files changed, 87 insertions, 95 deletions
diff --git a/src/gui/image/qbitmap.h b/src/gui/image/qbitmap.h index 8738d65..89d3171 100644 --- a/src/gui/image/qbitmap.h +++ b/src/gui/image/qbitmap.h @@ -82,6 +82,8 @@ public: QT3_SUPPORT_CONSTRUCTOR QBitmap(const QImage &image) { *this = fromImage(image); } QT3_SUPPORT QBitmap &operator=(const QImage &image) { *this = fromImage(image); return *this; } #endif + + typedef QExplicitlySharedDataPointer<QPixmapData> DataPtr; }; Q_DECLARE_SHARED(QBitmap) diff --git a/src/gui/image/qbmphandler.cpp b/src/gui/image/qbmphandler.cpp index ccf8457..19701b4 100644 --- a/src/gui/image/qbmphandler.cpp +++ b/src/gui/image/qbmphandler.cpp @@ -81,14 +81,14 @@ static void swapPixel01(QImage *image) // 1-bpp: swap 0 and 1 pixels const int BMP_FILEHDR_SIZE = 14; // size of BMP_FILEHDR data -QDataStream &operator>>(QDataStream &s, BMP_FILEHDR &bf) +static QDataStream &operator>>(QDataStream &s, BMP_FILEHDR &bf) { // read file header s.readRawData(bf.bfType, 2); s >> bf.bfSize >> bf.bfReserved1 >> bf.bfReserved2 >> bf.bfOffBits; return s; } -QDataStream &operator<<(QDataStream &s, const BMP_FILEHDR &bf) +static QDataStream &operator<<(QDataStream &s, const BMP_FILEHDR &bf) { // write file header s.writeRawData(bf.bfType, 2); s << bf.bfSize << bf.bfReserved1 << bf.bfReserved2 << bf.bfOffBits; @@ -106,7 +106,7 @@ const int BMP_RLE4 = 2; // run-length encoded, 4 const int BMP_BITFIELDS = 3; // RGB values encoded in data as bit-fields -QDataStream &operator>>(QDataStream &s, BMP_INFOHDR &bi) +static QDataStream &operator>>(QDataStream &s, BMP_INFOHDR &bi) { s >> bi.biSize; if (bi.biSize == BMP_WIN || bi.biSize == BMP_OS2) { @@ -128,7 +128,7 @@ QDataStream &operator>>(QDataStream &s, BMP_INFOHDR &bi) return s; } -QDataStream &operator<<(QDataStream &s, const BMP_INFOHDR &bi) +static QDataStream &operator<<(QDataStream &s, const BMP_INFOHDR &bi) { s << bi.biSize; s << bi.biWidth << bi.biHeight; diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index b2944ef..5d5c211 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -85,6 +85,7 @@ struct QIconDirInfo class QIconLoaderEngineEntry { public: + virtual ~QIconLoaderEngineEntry() {} virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) = 0; diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index 1136a97..d821773 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -131,7 +131,6 @@ QPicture::QPicture(int formatVersion) d_ptr(new QPicturePrivate) { Q_D(QPicture); - d_ptr->q_ptr = this; if (formatVersion == 0) qWarning("QPicture: invalid format version 0"); @@ -141,8 +140,7 @@ QPicture::QPicture(int formatVersion) d->formatMajor = formatVersion; d->formatMinor = 0; d->formatOk = false; - } - else { + } else { d->resetFormat(); } } @@ -154,9 +152,8 @@ QPicture::QPicture(int formatVersion) */ QPicture::QPicture(const QPicture &pic) - : QPaintDevice(), d_ptr(pic.d_ptr.data()) + : QPaintDevice(), d_ptr(pic.d_ptr) { - d_func()->ref.ref(); } /*! \internal */ @@ -164,7 +161,6 @@ QPicture::QPicture(QPicturePrivate &dptr) : QPaintDevice(), d_ptr(&dptr) { - d_ptr->q_ptr = this; } /*! @@ -225,8 +221,7 @@ const char* QPicture::data() const void QPicture::detach() { - if (d_func()->ref != 1) - detach_helper(); + d_ptr.detach(); } bool QPicture::isDetached() const @@ -1012,22 +1007,16 @@ int QPicture::metric(PaintDeviceMetric m) const /*! \fn bool QPicture::isDetached() const \internal */ + +/*! \internal +### Qt 5 - remove me + */ void QPicture::detach_helper() { - Q_D(QPicture); - QPicturePrivate *x = new QPicturePrivate; - int pictsize = size(); - x->pictb.setData(data(), pictsize); - if (d->pictb.isOpen()) { - x->pictb.open(d->pictb.openMode()); - x->pictb.seek(d->pictb.pos()); - } - x->trecs = d->trecs; - x->formatOk = d->formatOk; - x->formatMinor = d->formatMinor; - x->brect = d->brect; - x->override_rect = d->override_rect; - d_ptr.reset(x); + // QExplicitelySharedDataPointer takes care of cloning using + // QPicturePrivate's copy constructor. Do not call detach_helper() anymore + // and remove in Qt 5, please. + Q_ASSERT_X(false, "QPicture::detach_helper()", "Do not call this function"); } /*! @@ -1036,7 +1025,7 @@ void QPicture::detach_helper() */ QPicture& QPicture::operator=(const QPicture &p) { - d_ptr.assign(p.d_ptr.data()); + d_ptr = p.d_ptr; return *this; } @@ -1046,10 +1035,28 @@ QPicture& QPicture::operator=(const QPicture &p) Constructs a QPicturePrivate */ QPicturePrivate::QPicturePrivate() - : in_memory_only(false), - q_ptr(0) + : in_memory_only(false) { - ref = 1; +} + +/*! + \internal + + Copy-Constructs a QPicturePrivate. Needed when detaching. +*/ +QPicturePrivate::QPicturePrivate(const QPicturePrivate &other) + : trecs(other.trecs), + formatOk(other.formatOk), + formatMinor(other.formatMinor), + brect(other.brect), + override_rect(other.override_rect), + in_memory_only(false) +{ + pictb.setData(other.pictb.data(), other.pictb.size()); + if (other.pictb.isOpen()) { + pictb.open(other.pictb.openMode()); + pictb.seek(other.pictb.pos()); + } } /*! diff --git a/src/gui/image/qpicture.h b/src/gui/image/qpicture.h index 1e80ab7..6effae7 100644 --- a/src/gui/image/qpicture.h +++ b/src/gui/image/qpicture.h @@ -42,8 +42,9 @@ #ifndef QPICTURE_H #define QPICTURE_H -#include <QtGui/qpaintdevice.h> #include <QtCore/qstringlist.h> +#include <QtCore/qsharedpointer.h> +#include <QtGui/qpaintdevice.h> QT_BEGIN_HEADER @@ -106,15 +107,15 @@ private: bool exec(QPainter *p, QDataStream &ds, int i); void detach_helper(); - QScopedSharedPointer<QPicturePrivate> d_ptr; + QExplicitlySharedDataPointer<QPicturePrivate> d_ptr; friend class QPicturePaintEngine; friend class Q3Picture; friend class QAlphaPaintEngine; friend class QPreviewPaintEngine; public: - typedef QPicturePrivate* DataPtr; - inline DataPtr &data_ptr() { return d_ptr.data_ptr(); } + typedef QExplicitlySharedDataPointer<QPicturePrivate> DataPtr; + inline DataPtr &data_ptr() { return d_ptr; } }; Q_DECLARE_SHARED(QPicture) diff --git a/src/gui/image/qpicture_p.h b/src/gui/image/qpicture_p.h index f405d7f..0ab181c 100644 --- a/src/gui/image/qpicture_p.h +++ b/src/gui/image/qpicture_p.h @@ -71,7 +71,6 @@ extern const char *qt_mfhdr_tag; class QPicturePrivate { - Q_DECLARE_PUBLIC(QPicture) friend class QPicturePaintEngine; friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s, const QPicture &r); friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &s, QPicture &r); @@ -144,6 +143,7 @@ public: }; QPicturePrivate(); + QPicturePrivate(const QPicturePrivate &other); QAtomicInt ref; bool checkFormat(); @@ -162,8 +162,6 @@ public: QList<QPixmap> pixmap_list; QList<QBrush> brush_list; QList<QPen> pen_list; - - QPicture *q_ptr; }; QT_END_NAMESPACE diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 79b1f17..00e78ad 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -120,7 +120,6 @@ void QPixmap::init(int w, int h, int type) data = QGraphicsSystem::createDefaultPixmapData(static_cast<QPixmapData::PixelType>(type)); data->resize(w, h); - data->ref.ref(); } /*! @@ -222,7 +221,6 @@ QPixmap::QPixmap(const QSize &s, int type) QPixmap::QPixmap(QPixmapData *d) : QPaintDevice(), data(d) { - data->ref.ref(); } /*! @@ -261,12 +259,7 @@ QPixmap::QPixmap(const QString& fileName, const char *format, Qt::ImageConversio if (!qt_pixmap_thread_test()) return; - QT_TRY { - load(fileName, format, flags); - } QT_CATCH(...) { - deref(); - QT_RETHROW; - } + load(fileName, format, flags); } /*! @@ -283,11 +276,9 @@ QPixmap::QPixmap(const QPixmap &pixmap) return; } if (pixmap.paintingActive()) { // make a deep copy - data = 0; operator=(pixmap.copy()); } else { data = pixmap.data; - data->ref.ref(); } } @@ -314,17 +305,12 @@ QPixmap::QPixmap(const char * const xpm[]) if (!xpm) return; - QT_TRY { - QImage image(xpm); - if (!image.isNull()) { - if (data->pixelType() == QPixmapData::BitmapType) - *this = QBitmap::fromImage(image); - else - *this = fromImage(image); - } - } QT_CATCH(...) { - deref(); - QT_RETHROW; + QImage image(xpm); + if (!image.isNull()) { + if (data->pixelType() == QPixmapData::BitmapType) + *this = QBitmap::fromImage(image); + else + *this = fromImage(image); } } #endif @@ -336,7 +322,6 @@ QPixmap::QPixmap(const char * const xpm[]) QPixmap::~QPixmap() { - deref(); } /*! @@ -381,7 +366,7 @@ QPixmap QPixmap::copy(const QRect &rect) const else d = QGraphicsSystem::createDefaultPixmapData(data->pixelType()); - d->copy(data, r); + d->copy(data.data(), r); return QPixmap(d); } @@ -454,8 +439,6 @@ QPixmap &QPixmap::operator=(const QPixmap &pixmap) if (pixmap.paintingActive()) { // make a deep copy *this = pixmap.copy(); } else { - pixmap.data->ref.ref(); // avoid 'x = x' - deref(); data = pixmap.data; } return *this; @@ -660,13 +643,13 @@ void QPixmap::resize_helper(const QSize &s) QPixmap pm(QSize(w, h), data->type); bool uninit = false; #if defined(Q_WS_X11) - QX11PixmapData *x11Data = data->classId() == QPixmapData::X11Class ? static_cast<QX11PixmapData*>(data) : 0; + QX11PixmapData *x11Data = data->classId() == QPixmapData::X11Class ? static_cast<QX11PixmapData*>(data.data()) : 0; if (x11Data) { pm.x11SetScreen(x11Data->xinfo.screen()); uninit = x11Data->flags & QX11PixmapData::Uninitialized; } #elif defined(Q_WS_MAC) - QMacPixmapData *macData = data->classId() == QPixmapData::MacClass ? static_cast<QMacPixmapData*>(data) : 0; + QMacPixmapData *macData = data->classId() == QPixmapData::MacClass ? static_cast<QMacPixmapData*>(data.data()) : 0; if (macData) uninit = macData->uninit; #endif @@ -680,7 +663,7 @@ void QPixmap::resize_helper(const QSize &s) #if defined(Q_WS_X11) if (x11Data && x11Data->x11_mask) { - QX11PixmapData *pmData = static_cast<QX11PixmapData*>(pm.data); + QX11PixmapData *pmData = static_cast<QX11PixmapData*>(pm.data.data()); pmData->x11_mask = (Qt::HANDLE)XCreatePixmap(X11->display, RootWindow(x11Data->xinfo.display(), x11Data->xinfo.screen()), @@ -1175,7 +1158,7 @@ Qt::HANDLE QPixmap::handle() const { #if defined(Q_WS_X11) if (data->classId() == QPixmapData::X11Class) - return static_cast<QX11PixmapData*>(data)->handle(); + return static_cast<const QX11PixmapData*>(data.constData())->handle(); #endif return 0; } @@ -1362,14 +1345,12 @@ bool QPixmap::isDetached() const return data->ref == 1; } +/*! \internal + ### Qt5 - remove me. +*/ void QPixmap::deref() { - if (data && !data->ref.deref()) { // Destroy image if last ref - if (data->is_cached) - QImagePixmapCleanupHooks::executePixmapHooks(this); - delete data; - data = 0; - } + Q_ASSERT_X(false, "QPixmap::deref()", "Do not call this function anymore!"); } /*! @@ -1928,7 +1909,7 @@ void QPixmap::detach() { QPixmapData::ClassId id = data->classId(); if (id == QPixmapData::RasterClass) { - QRasterPixmapData *rasterData = static_cast<QRasterPixmapData*>(data); + QRasterPixmapData *rasterData = static_cast<QRasterPixmapData*>(data.data()); rasterData->image.detach(); } @@ -1936,7 +1917,7 @@ void QPixmap::detach() QImagePixmapCleanupHooks::executePixmapHooks(this); #if defined(Q_WS_MAC) - QMacPixmapData *macData = id == QPixmapData::MacClass ? static_cast<QMacPixmapData*>(data) : 0; + QMacPixmapData *macData = id == QPixmapData::MacClass ? static_cast<QMacPixmapData*>(data.data()) : 0; if (macData) { if (macData->cg_mask) { CGImageRelease(macData->cg_mask); @@ -1952,7 +1933,7 @@ void QPixmap::detach() #if defined(Q_WS_X11) if (data->classId() == QPixmapData::X11Class) { - QX11PixmapData *d = static_cast<QX11PixmapData*>(data); + QX11PixmapData *d = static_cast<QX11PixmapData*>(data.data()); d->flags &= ~QX11PixmapData::Uninitialized; // reset the cache data @@ -2038,7 +2019,7 @@ QPixmap QPixmap::fromImage(const QImage &image, Qt::ImageConversionFlags flags) */ QPixmapData* QPixmap::pixmapData() const { - return data; + return data.data(); } /*! diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h index bce1f5e..961008f 100644 --- a/src/gui/image/qpixmap.h +++ b/src/gui/image/qpixmap.h @@ -46,6 +46,7 @@ #include <QtGui/qcolor.h> #include <QtCore/qnamespace.h> #include <QtCore/qstring.h> // char*->QString conversion +#include <QtCore/qsharedpointer.h> #include <QtGui/qimage.h> #include <QtGui/qtransform.h> @@ -227,7 +228,7 @@ public: #endif private: - QPixmapData *data; + QExplicitlySharedDataPointer<QPixmapData> data; bool doImageIO(QImageWriter *io, int quality) const; @@ -272,7 +273,7 @@ public: QPixmapData* pixmapData() const; public: - typedef QPixmapData * DataPtr; + typedef QExplicitlySharedDataPointer<QPixmapData> DataPtr; inline DataPtr &data_ptr() { return data; } }; diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 5959da1..4aa74f7 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -73,12 +73,12 @@ static int qt_pixmap_serial = 0; Q_GUI_EXPORT quint32 *qt_mac_pixmap_get_base(const QPixmap *pix) { - return static_cast<QMacPixmapData*>(pix->data)->pixels; + return static_cast<QMacPixmapData*>(pix->data.data())->pixels; } Q_GUI_EXPORT int qt_mac_pixmap_get_bytes_per_line(const QPixmap *pix) { - return static_cast<QMacPixmapData*>(pix->data)->bytesPerRow; + return static_cast<QMacPixmapData*>(pix->data.data())->bytesPerRow; } void qt_mac_cgimage_data_free(void *info, const void *memoryToFree, size_t) @@ -421,7 +421,7 @@ QPixmap QMacPixmapData::alphaChannel() const void QMacPixmapData::setAlphaChannel(const QPixmap &alpha) { has_mask = true; - QMacPixmapData *alphaData = static_cast<QMacPixmapData*>(alpha.data); + QMacPixmapData *alphaData = static_cast<QMacPixmapData*>(alpha.data.data()); macSetAlphaChannel(alphaData, false); } @@ -449,7 +449,7 @@ void QMacPixmapData::setMask(const QBitmap &mask) has_alpha = false; has_mask = true; - QMacPixmapData *maskData = static_cast<QMacPixmapData*>(mask.data); + QMacPixmapData *maskData = static_cast<QMacPixmapData*>(mask.data.data()); macSetAlphaChannel(maskData, true); } @@ -961,14 +961,14 @@ Qt::HANDLE QPixmap::macQDAlphaHandle() const Qt::HANDLE QPixmap::macCGHandle() const { if (data->classId() == QPixmapData::MacClass) { - QMacPixmapData *d = static_cast<QMacPixmapData *>(data); + QMacPixmapData *d = static_cast<QMacPixmapData *>(data.data()); if (!d->cg_data) d->macCreateCGImageRef(); CGImageRef ret = d->cg_data; CGImageRetain(ret); return ret; } else if (data->classId() == QPixmapData::RasterClass) { - return qt_mac_image_to_cgimage(static_cast<QRasterPixmapData *>(data)->image); + return qt_mac_image_to_cgimage(static_cast<QRasterPixmapData *>(data.data())->image); } return 0; } @@ -980,7 +980,7 @@ bool QMacPixmapData::hasAlphaChannel() const CGImageRef qt_mac_create_imagemask(const QPixmap &pixmap, const QRectF &sr) { - QMacPixmapData *px = static_cast<QMacPixmapData*>(pixmap.data); + QMacPixmapData *px = static_cast<QMacPixmapData*>(pixmap.data.data()); if (px->cg_mask) { if (px->cg_mask_rect == sr) { CGImageRetain(px->cg_mask); //reference for the caller diff --git a/src/gui/image/qpixmap_qws.cpp b/src/gui/image/qpixmap_qws.cpp index b106610..e549900 100644 --- a/src/gui/image/qpixmap_qws.cpp +++ b/src/gui/image/qpixmap_qws.cpp @@ -112,7 +112,7 @@ QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) QRgb* QPixmap::clut() const { if (data->classId() == QPixmapData::RasterClass) { - const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data); + const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data.data()); return d->image.colorTable().data(); } @@ -122,7 +122,7 @@ QRgb* QPixmap::clut() const int QPixmap::numCols() const { if (data->classId() == QPixmapData::RasterClass) { - const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data); + const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data.data()); return d->image.numColors(); } @@ -132,7 +132,7 @@ int QPixmap::numCols() const const uchar* QPixmap::qwsBits() const { if (data->classId() == QPixmapData::RasterClass) { - const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data); + const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data.data()); return d->image.bits(); } @@ -142,7 +142,7 @@ const uchar* QPixmap::qwsBits() const int QPixmap::qwsBytesPerLine() const { if (data->classId() == QPixmapData::RasterClass) { - const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data); + const QRasterPixmapData *d = static_cast<const QRasterPixmapData*>(data.data()); return d->image.bytesPerLine(); } diff --git a/src/gui/image/qpixmap_win.cpp b/src/gui/image/qpixmap_win.cpp index b0f17ba..f12088d 100644 --- a/src/gui/image/qpixmap_win.cpp +++ b/src/gui/image/qpixmap_win.cpp @@ -123,7 +123,7 @@ HBITMAP QPixmap::toWinHBITMAP(HBitmapFormat format) const { HBITMAP bitmap = 0; if (data->classId() == QPixmapData::RasterClass) { - QRasterPixmapData* d = static_cast<QRasterPixmapData*>(data); + QRasterPixmapData* d = static_cast<QRasterPixmapData*>(data.data()); int w = d->image.width(); int h = d->image.height(); diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 047bd33..a75cadc 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -1875,7 +1875,7 @@ QPixmap QX11PixmapData::transformed(const QTransform &transform, return bm; } else { // color pixmap QPixmap pm; - QX11PixmapData *x11Data = static_cast<QX11PixmapData*>(pm.data); + QX11PixmapData *x11Data = static_cast<QX11PixmapData*>(pm.data.data()); x11Data->flags &= ~QX11PixmapData::Uninitialized; x11Data->xinfo = xinfo; x11Data->d = d; @@ -1940,7 +1940,7 @@ void QPixmap::x11SetScreen(int screen) if (screen < 0) screen = QX11Info::appScreen(); - QX11PixmapData *x11Data = static_cast<QX11PixmapData*>(data); + QX11PixmapData *x11Data = static_cast<QX11PixmapData*>(data.data()); if (screen == x11Data->xinfo.screen()) return; // nothing to do @@ -2037,7 +2037,7 @@ bool QX11PixmapData::hasAlphaChannel() const const QX11Info &QPixmap::x11Info() const { if (data->classId() == QPixmapData::X11Class) - return static_cast<QX11PixmapData*>(data)->xinfo; + return static_cast<QX11PixmapData*>(data.data())->xinfo; else { static QX11Info nullX11Info; return nullX11Info; @@ -2094,7 +2094,7 @@ Qt::HANDLE QPixmap::x11PictureHandle() const { #ifndef QT_NO_XRENDER if (data->classId() == QPixmapData::X11Class) - return static_cast<QX11PixmapData*>(data)->picture; + return static_cast<const QX11PixmapData*>(data.data())->picture; else return 0; #else diff --git a/src/gui/image/qpixmapcache_p.h b/src/gui/image/qpixmapcache_p.h index cbfc3e8..511c852 100644 --- a/src/gui/image/qpixmapcache_p.h +++ b/src/gui/image/qpixmapcache_p.h @@ -82,7 +82,7 @@ public: QDetachedPixmap(const QPixmap &pix) : QPixmap(pix) { if (data && data->classId() == QPixmapData::RasterClass) { - QRasterPixmapData *d = static_cast<QRasterPixmapData*>(data); + QRasterPixmapData *d = static_cast<QRasterPixmapData*>(data.data()); if (!d->image.isNull() && d->image.d->paintEngine && !d->image.d->paintEngine->isActive()) { diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index 1c3e422..70890c0 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -117,6 +117,7 @@ private: friend class QGLContextPrivate; friend class QX11PixmapData; friend class QGLTextureCache; //Needs to check the reference count + friend class QExplicitlySharedDataPointer<QPixmapData>; QAtomicInt ref; int detach_no; |