blob: 72a742f7aa2610e512e08948695d4f145ab6ff7e [file] [log] [blame]
chudy@google.com38b08ce2012-07-28 23:26:10 +00001
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
chudy@google.com38b08ce2012-07-28 23:26:10 +00009#include "SkRasterWidget.h"
kkinnunencfdc0e32015-01-13 22:49:02 -080010#include "SkDebugger.h"
11#include <QtGui>
chudy@google.com38b08ce2012-07-28 23:26:10 +000012
kkinnunencfdc0e32015-01-13 22:49:02 -080013SkRasterWidget::SkRasterWidget(SkDebugger *debugger)
14 : QWidget()
15 , fDebugger(debugger)
16 , fNeedImageUpdate(false) {
kkinnunen534c63e2014-12-22 05:56:45 -080017 this->setStyleSheet("QWidget {background-color: black; border: 1px solid #cccccc;}");
chudy@google.com38b08ce2012-07-28 23:26:10 +000018}
19
chudy@google.com38b08ce2012-07-28 23:26:10 +000020void SkRasterWidget::resizeEvent(QResizeEvent* event) {
kkinnunencfdc0e32015-01-13 22:49:02 -080021 this->QWidget::resizeEvent(event);
22
23 QRect r = this->contentsRect();
24 if (r.width() == 0 || r.height() == 0) {
25 fSurface.reset(NULL);
26 } else {
27 SkImageInfo info = SkImageInfo::MakeN32Premul(r.width(), r.height());
28 fSurface.reset(SkSurface::NewRaster(info));
29 }
30 this->updateImage();
chudy@google.com38b08ce2012-07-28 23:26:10 +000031}
32
33void SkRasterWidget::paintEvent(QPaintEvent* event) {
kkinnunencfdc0e32015-01-13 22:49:02 -080034 QPainter painter(this);
35 painter.setRenderHint(QPainter::Antialiasing);
36 QStyleOption opt;
37 opt.init(this);
38 style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
chudy@google.com80a4a602012-07-30 18:54:07 +000039
kkinnunencfdc0e32015-01-13 22:49:02 -080040 if (!fSurface) {
41 return;
42 }
chudy@google.com80a4a602012-07-30 18:54:07 +000043
kkinnunencfdc0e32015-01-13 22:49:02 -080044 if (fNeedImageUpdate) {
45 fDebugger->draw(fSurface->getCanvas());
46 fSurface->getCanvas()->flush();
47 fNeedImageUpdate = false;
chudy@google.coma9e937c2012-08-03 17:32:05 +000048 emit drawComplete();
chudy@google.com38b08ce2012-07-28 23:26:10 +000049 }
kkinnunencfdc0e32015-01-13 22:49:02 -080050
51 SkImageInfo info;
52 size_t rowBytes;
53 if (const void* pixels = fSurface->peekPixels(&info, &rowBytes)) {
54 QImage image(reinterpret_cast<const uchar*>(pixels),
55 info.width(),
56 info.height(),
57 rowBytes,
58 QImage::Format_ARGB32_Premultiplied);
59#if SK_R32_SHIFT == 0
60 painter.drawImage(this->contentsRect(), image.rgbSwapped());
61#else
62 painter.drawImage(this->contentsRect(), image);
63#endif
64 }
65}
66
67void SkRasterWidget::updateImage() {
68 if (!fSurface) {
69 return;
70 }
71 fNeedImageUpdate = true;
72 this->update();
chudy@google.com38b08ce2012-07-28 23:26:10 +000073}