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(); |
+} |