Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkColor.h" | 9 #include "SkColor.h" |
| 10 #include "SkReadBuffer.h" | 10 #include "SkReadBuffer.h" |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 222 } | 222 } |
| 223 | 223 |
| 224 SkLayerDrawLooper::SkLayerDrawLooper(SkReadBuffer& buffer) | 224 SkLayerDrawLooper::SkLayerDrawLooper(SkReadBuffer& buffer) |
| 225 : INHERITED(buffer), | 225 : INHERITED(buffer), |
| 226 fRecs(NULL), | 226 fRecs(NULL), |
| 227 fTopRec(NULL), | 227 fTopRec(NULL), |
| 228 fCount(0), | 228 fCount(0), |
| 229 fCurrRec(NULL) { | 229 fCurrRec(NULL) { |
| 230 int count = buffer.readInt(); | 230 int count = buffer.readInt(); |
| 231 | 231 |
| 232 Builder builder; | |
| 232 for (int i = 0; i < count; i++) { | 233 for (int i = 0; i < count; i++) { |
| 233 LayerInfo info; | 234 LayerInfo info; |
| 234 info.fFlagsMask = buffer.readInt(); | 235 info.fFlagsMask = buffer.readInt(); |
| 235 info.fPaintBits = buffer.readInt(); | 236 info.fPaintBits = buffer.readInt(); |
| 236 info.fColorMode = (SkXfermode::Mode)buffer.readInt(); | 237 info.fColorMode = (SkXfermode::Mode)buffer.readInt(); |
| 237 buffer.readPoint(&info.fOffset); | 238 buffer.readPoint(&info.fOffset); |
| 238 info.fPostTranslate = buffer.readBool(); | 239 info.fPostTranslate = buffer.readBool(); |
| 239 buffer.readPaint(this->addLayerOnTop(info)); | 240 buffer.readPaint(builder.addLayerOnTop(info)); |
| 240 } | 241 } |
| 242 builder.initLooperAndReset(this); | |
|
scroggo
2014/02/11 14:48:37
I think the main place this will be called is read
| |
| 241 SkASSERT(count == fCount); | 243 SkASSERT(count == fCount); |
| 242 | 244 |
| 243 #ifdef SK_DEBUG | 245 #ifdef SK_DEBUG |
| 244 { | 246 { |
| 245 Rec* rec = fRecs; | 247 Rec* rec = fRecs; |
| 246 int n = 0; | 248 int n = 0; |
| 247 while (rec) { | 249 while (rec) { |
| 248 rec = rec->fNext; | 250 rec = rec->fNext; |
| 249 n += 1; | 251 n += 1; |
| 250 } | 252 } |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 str->append("true "); | 342 str->append("true "); |
| 341 } else { | 343 } else { |
| 342 str->append("false "); | 344 str->append("false "); |
| 343 } | 345 } |
| 344 | 346 |
| 345 rec->fPaint.toString(str); | 347 rec->fPaint.toString(str); |
| 346 rec = rec->fNext; | 348 rec = rec->fNext; |
| 347 } | 349 } |
| 348 } | 350 } |
| 349 #endif | 351 #endif |
| 352 | |
| 353 SkLayerDrawLooper::Builder::Builder() | |
| 354 : fRecs(NULL), | |
| 355 fTopRec(NULL), | |
| 356 fCount(0) { | |
| 357 } | |
| 358 | |
| 359 SkLayerDrawLooper::Builder::~Builder() { | |
| 360 Rec* rec = fRecs; | |
| 361 while (rec) { | |
| 362 Rec* next = rec->fNext; | |
| 363 SkDELETE(rec); | |
| 364 rec = next; | |
| 365 } | |
| 366 } | |
| 367 | |
| 368 SkPaint* SkLayerDrawLooper::Builder::addLayer(const LayerInfo& info) { | |
| 369 fCount += 1; | |
| 370 | |
| 371 Rec* rec = SkNEW(Rec); | |
| 372 rec->fNext = fRecs; | |
| 373 rec->fInfo = info; | |
| 374 fRecs = rec; | |
| 375 if (NULL == fTopRec) { | |
| 376 fTopRec = rec; | |
| 377 } | |
| 378 | |
| 379 return &rec->fPaint; | |
| 380 } | |
| 381 | |
| 382 void SkLayerDrawLooper::Builder::addLayer(SkScalar dx, SkScalar dy) { | |
| 383 LayerInfo info; | |
| 384 | |
| 385 info.fOffset.set(dx, dy); | |
| 386 (void)this->addLayer(info); | |
| 387 } | |
| 388 | |
| 389 SkPaint* SkLayerDrawLooper::Builder::addLayerOnTop(const LayerInfo& info) { | |
| 390 fCount += 1; | |
| 391 | |
| 392 Rec* rec = SkNEW(Rec); | |
| 393 rec->fNext = NULL; | |
| 394 rec->fInfo = info; | |
| 395 if (NULL == fRecs) { | |
| 396 fRecs = rec; | |
| 397 } else { | |
| 398 SkASSERT(NULL != fTopRec); | |
| 399 fTopRec->fNext = rec; | |
| 400 } | |
| 401 fTopRec = rec; | |
| 402 | |
| 403 return &rec->fPaint; | |
| 404 } | |
| 405 | |
| 406 SkLayerDrawLooper* SkLayerDrawLooper::Builder::detachLooper() { | |
| 407 SkLayerDrawLooper* looper = SkNEW(SkLayerDrawLooper); | |
| 408 initLooperAndReset(looper); | |
| 409 return looper; | |
| 410 } | |
| 411 | |
| 412 void SkLayerDrawLooper::Builder::initLooperAndReset(SkLayerDrawLooper* looper) { | |
| 413 looper->fCount = fCount; | |
| 414 looper->fRecs = fRecs; | |
| 415 | |
| 416 fCount = 0; | |
| 417 fRecs = NULL; | |
| 418 fTopRec = NULL; | |
| 419 } | |
| OLD | NEW |