13eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org/*
23eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org * Copyright 2014 Google Inc.
33eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org *
43eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
53eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org * found in the LICENSE file.
63eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org */
73eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org
83eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org#include "GrOvalEffect.h"
9eb2a6761654307e8aeeeaabdd63c6bf9ab0411e9joshualitt
1083d118550f7237d25e7e096cc968dbb9a06678a3Ethan Nicholas#include "GrCircleEffect.h"
11420f1565e9783b25d6ceb7ada21ca7c7c57d9e4cEthan Nicholas#include "GrEllipseEffect.h"
12eb2a6761654307e8aeeeaabdd63c6bf9ab0411e9joshualitt#include "SkRect.h"
133eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org
141447177005fcbac83acd501766a46c751a49ae73Brian Salomonstd::unique_ptr<GrFragmentProcessor> GrOvalEffect::Make(GrClipEdgeType edgeType, const SkRect& oval,
151447177005fcbac83acd501766a46c751a49ae73Brian Salomon                                                        const GrShaderCaps& caps) {
161706f842086c089ebc496dfc7f45c959e5eda01eEthan Nicholas    if (GrClipEdgeType::kHairlineAA == edgeType) {
1796fcdcc219d2a0d3579719b84b28bede76efba64halcanary        return nullptr;
183eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org    }
193eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org    SkScalar w = oval.width();
203eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org    SkScalar h = oval.height();
213eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org    if (SkScalarNearlyEqual(w, h)) {
223eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org        w /= 2;
23aae47c878b83ab6d9742d92a6fa47e762f6b9204Ethan Nicholas        return GrCircleEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + w),
241706f842086c089ebc496dfc7f45c959e5eda01eEthan Nicholas                                    w);
25d0a502968c3fc7f03afbe07211e36d3eeaa83694commit-bot@chromium.org    } else {
26d0a502968c3fc7f03afbe07211e36d3eeaa83694commit-bot@chromium.org        w /= 2;
27d0a502968c3fc7f03afbe07211e36d3eeaa83694commit-bot@chromium.org        h /= 2;
28aae47c878b83ab6d9742d92a6fa47e762f6b9204Ethan Nicholas        return GrEllipseEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + h),
291447177005fcbac83acd501766a46c751a49ae73Brian Salomon                                     SkPoint::Make(w, h), caps);
303eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org    }
313eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org
3296fcdcc219d2a0d3579719b84b28bede76efba64halcanary    return nullptr;
333eedb801e35001df4b7e154edf4fd8da942296a0commit-bot@chromium.org}
34