blob: 798833353a8eb0bffb07a0427c6a94359445ca2e [file] [log] [blame]
jvanverth@google.com65eb4d52013-03-19 18:51:02 +00001/*
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#ifndef GrCircleEdgeEffect_DEFINED
9#define GrCircleEdgeEffect_DEFINED
10
11#include "GrEffect.h"
12
13class GrGLCircleEdgeEffect;
14
15/**
16 * The output of this effect is a modulation of the input color and coverage for a circle,
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000017 * specified as center_x, center_y, x_radius, inner radius and outer radius in window space
jvanverth@google.com65eb4d52013-03-19 18:51:02 +000018 * (y-down).
19 */
20
21class GrCircleEdgeEffect : public GrEffect {
22public:
23 static GrEffectRef* Create(bool stroke) {
24 // we go through this so we only have one copy of each effect (stroked/filled)
25 static SkAutoTUnref<GrEffectRef> gCircleStrokeEdgeEffectRef(
26 CreateEffectRef(AutoEffectUnref(SkNEW_ARGS(GrCircleEdgeEffect, (true)))));
27 static SkAutoTUnref<GrEffectRef> gCircleFillEdgeEffectRef(
28 CreateEffectRef(AutoEffectUnref(SkNEW_ARGS(GrCircleEdgeEffect, (false)))));
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000029
jvanverth@google.com65eb4d52013-03-19 18:51:02 +000030 if (stroke) {
31 gCircleStrokeEdgeEffectRef.get()->ref();
32 return gCircleStrokeEdgeEffectRef;
33 } else {
34 gCircleFillEdgeEffectRef.get()->ref();
35 return gCircleFillEdgeEffectRef;
36 }
37 }
38
39 virtual ~GrCircleEdgeEffect() {}
40
41 static const char* Name() { return "CircleEdge"; }
42
43 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
44
45 typedef GrGLCircleEdgeEffect GLEffect;
46
47 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000048
jvanverth@google.com65eb4d52013-03-19 18:51:02 +000049 inline bool isStroked() const { return fStroke; }
50
51private:
52 GrCircleEdgeEffect(bool stroke);
53
54 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE {
commit-bot@chromium.orgf1b6b062013-03-22 12:21:57 +000055 const GrCircleEdgeEffect& cee = CastEffect<GrCircleEdgeEffect>(other);
56 return cee.fStroke == fStroke;
jvanverth@google.com65eb4d52013-03-19 18:51:02 +000057 }
skia.committer@gmail.com01c34ee2013-03-20 07:01:02 +000058
jvanverth@google.com65eb4d52013-03-19 18:51:02 +000059 bool fStroke;
60
61 GR_DECLARE_EFFECT_TEST;
62
63 typedef GrEffect INHERITED;
64};
65
66#endif