diff options
Diffstat (limited to 'effects/gradients')
-rw-r--r-- | effects/gradients/SkGradientShader.cpp | 5 | ||||
-rw-r--r-- | effects/gradients/SkGradientShaderPriv.h | 4 | ||||
-rw-r--r-- | effects/gradients/SkLinearGradient.cpp | 16 | ||||
-rw-r--r-- | effects/gradients/SkLinearGradient.h | 7 | ||||
-rw-r--r-- | effects/gradients/SkRadialGradient.cpp | 14 | ||||
-rw-r--r-- | effects/gradients/SkRadialGradient.h | 7 | ||||
-rw-r--r-- | effects/gradients/SkSweepGradient.cpp | 14 | ||||
-rw-r--r-- | effects/gradients/SkSweepGradient.h | 7 | ||||
-rw-r--r-- | effects/gradients/SkTwoPointConicalGradient.cpp | 17 | ||||
-rw-r--r-- | effects/gradients/SkTwoPointConicalGradient.h | 8 | ||||
-rw-r--r-- | effects/gradients/SkTwoPointRadialGradient.cpp | 23 | ||||
-rw-r--r-- | effects/gradients/SkTwoPointRadialGradient.h | 12 |
12 files changed, 36 insertions, 98 deletions
diff --git a/effects/gradients/SkGradientShader.cpp b/effects/gradients/SkGradientShader.cpp index 6d753a95..d376b222 100644 --- a/effects/gradients/SkGradientShader.cpp +++ b/effects/gradients/SkGradientShader.cpp @@ -253,9 +253,8 @@ bool SkGradientShaderBase::isOpaque() const { } SkGradientShaderBase::GradientShaderBaseContext::GradientShaderBaseContext( - const SkGradientShaderBase& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) + const SkGradientShaderBase& shader, const ContextRec& rec) + : INHERITED(shader, rec) , fCache(shader.refCache(getPaintAlpha())) { const SkMatrix& inverse = this->getTotalInverse(); diff --git a/effects/gradients/SkGradientShaderPriv.h b/effects/gradients/SkGradientShaderPriv.h index c1e253fd..a699c4ce 100644 --- a/effects/gradients/SkGradientShaderPriv.h +++ b/effects/gradients/SkGradientShaderPriv.h @@ -142,9 +142,7 @@ public: class GradientShaderBaseContext : public SkShader::Context { public: - GradientShaderBaseContext(const SkGradientShaderBase& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix); - ~GradientShaderBaseContext() {} + GradientShaderBaseContext(const SkGradientShaderBase& shader, const ContextRec&); virtual uint32_t getFlags() const SK_OVERRIDE { return fFlags; } diff --git a/effects/gradients/SkLinearGradient.cpp b/effects/gradients/SkLinearGradient.cpp index 70bbbf3b..f37759c1 100644 --- a/effects/gradients/SkLinearGradient.cpp +++ b/effects/gradients/SkLinearGradient.cpp @@ -76,24 +76,18 @@ size_t SkLinearGradient::contextSize() const { return sizeof(LinearGradientContext); } -SkShader::Context* SkLinearGradient::createContext(const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, void* storage) const { - if (!this->validContext(device, paint, matrix)) { - return NULL; - } - - return SkNEW_PLACEMENT_ARGS(storage, LinearGradientContext, (*this, device, paint, matrix)); +SkShader::Context* SkLinearGradient::onCreateContext(const ContextRec& rec, void* storage) const { + return SkNEW_PLACEMENT_ARGS(storage, LinearGradientContext, (*this, rec)); } SkLinearGradient::LinearGradientContext::LinearGradientContext( - const SkLinearGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) + const SkLinearGradient& shader, const ContextRec& rec) + : INHERITED(shader, rec) { unsigned mask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask; if ((fDstToIndex.getType() & ~mask) == 0) { // when we dither, we are (usually) not const-in-Y - if ((fFlags & SkShader::kHasSpan16_Flag) && !paint.isDither()) { + if ((fFlags & SkShader::kHasSpan16_Flag) && !rec.fPaint->isDither()) { // only claim this if we do have a 16bit mode (i.e. none of our // colors have alpha), and if we are not dithering (which obviously // is not const in Y). diff --git a/effects/gradients/SkLinearGradient.h b/effects/gradients/SkLinearGradient.h index 699d76ed..e892fe33 100644 --- a/effects/gradients/SkLinearGradient.h +++ b/effects/gradients/SkLinearGradient.h @@ -1,4 +1,3 @@ - /* * Copyright 2012 Google Inc. * @@ -15,14 +14,11 @@ class SkLinearGradient : public SkGradientShaderBase { public: SkLinearGradient(const SkPoint pts[2], const Descriptor&, const SkMatrix* localMatrix); - virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, - void* storage) const SK_OVERRIDE; virtual size_t contextSize() const SK_OVERRIDE; class LinearGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: - LinearGradientContext(const SkLinearGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix); + LinearGradientContext(const SkLinearGradient&, const ContextRec&); ~LinearGradientContext() {} virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; @@ -42,6 +38,7 @@ public: protected: SkLinearGradient(SkReadBuffer& buffer); virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; private: typedef SkGradientShaderBase INHERITED; diff --git a/effects/gradients/SkRadialGradient.cpp b/effects/gradients/SkRadialGradient.cpp index f13d55c6..e379f36c 100644 --- a/effects/gradients/SkRadialGradient.cpp +++ b/effects/gradients/SkRadialGradient.cpp @@ -161,19 +161,13 @@ size_t SkRadialGradient::contextSize() const { return sizeof(RadialGradientContext); } -SkShader::Context* SkRadialGradient::createContext(const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, void* storage) const { - if (!this->validContext(device, paint, matrix)) { - return NULL; - } - - return SkNEW_PLACEMENT_ARGS(storage, RadialGradientContext, (*this, device, paint, matrix)); +SkShader::Context* SkRadialGradient::onCreateContext(const ContextRec& rec, void* storage) const { + return SkNEW_PLACEMENT_ARGS(storage, RadialGradientContext, (*this, rec)); } SkRadialGradient::RadialGradientContext::RadialGradientContext( - const SkRadialGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) {} + const SkRadialGradient& shader, const ContextRec& rec) + : INHERITED(shader, rec) {} void SkRadialGradient::RadialGradientContext::shadeSpan16(int x, int y, uint16_t* dstCParam, int count) { diff --git a/effects/gradients/SkRadialGradient.h b/effects/gradients/SkRadialGradient.h index 7aafe2d1..2c60ba5e 100644 --- a/effects/gradients/SkRadialGradient.h +++ b/effects/gradients/SkRadialGradient.h @@ -16,15 +16,11 @@ public: SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&, const SkMatrix* localMatrix); - virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, - void* storage) const SK_OVERRIDE; virtual size_t contextSize() const SK_OVERRIDE; class RadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: - RadialGradientContext(const SkRadialGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix); - ~RadialGradientContext() {} + RadialGradientContext(const SkRadialGradient&, const ContextRec&); virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE; @@ -45,6 +41,7 @@ public: protected: SkRadialGradient(SkReadBuffer& buffer); virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; private: typedef SkGradientShaderBase INHERITED; diff --git a/effects/gradients/SkSweepGradient.cpp b/effects/gradients/SkSweepGradient.cpp index a65631c6..81ebb344 100644 --- a/effects/gradients/SkSweepGradient.cpp +++ b/effects/gradients/SkSweepGradient.cpp @@ -56,19 +56,13 @@ size_t SkSweepGradient::contextSize() const { return sizeof(SweepGradientContext); } -SkShader::Context* SkSweepGradient::createContext(const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, void* storage) const { - if (!this->validContext(device, paint, matrix)) { - return NULL; - } - - return SkNEW_PLACEMENT_ARGS(storage, SweepGradientContext, (*this, device, paint, matrix)); +SkShader::Context* SkSweepGradient::onCreateContext(const ContextRec& rec, void* storage) const { + return SkNEW_PLACEMENT_ARGS(storage, SweepGradientContext, (*this, rec)); } SkSweepGradient::SweepGradientContext::SweepGradientContext( - const SkSweepGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) {} + const SkSweepGradient& shader, const ContextRec& rec) + : INHERITED(shader, rec) {} // returns angle in a circle [0..2PI) -> [0..255] static unsigned SkATan2_255(float y, float x) { diff --git a/effects/gradients/SkSweepGradient.h b/effects/gradients/SkSweepGradient.h index 15c5b634..36cdd638 100644 --- a/effects/gradients/SkSweepGradient.h +++ b/effects/gradients/SkSweepGradient.h @@ -16,15 +16,11 @@ public: SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&, const SkMatrix* localMatrix); - virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, - void* storage) const SK_OVERRIDE; virtual size_t contextSize() const SK_OVERRIDE; class SweepGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: - SweepGradientContext(const SkSweepGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix); - ~SweepGradientContext() {} + SweepGradientContext(const SkSweepGradient& shader, const ContextRec&); virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE; @@ -47,6 +43,7 @@ public: protected: SkSweepGradient(SkReadBuffer& buffer); virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; private: const SkPoint fCenter; diff --git a/effects/gradients/SkTwoPointConicalGradient.cpp b/effects/gradients/SkTwoPointConicalGradient.cpp index 9d1f8f1a..574df082 100644 --- a/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/effects/gradients/SkTwoPointConicalGradient.cpp @@ -221,21 +221,14 @@ size_t SkTwoPointConicalGradient::contextSize() const { return sizeof(TwoPointConicalGradientContext); } -SkShader::Context* SkTwoPointConicalGradient::createContext( - const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, void* storage) const { - if (!this->validContext(device, paint, matrix)) { - return NULL; - } - - return SkNEW_PLACEMENT_ARGS(storage, TwoPointConicalGradientContext, - (*this, device, paint, matrix)); +SkShader::Context* SkTwoPointConicalGradient::onCreateContext(const ContextRec& rec, + void* storage) const { + return SkNEW_PLACEMENT_ARGS(storage, TwoPointConicalGradientContext, (*this, rec)); } SkTwoPointConicalGradient::TwoPointConicalGradientContext::TwoPointConicalGradientContext( - const SkTwoPointConicalGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) + const SkTwoPointConicalGradient& shader, const ContextRec& rec) + : INHERITED(shader, rec) { // we don't have a span16 proc fFlags &= ~kHasSpan16_Flag; diff --git a/effects/gradients/SkTwoPointConicalGradient.h b/effects/gradients/SkTwoPointConicalGradient.h index 13ce3eaf..85e0bc0b 100644 --- a/effects/gradients/SkTwoPointConicalGradient.h +++ b/effects/gradients/SkTwoPointConicalGradient.h @@ -48,16 +48,11 @@ public: const SkMatrix* localMatrix); - virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, - void* storage) const SK_OVERRIDE; virtual size_t contextSize() const SK_OVERRIDE; class TwoPointConicalGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: - TwoPointConicalGradientContext(const SkTwoPointConicalGradient& shader, - const SkBitmap& device, - const SkPaint& paint, - const SkMatrix& matrix); + TwoPointConicalGradientContext(const SkTwoPointConicalGradient&, const ContextRec&); ~TwoPointConicalGradientContext() {} virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; @@ -87,6 +82,7 @@ public: protected: SkTwoPointConicalGradient(SkReadBuffer& buffer); virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; private: SkPoint fCenter1; diff --git a/effects/gradients/SkTwoPointRadialGradient.cpp b/effects/gradients/SkTwoPointRadialGradient.cpp index 41e577fb..d85be5d3 100644 --- a/effects/gradients/SkTwoPointRadialGradient.cpp +++ b/effects/gradients/SkTwoPointRadialGradient.cpp @@ -224,31 +224,18 @@ size_t SkTwoPointRadialGradient::contextSize() const { return sizeof(TwoPointRadialGradientContext); } -bool SkTwoPointRadialGradient::validContext(const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, SkMatrix* totalInverse) const { +SkShader::Context* SkTwoPointRadialGradient::onCreateContext(const ContextRec& rec, + void* storage) const { // For now, we might have divided by zero, so detect that. if (0 == fDiffRadius) { - return false; - } - - return this->INHERITED::validContext(device, paint, matrix, totalInverse); -} - -SkShader::Context* SkTwoPointRadialGradient::createContext( - const SkBitmap& device, const SkPaint& paint, - const SkMatrix& matrix, void* storage) const { - if (!this->validContext(device, paint, matrix)) { return NULL; } - - return SkNEW_PLACEMENT_ARGS(storage, TwoPointRadialGradientContext, - (*this, device, paint, matrix)); + return SkNEW_PLACEMENT_ARGS(storage, TwoPointRadialGradientContext, (*this, rec)); } SkTwoPointRadialGradient::TwoPointRadialGradientContext::TwoPointRadialGradientContext( - const SkTwoPointRadialGradient& shader, const SkBitmap& device, - const SkPaint& paint, const SkMatrix& matrix) - : INHERITED(shader, device, paint, matrix) + const SkTwoPointRadialGradient& shader, const ContextRec& rec) + : INHERITED(shader, rec) { // we don't have a span16 proc fFlags &= ~kHasSpan16_Flag; diff --git a/effects/gradients/SkTwoPointRadialGradient.h b/effects/gradients/SkTwoPointRadialGradient.h index 1b387e68..6d36fe44 100644 --- a/effects/gradients/SkTwoPointRadialGradient.h +++ b/effects/gradients/SkTwoPointRadialGradient.h @@ -23,20 +23,11 @@ public: virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE; virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE; - virtual size_t contextSize() const SK_OVERRIDE; - virtual bool validContext(const SkBitmap&, const SkPaint&, - const SkMatrix&, SkMatrix* totalInverse = NULL) const SK_OVERRIDE; - virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, - void* storage) const SK_OVERRIDE; class TwoPointRadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { public: - TwoPointRadialGradientContext(const SkTwoPointRadialGradient& shader, - const SkBitmap& device, - const SkPaint& paint, - const SkMatrix& matrix); - ~TwoPointRadialGradientContext() {} + TwoPointRadialGradientContext(const SkTwoPointRadialGradient&, const ContextRec&); virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE; @@ -54,6 +45,7 @@ public: protected: SkTwoPointRadialGradient(SkReadBuffer& buffer); virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; + virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; private: const SkPoint fCenter1; |