1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkBlendMode.h" 11cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 12cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 13cb93a386Sopenharmony_ci#include "include/core/SkColorFilter.h" 14cb93a386Sopenharmony_ci#include "include/core/SkFont.h" 15cb93a386Sopenharmony_ci#include "include/core/SkMaskFilter.h" 16cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 17cb93a386Sopenharmony_ci#include "include/core/SkScalar.h" 18cb93a386Sopenharmony_ci#include "include/core/SkShader.h" 19cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 20cb93a386Sopenharmony_ci#include "include/core/SkString.h" 21cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 22cb93a386Sopenharmony_ci#include "include/core/SkTypeface.h" 23cb93a386Sopenharmony_ci#include "src/core/SkBlurMask.h" 24cb93a386Sopenharmony_ci#include "src/effects/SkEmbossMaskFilter.h" 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_cistatic sk_sp<SkImage> make_bm() { 27cb93a386Sopenharmony_ci auto surf = SkSurface::MakeRasterN32Premul(100, 100); 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci SkPaint paint; 30cb93a386Sopenharmony_ci paint.setAntiAlias(true); 31cb93a386Sopenharmony_ci surf->getCanvas()->drawCircle(50, 50, 50, paint); 32cb93a386Sopenharmony_ci return surf->makeImageSnapshot(); 33cb93a386Sopenharmony_ci} 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ciclass EmbossGM : public skiagm::GM { 36cb93a386Sopenharmony_cipublic: 37cb93a386Sopenharmony_ci EmbossGM() { 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ciprotected: 41cb93a386Sopenharmony_ci SkString onShortName() override { 42cb93a386Sopenharmony_ci return SkString("emboss"); 43cb93a386Sopenharmony_ci } 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci SkISize onISize() override { 46cb93a386Sopenharmony_ci return SkISize::Make(600, 120); 47cb93a386Sopenharmony_ci } 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci void onDraw(SkCanvas* canvas) override { 50cb93a386Sopenharmony_ci SkPaint paint; 51cb93a386Sopenharmony_ci auto img = make_bm(); 52cb93a386Sopenharmony_ci canvas->drawImage(img, 10, 10); 53cb93a386Sopenharmony_ci canvas->translate(img->width() + SkIntToScalar(10), 0); 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci paint.setMaskFilter(SkEmbossMaskFilter::Make( 56cb93a386Sopenharmony_ci SkBlurMask::ConvertRadiusToSigma(3), 57cb93a386Sopenharmony_ci { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 })); 58cb93a386Sopenharmony_ci canvas->drawImage(img, 10, 10, SkSamplingOptions(), &paint); 59cb93a386Sopenharmony_ci canvas->translate(img->width() + SkIntToScalar(10), 0); 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci // this combination of emboss+colorfilter used to crash -- so we exercise it to 62cb93a386Sopenharmony_ci // confirm that we have a fix. 63cb93a386Sopenharmony_ci paint.setColorFilter(SkColorFilters::Blend(0xFFFF0000, SkBlendMode::kSrcATop)); 64cb93a386Sopenharmony_ci canvas->drawImage(img, 10, 10, SkSamplingOptions(), &paint); 65cb93a386Sopenharmony_ci canvas->translate(img->width() + SkIntToScalar(10), 0); 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci paint.setAntiAlias(true); 68cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 69cb93a386Sopenharmony_ci paint.setStrokeWidth(SkIntToScalar(10)); 70cb93a386Sopenharmony_ci paint.setMaskFilter(SkEmbossMaskFilter::Make( 71cb93a386Sopenharmony_ci SkBlurMask::ConvertRadiusToSigma(4), 72cb93a386Sopenharmony_ci { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 })); 73cb93a386Sopenharmony_ci paint.setColorFilter(nullptr); 74cb93a386Sopenharmony_ci paint.setShader(SkShaders::Color(SK_ColorBLUE)); 75cb93a386Sopenharmony_ci paint.setDither(true); 76cb93a386Sopenharmony_ci canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50), 77cb93a386Sopenharmony_ci SkIntToScalar(30), paint); 78cb93a386Sopenharmony_ci canvas->translate(SkIntToScalar(100), 0); 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kFill_Style); 81cb93a386Sopenharmony_ci canvas->drawString("Hello", 0, 50, SkFont(nullptr, 50), paint); 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ci paint.setShader(nullptr); 84cb93a386Sopenharmony_ci paint.setColor(SK_ColorGREEN); 85cb93a386Sopenharmony_ci canvas->drawString("World", 0, 100, SkFont(nullptr, 50), paint); 86cb93a386Sopenharmony_ci } 87cb93a386Sopenharmony_ci 88cb93a386Sopenharmony_ciprivate: 89cb93a386Sopenharmony_ci using INHERITED = skiagm::GM; 90cb93a386Sopenharmony_ci}; 91cb93a386Sopenharmony_ci 92cb93a386Sopenharmony_ciDEF_GM(return new EmbossGM;) 93