
/*
 * Copyright 2012 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include <QtGui>

#include "SkDebugger.h"
#include "SkImageWidget.h"

SkImageWidget::SkImageWidget(SkDebugger *debugger)
    : QWidget()
    , fDebugger(debugger)
{
    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");

    SkImageInfo info = SkImageInfo::MakeN32Premul(kImageWidgetWidth, kImageWidgetHeight);
    fSurface = SkSurface::NewRasterDirect(info, fPixels, 4 * kImageWidgetWidth);
}

void SkImageWidget::paintEvent(QPaintEvent* event) {
    if (this->isHidden()) {
        return;
    }

    QPainter painter(this);
    QStyleOption opt;
    opt.init(this);

    style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);

    const SkTDArray<SkDrawCommand*>& commands = fDebugger->getDrawCommands();
    if (0 != commands.count()) {
        SkDrawCommand* command = commands[fDebugger->index()];

        if (command->render(fSurface->getCanvas())) {
            QPoint origin(0,0);
            QImage image((uchar*) fPixels,
                         kImageWidgetWidth,
                         kImageWidgetHeight,
                         QImage::Format_ARGB32_Premultiplied);

            painter.drawImage(origin, image);
        } else {
            painter.drawRect(0, 0, kImageWidgetWidth, kImageWidgetHeight);
        }
    }

    painter.end();
    emit drawComplete();
}
