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