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"
14static 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
26class EmbossGM : public skiagm::GM {
27public:
28    EmbossGM() {
29    }
30
31protected:
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
57private:
58    typedef skiagm::GM INHERITED;
59};
60
61DEF_GM( return SkNEW(EmbossGM); )
62