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    virtual uint32_t onGetFlags() const SK_OVERRIDE {
43        return kSkipTiled_Flag;
44    }
45
46    virtual SkString onShortName() SK_OVERRIDE {
47        return SkString("lerpmode");
48    }
49
50    virtual SkISize onISize() SK_OVERRIDE {
51        return SkISize::Make(240, 120);
52    }
53
54    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
55        show_circlelayers(canvas, NULL);
56        canvas->translate(150, 0);
57        SkAutoTUnref<SkXfermode> mode(SkLerpXfermode::Create(0.5f));
58        show_circlelayers(canvas, mode.get());
59    }
60
61private:
62    typedef skiagm::GM INHERITED;
63};
64
65//////////////////////////////////////////////////////////////////////////////
66
67DEF_GM( return SkNEW(LerpXfermodeGM); )
68