138b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
238b08ce020f451a66263110b32e70f5022df4f83chudy@google.com/*
338b08ce020f451a66263110b32e70f5022df4f83chudy@google.com * Copyright 2012 Google Inc.
438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com *
538b08ce020f451a66263110b32e70f5022df4f83chudy@google.com * Use of this source code is governed by a BSD-style license that can be
638b08ce020f451a66263110b32e70f5022df4f83chudy@google.com * found in the LICENSE file.
738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com */
838b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
938b08ce020f451a66263110b32e70f5022df4f83chudy@google.com#include "SkRasterWidget.h"
1038b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
11607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.comSkRasterWidget::SkRasterWidget(SkDebugger *debugger) : QWidget() {
126c22573edb234ad14df947278cfed010669a39a7reed    fBitmap.allocN32Pixels(800, 800);
13dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com    fBitmap.eraseColor(SK_ColorTRANSPARENT);
141f2f338e23789f3eef168dcbd8171a28820ba6c1robertphillips@google.com    fDevice = new SkBitmapDevice(fBitmap);
15607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger = debugger;
16830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    fCanvas = new SkCanvas(fDevice);
1738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");
1838b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
1938b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
2038b08ce020f451a66263110b32e70f5022df4f83chudy@google.comSkRasterWidget::~SkRasterWidget() {
21830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fCanvas);
22830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fDevice);
2338b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
2438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
2538b08ce020f451a66263110b32e70f5022df4f83chudy@google.comvoid SkRasterWidget::resizeEvent(QResizeEvent* event) {
266c22573edb234ad14df947278cfed010669a39a7reed    fBitmap.allocN32Pixels(event->size().width(), event->size().height());
27f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    fBitmap.eraseColor(SK_ColorTRANSPARENT);
28830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fCanvas);
29830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fDevice);
301f2f338e23789f3eef168dcbd8171a28820ba6c1robertphillips@google.com    fDevice = new SkBitmapDevice(fBitmap);
31830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    fCanvas = new SkCanvas(fDevice);
32607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger->resize(event->size().width(), event->size().height());
332d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    this->update();
3438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
3538b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
3638b08ce020f451a66263110b32e70f5022df4f83chudy@google.comvoid SkRasterWidget::paintEvent(QPaintEvent* event) {
37607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    if (!this->isHidden()) {
38607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger->draw(fCanvas);
3980a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QPainter painter(this);
4080a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QStyleOption opt;
4180a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        opt.init(this);
4238b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
4380a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
4438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
4580a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QPoint origin(0,0);
4680a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(),
4780a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com                fBitmap.height(), QImage::Format_ARGB32_Premultiplied);
4838b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
495a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#if SK_R32_SHIFT == 0
505a867c74e1ebae237082abfa433d6833982b0babhumper@google.com        painter.drawImage(origin, image.rgbSwapped());
515a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#else
5280a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        painter.drawImage(origin, image);
535a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#endif
5480a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        painter.end();
55a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        emit drawComplete();
5680a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    }
5738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
58