112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com/* 212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com * Copyright 2013 Google Inc. 312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com * 412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com * Use of this source code is governed by a BSD-style license that can be 512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com * found in the LICENSE file. 612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com */ 712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com#include "gm.h" 912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com#include "SkCanvas.h" 1012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com#include "SkBlurImageFilter.h" 1112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 1212fa9bad910413cc489d4c1dc92304182b016e27reed@google.comstatic void make_bm(SkBitmap* bm) { 13eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com bm->allocN32Pixels(100, 100); 1412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com bm->eraseColor(SK_ColorBLUE); 1512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 1612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkCanvas canvas(*bm); 1712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkPaint paint; 1812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com paint.setAntiAlias(true); 1912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com paint.setColor(SK_ColorRED); 2012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas.drawCircle(50, 50, 50, paint); 2112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com} 2212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 2312fa9bad910413cc489d4c1dc92304182b016e27reed@google.comstatic void draw_2_bitmaps(SkCanvas* canvas, const SkBitmap& bm, bool doClip, 2412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com int dx, int dy, SkImageFilter* filter = NULL) { 2512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkAutoCanvasRestore acr(canvas, true); 2612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkPaint paint; 2712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 284d28d9889b033777afc1950474296d37887ef71bskia.committer@gmail.com SkRect clipR = SkRect::MakeXYWH(SkIntToScalar(dx), 29914a2f282318b60da05c243793056ae0664f574erobertphillips@google.com SkIntToScalar(dy), 301c711cabae03025f6732a82b28de0a51cda63a79reed@google.com SkIntToScalar(bm.width()), 311c711cabae03025f6732a82b28de0a51cda63a79reed@google.com SkIntToScalar(bm.height())); 3212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 3312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com paint.setImageFilter(filter); 3412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com clipR.inset(5, 5); 3512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 3612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com if (doClip) { 3712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->save(); 3812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->clipRect(clipR); 3912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 4012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->drawSprite(bm, dx, dy, &paint); 4112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com if (doClip) { 4212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->restore(); 4312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 4412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 451c711cabae03025f6732a82b28de0a51cda63a79reed@google.com canvas->translate(SkIntToScalar(bm.width() + 20), 0); 4612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 4712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com if (doClip) { 4812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->save(); 4912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->clipRect(clipR); 5012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 511c711cabae03025f6732a82b28de0a51cda63a79reed@google.com canvas->drawBitmap(bm, SkIntToScalar(dx), SkIntToScalar(dy), &paint); 5212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com if (doClip) { 5312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com canvas->restore(); 5412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 5512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com} 5612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 5712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com/** 5812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com * Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters) 5912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com */ 6012fa9bad910413cc489d4c1dc92304182b016e27reed@google.comclass SpriteBitmapGM : public skiagm::GM { 6112fa9bad910413cc489d4c1dc92304182b016e27reed@google.compublic: 6212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SpriteBitmapGM() {} 6312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 6412fa9bad910413cc489d4c1dc92304182b016e27reed@google.comprotected: 65a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 66a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 67a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 68a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 6912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com virtual SkString onShortName() { 7012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com return SkString("spritebitmap"); 7112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 7212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 7312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com virtual SkISize onISize() { 7412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com return SkISize::Make(640, 480); 7512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 7612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 7712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com virtual void onDraw(SkCanvas* canvas) { 7812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkBitmap bm; 7912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com make_bm(&bm); 8012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 8112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com int dx = 10; 8212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com int dy = 10; 8312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 8412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com SkScalar sigma = 8; 85cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(sigma, sigma)); 8612fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 8712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com draw_2_bitmaps(canvas, bm, false, dx, dy); 8812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com dy += bm.height() + 20; 8912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com draw_2_bitmaps(canvas, bm, false, dx, dy, filter); 9012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com dy += bm.height() + 20; 9112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com draw_2_bitmaps(canvas, bm, true, dx, dy); 9212fa9bad910413cc489d4c1dc92304182b016e27reed@google.com dy += bm.height() + 20; 9312fa9bad910413cc489d4c1dc92304182b016e27reed@google.com draw_2_bitmaps(canvas, bm, true, dx, dy, filter); 9412fa9bad910413cc489d4c1dc92304182b016e27reed@google.com } 9512fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 9612fa9bad910413cc489d4c1dc92304182b016e27reed@google.comprivate: 9712fa9bad910413cc489d4c1dc92304182b016e27reed@google.com typedef GM INHERITED; 9812fa9bad910413cc489d4c1dc92304182b016e27reed@google.com}; 9912fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 10012fa9bad910413cc489d4c1dc92304182b016e27reed@google.com////////////////////////////////////////////////////////////////////////////// 10112fa9bad910413cc489d4c1dc92304182b016e27reed@google.com 10212fa9bad910413cc489d4c1dc92304182b016e27reed@google.comDEF_GM( return new SpriteBitmapGM; ) 103