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