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()
16e5ea500d4714a7d84de2bf913e81be3b65d2de68reed    , fDebugger(debugger)
17e5ea500d4714a7d84de2bf913e81be3b65d2de68reed{
186dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");
196ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
20e5ea500d4714a7d84de2bf913e81be3b65d2de68reed    SkImageInfo info = SkImageInfo::MakeN32Premul(kImageWidgetWidth, kImageWidgetHeight);
216ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
226dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
236dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
246dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.comvoid SkImageWidget::paintEvent(QPaintEvent* event) {
256dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    if (this->isHidden()) {
266dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        return;
276dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    }
286dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
296dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    QPainter painter(this);
306dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    QStyleOption opt;
316dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    opt.init(this);
326dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
336dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
346dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
356dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    const SkTDArray<SkDrawCommand*>& commands = fDebugger->getDrawCommands();
366dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    if (0 != commands.count()) {
376dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        SkDrawCommand* command = commands[fDebugger->index()];
386dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
396ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        if (command->render(fSurface->getCanvas())) {
406dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            QPoint origin(0,0);
41a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com            QImage image((uchar*) fPixels,
426ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                         kImageWidgetWidth,
43a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com                         kImageWidgetHeight,
446ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                         QImage::Format_ARGB32_Premultiplied);
456dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
466dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            painter.drawImage(origin, image);
476dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        } else {
486dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com            painter.drawRect(0, 0, kImageWidgetWidth, kImageWidgetHeight);
496dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com        }
506dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    }
516dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
526dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    painter.end();
536dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    emit drawComplete();
546dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
55