105054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org/* 205054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org * Copyright 2012 Google Inc. 305054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org * 405054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org * found in the LICENSE file. 605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org */ 705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 805054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 1005054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org#include "SkMorphologyImageFilter.h" 1105054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 128fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org#define WIDTH 700 138fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org#define HEIGHT 560 1405054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 1505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.orgnamespace skiagm { 1605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 1705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.orgclass MorphologyGM : public GM { 1805054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.orgpublic: 1905054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org MorphologyGM() { 2005054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org this->setBGColor(0xFF000000); 2105054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 22ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2305054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.orgprotected: 24f299e7105435829c47e94f4cf6e408cad675bc77robertphillips SkString onShortName() override { 2505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org return SkString("morphology"); 2605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 2705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 28f299e7105435829c47e94f4cf6e408cad675bc77robertphillips void onOnceBeforeDraw() override { 29eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com fBitmap.allocN32Pixels(135, 135); 30c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkCanvas canvas(fBitmap); 3105054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org canvas.clear(0x0); 3205054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org SkPaint paint; 3305054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org paint.setAntiAlias(true); 341818acb6a4b11cd9a1d44ce5dde77452502a9796caryclark sk_tool_utils::set_portable_typeface(&paint); 3505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org const char* str1 = "ABC"; 3605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org const char* str2 = "XYZ"; 3705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org paint.setColor(0xFFFFFFFF); 3805054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org paint.setTextSize(64); 392a475eae622adc1e8fa29206be1eaf862c23548eCary Clark canvas.drawString(str1, 10, 55, paint); 402a475eae622adc1e8fa29206be1eaf862c23548eCary Clark canvas.drawString(str2, 10, 110, paint); 4105054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 4205054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 43f299e7105435829c47e94f4cf6e408cad675bc77robertphillips SkISize onISize() override { 44f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(WIDTH, HEIGHT); 4505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 468fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org 478fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x, int y) { 488fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org canvas->save(); 498fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 508fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org canvas->clipRect(SkRect::MakeWH( 518fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height()))); 528fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org canvas->drawBitmap(fBitmap, 0, 0, &paint); 538fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org canvas->restore(); 548fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org } 558fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org 56f299e7105435829c47e94f4cf6e408cad675bc77robertphillips void onDraw(SkCanvas* canvas) override { 5705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org struct { 5856dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org int fWidth, fHeight; 5905054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org int fRadiusX, fRadiusY; 6005054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } samples[] = { 6156dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org { 140, 140, 0, 0 }, 6256dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org { 140, 140, 0, 2 }, 6356dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org { 140, 140, 2, 0 }, 6456dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org { 140, 140, 2, 2 }, 6556dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org { 24, 24, 25, 25 }, 6605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org }; 6705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org SkPaint paint; 68b295fb6ff3222453912dfcb7a1ea5184d40014b5senorblanco@chromium.org SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(25, 20, 100, 80)); 698fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org 708fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org for (unsigned j = 0; j < 4; ++j) { 7156dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org for (unsigned i = 0; i < SK_ARRAY_COUNT(samples); ++i) { 7296fcdcc219d2a0d3579719b84b28bede76efba64halcanary const SkImageFilter::CropRect* cr = j & 0x02 ? &cropRect : nullptr; 738fcad9879173d627ee8638c52709d924034e34cesenorblanco@chromium.org if (j & 0x01) { 74fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips paint.setImageFilter(SkErodeImageFilter::Make(samples[i].fRadiusX, 75fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips samples[i].fRadiusY, 76fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips nullptr, 77fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips cr)); 7856dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org } else { 79fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips paint.setImageFilter(SkDilateImageFilter::Make(samples[i].fRadiusX, 80fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips samples[i].fRadiusY, 81fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips nullptr, 82fc11b0afe0ca922a42767d4a656ed640008da1bbrobertphillips cr)); 8356dd630c41d662bcf2a3f08100f2c6accda05ba9senorblanco@chromium.org } 84f299e7105435829c47e94f4cf6e408cad675bc77robertphillips this->drawClippedBitmap(canvas, paint, i * 140, j * 140); 8505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 8605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 8705054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org } 88ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 8905054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.orgprivate: 9005054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org SkBitmap fBitmap; 91f299e7105435829c47e94f4cf6e408cad675bc77robertphillips 92f299e7105435829c47e94f4cf6e408cad675bc77robertphillips typedef GM INHERITED; 9305054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org}; 9405054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 9505054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org////////////////////////////////////////////////////////////////////////////// 9605054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 97f299e7105435829c47e94f4cf6e408cad675bc77robertphillipsDEF_GM(return new MorphologyGM;) 9805054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org 9905054f1a78a697b507580d0025db6c90423e033fsenorblanco@chromium.org} 100