140eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org/* 240eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org * Copyright 2013 Google Inc. 340eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org * 440eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org * found in the LICENSE file. 640eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org */ 740eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 840eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org#include "gm.h" 940eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org#include "SkAlphaThresholdFilter.h" 1040eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org#include "SkRandom.h" 111ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco#include "SkSurface.h" 1240eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 1340eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org#define WIDTH 500 1440eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org#define HEIGHT 500 1540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 161ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanconamespace { 171ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 181ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancovoid draw_rects(SkCanvas* canvas) { 191ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkPaint rectPaint; 201ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rectPaint.setColor(0xFF0000FF); 211ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->drawRect(SkRect::MakeXYWH(0, 0, WIDTH / 2, HEIGHT / 2), rectPaint); 221ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rectPaint.setColor(0xBFFF0000); 231ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, 0, WIDTH / 2, HEIGHT / 2), rectPaint); 241ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rectPaint.setColor(0x3F00FF00); 251ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->drawRect(SkRect::MakeXYWH(0, HEIGHT / 2, WIDTH / 2, HEIGHT / 2), rectPaint); 261ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rectPaint.setColor(0x00000000); 271ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->drawRect(SkRect::MakeXYWH(WIDTH / 2, HEIGHT / 2, WIDTH / 2, HEIGHT / 2), rectPaint); 281ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco} 291ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 301ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoSkPaint create_filter_paint() { 311ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkIRect rects[2]; 321ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rects[0] = SkIRect::MakeXYWH(0, 150, WIDTH, HEIGHT - 300); 331ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco rects[1] = SkIRect::MakeXYWH(150, 0, WIDTH - 300, HEIGHT); 341ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkRegion region; 351ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco region.setRects(rects, 2); 361ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 371ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkPaint paint; 381ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco paint.setImageFilter(SkAlphaThresholdFilter::Create(region, 0.2f, 0.7f))->unref(); 391ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco return paint; 401ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco} 411ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 421ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco}; 431ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 4440eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.orgnamespace skiagm { 4540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 4640eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.orgclass ImageAlphaThresholdGM : public GM { 4740eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.orgpublic: 4840eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org ImageAlphaThresholdGM() { 4940eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org this->setBGColor(0xFFFFFFFF); 5040eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org } 5140eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 5240eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.orgprotected: 5340eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 5436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 5540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org return SkString("imagealphathreshold"); 5640eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org } 5740eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 5836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 59f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(WIDTH, HEIGHT); 6040eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org } 6140eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 6236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 6340eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org SkMatrix matrix; 6440eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org matrix.reset(); 6540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org matrix.setTranslate(WIDTH * .1f, HEIGHT * .1f); 669109e188c77abfd2832767530d33fdec35290a84commit-bot@chromium.org matrix.postScale(.8f, .8f); 6740eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 6840eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org canvas->concat(matrix); 6940eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 701ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkPaint paint = create_filter_paint(); 7196fcdcc219d2a0d3579719b84b28bede76efba64halcanary canvas->saveLayer(nullptr, &paint); 721ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco draw_rects(canvas); 7340eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 7440eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org canvas->restore(); 7540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org } 7640eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 7740eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.orgprivate: 7840eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org typedef GM INHERITED; 7940eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org}; 8040eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 811ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoclass ImageAlphaThresholdSurfaceGM : public GM { 821ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancopublic: 831ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco ImageAlphaThresholdSurfaceGM() { 841ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco this->setBGColor(0xFFFFFFFF); 851ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco } 861ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 871ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoprotected: 881ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkString onShortName() override { 891ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco return SkString("imagealphathreshold_surface"); 901ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco } 911ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 921ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkISize onISize() override { 931ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco return SkISize::Make(WIDTH, HEIGHT); 941ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco } 951ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 961ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco void onDraw(SkCanvas* canvas) override { 971ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkImageInfo info = SkImageInfo::MakeN32(WIDTH, HEIGHT, kOpaque_SkAlphaType); 981ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkAutoTUnref<SkSurface> surface(canvas->newSurface(info)); 991ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco if (nullptr == surface) { 1001ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco surface.reset(SkSurface::NewRaster(info)); 1011ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco } 1021ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco surface->getCanvas()->clear(SK_ColorWHITE); 1031ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco draw_rects(surface->getCanvas()); 1041ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 1051ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); 1061ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco SkPaint paint = create_filter_paint(); 1071ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->clipRect(SkRect::MakeLTRB(100, 100, WIDTH - 100, HEIGHT - 100)); 1081ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco canvas->drawImage(image, 0, 0, &paint); 1091ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco } 1101ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 1111ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoprivate: 1121ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco typedef GM INHERITED; 1131ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco}; 1141ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblanco 11540eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org////////////////////////////////////////////////////////////////////////////// 11640eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 1171ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoDEF_GM(return new ImageAlphaThresholdGM();) 1181ea67a31c527f4d5d77c59a3ea3a12e39308e8c5senorblancoDEF_GM(return new ImageAlphaThresholdSurfaceGM();) 11940eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org 12040eb3c100095c8573ddfdc553794b3182d7b18d1commit-bot@chromium.org} 121