1589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 2589708bf7c706348b763e8277004cb160b202bdbrileya@google.com/* 3589708bf7c706348b763e8277004cb160b202bdbrileya@google.com * Copyright 2012 Google Inc. 4589708bf7c706348b763e8277004cb160b202bdbrileya@google.com * 5589708bf7c706348b763e8277004cb160b202bdbrileya@google.com * Use of this source code is governed by a BSD-style license that can be 6589708bf7c706348b763e8277004cb160b202bdbrileya@google.com * found in the LICENSE file. 7589708bf7c706348b763e8277004cb160b202bdbrileya@google.com */ 8589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 9aa64fbfd349789f27b3cc35c1968d9dc0612cf8ecommit-bot@chromium.org#ifndef SkTwoPointConicalGradient_DEFINED 10aa64fbfd349789f27b3cc35c1968d9dc0612cf8ecommit-bot@chromium.org#define SkTwoPointConicalGradient_DEFINED 11589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 12589708bf7c706348b763e8277004cb160b202bdbrileya@google.com#include "SkGradientShaderPriv.h" 13589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 1487fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org// TODO(dominikg): Worth making it truly immutable (i.e. set values in constructor)? 1587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org// Should only be initialized once via init(). Immutable afterwards. 16589708bf7c706348b763e8277004cb160b202bdbrileya@google.comstruct TwoPtRadial { 17589708bf7c706348b763e8277004cb160b202bdbrileya@google.com enum { 18589708bf7c706348b763e8277004cb160b202bdbrileya@google.com kDontDrawT = 0x80000000 19589708bf7c706348b763e8277004cb160b202bdbrileya@google.com }; 20589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 21589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fCenterX, fCenterY; 22589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fDCenterX, fDCenterY; 23589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fRadius; 24589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fDRadius; 25589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fA; 26589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fRadius2; 27589708bf7c706348b763e8277004cb160b202bdbrileya@google.com float fRDR; 2844d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org bool fFlipped; 29589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 30589708bf7c706348b763e8277004cb160b202bdbrileya@google.com void init(const SkPoint& center0, SkScalar rad0, 3144d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org const SkPoint& center1, SkScalar rad1, 3244d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org bool flipped); 33fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 34589708bf7c706348b763e8277004cb160b202bdbrileya@google.com static bool DontDrawT(SkFixed t) { 35589708bf7c706348b763e8277004cb160b202bdbrileya@google.com return kDontDrawT == (uint32_t)t; 36589708bf7c706348b763e8277004cb160b202bdbrileya@google.com } 37589708bf7c706348b763e8277004cb160b202bdbrileya@google.com}; 38589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 39589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 40589708bf7c706348b763e8277004cb160b202bdbrileya@google.comclass SkTwoPointConicalGradient : public SkGradientShaderBase { 41589708bf7c706348b763e8277004cb160b202bdbrileya@google.com TwoPtRadial fRec; 42589708bf7c706348b763e8277004cb160b202bdbrileya@google.com void init(); 43589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 44589708bf7c706348b763e8277004cb160b202bdbrileya@google.compublic: 45589708bf7c706348b763e8277004cb160b202bdbrileya@google.com SkTwoPointConicalGradient(const SkPoint& start, SkScalar startRadius, 46589708bf7c706348b763e8277004cb160b202bdbrileya@google.com const SkPoint& end, SkScalar endRadius, 47addf2edf3da20f053daa3897cfe2c52d7369a7b1reed bool flippedGrad, const Descriptor&); 48fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 4987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 5087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org virtual size_t contextSize() const SK_OVERRIDE; 5187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 5287fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org class TwoPointConicalGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { 5387fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org public: 54e901b6de3ef8dea842008a08fc81e92fb1478d61commit-bot@chromium.org TwoPointConicalGradientContext(const SkTwoPointConicalGradient&, const ContextRec&); 5587fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org ~TwoPointConicalGradientContext() {} 5687fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 5787fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; 5887fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org 5987fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org private: 6087fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED; 6187fcd950198a16211b3988610beebb5ca5bcf323commit-bot@chromium.org }; 62589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 63589708bf7c706348b763e8277004cb160b202bdbrileya@google.com virtual BitmapType asABitmap(SkBitmap* bitmap, 64589708bf7c706348b763e8277004cb160b202bdbrileya@google.com SkMatrix* matrix, 65589708bf7c706348b763e8277004cb160b202bdbrileya@google.com TileMode* xy) const; 66589708bf7c706348b763e8277004cb160b202bdbrileya@google.com virtual SkShader::GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE; 67b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix*, GrColor*, 68b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrFragmentProcessor**) const SK_OVERRIDE; 693fbab82bd30158ccabc708a20419025923e08655commit-bot@chromium.org virtual bool isOpaque() const SK_OVERRIDE; 70589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 711c6d64b78b24083ee9fd7411dac8a4a7e2d03a3crileya@google.com SkScalar getCenterX1() const { return SkPoint::Distance(fCenter1, fCenter2); } 721c6d64b78b24083ee9fd7411dac8a4a7e2d03a3crileya@google.com SkScalar getStartRadius() const { return fRadius1; } 731c6d64b78b24083ee9fd7411dac8a4a7e2d03a3crileya@google.com SkScalar getDiffRadius() const { return fRadius2 - fRadius1; } 742af1a2dbc46ea41e6208ad0c8681f98bd9b27bd8commit-bot@chromium.org const SkPoint& getStartCenter() const { return fCenter1; } 752af1a2dbc46ea41e6208ad0c8681f98bd9b27bd8commit-bot@chromium.org const SkPoint& getEndCenter() const { return fCenter2; } 762af1a2dbc46ea41e6208ad0c8681f98bd9b27bd8commit-bot@chromium.org SkScalar getEndRadius() const { return fRadius2; } 7744d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org bool isFlippedGrad() const { return fFlippedGrad; } 781c6d64b78b24083ee9fd7411dac8a4a7e2d03a3crileya@google.com 790f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org SK_TO_STRING_OVERRIDE() 80589708bf7c706348b763e8277004cb160b202bdbrileya@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTwoPointConicalGradient) 81fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 82589708bf7c706348b763e8277004cb160b202bdbrileya@google.comprotected: 838b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org SkTwoPointConicalGradient(SkReadBuffer& buffer); 848b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 85ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; 86fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 87589708bf7c706348b763e8277004cb160b202bdbrileya@google.comprivate: 8844d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org SkPoint fCenter1; 8944d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org SkPoint fCenter2; 9044d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org SkScalar fRadius1; 9144d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org SkScalar fRadius2; 9244d83c1e81b0555efa94f78e2a53b862208cdd06commit-bot@chromium.org bool fFlippedGrad; 93d3b28e8847358460aeae745da44e474f6a7ab25dskia.committer@gmail.com 949fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed friend class SkGradientShader; 9553783b026a00683c1fb504127c3398dabb61ea73commit-bot@chromium.org typedef SkGradientShaderBase INHERITED; 96589708bf7c706348b763e8277004cb160b202bdbrileya@google.com}; 97589708bf7c706348b763e8277004cb160b202bdbrileya@google.com 98589708bf7c706348b763e8277004cb160b202bdbrileya@google.com#endif 99