#include "SkCanvasWidget.h"
+#include <QtGui>
SkCanvasWidget::SkCanvasWidget(QWidget* parent,
SkDebugger* debugger) : QWidget(parent)
#if SK_SUPPORT_GPU
setWidgetVisibility(kGPU_WidgetType, true);
#endif
- connect(&fRasterWidget, SIGNAL(drawComplete()),
- this->parentWidget(), SLOT(drawComplete()));
+ connect(&fRasterWidget, SIGNAL(drawComplete()), this->parentWidget(), SLOT(drawComplete()));
+ connect(&fGLWidget, SIGNAL(drawComplete()), this->parentWidget(), SLOT(drawComplete()));
}
SkCanvasWidget::~SkCanvasWidget() {}
void SkCanvasWidget::drawTo(int index) {
fDebugger->setIndex(index);
- fRasterWidget.draw();
+ fRasterWidget.updateImage();
#if SK_SUPPORT_GPU
- fGLWidget.draw();
+ fGLWidget.updateImage();
#endif
emit commandChanged(fDebugger->index());
}
*/
#include "SkDebuggerGUI.h"
-#include "SkForceLinking.h"
-#include <QListWidgetItem>
#include "PictureRenderer.h"
+#include "SkPictureData.h"
#include "SkPicturePlayback.h"
#include "SkPictureRecord.h"
-#include "SkPictureData.h"
+#include <QListWidgetItem>
+#include <QtGui>
#if defined(SK_BUILD_FOR_WIN32)
#include "SysTimer_windows.h"
fDebugger.setCommandVisible(row, true);
fSkipCommands[row] = false;
}
- if (this->isPaused()) {
- fCanvasWidget.drawTo(fPausedRow);
- } else {
- fCanvasWidget.drawTo(fListWidget.currentRow());
- }
+ this->updateImage();
}
void SkDebuggerGUI::actionClose() {
}
}
- int currentRow = fListWidget.currentRow();
-
- if (this->isPaused()) {
- fCanvasWidget.drawTo(fPausedRow);
- } else {
- fCanvasWidget.drawTo(currentRow);
- }
+ this->updateImage();
}
#if SK_SUPPORT_GPU
fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kRaster_8888_WidgetType,
!fSettingsWidget.isRasterEnabled());
fDebugger.setOverdrawViz(fSettingsWidget.isOverdrawVizEnabled());
- fCanvasWidget.update();
+ this->updateImage();
}
void SkDebuggerGUI::actionVisualizationsChanged() {
fDebugger.setMegaViz(fSettingsWidget.isMegaVizEnabled());
fDebugger.setPathOps(fSettingsWidget.isPathOpsEnabled());
fDebugger.highlightCurrentCommand(fSettingsWidget.isVisibilityFilterEnabled());
- fCanvasWidget.drawTo(fListWidget.currentRow());
+ this->updateImage();
}
void SkDebuggerGUI::actionTextureFilter() {
}
void SkDebuggerGUI::drawComplete() {
+ SkString clipStack;
+ fDebugger.getClipStackText(&clipStack);
+ fInspectorWidget.setText(clipStack.c_str(), SkInspectorWidget::kClipStack_TabType);
+
fInspectorWidget.setMatrix(fDebugger.getCurrentMatrix());
fInspectorWidget.setClip(fDebugger.getCurrentClip());
}
void SkDebuggerGUI::pauseDrawing(bool isPaused) {
fPausedRow = fListWidget.currentRow();
- if (!fLoading) {
- fCanvasWidget.drawTo(fPausedRow);
- }
+ this->updateDrawCommandInfo();
}
void SkDebuggerGUI::updateDrawCommandInfo() {
fCurrentCommandBox.setText("");
fDrawCommandGeometryWidget.setDrawCommandIndex(-1);
} else {
- if (!this->isPaused()) {
- fCanvasWidget.drawTo(currentRow);
- }
+ this->updateImage();
+
const SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo(currentRow);
/* TODO(chudy): Add command type before parameters. Rename v
fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType);
}
- SkString clipStack;
- fDebugger.getClipStackText(&clipStack);
- fInspectorWidget.setText(clipStack.c_str(), SkInspectorWidget::kClipStack_TabType);
-
fCurrentCommandBox.setText(QString::number(currentRow));
fDrawCommandGeometryWidget.setDrawCommandIndex(currentRow);
firstItem->setSelectable(false);
}
+void SkDebuggerGUI::updateImage() {
+ if (this->isPaused()) {
+ fCanvasWidget.drawTo(fPausedRow);
+ } else {
+ fCanvasWidget.drawTo(fListWidget.currentRow());
+ }
+}
+
void SkDebuggerGUI::updateHit(int newHit) {
fCommandHitBox.setText(QString::number(newHit));
}
#include "SkRasterWidget.h"
#include "SkDrawCommandGeometryWidget.h"
#include "SkSettingsWidget.h"
+#include <QtCore/QSignalMapper>
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
void toggleFilter(QString string);
void updateHit(int newHit);
+
+ void updateImage();
private:
QSplitter fCentralSplitter;
QStatusBar fStatusBar;
painter.setRenderHint(QPainter::Antialiasing);
SkImageInfo info;
- size_t rowPixels;
- if (const void* pixels = fSurface->peekPixels(&info, &rowPixels)) {
+ size_t rowBytes;
+ if (const void* pixels = fSurface->peekPixels(&info, &rowBytes)) {
SkASSERT(info.width() > 0);
SkASSERT(info.height() > 0);
QImage image(reinterpret_cast<const uchar*>(pixels),
info.width(),
info.height(),
+ rowBytes,
QImage::Format_ARGB32_Premultiplied);
painter.drawImage(resultRect, image);
}
void SkGLWidget::resizeGL(int w, int h) {
SkASSERT(w == this->width() && h == this->height());
this->createRenderTarget();
- draw();
}
void SkGLWidget::paintGL() {
~SkGLWidget();
- void draw() {
+ void updateImage() {
this->updateGL();
}
void setSampleCount(int sampleCount);
*/
#include "SkRasterWidget.h"
+#include "SkDebugger.h"
+#include <QtGui>
-SkRasterWidget::SkRasterWidget(SkDebugger *debugger) : QWidget() {
- fBitmap.allocN32Pixels(800, 800);
- fBitmap.eraseColor(SK_ColorTRANSPARENT);
- fDevice = new SkBitmapDevice(fBitmap);
- fDebugger = debugger;
- fCanvas = new SkCanvas(fDevice);
+SkRasterWidget::SkRasterWidget(SkDebugger *debugger)
+ : QWidget()
+ , fDebugger(debugger)
+ , fNeedImageUpdate(false) {
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);
- this->update();
+ this->QWidget::resizeEvent(event);
+
+ QRect r = this->contentsRect();
+ if (r.width() == 0 || r.height() == 0) {
+ fSurface.reset(NULL);
+ } else {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(r.width(), r.height());
+ fSurface.reset(SkSurface::NewRaster(info));
+ }
+ this->updateImage();
}
void SkRasterWidget::paintEvent(QPaintEvent* event) {
- if (!this->isHidden()) {
- fDebugger->draw(fCanvas);
- QPainter painter(this);
- QStyleOption opt;
- opt.init(this);
+ QPainter painter(this);
+ painter.setRenderHint(QPainter::Antialiasing);
+ QStyleOption opt;
+ opt.init(this);
+ style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
- style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
+ if (!fSurface) {
+ return;
+ }
- QPoint origin(0,0);
- QImage image((uchar *)fBitmap.getPixels(), fBitmap.width(),
- fBitmap.height(), QImage::Format_ARGB32_Premultiplied);
+ if (fNeedImageUpdate) {
+ fDebugger->draw(fSurface->getCanvas());
+ fSurface->getCanvas()->flush();
+ fNeedImageUpdate = false;
+ emit drawComplete();
+ }
+ SkImageInfo info;
+ size_t rowBytes;
+ if (const void* pixels = fSurface->peekPixels(&info, &rowBytes)) {
+ QImage image(reinterpret_cast<const uchar*>(pixels),
+ info.width(),
+ info.height(),
+ rowBytes,
+ QImage::Format_ARGB32_Premultiplied);
#if SK_R32_SHIFT == 0
- painter.drawImage(origin, image.rgbSwapped());
+ painter.drawImage(this->contentsRect(), image.rgbSwapped());
#else
- painter.drawImage(origin, image);
+ painter.drawImage(this->contentsRect(), image);
#endif
- painter.end();
- emit drawComplete();
}
}
+
+void SkRasterWidget::updateImage() {
+ if (!fSurface) {
+ return;
+ }
+ fNeedImageUpdate = true;
+ this->update();
+}
#ifndef SKRASTERWIDGET_H_
#define SKRASTERWIDGET_H_
-#if SK_SUPPORT_GPU
-#include "SkGpuDevice.h"
-#endif
+#include "SkSurface.h"
+class SkDebugger;
-#include "SkBitmapDevice.h"
-#include "SkDebugger.h"
-
-#include <QApplication>
-#include <QtGui>
#include <QWidget>
class SkRasterWidget : public QWidget {
public:
SkRasterWidget(SkDebugger* debugger);
- ~SkRasterWidget();
-
- void draw() {
- this->update();
- }
+ void updateImage();
signals:
void drawComplete();
void resizeEvent(QResizeEvent* event);
private:
- SkBitmap fBitmap;
SkDebugger* fDebugger;
- SkCanvas* fCanvas;
- SkBaseDevice* fDevice;
+ SkAutoTUnref<SkSurface> fSurface;
+ bool fNeedImageUpdate;
};
#endif /* SKRASTERWIDGET_H_ */