1e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org/* 2e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org * Copyright 2013 Google Inc. 3e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org * 4e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 5e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org * found in the LICENSE file. 6e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org */ 7e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 8e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org#include "gm.h" 9e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 10e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org#include "SkBitmapSource.h" 11e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 12e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org// This GM exercises the SkBitmapSource ImageFilter class. 13e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 14e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.orgclass BitmapSourceGM : public skiagm::GM { 15e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.orgpublic: 16e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org BitmapSourceGM() { 17e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 18e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 19e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.orgprotected: 20e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org virtual SkString onShortName() SK_OVERRIDE { 21e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org return SkString("bitmapsource"); 22e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 23e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 24e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org void makeBitmap() { 25eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com fBitmap.allocN32Pixels(100, 100); 26c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkCanvas canvas(fBitmap); 27e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas.clear(0x00000000); 28e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkPaint paint; 29e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org paint.setAntiAlias(true); 305fb6bd4b7e8d00b7f2543ca10ec9022b32632f29caryclark sk_tool_utils::set_portable_typeface(&paint); 31e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org paint.setColor(0xFFFFFFFF); 32e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org paint.setTextSize(SkIntToScalar(96)); 33e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org const char* str = "e"; 34e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas.drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint); 35e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 36e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 37e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(500, 150); } 38e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 39e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org virtual void onOnceBeforeDraw() SK_OVERRIDE { 40e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org this->makeBitmap(); 41e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 42e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 43e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org static void fillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) { 44e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkPaint paint; 45e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org paint.setImageFilter(filter); 46e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->save(); 47e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->clipRect(clipRect); 48e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->drawPaint(paint); 49e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->restore(); 50e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 51e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 52e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 53e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->clear(0x00000000); 54e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org { 55e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30); 56e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkRect dstRect = SkRect::MakeXYWH(0, 10, 60, 60); 57e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkRect clipRect = SkRect::MakeXYWH(0, 0, 100, 100); 58e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkRect bounds; 59e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org fBitmap.getBounds(&bounds); 60cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkAutoTUnref<SkImageFilter> bitmapSource(SkBitmapSource::Create(fBitmap)); 61cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkAutoTUnref<SkImageFilter> bitmapSourceSrcRect(SkBitmapSource::Create(fBitmap, srcRect, srcRect)); 62cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkAutoTUnref<SkImageFilter> bitmapSourceSrcRectDstRect(SkBitmapSource::Create(fBitmap, srcRect, dstRect)); 63cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkAutoTUnref<SkImageFilter> bitmapSourceDstRectOnly(SkBitmapSource::Create(fBitmap, bounds, dstRect)); 64e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 65e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org // Draw an unscaled bitmap. 66e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org fillRectFiltered(canvas, clipRect, bitmapSource); 67e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->translate(SkIntToScalar(100), 0); 68e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 69e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org // Draw an unscaled subset of the source bitmap (srcRect -> srcRect). 70e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org fillRectFiltered(canvas, clipRect, bitmapSourceSrcRect); 71e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->translate(SkIntToScalar(100), 0); 72e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 73e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org // Draw a subset of the bitmap scaled to a destination rect (srcRect -> dstRect). 74e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org fillRectFiltered(canvas, clipRect, bitmapSourceSrcRectDstRect); 75e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->translate(SkIntToScalar(100), 0); 76e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 77e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org // Draw the entire bitmap scaled to a destination rect (bounds -> dstRect). 78e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org fillRectFiltered(canvas, clipRect, bitmapSourceDstRectOnly); 79e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org canvas->translate(SkIntToScalar(100), 0); 80e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 81e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org } 82e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 83e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.orgprivate: 84e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org SkBitmap fBitmap; 85e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org typedef GM INHERITED; 86e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org}; 87e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 88e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org/////////////////////////////////////////////////////////////////////////////// 89e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.org 90e93e1dbf0eced1e1b9aeed7c0c170961e2d61e32senorblanco@chromium.orgDEF_GM( return new BitmapSourceGM; ) 91