1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2013 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 12cb93a386Sopenharmony_ci#include "include/core/SkImageFilter.h" 13cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 14cb93a386Sopenharmony_ci#include "include/core/SkRect.h" 15cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 16cb93a386Sopenharmony_ci#include "include/core/SkScalar.h" 17cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 18cb93a386Sopenharmony_ci#include "include/core/SkString.h" 19cb93a386Sopenharmony_ci#include "include/effects/SkImageFilters.h" 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ci#include <utility> 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_cistatic void make_bm(SkBitmap* bm) { 24cb93a386Sopenharmony_ci bm->allocN32Pixels(100, 100); 25cb93a386Sopenharmony_ci bm->eraseColor(SK_ColorBLUE); 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci SkCanvas canvas(*bm); 28cb93a386Sopenharmony_ci SkPaint paint; 29cb93a386Sopenharmony_ci paint.setAntiAlias(true); 30cb93a386Sopenharmony_ci paint.setColor(SK_ColorRED); 31cb93a386Sopenharmony_ci canvas.drawCircle(50, 50, 50, paint); 32cb93a386Sopenharmony_ci} 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_cistatic void draw_1_bitmap(SkCanvas* canvas, const SkBitmap& bm, bool doClip, 35cb93a386Sopenharmony_ci int dx, int dy, sk_sp<SkImageFilter> filter) { 36cb93a386Sopenharmony_ci SkAutoCanvasRestore acr(canvas, true); 37cb93a386Sopenharmony_ci SkPaint paint; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci SkRect clipR = SkRect::MakeXYWH(SkIntToScalar(dx), 40cb93a386Sopenharmony_ci SkIntToScalar(dy), 41cb93a386Sopenharmony_ci SkIntToScalar(bm.width()), 42cb93a386Sopenharmony_ci SkIntToScalar(bm.height())); 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci paint.setImageFilter(std::move(filter)); 45cb93a386Sopenharmony_ci clipR.inset(5, 5); 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci canvas->translate(SkIntToScalar(bm.width() + 20), 0); 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci if (doClip) { 50cb93a386Sopenharmony_ci canvas->save(); 51cb93a386Sopenharmony_ci canvas->clipRect(clipR); 52cb93a386Sopenharmony_ci } 53cb93a386Sopenharmony_ci canvas->drawImage(bm.asImage(), SkIntToScalar(dx), SkIntToScalar(dy), 54cb93a386Sopenharmony_ci SkSamplingOptions(), &paint); 55cb93a386Sopenharmony_ci if (doClip) { 56cb93a386Sopenharmony_ci canvas->restore(); 57cb93a386Sopenharmony_ci } 58cb93a386Sopenharmony_ci} 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci/** 61cb93a386Sopenharmony_ci * Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters) 62cb93a386Sopenharmony_ci */ 63cb93a386Sopenharmony_ciclass SpriteBitmapGM : public skiagm::GM { 64cb93a386Sopenharmony_cipublic: 65cb93a386Sopenharmony_ci SpriteBitmapGM() {} 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ciprotected: 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ci SkString onShortName() override { 70cb93a386Sopenharmony_ci return SkString("spritebitmap"); 71cb93a386Sopenharmony_ci } 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci SkISize onISize() override { 74cb93a386Sopenharmony_ci return SkISize::Make(640, 480); 75cb93a386Sopenharmony_ci } 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_ci void onDraw(SkCanvas* canvas) override { 78cb93a386Sopenharmony_ci SkBitmap bm; 79cb93a386Sopenharmony_ci make_bm(&bm); 80cb93a386Sopenharmony_ci 81cb93a386Sopenharmony_ci int dx = 10; 82cb93a386Sopenharmony_ci int dy = 10; 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ci SkScalar sigma = 8; 85cb93a386Sopenharmony_ci sk_sp<SkImageFilter> filter(SkImageFilters::Blur(sigma, sigma, nullptr)); 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci draw_1_bitmap(canvas, bm, false, dx, dy, nullptr); 88cb93a386Sopenharmony_ci dy += bm.height() + 20; 89cb93a386Sopenharmony_ci draw_1_bitmap(canvas, bm, false, dx, dy, filter); 90cb93a386Sopenharmony_ci dy += bm.height() + 20; 91cb93a386Sopenharmony_ci draw_1_bitmap(canvas, bm, true, dx, dy, nullptr); 92cb93a386Sopenharmony_ci dy += bm.height() + 20; 93cb93a386Sopenharmony_ci draw_1_bitmap(canvas, bm, true, dx, dy, filter); 94cb93a386Sopenharmony_ci } 95cb93a386Sopenharmony_ci 96cb93a386Sopenharmony_ciprivate: 97cb93a386Sopenharmony_ci using INHERITED = GM; 98cb93a386Sopenharmony_ci}; 99cb93a386Sopenharmony_ciDEF_GM( return new SpriteBitmapGM; ) 100