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.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
20SkRasterWidget::~SkRasterWidget() {
21    SkSafeUnref(fCanvas);
22    SkSafeUnref(fDevice);
23}
24
25void 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
36void 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