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 #include "SkColorFilter.h" 14 static 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 26 class EmbossGM : public skiagm::GM { 27 public: 28 EmbossGM() { 29 } 30 31 protected: 32 virtual SkString onShortName() SK_OVERRIDE { 33 return SkString("emboss"); 34 } 35 36 virtual SkISize onISize() SK_OVERRIDE { 37 return SkISize::Make(600, 120); 38 } 39 40 virtual void onDraw(SkCanvas* canvas) SK_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::CreateEmboss(3, dir, 0.3f, 0.1f))->unref(); 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::CreateModeFilter(0xFFFF0000, SkXfermode::kSrcATop_Mode))->unref(); 53 canvas->translate(bm.width() + SkIntToScalar(10), 0); 54 canvas->drawBitmap(bm, 10, 10, &paint); 55 } 56 57 private: 58 typedef skiagm::GM INHERITED; 59 }; 60 61 DEF_GM( return SkNEW(EmbossGM); ) 62