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