SkRasterWidget.cpp revision 38b08ce020f451a66263110b32e70f5022df4f83
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 20 fDebugCanvas = new SkDebugCanvas(); 21 this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}"); 22} 23 24SkRasterWidget::~SkRasterWidget() { 25 delete fDevice; 26 delete fDebugCanvas; 27} 28 29void SkRasterWidget::resizeEvent(QResizeEvent* event) { 30 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, event->size().width(), event->size().height()); 31 fBitmap.allocPixels(); 32 delete fDevice; 33 fDevice = new SkDevice(fBitmap); 34 fDebugCanvas->setBounds(event->size().width(), event->size().height()); 35 this->update(); 36} 37 38void SkRasterWidget::paintEvent(QPaintEvent* event) { 39 fBitmap.eraseColor(0); 40 SkCanvas canvas(fDevice); 41 canvas.translate(fTransform.fX, fTransform.fY); 42 if (fScaleFactor < 0) { 43 canvas.scale((1.0 / -fScaleFactor), (1.0 / -fScaleFactor)); 44 } else if (fScaleFactor > 0) { 45 canvas.scale(fScaleFactor, fScaleFactor); 46 } 47 48 fMatrix = canvas.getTotalMatrix(); 49 fClip = canvas.getTotalClip().getBounds(); 50 fDebugCanvas->drawTo(&canvas, fIndex+1, &fBitmap); 51 52 QPainter painter(this); 53 QStyleOption opt; 54 opt.init(this); 55 56 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); 57 58 QPoint origin(0,0); 59 QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(), 60 fBitmap.height(), QImage::Format_ARGB32_Premultiplied); 61 62 painter.drawImage(origin, image); 63 painter.end(); 64} 65