1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "gm.h" 9#include "SkBlurMaskFilter.h" 10#include "SkCanvas.h" 11#include "SkColorFilter.h" 12 13#ifdef SK_SUPPORT_LEGACY_EMBOSSMASKFILTER 14static SkBitmap make_bm() { 15 SkBitmap bm; 16 bm.allocN32Pixels(100, 100); 17 18 SkCanvas canvas(bm); 19 canvas.clear(0); 20 SkPaint paint; 21 paint.setAntiAlias(true); 22 canvas.drawCircle(50, 50, 50, paint); 23 return bm; 24} 25 26class EmbossGM : public skiagm::GM { 27public: 28 EmbossGM() { 29 } 30 31protected: 32 SkString onShortName() override { 33 return SkString("emboss"); 34 } 35 36 SkISize onISize() override { 37 return SkISize::Make(600, 120); 38 } 39 40 void onDraw(SkCanvas* canvas) override { 41 SkPaint paint; 42 SkBitmap bm = make_bm(); 43 canvas->drawBitmap(bm, 10, 10, &paint); 44 45 const SkScalar dir[] = { 1, 1, 1 }; 46 paint.setMaskFilter(SkBlurMaskFilter::MakeEmboss(3, dir, 0.3f, 0.1f)); 47 canvas->translate(bm.width() + SkIntToScalar(10), 0); 48 canvas->drawBitmap(bm, 10, 10, &paint); 49 50 // this combination of emboss+colorfilter used to crash -- so we exercise it to 51 // confirm that we have a fix. 52 paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop)); 53 canvas->translate(bm.width() + SkIntToScalar(10), 0); 54 canvas->drawBitmap(bm, 10, 10, &paint); 55 } 56 57private: 58 typedef skiagm::GM INHERITED; 59}; 60 61DEF_GM(return new EmbossGM;) 62#endif 63