OLD | NEW |
1 #ifndef DMSrcSink_DEFINED | 1 #ifndef DMSrcSink_DEFINED |
2 #define DMSrcSink_DEFINED | 2 #define DMSrcSink_DEFINED |
3 | 3 |
4 #include "DMGpuSupport.h" | 4 #include "DMGpuSupport.h" |
5 #include "SkBBHFactory.h" | 5 #include "SkBBHFactory.h" |
6 #include "SkBBoxHierarchy.h" | 6 #include "SkBBoxHierarchy.h" |
7 #include "SkBitmap.h" | 7 #include "SkBitmap.h" |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkData.h" | 9 #include "SkData.h" |
10 #include "SkGPipe.h" | 10 #include "SkGPipe.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 struct Src { | 26 struct Src { |
27 // All Srcs must be thread safe. | 27 // All Srcs must be thread safe. |
28 virtual ~Src() {} | 28 virtual ~Src() {} |
29 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; | 29 virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; |
30 virtual SkISize size() const = 0; | 30 virtual SkISize size() const = 0; |
31 virtual Name name() const = 0; | 31 virtual Name name() const = 0; |
32 }; | 32 }; |
33 | 33 |
34 struct Sink { | 34 struct Sink { |
35 virtual ~Sink() {} | 35 virtual ~Sink() {} |
36 // You may write to either the bitmap or stream. | 36 // You may write to either the bitmap or stream. If you write to log, we'll
print that out. |
37 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*)
const | 37 virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*,
SkString* log) |
38 = 0; | 38 const = 0; |
39 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o
n the same thread. | 39 // Sinks in the same enclave (except kAnyThread_Enclave) will run serially o
n the same thread. |
40 virtual int enclave() const = 0; | 40 virtual int enclave() const = 0; |
41 | 41 |
42 // File extension for the content draw() outputs, e.g. "png", "pdf". | 42 // File extension for the content draw() outputs, e.g. "png", "pdf". |
43 virtual const char* fileExtension() const = 0; | 43 virtual const char* fileExtension() const = 0; |
44 }; | 44 }; |
45 | 45 |
46 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; | 46 enum { kAnyThread_Enclave, kGPU_Enclave, kPDFSink_Enclave }; |
47 static const int kNumEnclaves = kPDFSink_Enclave + 1; | 47 static const int kNumEnclaves = kPDFSink_Enclave + 1; |
48 | 48 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 private: | 83 private: |
84 Path fPath; | 84 Path fPath; |
85 }; | 85 }; |
86 | 86 |
87 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 87 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
88 | 88 |
89 class GPUSink : public Sink { | 89 class GPUSink : public Sink { |
90 public: | 90 public: |
91 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT
ext, bool threaded); | 91 GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfT
ext, bool threaded); |
92 | 92 |
93 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 93 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
94 int enclave() const SK_OVERRIDE; | 94 int enclave() const SK_OVERRIDE; |
95 const char* fileExtension() const SK_OVERRIDE { return "png"; } | 95 const char* fileExtension() const SK_OVERRIDE { return "png"; } |
96 private: | 96 private: |
97 GrContextFactory::GLContextType fContextType; | 97 GrContextFactory::GLContextType fContextType; |
98 GrGLStandard fGpuAPI; | 98 GrGLStandard fGpuAPI; |
99 int fSampleCount; | 99 int fSampleCount; |
100 bool fUseDFText; | 100 bool fUseDFText; |
101 bool fThreaded; | 101 bool fThreaded; |
102 }; | 102 }; |
103 | 103 |
104 class PDFSink : public Sink { | 104 class PDFSink : public Sink { |
105 public: | 105 public: |
106 PDFSink(); | 106 PDFSink(); |
107 | 107 |
108 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 108 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
109 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } | 109 int enclave() const SK_OVERRIDE { return kPDFSink_Enclave; } |
110 const char* fileExtension() const SK_OVERRIDE { return "pdf"; } | 110 const char* fileExtension() const SK_OVERRIDE { return "pdf"; } |
111 }; | 111 }; |
112 | 112 |
113 class RasterSink : public Sink { | 113 class RasterSink : public Sink { |
114 public: | 114 public: |
115 explicit RasterSink(SkColorType); | 115 explicit RasterSink(SkColorType); |
116 | 116 |
117 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 117 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
118 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 118 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
119 const char* fileExtension() const SK_OVERRIDE { return "png"; } | 119 const char* fileExtension() const SK_OVERRIDE { return "png"; } |
120 private: | 120 private: |
121 SkColorType fColorType; | 121 SkColorType fColorType; |
122 }; | 122 }; |
123 | 123 |
124 class SKPSink : public Sink { | 124 class SKPSink : public Sink { |
125 public: | 125 public: |
126 SKPSink(); | 126 SKPSink(); |
127 | 127 |
128 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 128 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
129 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 129 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
130 const char* fileExtension() const SK_OVERRIDE { return "skp"; } | 130 const char* fileExtension() const SK_OVERRIDE { return "skp"; } |
131 }; | 131 }; |
132 | 132 |
133 class SVGSink : public Sink { | 133 class SVGSink : public Sink { |
134 public: | 134 public: |
135 SVGSink(); | 135 SVGSink(); |
136 | 136 |
137 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 137 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
138 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 138 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
139 const char* fileExtension() const SK_OVERRIDE { return "svg"; } | 139 const char* fileExtension() const SK_OVERRIDE { return "svg"; } |
140 }; | 140 }; |
141 | 141 |
142 | 142 |
143 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 143 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
144 | 144 |
145 class ViaMatrix : public Sink { | 145 class ViaMatrix : public Sink { |
146 public: | 146 public: |
147 ViaMatrix(SkMatrix, Sink*); | 147 ViaMatrix(SkMatrix, Sink*); |
148 | 148 |
149 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 149 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
150 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 150 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
151 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } | 151 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } |
152 private: | 152 private: |
153 SkMatrix fMatrix; | 153 SkMatrix fMatrix; |
154 SkAutoTDelete<Sink> fSink; | 154 SkAutoTDelete<Sink> fSink; |
155 }; | 155 }; |
156 | 156 |
157 class ViaPipe : public Sink { | 157 class ViaPipe : public Sink { |
158 public: | 158 public: |
159 explicit ViaPipe(Sink*); | 159 explicit ViaPipe(Sink*); |
160 | 160 |
161 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 161 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
162 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 162 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
163 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } | 163 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } |
164 private: | 164 private: |
165 SkAutoTDelete<Sink> fSink; | 165 SkAutoTDelete<Sink> fSink; |
166 }; | 166 }; |
167 | 167 |
168 class ViaSerialization : public Sink { | 168 class ViaSerialization : public Sink { |
169 public: | 169 public: |
170 explicit ViaSerialization(Sink*); | 170 explicit ViaSerialization(Sink*); |
171 | 171 |
172 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 172 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
173 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 173 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
174 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } | 174 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } |
175 private: | 175 private: |
176 SkAutoTDelete<Sink> fSink; | 176 SkAutoTDelete<Sink> fSink; |
177 }; | 177 }; |
178 | 178 |
179 class ViaTiles : public Sink { | 179 class ViaTiles : public Sink { |
180 public: | 180 public: |
181 ViaTiles(int w, int h, SkBBHFactory*, Sink*); | 181 ViaTiles(int w, int h, SkBBHFactory*, Sink*); |
182 | 182 |
183 Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE; | 183 Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const SK_OVERRIDE; |
184 int enclave() const SK_OVERRIDE { return fSink->enclave(); } | 184 int enclave() const SK_OVERRIDE { return fSink->enclave(); } |
185 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } | 185 const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(
); } |
186 private: | 186 private: |
187 const int fW, fH; | 187 const int fW, fH; |
188 SkAutoTDelete<SkBBHFactory> fFactory; | 188 SkAutoTDelete<SkBBHFactory> fFactory; |
189 SkAutoTDelete<Sink> fSink; | 189 SkAutoTDelete<Sink> fSink; |
190 }; | 190 }; |
191 | 191 |
192 class NullSink : public Sink { | 192 class NullSink : public Sink { |
193 public: | 193 public: |
194 Error draw(const Src& src, SkBitmap*, SkWStream* out) const SK_OVERRIDE { | 194 Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const SK_OVERRI
DE { |
195 return src.draw(SkCreateNullCanvas()); | 195 return src.draw(SkCreateNullCanvas()); |
196 } | 196 } |
197 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } | 197 int enclave() const SK_OVERRIDE { return kAnyThread_Enclave; } |
198 const char* fileExtension() const SK_OVERRIDE { return ""; } | 198 const char* fileExtension() const SK_OVERRIDE { return ""; } |
199 }; | 199 }; |
200 | 200 |
201 } // namespace DM | 201 } // namespace DM |
202 | 202 |
203 #endif//DMSrcSink_DEFINED | 203 #endif//DMSrcSink_DEFINED |
OLD | NEW |