SkRasterWidget.cpp revision 80a4a60f96c33ccd850f9b0eb4b69ab08c198196
1 2/* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#include "SkRasterWidget.h" 11 12SkRasterWidget::SkRasterWidget(QWidget* parent) : QWidget(parent) { 13 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, 800, 800); 14 fBitmap.allocPixels(); 15 fBitmap.eraseColor(0); 16 fTransform.set(0,0); 17 fScaleFactor = 1.0; 18 fIndex = 0; 19 fDebugCanvas = NULL; 20 this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}"); 21} 22 23SkRasterWidget::~SkRasterWidget() { 24 delete fDevice; 25 delete fDebugCanvas; 26} 27 28void SkRasterWidget::resizeEvent(QResizeEvent* event) { 29 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, event->size().width(), event->size().height()); 30 fBitmap.allocPixels(); 31 delete fDevice; 32 fDevice = new SkDevice(fBitmap); 33 //TODO(chudy): Debug Canvas shouldn't store current size. The bitmap 34 //or texture backend should already have it. Refactor. 35 if (fDebugCanvas) { 36 fDebugCanvas->setBounds(event->size().width(), event->size().height()); 37 this->update(); 38 } 39} 40 41void SkRasterWidget::paintEvent(QPaintEvent* event) { 42 if (fDebugCanvas) { 43 fBitmap.eraseColor(0); 44 SkCanvas canvas(fDevice); 45 canvas.translate(fTransform.fX, fTransform.fY); 46 if (fScaleFactor < 0) { 47 canvas.scale((1.0 / -fScaleFactor), (1.0 / -fScaleFactor)); 48 } else if (fScaleFactor > 0) { 49 canvas.scale(fScaleFactor, fScaleFactor); 50 } 51 52 fMatrix = canvas.getTotalMatrix(); 53 fClip = canvas.getTotalClip().getBounds(); 54 fDebugCanvas->drawTo(&canvas, fIndex+1, &fBitmap); 55 56 QPainter painter(this); 57 QStyleOption opt; 58 opt.init(this); 59 60 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); 61 62 QPoint origin(0,0); 63 QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(), 64 fBitmap.height(), QImage::Format_ARGB32_Premultiplied); 65 66 painter.drawImage(origin, image); 67 painter.end(); 68 } 69} 70