diff options
-rw-r--r-- | gm/blend.cpp | 18 | ||||
-rw-r--r-- | gm/gm.h | 11 | ||||
-rw-r--r-- | gm/gmmain.cpp | 2 | ||||
-rw-r--r-- | gm/imagefiltersbase.cpp | 8 | ||||
-rw-r--r-- | gm/lighting.cpp | 20 | ||||
-rw-r--r-- | gm/matrixconvolution.cpp | 6 |
6 files changed, 48 insertions, 17 deletions
diff --git a/gm/blend.cpp b/gm/blend.cpp index 3ba92a7981..452eb4945c 100644 --- a/gm/blend.cpp +++ b/gm/blend.cpp @@ -63,6 +63,14 @@ protected: return make_isize(500, 100); } + void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x) { + canvas->save(); + canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), 0, + SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height()))); + canvas->drawBitmap(fBitmap, SkIntToScalar(x), 0, &paint); + canvas->restore(); + } + virtual void onDraw(SkCanvas* canvas) { if (!fInitialized) { make_bitmap(); @@ -73,15 +81,15 @@ protected: SkPaint paint; SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fCheckerboard))); paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kNormal_Mode, background)))->unref(); - canvas->drawSprite(fBitmap, 0, 0, &paint); + drawClippedBitmap(canvas, paint, 0); paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kMultiply_Mode, background)))->unref(); - canvas->drawSprite(fBitmap, 100, 0, &paint); + drawClippedBitmap(canvas, paint, 100); paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kScreen_Mode, background)))->unref(); - canvas->drawSprite(fBitmap, 200, 0, &paint); + drawClippedBitmap(canvas, paint, 200); paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kDarken_Mode, background)))->unref(); - canvas->drawSprite(fBitmap, 300, 0, &paint); + drawClippedBitmap(canvas, paint, 300); paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kLighten_Mode, background)))->unref(); - canvas->drawSprite(fBitmap, 400, 0, &paint); + drawClippedBitmap(canvas, paint, 400); } private: @@ -34,11 +34,12 @@ namespace skiagm { virtual ~GM(); enum Flags { - kSkipPDF_Flag = 1 << 0, - kSkipPicture_Flag = 1 << 1, - kSkipPipe_Flag = 1 << 2, - kSkipTiled_Flag = 1 << 3, - kSkip565_Flag = 1 << 4, + kSkipPDF_Flag = 1 << 0, + kSkipPicture_Flag = 1 << 1, + kSkipPipe_Flag = 1 << 2, + kSkipTiled_Flag = 1 << 3, + kSkip565_Flag = 1 << 4, + kSkipScaledReplay_Flag = 1 << 5, }; void draw(SkCanvas*); diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp index 17563893d9..964bafa9ad 100644 --- a/gm/gmmain.cpp +++ b/gm/gmmain.cpp @@ -1402,6 +1402,8 @@ int tool_main(int argc, char** argv) { if (!(gmFlags & GM::kSkipPicture_Flag) && doTileGrid) { for(int scaleIndex = 0; scaleIndex < tileGridReplayScales.count(); ++scaleIndex) { SkScalar replayScale = tileGridReplayScales[scaleIndex]; + if ((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1) + continue; // We record with the reciprocal scale to obtain a replay // result that can be validated against comparisonBitmap. SkScalar recordScale = SkScalarInvert(replayScale); diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp index c7f043e724..e33c0eb272 100644 --- a/gm/imagefiltersbase.cpp +++ b/gm/imagefiltersbase.cpp @@ -165,6 +165,14 @@ protected: canvas->drawRect(r, paint); } + virtual uint32_t onGetFlags() const { + // Because of the use of drawSprite, this test is excluded + // from scaled replay tests because drawSprite ignores the + // reciprocal scale that is applied at record time, which is + // the intended behavior of drawSprite. + return kSkipScaledReplay_Flag; + } + virtual void onDraw(SkCanvas* canvas) { void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = { draw_paint, diff --git a/gm/lighting.cpp b/gm/lighting.cpp index 9db34fde3d..de5e3309c2 100644 --- a/gm/lighting.cpp +++ b/gm/lighting.cpp @@ -42,6 +42,14 @@ protected: return make_isize(WIDTH, HEIGHT); } + void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x, int y) { + canvas->save(); + canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), + SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height()))); + canvas->drawBitmap(fBitmap, SkIntToScalar(x), SkIntToScalar(y), &paint); + canvas->restore(); + } + virtual void onDraw(SkCanvas* canvas) { if (!fInitialized) { make_bitmap(); @@ -76,17 +84,17 @@ protected: SkColor white(0xFFFFFFFF); SkPaint paint; paint.setImageFilter(SkLightingImageFilter::CreatePointLitDiffuse(pointLocation, white, surfaceScale, kd))->unref(); - canvas->drawSprite(fBitmap, 0, 0, &paint); + drawClippedBitmap(canvas, paint, 0, 0); paint.setImageFilter(SkLightingImageFilter::CreateDistantLitDiffuse(distantDirection, white, surfaceScale, kd))->unref(); - canvas->drawSprite(fBitmap, 110, 0, &paint); + drawClippedBitmap(canvas, paint, 110, 0); paint.setImageFilter(SkLightingImageFilter::CreateSpotLitDiffuse(spotLocation, spotTarget, spotExponent, cutoffAngle, white, surfaceScale, kd))->unref(); - canvas->drawSprite(fBitmap, 220, 0, &paint); + drawClippedBitmap(canvas, paint, 220, 0); paint.setImageFilter(SkLightingImageFilter::CreatePointLitSpecular(pointLocation, white, surfaceScale, ks, shininess))->unref(); - canvas->drawSprite(fBitmap, 0, 110, &paint); + drawClippedBitmap(canvas, paint, 0, 110); paint.setImageFilter(SkLightingImageFilter::CreateDistantLitSpecular(distantDirection, white, surfaceScale, ks, shininess))->unref(); - canvas->drawSprite(fBitmap, 110, 110, &paint); + drawClippedBitmap(canvas, paint, 110, 110); paint.setImageFilter(SkLightingImageFilter::CreateSpotLitSpecular(spotLocation, spotTarget, spotExponent, cutoffAngle, white, surfaceScale, ks, shininess))->unref(); - canvas->drawSprite(fBitmap, 220, 110, &paint); + drawClippedBitmap(canvas, paint, 220, 110); } private: diff --git a/gm/matrixconvolution.cpp b/gm/matrixconvolution.cpp index 6bb7d99cba..59bd38008b 100644 --- a/gm/matrixconvolution.cpp +++ b/gm/matrixconvolution.cpp @@ -58,7 +58,11 @@ protected: SkPaint paint; SkAutoTUnref<SkImageFilter> filter(SkNEW_ARGS(SkMatrixConvolutionImageFilter, (kernelSize, kernel, gain, bias, target, tileMode, convolveAlpha))); paint.setImageFilter(filter); - canvas->drawSprite(fBitmap, x, y, &paint); + canvas->save(); + canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), + SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height()))); + canvas->drawBitmap(fBitmap, SkIntToScalar(x), SkIntToScalar(y), &paint); + canvas->restore(); } virtual void onDraw(SkCanvas* canvas) { |