From 5234075b1c6bcada4ad17ed5a83bfcb53df66b7f Mon Sep 17 00:00:00 2001 From: Justin Novosad Date: Tue, 2 Dec 2014 14:50:56 -0500 Subject: Adding a PictureResolution option to SkPictureImageFilter This change adds an option to SkPictureImageFilter to make it rasterize SkPicture in a resolution that matches the local coordinate space (equivalent to the record-time device space). BUG=skia:3176 R=reed@google.com, senorblanco@chromium.org Review URL: https://codereview.chromium.org/753073010 --- gm/pictureimagefilter.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'gm') diff --git a/gm/pictureimagefilter.cpp b/gm/pictureimagefilter.cpp index 4e169f77da..712e059a6d 100644 --- a/gm/pictureimagefilter.cpp +++ b/gm/pictureimagefilter.cpp @@ -36,7 +36,7 @@ protected: fPicture.reset(recorder.endRecording()); } - virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(500, 150); } + virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(400, 300); } virtual void onOnceBeforeDraw() SK_OVERRIDE { this->makePicture(); @@ -57,10 +57,16 @@ protected: SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30); SkRect emptyRect = SkRect::MakeXYWH(20, 20, 0, 0); SkRect bounds = SkRect::MakeXYWH(0, 0, 100, 100); - SkAutoTUnref pictureSource(SkPictureImageFilter::Create(fPicture)); - SkAutoTUnref pictureSourceSrcRect(SkPictureImageFilter::Create(fPicture, srcRect)); - SkAutoTUnref pictureSourceEmptyRect(SkPictureImageFilter::Create(fPicture, emptyRect)); - + SkAutoTUnref pictureSource( + SkPictureImageFilter::Create(fPicture)); + SkAutoTUnref pictureSourceSrcRect( + SkPictureImageFilter::Create(fPicture, srcRect)); + SkAutoTUnref pictureSourceEmptyRect( + SkPictureImageFilter::Create(fPicture, emptyRect)); + SkAutoTUnref pictureSourceResampled( + SkPictureImageFilter::CreateForLocalSpace(fPicture, fPicture->cullRect())); + + canvas->save(); // Draw the picture unscaled. fillRectFiltered(canvas, bounds, pictureSource); canvas->translate(SkIntToScalar(100), 0); @@ -72,6 +78,18 @@ protected: // Draw the picture to an empty rect (should draw nothing). fillRectFiltered(canvas, bounds, pictureSourceEmptyRect); canvas->translate(SkIntToScalar(100), 0); + + canvas->restore(); + + // Draw the picture scaled + canvas->translate(0, SkIntToScalar(100)); + canvas->scale(200 / srcRect.width(), 200 / srcRect.height()); + canvas->translate(-srcRect.fLeft, -srcRect.fTop); + fillRectFiltered(canvas, srcRect, pictureSource); + + // Draw the picture scaled, but rasterized at original resolution + canvas->translate(srcRect.width(), 0); + fillRectFiltered(canvas, srcRect, pictureSourceResampled); } } -- cgit v1.2.3