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