diff options
author | Teemu Katajisto <teemu.katajisto@digia.com> | 2012-10-05 13:48:43 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-08 08:51:09 +0200 |
commit | 179437bdbad3fa2f27ea7fc3a4284a844cb30792 (patch) | |
tree | a8327fcb729903f8c0de292bb2f769f3cf1b4a05 /src/plugins/platforms/cocoa | |
parent | 1bd710cbc77f71451527b9436c2d8935d8526bd5 (diff) |
Cocoa: add qWarnining when trying to create 0 width/height CGImages
Add meaningful warnings when trying to create 0 width/height CGImages.
This way it is easier to track down the place where valid size is not
used.
Change-Id: Id261ddf72d5487afcdb1a2a6d0d9079700888545
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoahelpers.mm | 6 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 12 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qpaintengine_mac.mm | 3 |
3 files changed, 18 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index d950878c28..8841a65844 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -79,6 +79,12 @@ static void drawImageReleaseData (void *info, const void *, size_t) CGImageRef qt_mac_image_to_cgimage(const QImage &img) { + if (img.width() <= 0 || img.height() <= 0) { + qWarning() << Q_FUNC_INFO << + "trying to set" << img.width() << "x" << img.height() << "size for CGImage"; + return 0; + } + QImage *image; if (img.depth() != 32) image = new QImage(img.convertToFormat(QImage::Format_ARGB32_Premultiplied)); diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 33527624df..a95ff45f30 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -192,12 +192,20 @@ static QTouchDevice *touchDevice = 0; { CGImageRelease(m_cgImage); + int width = image->width(); + int height = image->height(); + + if (width <= 0 || height <= 0) { + qWarning() << Q_FUNC_INFO << + "setting invalid size" << width << "x" << height << "for qnsview image"; + m_cgImage = 0; + return; + } + const uchar *imageData = image->bits(); int bitDepth = image->depth(); int colorBufferSize = 8; int bytesPrLine = image->bytesPerLine(); - int width = image->width(); - int height = image->height(); CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB(); diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/plugins/platforms/cocoa/qpaintengine_mac.mm index e6877e68d3..8c47527648 100644 --- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm +++ b/src/plugins/platforms/cocoa/qpaintengine_mac.mm @@ -1022,7 +1022,8 @@ void QCoreGraphicsPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, co image = qt_mac_create_imagemask(pm, sr); } else if (differentSize) { QCFType<CGImageRef> img = qt_mac_image_to_cgimage(pm.toImage()); - image = CGImageCreateWithImageInRect(img, CGRectMake(qRound(sr.x()), qRound(sr.y()), qRound(sr.width()), qRound(sr.height()))); + if (img) + image = CGImageCreateWithImageInRect(img, CGRectMake(qRound(sr.x()), qRound(sr.y()), qRound(sr.width()), qRound(sr.height()))); } else { image = qt_mac_image_to_cgimage(pm.toImage()); } |