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 "SkCanvas.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurImageFilter.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRSXform.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSurface.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void make_bm(SkBitmap* bm) { 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm->allocN32Pixels(100, 100); 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm->eraseColor(SK_ColorBLUE); 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkCanvas canvas(*bm); 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(true); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(SK_ColorRED); 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas.drawCircle(50, 50, 50, paint); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void draw_1_bitmap(SkCanvas* canvas, const SkBitmap& bm, bool doClip, 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int dx, int dy, sk_sp<SkImageFilter> filter) { 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect clipR = SkRect::MakeXYWH(SkIntToScalar(dx), 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(dy), 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(bm.width()), 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(bm.height())); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setImageFilter(std::move(filter)); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot clipR.inset(5, 5); 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(bm.width() + 20), 0); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (doClip) { 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(clipR); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawBitmap(bm, SkIntToScalar(dx), SkIntToScalar(dy), &paint); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (doClip) { 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters) 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SpriteBitmapGM : public skiagm::GM { 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SpriteBitmapGM() {} 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("spritebitmap"); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(640, 480); 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBitmap bm; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot make_bm(&bm); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int dx = 10; 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int dy = 10; 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar sigma = 8; 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(sigma, sigma, nullptr)); 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot draw_1_bitmap(canvas, bm, false, dx, dy, nullptr); 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dy += bm.height() + 20; 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot draw_1_bitmap(canvas, bm, false, dx, dy, filter); 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dy += bm.height() + 20; 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot draw_1_bitmap(canvas, bm, true, dx, dy, nullptr); 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dy += bm.height() + 20; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot draw_1_bitmap(canvas, bm, true, dx, dy, filter); 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GM INHERITED; 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new SpriteBitmapGM; ) 90