aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/blend.cpp18
-rw-r--r--gm/gm.h11
-rw-r--r--gm/gmmain.cpp2
-rw-r--r--gm/imagefiltersbase.cpp8
-rw-r--r--gm/lighting.cpp20
-rw-r--r--gm/matrixconvolution.cpp6
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:
diff --git a/gm/gm.h b/gm/gm.h
index 9460ec01ab..0af928593f 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -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) {