Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2609)

Unified Diff: debugger/QT/SkDrawGeometryWidget.cpp

Issue 787143004: debugger: Make draw command image widget resize (Closed) Base URL: https://skia.googlesource.com/skia.git@debugger-resize-01-settings-layout
Patch Set: divide by zero Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+}

Powered by Google App Engine
This is Rietveld 408576698