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 <QtGui>
10
11#include "SkDebugger.h"
12#include "SkImageWidget.h"
13
14SkImageWidget::SkImageWidget(SkDebugger *debugger)
15    : QWidget()
16    , fDebugger(debugger) {
17    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");
18
19    SkImageInfo info;
20    info.fWidth = kImageWidgetWidth;
21    info.fHeight = kImageWidgetHeight;
22    info.fColorType = kN32_SkColorType;
23    info.fAlphaType = kPremul_SkAlphaType;
24
25    fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
26}
27
28void SkImageWidget::paintEvent(QPaintEvent* event) {
29    if (this->isHidden()) {
30        return;
31    }
32
33    QPainter painter(this);
34    QStyleOption opt;
35    opt.init(this);
36
37    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
38
39    const SkTDArray<SkDrawCommand*>& commands = fDebugger->getDrawCommands();
40    if (0 != commands.count()) {
41        SkDrawCommand* command = commands[fDebugger->index()];
42
43        if (command->render(fSurface->getCanvas())) {
44            QPoint origin(0,0);
45            QImage image((uchar*) fPixels,
46                         kImageWidgetWidth,
47                         kImageWidgetHeight,
48                         QImage::Format_ARGB32_Premultiplied);
49
50            painter.drawImage(origin, image);
51        } else {
52            painter.drawRect(0, 0, kImageWidgetWidth, kImageWidgetHeight);
53        }
54    }
55
56    painter.end();
57    emit drawComplete();
58}
59