19f23a27ed9961fd4575864e590eda328452895e7reed/* 29f23a27ed9961fd4575864e590eda328452895e7reed * Copyright 2014 Google Inc. 39f23a27ed9961fd4575864e590eda328452895e7reed * 49f23a27ed9961fd4575864e590eda328452895e7reed * Use of this source code is governed by a BSD-style license that can be 59f23a27ed9961fd4575864e590eda328452895e7reed * found in the LICENSE file. 69f23a27ed9961fd4575864e590eda328452895e7reed */ 79f23a27ed9961fd4575864e590eda328452895e7reed 89f23a27ed9961fd4575864e590eda328452895e7reed#include "gm.h" 99f23a27ed9961fd4575864e590eda328452895e7reed#include "SkBlurMaskFilter.h" 109f23a27ed9961fd4575864e590eda328452895e7reed#include "SkCanvas.h" 119f23a27ed9961fd4575864e590eda328452895e7reed#include "SkColorFilter.h" 129f23a27ed9961fd4575864e590eda328452895e7reed 139f23a27ed9961fd4575864e590eda328452895e7reed#include "SkColorFilter.h" 149f23a27ed9961fd4575864e590eda328452895e7reedstatic SkBitmap make_bm() { 159f23a27ed9961fd4575864e590eda328452895e7reed SkBitmap bm; 169f23a27ed9961fd4575864e590eda328452895e7reed bm.allocN32Pixels(100, 100); 179f23a27ed9961fd4575864e590eda328452895e7reed 189f23a27ed9961fd4575864e590eda328452895e7reed SkCanvas canvas(bm); 199f23a27ed9961fd4575864e590eda328452895e7reed canvas.clear(0); 209f23a27ed9961fd4575864e590eda328452895e7reed SkPaint paint; 219f23a27ed9961fd4575864e590eda328452895e7reed paint.setAntiAlias(true); 229f23a27ed9961fd4575864e590eda328452895e7reed canvas.drawCircle(50, 50, 50, paint); 239f23a27ed9961fd4575864e590eda328452895e7reed return bm; 249f23a27ed9961fd4575864e590eda328452895e7reed} 259f23a27ed9961fd4575864e590eda328452895e7reed 269f23a27ed9961fd4575864e590eda328452895e7reedclass EmbossGM : public skiagm::GM { 279f23a27ed9961fd4575864e590eda328452895e7reedpublic: 289f23a27ed9961fd4575864e590eda328452895e7reed EmbossGM() { 299f23a27ed9961fd4575864e590eda328452895e7reed } 309f23a27ed9961fd4575864e590eda328452895e7reed 319f23a27ed9961fd4575864e590eda328452895e7reedprotected: 329f23a27ed9961fd4575864e590eda328452895e7reed virtual SkString onShortName() SK_OVERRIDE { 339f23a27ed9961fd4575864e590eda328452895e7reed return SkString("emboss"); 349f23a27ed9961fd4575864e590eda328452895e7reed } 359f23a27ed9961fd4575864e590eda328452895e7reed 369f23a27ed9961fd4575864e590eda328452895e7reed virtual SkISize onISize() SK_OVERRIDE { 379f23a27ed9961fd4575864e590eda328452895e7reed return SkISize::Make(600, 120); 389f23a27ed9961fd4575864e590eda328452895e7reed } 399f23a27ed9961fd4575864e590eda328452895e7reed 409f23a27ed9961fd4575864e590eda328452895e7reed virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 419f23a27ed9961fd4575864e590eda328452895e7reed SkPaint paint; 429f23a27ed9961fd4575864e590eda328452895e7reed SkBitmap bm = make_bm(); 439f23a27ed9961fd4575864e590eda328452895e7reed canvas->drawBitmap(bm, 10, 10, &paint); 449f23a27ed9961fd4575864e590eda328452895e7reed 459f23a27ed9961fd4575864e590eda328452895e7reed const SkScalar dir[] = { 1, 1, 1 }; 469f23a27ed9961fd4575864e590eda328452895e7reed paint.setMaskFilter(SkBlurMaskFilter::CreateEmboss(3, dir, 0.3f, 0.1f))->unref(); 479f23a27ed9961fd4575864e590eda328452895e7reed canvas->translate(bm.width() + SkIntToScalar(10), 0); 489f23a27ed9961fd4575864e590eda328452895e7reed canvas->drawBitmap(bm, 10, 10, &paint); 499f23a27ed9961fd4575864e590eda328452895e7reed 509f23a27ed9961fd4575864e590eda328452895e7reed // this combination of emboss+colorfilter used to crash -- so we exercise it to 519f23a27ed9961fd4575864e590eda328452895e7reed // confirm that we have a fix. 529f23a27ed9961fd4575864e590eda328452895e7reed paint.setColorFilter(SkColorFilter::CreateModeFilter(0xFFFF0000, SkXfermode::kSrcATop_Mode))->unref(); 539f23a27ed9961fd4575864e590eda328452895e7reed canvas->translate(bm.width() + SkIntToScalar(10), 0); 549f23a27ed9961fd4575864e590eda328452895e7reed canvas->drawBitmap(bm, 10, 10, &paint); 559f23a27ed9961fd4575864e590eda328452895e7reed } 569f23a27ed9961fd4575864e590eda328452895e7reed 579f23a27ed9961fd4575864e590eda328452895e7reedprivate: 589f23a27ed9961fd4575864e590eda328452895e7reed typedef skiagm::GM INHERITED; 599f23a27ed9961fd4575864e590eda328452895e7reed}; 609f23a27ed9961fd4575864e590eda328452895e7reed 619f23a27ed9961fd4575864e590eda328452895e7reedDEF_GM( return SkNEW(EmbossGM); ) 62