1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2013 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "sk_tool_utils.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkImage.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkImageSource.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// This GM exercises the SkImageSource ImageFilter class. 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void fill_rect_filtered(SkCanvas* canvas, 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect& clipRect, 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> filter) { 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setImageFilter(std::move(filter)); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(clipRect); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPaint(paint); 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ImageSourceGM : public skiagm::GM { 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ImageSourceGM() { } 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("imagesource"); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { return SkISize::Make(500, 150); } 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onOnceBeforeDraw() override { 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBitmap bm = sk_tool_utils::create_string_bitmap(100, 100, 0xFFFFFFFF, 20, 70, 96, "e"); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fImage = SkImage::MakeFromBitmap(bm); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clear(SK_ColorBLACK); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect dstRect = SkRect::MakeXYWH(0, 10, 60, 60); 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect clipRect = SkRect::MakeXYWH(0, 0, 100, 100); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect bounds = SkRect::MakeIWH(fImage->width(), fImage->height()); 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Draw an unscaled bitmap. 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> imageSource(SkImageSource::Make(fImage)); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fill_rect_filtered(canvas, clipRect, std::move(imageSource)); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(100), 0); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Draw an unscaled subset of the source bitmap (srcRect -> srcRect). 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> imageSourceSrcRect( 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkImageSource::Make(fImage, srcRect, srcRect, kHigh_SkFilterQuality)); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fill_rect_filtered(canvas, clipRect, std::move(imageSourceSrcRect)); 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(100), 0); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Draw a subset of the bitmap scaled to a destination rect (srcRect -> dstRect). 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> imageSourceSrcRectDstRect( 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkImageSource::Make(fImage, srcRect, dstRect, kHigh_SkFilterQuality)); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fill_rect_filtered(canvas, clipRect, std::move(imageSourceSrcRectDstRect)); 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(100), 0); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Draw the entire bitmap scaled to a destination rect (bounds -> dstRect). 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> imageSourceDstRectOnly( 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkImageSource::Make(fImage, bounds, dstRect, kHigh_SkFilterQuality)); 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fill_rect_filtered(canvas, clipRect, std::move(imageSourceDstRectOnly)); 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(100), 0); 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImage> fImage; 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GM INHERITED; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/////////////////////////////////////////////////////////////////////////////// 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new ImageSourceGM; ) 88