| |
| /* |
| * 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 "SkRasterWidget.h" |
| |
| SkRasterWidget::SkRasterWidget(SkDebugger *debugger) : QWidget() { |
| fBitmap.allocN32Pixels(800, 800); |
| fBitmap.eraseColor(SK_ColorTRANSPARENT); |
| fDevice = new SkBitmapDevice(fBitmap); |
| fDebugger = debugger; |
| fCanvas = new SkCanvas(fDevice); |
| this->setStyleSheet("QWidget {background-color: black; border: 1px solid #cccccc;}"); |
| } |
| |
| SkRasterWidget::~SkRasterWidget() { |
| SkSafeUnref(fCanvas); |
| SkSafeUnref(fDevice); |
| } |
| |
| void SkRasterWidget::resizeEvent(QResizeEvent* event) { |
| fBitmap.allocN32Pixels(event->size().width(), event->size().height()); |
| fBitmap.eraseColor(SK_ColorTRANSPARENT); |
| SkSafeUnref(fCanvas); |
| SkSafeUnref(fDevice); |
| fDevice = new SkBitmapDevice(fBitmap); |
| fCanvas = new SkCanvas(fDevice); |
| fDebugger->setWindowSize(event->size().width(), event->size().height()); |
| this->update(); |
| } |
| |
| void SkRasterWidget::paintEvent(QPaintEvent* event) { |
| if (!this->isHidden()) { |
| fDebugger->draw(fCanvas); |
| QPainter painter(this); |
| QStyleOption opt; |
| opt.init(this); |
| |
| style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this); |
| |
| QPoint origin(0,0); |
| QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(), |
| fBitmap.height(), QImage::Format_ARGB32_Premultiplied); |
| |
| #if SK_R32_SHIFT == 0 |
| painter.drawImage(origin, image.rgbSwapped()); |
| #else |
| painter.drawImage(origin, image); |
| #endif |
| painter.end(); |
| emit drawComplete(); |
| } |
| } |