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