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 #include "SkRasterWidget.h" 10 11 SkRasterWidget::SkRasterWidget(SkDebugger *debugger) : QWidget() { 12 fBitmap.allocN32Pixels(800, 800); 13 fBitmap.eraseColor(SK_ColorTRANSPARENT); 14 fDevice = new SkBitmapDevice(fBitmap); 15 fDebugger = debugger; 16 fCanvas = new SkCanvas(fDevice); 17 this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}"); 18 } 19 20 SkRasterWidget::~SkRasterWidget() { 21 SkSafeUnref(fCanvas); 22 SkSafeUnref(fDevice); 23 } 24 25 void SkRasterWidget::resizeEvent(QResizeEvent* event) { 26 fBitmap.allocN32Pixels(event->size().width(), event->size().height()); 27 fBitmap.eraseColor(SK_ColorTRANSPARENT); 28 SkSafeUnref(fCanvas); 29 SkSafeUnref(fDevice); 30 fDevice = new SkBitmapDevice(fBitmap); 31 fCanvas = new SkCanvas(fDevice); 32 fDebugger->setWindowSize(event->size().width(), event->size().height()); 33 this->update(); 34 } 35 36 void SkRasterWidget::paintEvent(QPaintEvent* event) { 37 if (!this->isHidden()) { 38 fDebugger->draw(fCanvas); 39 QPainter painter(this); 40 QStyleOption opt; 41 opt.init(this); 42 43 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); 44 45 QPoint origin(0,0); 46 QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(), 47 fBitmap.height(), QImage::Format_ARGB32_Premultiplied); 48 49 #if SK_R32_SHIFT == 0 50 painter.drawImage(origin, image.rgbSwapped()); 51 #else 52 painter.drawImage(origin, image); 53 #endif 54 painter.end(); 55 emit drawComplete(); 56 } 57 } 58