Index: src/pdf/SkPDFShader.h |
diff --git a/src/pdf/SkPDFShader.h b/src/pdf/SkPDFShader.h |
index 10532156ad20b77d742b618154d56e25f599e53f..1547aaf8c4d53ccc39e493290cb4055d0d21a42c 100644 |
--- a/src/pdf/SkPDFShader.h |
+++ b/src/pdf/SkPDFShader.h |
@@ -10,14 +10,13 @@ |
#ifndef SkPDFShader_DEFINED |
#define SkPDFShader_DEFINED |
+#include "SkPDFResourceDict.h" |
#include "SkPDFStream.h" |
#include "SkPDFTypes.h" |
-#include "SkMatrix.h" |
-#include "SkRefCnt.h" |
-#include "SkShader.h" |
-class SkObjRef; |
-class SkPDFCatalog; |
+class SkMatrix; |
+class SkShader; |
+struct SkIRect; |
/** \class SkPDFShader |
@@ -27,6 +26,8 @@ class SkPDFCatalog; |
class SkPDFShader { |
public: |
+ class State; |
+ |
/** Get the PDF shader for the passed SkShader. If the SkShader is |
* invalid in some way, returns NULL. The reference count of |
* the object is incremented and it is the caller's responsibility to |
@@ -38,28 +39,64 @@ public: |
* positioned, relative to where the page is drawn.) |
* @param surfceBBox The bounding box of the drawing surface (with matrix |
* already applied). |
- * @param rasterScale Additional scale to be applied for early rasterization. |
+ * @param rasterScale Additional scale to be applied for early |
+ * rasterization. |
*/ |
static SkPDFObject* GetPDFShader(const SkShader& shader, |
const SkMatrix& matrix, |
const SkIRect& surfaceBBox, |
SkScalar rasterScale); |
+}; |
- class State; |
+class SkPDFFunctionShader : public SkPDFDict { |
+ SK_DECLARE_INST_COUNT(SkPDFFunctionShader); |
+ |
+public: |
+ static SkPDFFunctionShader* Create(SkAutoTDelete<SkPDFShader::State>*); |
+ virtual ~SkPDFFunctionShader(); |
bool equals(const SkPDFShader::State&) const; |
+ void getResources(const SkTSet<SkPDFObject*>&, |
+ SkTSet<SkPDFObject*>*) SK_OVERRIDE; |
+ |
+private: |
+ SkAutoTDelete<const SkPDFShader::State> fShaderState; |
+ SkTDArray<SkPDFObject*> fResources; |
+ explicit SkPDFFunctionShader(SkPDFShader::State* state); |
+ typedef SkPDFDict INHERITED; |
+}; |
-protected: |
- SkAutoTDelete<const State> fShaderState; |
+/** |
+ * 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 : public SkPDFStream { |
+public: |
+ static SkPDFAlphaFunctionShader* Create(SkAutoTDelete<SkPDFShader::State>*); |
+ virtual ~SkPDFAlphaFunctionShader(); |
+ void getResources(const SkTSet<SkPDFObject*>&, |
+ SkTSet<SkPDFObject*>*) SK_OVERRIDE; |
+ bool equals(const SkPDFShader::State&) const; |
- // This is an internal method. |
- // CanonicalShadersMutex() should already be acquired. |
- // This also takes ownership of shaderState. |
- static SkPDFObject* GetPDFShaderByState(SkAutoTDelete<SkPDFShader::State>*); |
+private: |
+ SkAutoTDelete<const SkPDFShader::State> fShaderState; |
+ SkAutoTUnref<SkPDFObject> fColorShader; |
+ SkAutoTUnref<SkPDFResourceDict> fResourceDict; |
+ explicit SkPDFAlphaFunctionShader(SkPDFShader::State* state); |
+}; |
- SkPDFShader(State*); |
- virtual ~SkPDFShader(); |
+class SkPDFImageShader : public SkPDFStream { |
+public: |
+ static SkPDFImageShader* Create(SkAutoTDelete<SkPDFShader::State>*); |
+ virtual ~SkPDFImageShader(); |
+ void getResources(const SkTSet<SkPDFObject*>&, |
+ SkTSet<SkPDFObject*>*) SK_OVERRIDE; |
+ bool equals(const SkPDFShader::State&) const; |
- virtual SkPDFObject* toPDFObject() = 0; |
+private: |
+ SkAutoTDelete<const SkPDFShader::State> fShaderState; |
+ SkTSet<SkPDFObject*> fResources; |
+ explicit SkPDFImageShader(SkPDFShader::State* state); |
}; |
#endif |