OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkPath.h" | 8 #include "SkPath.h" |
9 #include "SkRect.h" | 9 #include "SkRect.h" |
10 #include "SkRemote.h" | 10 #include "SkRemote.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 static bool operator==(const Stroke& a, const Stroke& b) { | 55 static bool operator==(const Stroke& a, const Stroke& b) { |
56 return a.fWidth == b.fWidth | 56 return a.fWidth == b.fWidth |
57 && a.fMiter == b.fMiter | 57 && a.fMiter == b.fMiter |
58 && a.fCap == b.fCap | 58 && a.fCap == b.fCap |
59 && a.fJoin == b.fJoin; | 59 && a.fJoin == b.fJoin; |
60 } | 60 } |
61 | 61 |
62 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // | 62 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // |
63 | 63 |
| 64 class LookupScope { |
| 65 public: |
| 66 LookupScope(Cache* cache, Encoder* encoder) : fCache(cache), fEncoder(en
coder) {} |
| 67 ~LookupScope() { for (ID id : fToUndefine) { fEncoder->undefine(id); } } |
| 68 void undefineWhenDone(ID id) { fToUndefine.push_back(id); } |
| 69 |
| 70 template <typename T> |
| 71 ID lookup(const T& val) { |
| 72 ID id; |
| 73 if (!fCache->lookup(val, &id, this)) { |
| 74 fEncoder->define(id, val); |
| 75 } |
| 76 return id; |
| 77 } |
| 78 |
| 79 private: |
| 80 Cache* fCache; |
| 81 Encoder* fEncoder; |
| 82 SkSTArray<4, ID> fToUndefine; |
| 83 }; |
| 84 |
| 85 |
64 Cache* Cache::CreateNeverCache() { | 86 Cache* Cache::CreateNeverCache() { |
65 struct NeverCache final : public Cache { | 87 struct NeverCache final : public Cache { |
66 NeverCache() | 88 NeverCache() |
67 : fNextMatrix(Type::kMatrix) | 89 : fNextMatrix(Type::kMatrix) |
68 , fNextMisc (Type::kMisc) | 90 , fNextMisc (Type::kMisc) |
69 , fNextPath (Type::kPath) | 91 , fNextPath (Type::kPath) |
70 , fNextStroke(Type::kStroke) | 92 , fNextStroke(Type::kStroke) |
71 {} | 93 {} |
72 void cleanup(Encoder*) override {} | 94 void cleanup(Encoder*) override {} |
73 | 95 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 Client::Client(Cache* cache, Encoder* encoder) | 179 Client::Client(Cache* cache, Encoder* encoder) |
158 : SkCanvas(1,1) | 180 : SkCanvas(1,1) |
159 , fCache(cache) | 181 , fCache(cache) |
160 , fEncoder(encoder) | 182 , fEncoder(encoder) |
161 {} | 183 {} |
162 | 184 |
163 Client::~Client() { | 185 Client::~Client() { |
164 fCache->cleanup(fEncoder); | 186 fCache->cleanup(fEncoder); |
165 } | 187 } |
166 | 188 |
167 template <typename T> | |
168 ID LookupScope::lookup(const T& val) { | |
169 ID id; | |
170 if (!fCache->lookup(val, &id, this)) { | |
171 fEncoder->define(id, val); | |
172 } | |
173 return id; | |
174 } | |
175 | |
176 void Client::willSave() { fEncoder->save(); } | 189 void Client::willSave() { fEncoder->save(); } |
177 void Client::didRestore() { fEncoder->restore(); } | 190 void Client::didRestore() { fEncoder->restore(); } |
178 | 191 |
179 void Client::didConcat (const SkMatrix&) { this->didSetMatrix(this->getTot
alMatrix()); } | 192 void Client::didConcat (const SkMatrix&) { this->didSetMatrix(this->getTot
alMatrix()); } |
180 void Client::didSetMatrix(const SkMatrix& matrix) { | 193 void Client::didSetMatrix(const SkMatrix& matrix) { |
181 LookupScope ls(fCache, fEncoder); | 194 LookupScope ls(fCache, fEncoder); |
182 fEncoder->setMatrix(ls.lookup(matrix)); | 195 fEncoder->setMatrix(ls.lookup(matrix)); |
183 } | 196 } |
184 | 197 |
185 void Client::onDrawOval(const SkRect& oval, const SkPaint& paint) { | 198 void Client::onDrawOval(const SkRect& oval, const SkPaint& paint) { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 } | 273 } |
261 void Server::strokePath(ID path, ID misc, ID stroke) { | 274 void Server::strokePath(ID path, ID misc, ID stroke) { |
262 SkPaint paint; | 275 SkPaint paint; |
263 paint.setStyle(SkPaint::kStroke_Style); | 276 paint.setStyle(SkPaint::kStroke_Style); |
264 fMisc .find(misc ).applyTo(&paint); | 277 fMisc .find(misc ).applyTo(&paint); |
265 fStroke.find(stroke).applyTo(&paint); | 278 fStroke.find(stroke).applyTo(&paint); |
266 fCanvas->drawPath(fPath.find(path), paint); | 279 fCanvas->drawPath(fPath.find(path), paint); |
267 } | 280 } |
268 | 281 |
269 } // namespace SkRemote | 282 } // namespace SkRemote |
OLD | NEW |