diff options
author | hjk <hjk121@nokiamail.com> | 2013-07-01 11:43:56 +0200 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2013-07-01 14:21:43 +0200 |
commit | abc6e351b8a151926233b86105ddc200b3bd589d (patch) | |
tree | 2cf05962d6e5e2ca4961f3609c3146d2c2803755 /src | |
parent | 0292600c729886fb20ba79c1efabaf960c67ba4b (diff) | |
download | qt-creator-abc6e351b8a151926233b86105ddc200b3bd589d.tar.gz |
Debugger: Make QImage dumper work with release versions
This accidentally also allows non-debug Qt users to reproduce the
http://blog.qt.digia.com/blog/2010/04/22/peek-and-poke-vol-3/
smiley drawing.
Change-Id: Ica436f55494d012d5516ef9d00d6310f2ac2d4ee
Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/debugger/imageviewer.cpp | 1 | ||||
-rw-r--r-- | src/plugins/debugger/watchhandler.cpp | 21 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/plugins/debugger/imageviewer.cpp b/src/plugins/debugger/imageviewer.cpp index db7f722e4a..26d96ad406 100644 --- a/src/plugins/debugger/imageviewer.cpp +++ b/src/plugins/debugger/imageviewer.cpp @@ -69,6 +69,7 @@ void ImageWidget::setImage(const QImage &image) { setFixedSize(image.size() + QSize(2, 2)); m_image = image; + update(); } void ImageWidget::mousePressEvent(QMouseEvent *ev) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index f400a43129..0616add575 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1679,28 +1679,37 @@ void WatchHandler::showEditValue(const WatchData &data) showSeparateWidget(l); m_model->m_editHandlers[key] = l; } - int width = 0, height = 0, format = 0; + int width = 0, height = 0, nbytes = 0, format = 0; QByteArray ba; uchar *bits = 0; if (data.editformat == DisplayImageData) { ba = QByteArray::fromHex(data.editvalue); + QTC_ASSERT(ba.size() > 16, return); const int *header = (int *)(ba.data()); if (!ba.at(0) && !ba.at(1)) // Check on 'width' for Python dumpers returning 4-byte swapped-data. - swapEndian(ba.data(), ba.size()); - bits = 12 + (uchar *)(ba.data()); + swapEndian(ba.data(), 16); + bits = 16 + (uchar *)(ba.data()); width = header[0]; height = header[1]; - format = header[2]; + nbytes = header[2]; + format = header[3]; } else if (data.editformat == DisplayImageFile) { QTextStream ts(data.editvalue); QString fileName; - ts >> width >> height >> format >> fileName; + ts >> width >> height >> nbytes >> format >> fileName; QFile f(fileName); f.open(QIODevice::ReadOnly); ba = f.readAll(); bits = (uchar*)ba.data(); + nbytes = width * height; } - l->setImage(QImage(bits, width, height, QImage::Format(format))); + QTC_ASSERT(0 < width && width < 10000, return); + QTC_ASSERT(0 < height && height < 10000, return); + QTC_ASSERT(0 < nbytes && nbytes < 10000 * 10000, return); + QTC_ASSERT(0 < format && format < 32, return); + QImage im(width, height, QImage::Format(format)); + qMemCopy(im.bits(), bits, nbytes); + l->setImage(im); showSeparateWidget(l); } break; |