Home | History | Annotate | Download | only in gm
      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 "SkBlurMask.h"
     10 #include "SkCanvas.h"
     11 #include "SkColorFilter.h"
     12 #include "SkEmbossMaskFilter.h"
     13 
     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     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         canvas->translate(bm.width() + SkIntToScalar(10), 0);
     45 
     46         paint.setMaskFilter(SkEmbossMaskFilter::Make(
     47             SkBlurMask::ConvertRadiusToSigma(3),
     48             { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
     49         canvas->drawBitmap(bm, 10, 10, &paint);
     50         canvas->translate(bm.width() + SkIntToScalar(10), 0);
     51 
     52         // this combination of emboss+colorfilter used to crash -- so we exercise it to
     53         // confirm that we have a fix.
     54         paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop));
     55         canvas->drawBitmap(bm, 10, 10, &paint);
     56         canvas->translate(bm.width() + SkIntToScalar(10), 0);
     57 
     58         paint.setAntiAlias(true);
     59         paint.setStyle(SkPaint::kStroke_Style);
     60         paint.setStrokeWidth(SkIntToScalar(10));
     61         paint.setMaskFilter(SkEmbossMaskFilter::Make(
     62             SkBlurMask::ConvertRadiusToSigma(4),
     63             { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
     64         paint.setColorFilter(nullptr);
     65         paint.setShader(SkShader::MakeColorShader(SK_ColorBLUE));
     66         paint.setDither(true);
     67         canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),
     68                            SkIntToScalar(30), paint);
     69         canvas->translate(SkIntToScalar(100), 0);
     70 
     71         paint.setStyle(SkPaint::kFill_Style);
     72         paint.setTextSize(50);
     73         canvas->drawText("Hello", 5, 0, 50, paint);
     74     }
     75 
     76 private:
     77     typedef skiagm::GM INHERITED;
     78 };
     79 
     80 DEF_GM(return new EmbossGM;)
     81