SkRasterWidget.cpp revision 1f2f338e23789f3eef168dcbd8171a28820ba6c1
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() {
1238b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    fBitmap.setConfig(SkBitmap::kARGB_8888_Config, 800, 800);
1338b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    fBitmap.allocPixels();
14dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com    fBitmap.eraseColor(SK_ColorTRANSPARENT);
151f2f338e23789f3eef168dcbd8171a28820ba6c1robertphillips@google.com    fDevice = new SkBitmapDevice(fBitmap);
16607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger = debugger;
17830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    fCanvas = new SkCanvas(fDevice);
1838b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    this->setStyleSheet("QWidget {background-color: white; border: 1px solid #cccccc;}");
1938b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
2038b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
2138b08ce020f451a66263110b32e70f5022df4f83chudy@google.comSkRasterWidget::~SkRasterWidget() {
22830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fCanvas);
23830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fDevice);
2438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
2538b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
2638b08ce020f451a66263110b32e70f5022df4f83chudy@google.comvoid SkRasterWidget::resizeEvent(QResizeEvent* event) {
2738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    fBitmap.setConfig(SkBitmap::kARGB_8888_Config, event->size().width(), event->size().height());
2838b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    fBitmap.allocPixels();
29f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    fBitmap.eraseColor(SK_ColorTRANSPARENT);
30830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fCanvas);
31830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    SkSafeUnref(fDevice);
321f2f338e23789f3eef168dcbd8171a28820ba6c1robertphillips@google.com    fDevice = new SkBitmapDevice(fBitmap);
33830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    fCanvas = new SkCanvas(fDevice);
34607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger->resize(event->size().width(), event->size().height());
352d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    this->update();
3638b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
3738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
3838b08ce020f451a66263110b32e70f5022df4f83chudy@google.comvoid SkRasterWidget::paintEvent(QPaintEvent* event) {
39607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    if (!this->isHidden()) {
40607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger->draw(fCanvas);
4180a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QPainter painter(this);
4280a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QStyleOption opt;
4380a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        opt.init(this);
4438b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
4580a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
4638b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
4780a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QPoint origin(0,0);
4880a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(),
4980a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com                fBitmap.height(), QImage::Format_ARGB32_Premultiplied);
5038b08ce020f451a66263110b32e70f5022df4f83chudy@google.com
515a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#if SK_R32_SHIFT == 0
525a867c74e1ebae237082abfa433d6833982b0babhumper@google.com        painter.drawImage(origin, image.rgbSwapped());
535a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#else
5480a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        painter.drawImage(origin, image);
555a867c74e1ebae237082abfa433d6833982b0babhumper@google.com#endif
5680a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com        painter.end();
57a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        emit drawComplete();
5880a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    }
5938b08ce020f451a66263110b32e70f5022df4f83chudy@google.com}
60