16dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
26dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com/*
36dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com * Copyright 2012 Google Inc.
46dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com *
56dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com * Use of this source code is governed by a BSD-style license that can be
66dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com * found in the LICENSE file.
76dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com */
86dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
96dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com#include <QtGui>
106dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
116dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com#include "SkDebugger.h"
126dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com#include "SkImageWidget.h"
136dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
141c9c0d37111e6ff7a74a2908bf62a0d3954f2bb5skia.committer@gmail.comSkImageWidget::SkImageWidget(SkDebugger *debugger)
156dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    : QWidget()
166dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    , fDebugger(debugger) {
176dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");
186ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
192bd8b8100529c96c81c30f749f672f4caf775b04reed@google.com    SkImageInfo info;
206ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    info.fWidth = kImageWidgetWidth;
216ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    info.fHeight = kImageWidgetHeight;
2228fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org    info.fColorType = kN32_SkColorType;
23beb0c2aa32622d90dd85aa9723ed6b7c3e2139bdreed@google.com    info.fAlphaType = kPremul_SkAlphaType;
246ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
256ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
266dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
276dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
286dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.comvoid SkImageWidget::paintEvent(QPaintEvent* event) {
296dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    if (this->isHidden()) {
306dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        return;
316dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    }
326dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
336dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    QPainter painter(this);
346dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    QStyleOption opt;
356dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    opt.init(this);
366dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
376dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
386dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
396dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    const SkTDArray<SkDrawCommand*>& commands = fDebugger->getDrawCommands();
406dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    if (0 != commands.count()) {
416dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        SkDrawCommand* command = commands[fDebugger->index()];
426dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
436ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        if (command->render(fSurface->getCanvas())) {
446dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            QPoint origin(0,0);
45a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com            QImage image((uchar*) fPixels,
466ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                         kImageWidgetWidth,
47a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com                         kImageWidgetHeight,
486ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                         QImage::Format_ARGB32_Premultiplied);
496dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
506dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            painter.drawImage(origin, image);
516dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        } else {
526dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            painter.drawRect(0, 0, kImageWidgetWidth, kImageWidgetHeight);
536dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        }
546dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    }
556dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
566dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    painter.end();
576dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    emit drawComplete();
586dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
59