Chromium Code Reviews| Index: debugger/QT/SkDrawGeometryWidget.cpp |
| diff --git a/debugger/QT/SkDrawGeometryWidget.cpp b/debugger/QT/SkDrawGeometryWidget.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f8a14796e8ab677c6abfcba1c1864ceec6636001 |
| --- /dev/null |
| +++ b/debugger/QT/SkDrawGeometryWidget.cpp |
| @@ -0,0 +1,86 @@ |
| + |
| +/* |
|
robertphillips
2014/12/30 17:35:33
2014
Kimmo Kinnunen
2014/12/31 06:43:29
Done.
|
| + * Copyright 2012 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include <QtGui> |
| + |
| +#include "SkDebugger.h" |
| +#include "SkDrawGeometryWidget.h" |
| + |
| +SkDrawGeometryWidget::SkDrawGeometryWidget(SkDebugger *debugger) |
| + : QFrame() |
| + , fDebugger(debugger) { |
| + this->setStyleSheet("QFrame {background-color: black; border: 1px solid #cccccc;}"); |
| +} |
| + |
| +void SkDrawGeometryWidget::resizeEvent(QResizeEvent* event) { |
| + this->QFrame::resizeEvent(event); |
| + QRect r = this->contentsRect(); |
| + int dim = std::min(r.width(), r.height()); |
| + if (dim == 0) { |
| + fSurface.reset(NULL); |
| + } else { |
| + SkImageInfo info = SkImageInfo::MakeN32Premul(dim, dim); |
| + fSurface.reset(SkSurface::NewRaster(info)); |
|
robertphillips
2014/12/30 17:35:33
this->
Kimmo Kinnunen
2014/12/31 06:43:29
Done.
|
| + updateImage(); |
| + } |
| +} |
| + |
| +void SkDrawGeometryWidget::paintEvent(QPaintEvent* event) { |
| + this->QFrame::paintEvent(event); |
| + |
| + if (!fSurface) { |
| + return; |
| + } |
| + |
| + QPainter painter(this); |
| + painter.setRenderHint(QPainter::Antialiasing); |
| + |
| + SkImageInfo info; |
| + size_t rowPixels; |
| + if (const void* pixels = fSurface->peekPixels(&info, &rowPixels)) { |
| + SkASSERT(info.width() > 0); |
| + SkASSERT(info.height() > 0); |
| + |
| + QRectF resultRect; |
| + if (this->width() < this->height()) { |
| + float ratio = this->width() / info.width(); |
| + resultRect = QRectF(0, 0, this->width(), ratio * info.height()); |
| + } else { |
| + float ratio = this->height() / info.height(); |
| + resultRect = QRectF(0, 0, ratio * info.width(), this->height()); |
| + } |
| + |
| + resultRect.moveCenter(this->contentsRect().center()); |
| + |
| + QImage image(reinterpret_cast<const uchar*>(pixels), |
| + info.width(), |
| + info.height(), |
| + QImage::Format_ARGB32_Premultiplied); |
| + painter.drawImage(resultRect, image); |
| + } |
| +} |
| + |
| +void SkDrawGeometryWidget::updateImage() { |
| + if (!fSurface) { |
| + return; |
| + } |
| + |
| + bool didRender = false; |
| + const SkTDArray<SkDrawCommand*>& commands = fDebugger->getDrawCommands(); |
| + if (0 != commands.count()) { |
| + SkDrawCommand* command = commands[fDebugger->index()]; |
| + didRender = command->render(fSurface->getCanvas()); |
| + } |
| + |
| + if (!didRender) { |
| + fSurface->getCanvas()->clear(SK_ColorTRANSPARENT); |
| + } |
| + |
| + fSurface->getCanvas()->flush(); |
| + update(); |
| +} |