Index: src/pdf/SkPDFShader.h |
diff --git a/src/pdf/SkPDFShader.h b/src/pdf/SkPDFShader.h |
index a6d36b6f021bc9b6e349c261eaf92d7831c5e770..db13cd50b358a385b4eb9968322fcedfa2f541e3 100644 |
--- a/src/pdf/SkPDFShader.h |
+++ b/src/pdf/SkPDFShader.h |
@@ -9,12 +9,13 @@ |
#ifndef SkPDFShader_DEFINED |
#define SkPDFShader_DEFINED |
+#include "SkBitmapKey.h" |
#include "SkPDFTypes.h" |
+#include "SkShader.h" |
class SkPDFCanon; |
class SkPDFDocument; |
class SkMatrix; |
-class SkShader; |
struct SkIRect; |
/** \class SkPDFShader |
@@ -25,8 +26,6 @@ struct SkIRect; |
class SkPDFShader { |
public: |
- class State; |
- |
/** Get the PDF shader for the passed SkShader. If the SkShader is |
* invalid in some way, returns nullptr. The reference count of |
* the object is incremented and it is the caller's responsibility to |
@@ -41,60 +40,47 @@ public: |
* @param rasterScale Additional scale to be applied for early |
* rasterization. |
*/ |
- static SkPDFObject* GetPDFShader(SkPDFDocument* doc, |
- SkScalar dpi, |
- SkShader* shader, |
- const SkMatrix& matrix, |
- const SkIRect& surfaceBBox, |
- SkScalar rasterScale); |
+ static sk_sp<SkPDFObject> GetPDFShader(SkPDFDocument* doc, |
+ SkScalar dpi, |
+ SkShader* shader, |
+ const SkMatrix& matrix, |
+ const SkIRect& surfaceBBox, |
+ SkScalar rasterScale); |
static sk_sp<SkPDFArray> MakeRangeObject(); |
-}; |
-class SkPDFFunctionShader final : public SkPDFDict { |
-public: |
- static SkPDFFunctionShader* Create(SkPDFCanon*, |
- std::unique_ptr<SkPDFShader::State>*); |
- virtual ~SkPDFFunctionShader(); |
- bool equals(const SkPDFShader::State&) const; |
- |
-private: |
- std::unique_ptr<const SkPDFShader::State> fShaderState; |
- SkPDFFunctionShader(SkPDFShader::State*); |
- typedef SkPDFDict INHERITED; |
-}; |
+ class State { |
+ public: |
+ SkShader::GradientType fType; |
+ SkShader::GradientInfo fInfo; |
+ std::unique_ptr<SkColor[]> fColors; |
+ std::unique_ptr<SkScalar[]> fStops; |
+ SkMatrix fCanvasTransform; |
+ SkMatrix fShaderTransform; |
+ SkIRect fBBox; |
-/** |
- * A shader for PDF gradients. This encapsulates the function shader |
- * inside a tiling pattern while providing a common pattern interface. |
- * The encapsulation allows the use of a SMask for transparency gradients. |
- */ |
-class SkPDFAlphaFunctionShader final : public SkPDFStream { |
-public: |
- static SkPDFAlphaFunctionShader* Create(SkPDFDocument*, |
- SkScalar dpi, |
- std::unique_ptr<SkPDFShader::State>*); |
- virtual ~SkPDFAlphaFunctionShader(); |
- bool equals(const SkPDFShader::State&) const; |
- |
-private: |
- std::unique_ptr<const SkPDFShader::State> fShaderState; |
- SkPDFAlphaFunctionShader(SkPDFShader::State*); |
- typedef SkPDFStream INHERITED; |
-}; |
+ SkBitmapKey fBitmapKey; |
+ SkShader::TileMode fImageTileModes[2]; |
-class SkPDFImageShader final : public SkPDFStream { |
-public: |
- static SkPDFImageShader* Create(SkPDFDocument*, |
- SkScalar dpi, |
- std::unique_ptr<SkPDFShader::State>*); |
- virtual ~SkPDFImageShader(); |
- bool equals(const SkPDFShader::State&) const; |
- |
-private: |
- std::unique_ptr<const SkPDFShader::State> fShaderState; |
- SkPDFImageShader(SkPDFShader::State*); |
- typedef SkPDFStream INHERITED; |
+ State(SkShader* shader, const SkMatrix& canvasTransform, |
+ const SkIRect& bbox, SkScalar rasterScale, |
+ SkBitmap* dstImage); |
+ |
+ bool operator==(const State& b) const; |
+ |
+ State MakeAlphaToLuminosityState() const; |
+ State MakeOpaqueState() const; |
+ |
+ bool GradientHasAlpha() const; |
+ |
+ State(State&&) = default; |
+ State& operator=(State&&) = default; |
+ |
+ private: |
+ State(const State& other); |
+ State& operator=(const State& rhs); |
+ void allocateGradientInfoStorage(); |
+ }; |
}; |
#endif |