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