Update filter tool to allow more flexible filtering
https://codereview.appspot.com/7227055/
git-svn-id: http://skia.googlecode.com/svn/trunk@7492 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/SkDebugCanvas.cpp b/debugger/SkDebugCanvas.cpp
index e4cfec8..7be729c 100644
--- a/debugger/SkDebugCanvas.cpp
+++ b/debugger/SkDebugCanvas.cpp
@@ -10,7 +10,6 @@
#include "SkDebugCanvas.h"
#include "SkDrawCommand.h"
#include "SkDevice.h"
-#include "SkImageWidget.h"
#ifdef SK_BUILD_FOR_WIN
// iostream includes xlocale which generates warning 4530 because we're compiling without
@@ -179,8 +178,8 @@
static SkBitmap createBitmap(const SkPath& path) {
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- SkImageWidget::kImageWidgetWidth,
- SkImageWidget::kImageWidgetHeight);
+ SkDebugCanvas::kVizImageWidth,
+ SkDebugCanvas::kVizImageHeight);
bitmap.allocPixels();
bitmap.eraseColor(SK_ColorWHITE);
SkDevice* device = new SkDevice(bitmap);
@@ -191,11 +190,11 @@
const SkRect& bounds = path.getBounds();
if (bounds.width() > bounds.height()) {
- canvas.scale(SkDoubleToScalar((0.9*SkImageWidget::kImageWidgetWidth)/bounds.width()),
- SkDoubleToScalar((0.9*SkImageWidget::kImageWidgetHeight)/bounds.width()));
+ canvas.scale(SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageWidth)/bounds.width()),
+ SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageHeight)/bounds.width()));
} else {
- canvas.scale(SkDoubleToScalar((0.9*SkImageWidget::kImageWidgetWidth)/bounds.height()),
- SkDoubleToScalar((0.9*SkImageWidget::kImageWidgetHeight)/bounds.height()));
+ canvas.scale(SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageWidth)/bounds.height()),
+ SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageHeight)/bounds.height()));
}
canvas.translate(-bounds.fLeft+2, -bounds.fTop+2);
@@ -211,8 +210,8 @@
static SkBitmap createBitmap(const SkBitmap& input, const SkRect* srcRect) {
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- SkImageWidget::kImageWidgetWidth,
- SkImageWidget::kImageWidgetHeight);
+ SkDebugCanvas::kVizImageWidth,
+ SkDebugCanvas::kVizImageHeight);
bitmap.allocPixels();
bitmap.eraseColor(SK_ColorLTGRAY);
SkDevice* device = new SkDevice(bitmap);
@@ -220,8 +219,8 @@
SkCanvas canvas(device);
device->unref();
- SkScalar xScale = (SkImageWidget::kImageWidgetWidth-2.0) / input.width();
- SkScalar yScale = (SkImageWidget::kImageWidgetHeight-2.0) / input.height();
+ SkScalar xScale = SkIntToScalar(SkDebugCanvas::kVizImageWidth-2) / input.width();
+ SkScalar yScale = SkIntToScalar(SkDebugCanvas::kVizImageHeight-2) / input.height();
if (input.width() > input.height()) {
yScale *= input.height() / (float) input.width();
diff --git a/debugger/SkDebugCanvas.h b/debugger/SkDebugCanvas.h
index aafa802..238c5c0 100644
--- a/debugger/SkDebugCanvas.h
+++ b/debugger/SkDebugCanvas.h
@@ -200,8 +200,10 @@
virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
+ static const int kVizImageHeight = 256;
+ static const int kVizImageWidth = 256;
+
private:
- typedef SkCanvas INHERITED;
SkTDArray<SkDrawCommand*> fCommandVector;
int fHeight;
int fWidth;
@@ -231,6 +233,8 @@
drawing anything else into the canvas.
*/
void applyUserTransform(SkCanvas* canvas);
+
+ typedef SkCanvas INHERITED;
};
#endif
diff --git a/debugger/SkDrawCommand.cpp b/debugger/SkDrawCommand.cpp
index a2459b3..dce0af6 100644
--- a/debugger/SkDrawCommand.cpp
+++ b/debugger/SkDrawCommand.cpp
@@ -230,7 +230,12 @@
this->fBitmap = &bitmap;
this->fSrc = src;
this->fDst = &dst;
- this->fPaint = paint;
+ if (NULL != paint) {
+ this->fPaint = *paint;
+ this->fPaintPtr = &this->fPaint;
+ } else {
+ this->fPaintPtr = NULL;
+ }
this->fDrawType = DRAW_BITMAP_RECT_TO_RECT;
this->fResizedBitmap = resizedBitmap;
@@ -245,7 +250,7 @@
}
void DrawBitmapRect::execute(SkCanvas* canvas) {
- canvas->drawBitmapRectToRect(*this->fBitmap, this->fSrc, *this->fDst, this->fPaint);
+ canvas->drawBitmapRectToRect(*this->fBitmap, this->fSrc, *this->fDst, this->fPaintPtr);
}
const SkBitmap* DrawBitmapRect::getBitmap() const {
diff --git a/debugger/SkDrawCommand.h b/debugger/SkDrawCommand.h
index 98cfbc9..fba5a01 100644
--- a/debugger/SkDrawCommand.h
+++ b/debugger/SkDrawCommand.h
@@ -163,9 +163,20 @@
const SkRect& dst, const SkPaint* paint, SkBitmap& resizedBitmap);
virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
+
+ // The non-const 'paint' method allows modification of this object's
+ // SkPaint. For this reason the ctor and setPaint method make a local copy.
+ // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
+ // (since only an SkPaint* is passed into the ctor).
+ const SkPaint* paint() const { return fPaintPtr; }
+ SkPaint* paint() { return fPaintPtr; }
+
+ void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
+
private:
const SkRect* fSrc;
- const SkPaint* fPaint;
+ SkPaint fPaint;
+ SkPaint* fPaintPtr;
const SkBitmap* fBitmap;
const SkRect* fDst;
SkBitmap fResizedBitmap;
@@ -357,6 +368,9 @@
SkCanvas::SaveFlags flags);
virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
virtual void trackSaveState(int* state) SK_OVERRIDE;
+
+ const SkPaint* paint() const { return fPaint; }
+
private:
const SkRect* fBounds;
const SkPaint* fPaint;