1/*
2 * Copyright 2013 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 "SkCanvas.h"
10#include "SkLerpXfermode.h"
11
12static void show_circlelayers(SkCanvas* canvas, SkXfermode* mode) {
13    SkPaint paint;
14    paint.setAntiAlias(true);
15    SkRect r, bounds = { 10, 10, 110, 110 };
16
17    r = bounds;
18    r.fRight = bounds.centerX();
19    canvas->drawRect(r, paint);
20
21    canvas->saveLayer(&bounds, NULL);
22
23    paint.setColor(0x80FF0000);
24    r = bounds;
25    r.inset(20, 0);
26    canvas->drawOval(r, paint);
27
28    paint.setColor(0x800000FF);
29    r = bounds;
30    r.inset(0, 20);
31    paint.setXfermode(mode);
32    canvas->drawOval(r, paint);
33
34    canvas->restore();
35}
36
37class LerpXfermodeGM : public skiagm::GM {
38public:
39    LerpXfermodeGM() {}
40
41protected:
42    SkString onShortName() override {
43        return SkString("lerpmode");
44    }
45
46    SkISize onISize() override {
47        return SkISize::Make(240, 120);
48    }
49
50    void onDraw(SkCanvas* canvas) override {
51        show_circlelayers(canvas, NULL);
52        canvas->translate(150, 0);
53        SkAutoTUnref<SkXfermode> mode(SkLerpXfermode::Create(0.5f));
54        show_circlelayers(canvas, mode.get());
55    }
56
57private:
58    typedef skiagm::GM INHERITED;
59};
60
61//////////////////////////////////////////////////////////////////////////////
62
63DEF_GM( return SkNEW(LerpXfermodeGM); )
64