1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 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 "SkImageShader.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic const sk_sp<SkImage> make_image(int firstBlackRow, int lastBlackRow) { 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kWidth = 25; 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kHeight = 27; 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBitmap bm; 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm.allocN32Pixels(kWidth, kHeight); 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm.eraseColor(SK_ColorWHITE); 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = firstBlackRow; y < lastBlackRow; ++y) { 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int x = 0; x < kWidth; ++x) { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *bm.getAddr32(x, y) = SkPackARGB32(0xFF, 0x0, 0x0, 0x0); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm.setAlphaType(SkAlphaType::kOpaque_SkAlphaType); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bm.setImmutable(); 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkImage::MakeFromBitmap(bm); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// GM to reproduce crbug.com/673261. 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass FilterBugGM : public skiagm::GM { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot FilterBugGM() { this->setBGColor(SK_ColorRED); } 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { return SkString("filterbug"); } 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { return SkISize::Make(150, 150); } 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onOnceBeforeDraw() override { 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // The top texture has 5 black rows on top and then 22 white rows on the bottom 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fTop = make_image(0, 5); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // The bottom texture has 5 black rows on the bottom and then 22 white rows on the top 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBot = make_image(22, 27); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const SkFilterQuality kFilterQuality = SkFilterQuality::kHigh_SkFilterQuality; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const bool kDoAA = true; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r1 = SkRect::MakeXYWH(50.0f, 0.0f, 50.0f, 50.0f); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p1; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p1.setAntiAlias(kDoAA); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p1.setFilterQuality(kFilterQuality); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMatrix localMat; 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot localMat.setScaleTranslate(2.0f, 2.0f, 50.0f, 0.0f); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p1.setShader(SkImageShader::Make(fTop, 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot &localMat)); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(r1, p1); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r2 = SkRect::MakeXYWH(50.0f, 50.0f, 50.0f, 36.0f); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p2; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p2.setColor(SK_ColorWHITE); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p2.setAntiAlias(kDoAA); 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p2.setFilterQuality(kFilterQuality); 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(r2, p2); 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r3 = SkRect::MakeXYWH(50.0f, 86.0f, 50.0f, 50.0f); 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p3; 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p3.setAntiAlias(kDoAA); 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p3.setFilterQuality(kFilterQuality); 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMatrix localMat; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot localMat.setScaleTranslate(2.0f, 2.0f, 50.0f, 86.0f); 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p3.setShader(SkImageShader::Make(fBot, 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot &localMat)); 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(r3, p3); 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImage> fTop; 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkImage> fBot; 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM(return new FilterBugGM;) 102