| 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 | 8 |
| 9 | 9 |
| 10 #include "SkBitmapHeap.h" | 10 #include "SkBitmapHeap.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 void setReader(SkReadBuffer* reader) { | 111 void setReader(SkReadBuffer* reader) { |
| 112 fReader = reader; | 112 fReader = reader; |
| 113 this->updateReader(); | 113 this->updateReader(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 const SkPaint& paint() const { return fPaint; } | 116 const SkPaint& paint() const { return fPaint; } |
| 117 SkPaint* editPaint() { return &fPaint; } | 117 SkPaint* editPaint() { return &fPaint; } |
| 118 | 118 |
| 119 SkFlattenable* getFlat(unsigned index) const { | 119 SkFlattenable* getFlat(unsigned index) const { |
| 120 if (0 == index) { | 120 if (0 == index) { |
| 121 return NULL; | 121 return nullptr; |
| 122 } | 122 } |
| 123 return fFlatArray[index - 1]; | 123 return fFlatArray[index - 1]; |
| 124 } | 124 } |
| 125 | 125 |
| 126 void defFlattenable(PaintFlats pf, int index) { | 126 void defFlattenable(PaintFlats pf, int index) { |
| 127 index--; | 127 index--; |
| 128 SkFlattenable* obj = fReader->readFlattenable(paintflat_to_flattype(pf))
; | 128 SkFlattenable* obj = fReader->readFlattenable(paintflat_to_flattype(pf))
; |
| 129 if (fFlatArray.count() == index) { | 129 if (fFlatArray.count() == index) { |
| 130 *fFlatArray.append() = obj; | 130 *fFlatArray.append() = obj; |
| 131 } else { | 131 } else { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 SkASSERT(shouldFlattenBitmaps(fFlags)); | 167 SkASSERT(shouldFlattenBitmaps(fFlags)); |
| 168 return fBitmaps[index]; | 168 return fBitmaps[index]; |
| 169 } | 169 } |
| 170 | 170 |
| 171 /** | 171 /** |
| 172 * Needed to be a non-abstract subclass of SkBitmapHeapReader. | 172 * Needed to be a non-abstract subclass of SkBitmapHeapReader. |
| 173 */ | 173 */ |
| 174 void releaseRef(int32_t) override {} | 174 void releaseRef(int32_t) override {} |
| 175 | 175 |
| 176 void setSharedHeap(SkBitmapHeap* heap) { | 176 void setSharedHeap(SkBitmapHeap* heap) { |
| 177 SkASSERT(!shouldFlattenBitmaps(fFlags) || NULL == heap); | 177 SkASSERT(!shouldFlattenBitmaps(fFlags) || nullptr == heap); |
| 178 SkRefCnt_SafeAssign(fSharedHeap, heap); | 178 SkRefCnt_SafeAssign(fSharedHeap, heap); |
| 179 this->updateReader(); | 179 this->updateReader(); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void setImageHeap(SkImageHeap* heap) { | 182 void setImageHeap(SkImageHeap* heap) { |
| 183 fImageHeap.reset(SkRef(heap)); | 183 fImageHeap.reset(SkRef(heap)); |
| 184 } | 184 } |
| 185 | 185 |
| 186 /** | 186 /** |
| 187 * Access the shared heap. Only used in the case when bitmaps are not | 187 * Access the shared heap. Only used in the case when bitmaps are not |
| 188 * flattened. | 188 * flattened. |
| 189 */ | 189 */ |
| 190 SkBitmapHeap* getSharedHeap() const { | 190 SkBitmapHeap* getSharedHeap() const { |
| 191 SkASSERT(!shouldFlattenBitmaps(fFlags)); | 191 SkASSERT(!shouldFlattenBitmaps(fFlags)); |
| 192 return fSharedHeap; | 192 return fSharedHeap; |
| 193 } | 193 } |
| 194 | 194 |
| 195 void addTypeface() { | 195 void addTypeface() { |
| 196 size_t size = fReader->read32(); | 196 size_t size = fReader->read32(); |
| 197 const void* data = fReader->skip(SkAlign4(size)); | 197 const void* data = fReader->skip(SkAlign4(size)); |
| 198 SkMemoryStream stream(data, size, false); | 198 SkMemoryStream stream(data, size, false); |
| 199 *fTypefaces.append() = SkTypeface::Deserialize(&stream); | 199 *fTypefaces.append() = SkTypeface::Deserialize(&stream); |
| 200 } | 200 } |
| 201 | 201 |
| 202 SkTypeface* getTypeface(unsigned id) const { | 202 SkTypeface* getTypeface(unsigned id) const { |
| 203 return id ? fTypefaces[id - 1] : NULL; | 203 return id ? fTypefaces[id - 1] : nullptr; |
| 204 } | 204 } |
| 205 | 205 |
| 206 const SkImage* getImage(int32_t slot) const { | 206 const SkImage* getImage(int32_t slot) const { |
| 207 return fImageHeap->get(slot); | 207 return fImageHeap->get(slot); |
| 208 } | 208 } |
| 209 | 209 |
| 210 private: | 210 private: |
| 211 void updateReader() { | 211 void updateReader() { |
| 212 if (NULL == fReader) { | 212 if (nullptr == fReader) { |
| 213 return; | 213 return; |
| 214 } | 214 } |
| 215 bool crossProcess = SkToBool(fFlags & SkGPipeWriter::kCrossProcess_Flag)
; | 215 bool crossProcess = SkToBool(fFlags & SkGPipeWriter::kCrossProcess_Flag)
; |
| 216 fReader->setFlags(SkSetClearMask(fReader->getFlags(), crossProcess, | 216 fReader->setFlags(SkSetClearMask(fReader->getFlags(), crossProcess, |
| 217 SkReadBuffer::kCrossProcess_Flag)); | 217 SkReadBuffer::kCrossProcess_Flag)); |
| 218 if (crossProcess) { | 218 if (crossProcess) { |
| 219 fReader->setFactoryArray(&fFactoryArray); | 219 fReader->setFactoryArray(&fFactoryArray); |
| 220 } else { | 220 } else { |
| 221 fReader->setFactoryArray(NULL); | 221 fReader->setFactoryArray(nullptr); |
| 222 } | 222 } |
| 223 | 223 |
| 224 if (shouldFlattenBitmaps(fFlags)) { | 224 if (shouldFlattenBitmaps(fFlags)) { |
| 225 fReader->setBitmapStorage(this); | 225 fReader->setBitmapStorage(this); |
| 226 } else { | 226 } else { |
| 227 fReader->setBitmapStorage(fSharedHeap); | 227 fReader->setBitmapStorage(fSharedHeap); |
| 228 } | 228 } |
| 229 } | 229 } |
| 230 SkReadBuffer* fReader; | 230 SkReadBuffer* fReader; |
| 231 SkPaint fPaint; | 231 SkPaint fPaint; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 static void save_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 330 static void save_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 331 SkGPipeState* state) { | 331 SkGPipeState* state) { |
| 332 canvas->save(); | 332 canvas->save(); |
| 333 } | 333 } |
| 334 | 334 |
| 335 static void saveLayer_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 335 static void saveLayer_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 336 SkGPipeState* state) { | 336 SkGPipeState* state) { |
| 337 unsigned flags = DrawOp_unpackFlags(op32); | 337 unsigned flags = DrawOp_unpackFlags(op32); |
| 338 SkCanvas::SaveFlags saveFlags = (SkCanvas::SaveFlags)DrawOp_unpackData(op32)
; | 338 SkCanvas::SaveFlags saveFlags = (SkCanvas::SaveFlags)DrawOp_unpackData(op32)
; |
| 339 | 339 |
| 340 const SkRect* bounds = NULL; | 340 const SkRect* bounds = nullptr; |
| 341 if (flags & kSaveLayer_HasBounds_DrawOpFlag) { | 341 if (flags & kSaveLayer_HasBounds_DrawOpFlag) { |
| 342 bounds = skip<SkRect>(reader); | 342 bounds = skip<SkRect>(reader); |
| 343 } | 343 } |
| 344 const SkPaint* paint = NULL; | 344 const SkPaint* paint = nullptr; |
| 345 if (flags & kSaveLayer_HasPaint_DrawOpFlag) { | 345 if (flags & kSaveLayer_HasPaint_DrawOpFlag) { |
| 346 paint = &state->paint(); | 346 paint = &state->paint(); |
| 347 } | 347 } |
| 348 canvas->saveLayer(bounds, paint, saveFlags); | 348 canvas->saveLayer(bounds, paint, saveFlags); |
| 349 } | 349 } |
| 350 | 350 |
| 351 static void restore_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 351 static void restore_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 352 SkGPipeState* state) { | 352 SkGPipeState* state) { |
| 353 canvas->restore(); | 353 canvas->restore(); |
| 354 } | 354 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 407 } |
| 408 } | 408 } |
| 409 | 409 |
| 410 static void drawPatch_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 410 static void drawPatch_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 411 SkGPipeState* state) { | 411 SkGPipeState* state) { |
| 412 | 412 |
| 413 unsigned flags = DrawOp_unpackFlags(op32); | 413 unsigned flags = DrawOp_unpackFlags(op32); |
| 414 | 414 |
| 415 const SkPoint* cubics = skip<SkPoint>(reader, SkPatchUtils::kNumCtrlPts); | 415 const SkPoint* cubics = skip<SkPoint>(reader, SkPatchUtils::kNumCtrlPts); |
| 416 | 416 |
| 417 const SkColor* colors = NULL; | 417 const SkColor* colors = nullptr; |
| 418 if (flags & kDrawVertices_HasColors_DrawOpFlag) { | 418 if (flags & kDrawVertices_HasColors_DrawOpFlag) { |
| 419 colors = skip<SkColor>(reader, SkPatchUtils::kNumCorners); | 419 colors = skip<SkColor>(reader, SkPatchUtils::kNumCorners); |
| 420 } | 420 } |
| 421 const SkPoint* texCoords = NULL; | 421 const SkPoint* texCoords = nullptr; |
| 422 if (flags & kDrawVertices_HasTexs_DrawOpFlag) { | 422 if (flags & kDrawVertices_HasTexs_DrawOpFlag) { |
| 423 texCoords = skip<SkPoint>(reader, SkPatchUtils::kNumCorners); | 423 texCoords = skip<SkPoint>(reader, SkPatchUtils::kNumCorners); |
| 424 } | 424 } |
| 425 SkAutoTUnref<SkXfermode> xfer; | 425 SkAutoTUnref<SkXfermode> xfer; |
| 426 if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { | 426 if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { |
| 427 int mode = reader->readInt(); | 427 int mode = reader->readInt(); |
| 428 if (mode < 0 || mode > SkXfermode::kLastMode) { | 428 if (mode < 0 || mode > SkXfermode::kLastMode) { |
| 429 mode = SkXfermode::kModulate_Mode; | 429 mode = SkXfermode::kModulate_Mode; |
| 430 } | 430 } |
| 431 xfer.reset(SkXfermode::Create((SkXfermode::Mode)mode)); | 431 xfer.reset(SkXfermode::Create((SkXfermode::Mode)mode)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 445 } | 445 } |
| 446 | 446 |
| 447 static void drawVertices_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 447 static void drawVertices_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 448 SkGPipeState* state) { | 448 SkGPipeState* state) { |
| 449 unsigned flags = DrawOp_unpackFlags(op32); | 449 unsigned flags = DrawOp_unpackFlags(op32); |
| 450 | 450 |
| 451 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readU32(); | 451 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readU32(); |
| 452 int vertexCount = reader->readU32(); | 452 int vertexCount = reader->readU32(); |
| 453 const SkPoint* verts = skip<SkPoint>(reader, vertexCount); | 453 const SkPoint* verts = skip<SkPoint>(reader, vertexCount); |
| 454 | 454 |
| 455 const SkPoint* texs = NULL; | 455 const SkPoint* texs = nullptr; |
| 456 if (flags & kDrawVertices_HasTexs_DrawOpFlag) { | 456 if (flags & kDrawVertices_HasTexs_DrawOpFlag) { |
| 457 texs = skip<SkPoint>(reader, vertexCount); | 457 texs = skip<SkPoint>(reader, vertexCount); |
| 458 } | 458 } |
| 459 | 459 |
| 460 const SkColor* colors = NULL; | 460 const SkColor* colors = nullptr; |
| 461 if (flags & kDrawVertices_HasColors_DrawOpFlag) { | 461 if (flags & kDrawVertices_HasColors_DrawOpFlag) { |
| 462 colors = skip<SkColor>(reader, vertexCount); | 462 colors = skip<SkColor>(reader, vertexCount); |
| 463 } | 463 } |
| 464 | 464 |
| 465 SkAutoTUnref<SkXfermode> xfer; | 465 SkAutoTUnref<SkXfermode> xfer; |
| 466 if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { | 466 if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { |
| 467 SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); | 467 SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); |
| 468 xfer.reset(SkXfermode::Create(mode)); | 468 xfer.reset(SkXfermode::Create(mode)); |
| 469 } | 469 } |
| 470 | 470 |
| 471 int indexCount = 0; | 471 int indexCount = 0; |
| 472 const uint16_t* indices = NULL; | 472 const uint16_t* indices = nullptr; |
| 473 if (flags & kDrawVertices_HasIndices_DrawOpFlag) { | 473 if (flags & kDrawVertices_HasIndices_DrawOpFlag) { |
| 474 indexCount = reader->readU32(); | 474 indexCount = reader->readU32(); |
| 475 indices = skipAlign<uint16_t>(reader, indexCount); | 475 indices = skipAlign<uint16_t>(reader, indexCount); |
| 476 } | 476 } |
| 477 if (state->shouldDraw()) { | 477 if (state->shouldDraw()) { |
| 478 canvas->drawVertices(vmode, vertexCount, verts, texs, colors, xfer, | 478 canvas->drawVertices(vmode, vertexCount, verts, texs, colors, xfer, |
| 479 indices, indexCount, state->paint()); | 479 indices, indexCount, state->paint()); |
| 480 } | 480 } |
| 481 } | 481 } |
| 482 | 482 |
| 483 static void drawAtlas_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, Sk
GPipeState* state) { | 483 static void drawAtlas_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, Sk
GPipeState* state) { |
| 484 unsigned flags = DrawOp_unpackFlags(op32); | 484 unsigned flags = DrawOp_unpackFlags(op32); |
| 485 | 485 |
| 486 const SkPaint* paint = NULL; | 486 const SkPaint* paint = nullptr; |
| 487 if (flags & kDrawAtlas_HasPaint_DrawOpFlag) { | 487 if (flags & kDrawAtlas_HasPaint_DrawOpFlag) { |
| 488 paint = &state->paint(); | 488 paint = &state->paint(); |
| 489 } | 489 } |
| 490 const int slot = reader->readU32(); | 490 const int slot = reader->readU32(); |
| 491 const SkImage* atlas = state->getImage(slot); | 491 const SkImage* atlas = state->getImage(slot); |
| 492 const int count = reader->readU32(); | 492 const int count = reader->readU32(); |
| 493 SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); | 493 SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); |
| 494 const SkRSXform* xform = skip<SkRSXform>(reader, count); | 494 const SkRSXform* xform = skip<SkRSXform>(reader, count); |
| 495 const SkRect* tex = skip<SkRect>(reader, count); | 495 const SkRect* tex = skip<SkRect>(reader, count); |
| 496 const SkColor* colors = NULL; | 496 const SkColor* colors = nullptr; |
| 497 if (flags & kDrawAtlas_HasColors_DrawOpFlag) { | 497 if (flags & kDrawAtlas_HasColors_DrawOpFlag) { |
| 498 colors = skip<SkColor>(reader, count); | 498 colors = skip<SkColor>(reader, count); |
| 499 } | 499 } |
| 500 const SkRect* cull = NULL; | 500 const SkRect* cull = nullptr; |
| 501 if (flags & kDrawAtlas_HasCull_DrawOpFlag) { | 501 if (flags & kDrawAtlas_HasCull_DrawOpFlag) { |
| 502 cull = skip<SkRect>(reader, 1); | 502 cull = skip<SkRect>(reader, 1); |
| 503 } | 503 } |
| 504 | 504 |
| 505 if (state->shouldDraw()) { | 505 if (state->shouldDraw()) { |
| 506 canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, paint); | 506 canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, paint); |
| 507 } | 507 } |
| 508 } | 508 } |
| 509 | 509 |
| 510 /////////////////////////////////////////////////////////////////////////////// | 510 /////////////////////////////////////////////////////////////////////////////// |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 | 544 |
| 545 static void drawTextOnPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op3
2, | 545 static void drawTextOnPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op3
2, |
| 546 SkGPipeState* state) { | 546 SkGPipeState* state) { |
| 547 size_t len = reader->readU32(); | 547 size_t len = reader->readU32(); |
| 548 const void* text = reader->skip(SkAlign4(len)); | 548 const void* text = reader->skip(SkAlign4(len)); |
| 549 | 549 |
| 550 SkPath path; | 550 SkPath path; |
| 551 reader->readPath(&path); | 551 reader->readPath(&path); |
| 552 | 552 |
| 553 SkMatrix matrixStorage; | 553 SkMatrix matrixStorage; |
| 554 const SkMatrix* matrix = NULL; | 554 const SkMatrix* matrix = nullptr; |
| 555 if (DrawOp_unpackFlags(op32) & kDrawTextOnPath_HasMatrix_DrawOpFlag) { | 555 if (DrawOp_unpackFlags(op32) & kDrawTextOnPath_HasMatrix_DrawOpFlag) { |
| 556 reader->readMatrix(&matrixStorage); | 556 reader->readMatrix(&matrixStorage); |
| 557 matrix = &matrixStorage; | 557 matrix = &matrixStorage; |
| 558 } | 558 } |
| 559 if (state->shouldDraw()) { | 559 if (state->shouldDraw()) { |
| 560 canvas->drawTextOnPath(text, len, path, matrix, state->paint()); | 560 canvas->drawTextOnPath(text, len, path, matrix, state->paint()); |
| 561 } | 561 } |
| 562 } | 562 } |
| 563 | 563 |
| 564 /////////////////////////////////////////////////////////////////////////////// | 564 /////////////////////////////////////////////////////////////////////////////// |
| 565 | 565 |
| 566 class BitmapHolder : SkNoncopyable { | 566 class BitmapHolder : SkNoncopyable { |
| 567 public: | 567 public: |
| 568 BitmapHolder(SkReader32* reader, uint32_t op32, SkGPipeState* state); | 568 BitmapHolder(SkReader32* reader, uint32_t op32, SkGPipeState* state); |
| 569 ~BitmapHolder() { | 569 ~BitmapHolder() { |
| 570 if (fHeapEntry != NULL) { | 570 if (fHeapEntry != nullptr) { |
| 571 fHeapEntry->releaseRef(); | 571 fHeapEntry->releaseRef(); |
| 572 } | 572 } |
| 573 } | 573 } |
| 574 const SkBitmap* getBitmap() { | 574 const SkBitmap* getBitmap() { |
| 575 return fBitmap; | 575 return fBitmap; |
| 576 } | 576 } |
| 577 private: | 577 private: |
| 578 SkBitmapHeapEntry* fHeapEntry; | 578 SkBitmapHeapEntry* fHeapEntry; |
| 579 const SkBitmap* fBitmap; | 579 const SkBitmap* fBitmap; |
| 580 SkBitmap fBitmapStorage; | 580 SkBitmap fBitmapStorage; |
| 581 }; | 581 }; |
| 582 | 582 |
| 583 BitmapHolder::BitmapHolder(SkReader32* reader, uint32_t op32, | 583 BitmapHolder::BitmapHolder(SkReader32* reader, uint32_t op32, |
| 584 SkGPipeState* state) { | 584 SkGPipeState* state) { |
| 585 const unsigned flags = state->getFlags(); | 585 const unsigned flags = state->getFlags(); |
| 586 const unsigned index = DrawOp_unpackData(op32); | 586 const unsigned index = DrawOp_unpackData(op32); |
| 587 if (shouldFlattenBitmaps(flags)) { | 587 if (shouldFlattenBitmaps(flags)) { |
| 588 fHeapEntry = NULL; | 588 fHeapEntry = nullptr; |
| 589 fBitmap = state->getBitmap(index); | 589 fBitmap = state->getBitmap(index); |
| 590 } else { | 590 } else { |
| 591 SkBitmapHeapEntry* entry = state->getSharedHeap()->getEntry(index); | 591 SkBitmapHeapEntry* entry = state->getSharedHeap()->getEntry(index); |
| 592 if (SkToBool(flags & SkGPipeWriter::kSimultaneousReaders_Flag)) { | 592 if (SkToBool(flags & SkGPipeWriter::kSimultaneousReaders_Flag)) { |
| 593 // Make a shallow copy for thread safety. Each thread will point to
the same SkPixelRef, | 593 // Make a shallow copy for thread safety. Each thread will point to
the same SkPixelRef, |
| 594 // which is thread safe. | 594 // which is thread safe. |
| 595 fBitmapStorage = *entry->getBitmap(); | 595 fBitmapStorage = *entry->getBitmap(); |
| 596 fBitmap = &fBitmapStorage; | 596 fBitmap = &fBitmapStorage; |
| 597 // Release the ref on the bitmap now, since we made our own copy. | 597 // Release the ref on the bitmap now, since we made our own copy. |
| 598 entry->releaseRef(); | 598 entry->releaseRef(); |
| 599 fHeapEntry = NULL; | 599 fHeapEntry = nullptr; |
| 600 } else { | 600 } else { |
| 601 SkASSERT(!shouldFlattenBitmaps(flags)); | 601 SkASSERT(!shouldFlattenBitmaps(flags)); |
| 602 SkASSERT(!SkToBool(flags & SkGPipeWriter::kSimultaneousReaders_Flag)
); | 602 SkASSERT(!SkToBool(flags & SkGPipeWriter::kSimultaneousReaders_Flag)
); |
| 603 fHeapEntry = entry; | 603 fHeapEntry = entry; |
| 604 fBitmap = fHeapEntry->getBitmap(); | 604 fBitmap = fHeapEntry->getBitmap(); |
| 605 } | 605 } |
| 606 } | 606 } |
| 607 } | 607 } |
| 608 | 608 |
| 609 static void drawBitmap_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 609 static void drawBitmap_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 610 SkGPipeState* state) { | 610 SkGPipeState* state) { |
| 611 BitmapHolder holder(reader, op32, state); | 611 BitmapHolder holder(reader, op32, state); |
| 612 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); | 612 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); |
| 613 SkScalar left = reader->readScalar(); | 613 SkScalar left = reader->readScalar(); |
| 614 SkScalar top = reader->readScalar(); | 614 SkScalar top = reader->readScalar(); |
| 615 const SkBitmap* bitmap = holder.getBitmap(); | 615 const SkBitmap* bitmap = holder.getBitmap(); |
| 616 if (state->shouldDraw()) { | 616 if (state->shouldDraw()) { |
| 617 canvas->drawBitmap(*bitmap, left, top, hasPaint ? &state->paint() : NULL
); | 617 canvas->drawBitmap(*bitmap, left, top, hasPaint ? &state->paint() : null
ptr); |
| 618 } | 618 } |
| 619 } | 619 } |
| 620 | 620 |
| 621 static void drawBitmapNine_rp(SkCanvas* canvas, SkReader32* reader, | 621 static void drawBitmapNine_rp(SkCanvas* canvas, SkReader32* reader, |
| 622 uint32_t op32, SkGPipeState* state) { | 622 uint32_t op32, SkGPipeState* state) { |
| 623 BitmapHolder holder(reader, op32, state); | 623 BitmapHolder holder(reader, op32, state); |
| 624 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); | 624 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); |
| 625 const SkIRect* center = skip<SkIRect>(reader); | 625 const SkIRect* center = skip<SkIRect>(reader); |
| 626 const SkRect* dst = skip<SkRect>(reader); | 626 const SkRect* dst = skip<SkRect>(reader); |
| 627 const SkBitmap* bitmap = holder.getBitmap(); | 627 const SkBitmap* bitmap = holder.getBitmap(); |
| 628 if (state->shouldDraw()) { | 628 if (state->shouldDraw()) { |
| 629 canvas->drawBitmapNine(*bitmap, *center, *dst, | 629 canvas->drawBitmapNine(*bitmap, *center, *dst, |
| 630 hasPaint ? &state->paint() : NULL); | 630 hasPaint ? &state->paint() : nullptr); |
| 631 } | 631 } |
| 632 } | 632 } |
| 633 | 633 |
| 634 static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader, | 634 static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader, |
| 635 uint32_t op32, SkGPipeState* state) { | 635 uint32_t op32, SkGPipeState* state) { |
| 636 BitmapHolder holder(reader, op32, state); | 636 BitmapHolder holder(reader, op32, state); |
| 637 unsigned flags = DrawOp_unpackFlags(op32); | 637 unsigned flags = DrawOp_unpackFlags(op32); |
| 638 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); | 638 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); |
| 639 bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); | 639 bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); |
| 640 const SkRect* src; | 640 const SkRect* src; |
| 641 if (hasSrc) { | 641 if (hasSrc) { |
| 642 src = skip<SkRect>(reader); | 642 src = skip<SkRect>(reader); |
| 643 } else { | 643 } else { |
| 644 src = NULL; | 644 src = nullptr; |
| 645 } | 645 } |
| 646 SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint
; | 646 SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint
; |
| 647 if (flags & kDrawBitmap_Bleed_DrawOpFlag) { | 647 if (flags & kDrawBitmap_Bleed_DrawOpFlag) { |
| 648 constraint = SkCanvas::kFast_SrcRectConstraint; | 648 constraint = SkCanvas::kFast_SrcRectConstraint; |
| 649 } | 649 } |
| 650 const SkRect* dst = skip<SkRect>(reader); | 650 const SkRect* dst = skip<SkRect>(reader); |
| 651 const SkBitmap* bitmap = holder.getBitmap(); | 651 const SkBitmap* bitmap = holder.getBitmap(); |
| 652 if (state->shouldDraw()) { | 652 if (state->shouldDraw()) { |
| 653 canvas->legacy_drawBitmapRect(*bitmap, src, *dst, hasPaint ? &state->pai
nt() : NULL, constraint); | 653 canvas->legacy_drawBitmapRect(*bitmap, src, *dst, hasPaint ? &state->pai
nt() : nullptr, constraint); |
| 654 } | 654 } |
| 655 } | 655 } |
| 656 | 656 |
| 657 static void drawSprite_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 657 static void drawSprite_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 658 SkGPipeState* state) { | 658 SkGPipeState* state) { |
| 659 BitmapHolder holder(reader, op32, state); | 659 BitmapHolder holder(reader, op32, state); |
| 660 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); | 660 bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_Dra
wOpFlag); |
| 661 const SkIPoint* point = skip<SkIPoint>(reader); | 661 const SkIPoint* point = skip<SkIPoint>(reader); |
| 662 const SkBitmap* bitmap = holder.getBitmap(); | 662 const SkBitmap* bitmap = holder.getBitmap(); |
| 663 if (state->shouldDraw()) { | 663 if (state->shouldDraw()) { |
| 664 canvas->drawSprite(*bitmap, point->fX, point->fY, hasPaint ? &state->pai
nt() : NULL); | 664 canvas->drawSprite(*bitmap, point->fX, point->fY, hasPaint ? &state->pai
nt() : nullptr); |
| 665 } | 665 } |
| 666 } | 666 } |
| 667 | 667 |
| 668 static void drawImage_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, Sk
GPipeState* state) { | 668 static void drawImage_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, Sk
GPipeState* state) { |
| 669 unsigned slot = DrawOp_unpackData(op32); | 669 unsigned slot = DrawOp_unpackData(op32); |
| 670 unsigned flags = DrawOp_unpackFlags(op32); | 670 unsigned flags = DrawOp_unpackFlags(op32); |
| 671 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); | 671 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); |
| 672 SkScalar x = reader->readScalar(); | 672 SkScalar x = reader->readScalar(); |
| 673 SkScalar y = reader->readScalar(); | 673 SkScalar y = reader->readScalar(); |
| 674 const SkImage* image = state->getImage(slot); | 674 const SkImage* image = state->getImage(slot); |
| 675 if (state->shouldDraw()) { | 675 if (state->shouldDraw()) { |
| 676 canvas->drawImage(image, x, y, hasPaint ? &state->paint() : NULL); | 676 canvas->drawImage(image, x, y, hasPaint ? &state->paint() : nullptr); |
| 677 } | 677 } |
| 678 } | 678 } |
| 679 | 679 |
| 680 static void drawImageRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32
, | 680 static void drawImageRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32
, |
| 681 SkGPipeState* state) { | 681 SkGPipeState* state) { |
| 682 unsigned slot = DrawOp_unpackData(op32); | 682 unsigned slot = DrawOp_unpackData(op32); |
| 683 unsigned flags = DrawOp_unpackFlags(op32); | 683 unsigned flags = DrawOp_unpackFlags(op32); |
| 684 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); | 684 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); |
| 685 bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); | 685 bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); |
| 686 const SkRect* src = NULL; | 686 const SkRect* src = nullptr; |
| 687 if (hasSrc) { | 687 if (hasSrc) { |
| 688 src = skip<SkRect>(reader); | 688 src = skip<SkRect>(reader); |
| 689 } | 689 } |
| 690 const SkRect* dst = skip<SkRect>(reader); | 690 const SkRect* dst = skip<SkRect>(reader); |
| 691 SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstraint)reader
->readInt(); | 691 SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstraint)reader
->readInt(); |
| 692 | 692 |
| 693 const SkImage* image = state->getImage(slot); | 693 const SkImage* image = state->getImage(slot); |
| 694 if (state->shouldDraw()) { | 694 if (state->shouldDraw()) { |
| 695 canvas->legacy_drawImageRect(image, src, *dst, hasPaint ? &state->paint(
) : NULL, constraint); | 695 canvas->legacy_drawImageRect(image, src, *dst, hasPaint ? &state->paint(
) : nullptr, constraint); |
| 696 } | 696 } |
| 697 } | 697 } |
| 698 | 698 |
| 699 static void drawImageNine_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32
, | 699 static void drawImageNine_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32
, |
| 700 SkGPipeState* state) { | 700 SkGPipeState* state) { |
| 701 unsigned slot = DrawOp_unpackData(op32); | 701 unsigned slot = DrawOp_unpackData(op32); |
| 702 unsigned flags = DrawOp_unpackFlags(op32); | 702 unsigned flags = DrawOp_unpackFlags(op32); |
| 703 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); | 703 bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); |
| 704 const SkIRect* center = skip<SkIRect>(reader); | 704 const SkIRect* center = skip<SkIRect>(reader); |
| 705 const SkRect* dst = skip<SkRect>(reader); | 705 const SkRect* dst = skip<SkRect>(reader); |
| 706 const SkImage* image = state->getImage(slot); | 706 const SkImage* image = state->getImage(slot); |
| 707 if (state->shouldDraw()) { | 707 if (state->shouldDraw()) { |
| 708 canvas->drawImageNine(image, *center, *dst, hasPaint ? &state->paint() :
NULL); | 708 canvas->drawImageNine(image, *center, *dst, hasPaint ? &state->paint() :
nullptr); |
| 709 } | 709 } |
| 710 } | 710 } |
| 711 | 711 |
| 712 /////////////////////////////////////////////////////////////////////////////// | 712 /////////////////////////////////////////////////////////////////////////////// |
| 713 | 713 |
| 714 static void drawPicture_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, | 714 static void drawPicture_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, |
| 715 SkGPipeState* state) { | 715 SkGPipeState* state) { |
| 716 UNIMPLEMENTED | 716 UNIMPLEMENTED |
| 717 } | 717 } |
| 718 | 718 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 static void annotation_rp(SkCanvas*, SkReader32* reader, uint32_t op32, | 805 static void annotation_rp(SkCanvas*, SkReader32* reader, uint32_t op32, |
| 806 SkGPipeState* state) { | 806 SkGPipeState* state) { |
| 807 SkPaint* p = state->editPaint(); | 807 SkPaint* p = state->editPaint(); |
| 808 | 808 |
| 809 const size_t size = DrawOp_unpackData(op32); | 809 const size_t size = DrawOp_unpackData(op32); |
| 810 if (size > 0) { | 810 if (size > 0) { |
| 811 SkReadBuffer buffer(reader->skip(size), size); | 811 SkReadBuffer buffer(reader->skip(size), size); |
| 812 p->setAnnotation(SkAnnotation::Create(buffer))->unref(); | 812 p->setAnnotation(SkAnnotation::Create(buffer))->unref(); |
| 813 SkASSERT(buffer.offset() == size); | 813 SkASSERT(buffer.offset() == size); |
| 814 } else { | 814 } else { |
| 815 p->setAnnotation(NULL); | 815 p->setAnnotation(nullptr); |
| 816 } | 816 } |
| 817 } | 817 } |
| 818 | 818 |
| 819 /////////////////////////////////////////////////////////////////////////////// | 819 /////////////////////////////////////////////////////////////////////////////// |
| 820 | 820 |
| 821 static void def_Typeface_rp(SkCanvas*, SkReader32*, uint32_t, SkGPipeState* stat
e) { | 821 static void def_Typeface_rp(SkCanvas*, SkReader32*, uint32_t, SkGPipeState* stat
e) { |
| 822 state->addTypeface(); | 822 state->addTypeface(); |
| 823 } | 823 } |
| 824 | 824 |
| 825 static void def_PaintFlat_rp(SkCanvas*, SkReader32*, uint32_t op32, | 825 static void def_PaintFlat_rp(SkCanvas*, SkReader32*, uint32_t op32, |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 shareBitmapHeap_rp, | 918 shareBitmapHeap_rp, |
| 919 shareImageHeap_rp, | 919 shareImageHeap_rp, |
| 920 done_rp | 920 done_rp |
| 921 }; | 921 }; |
| 922 | 922 |
| 923 /////////////////////////////////////////////////////////////////////////////// | 923 /////////////////////////////////////////////////////////////////////////////// |
| 924 | 924 |
| 925 SkGPipeState::SkGPipeState() | 925 SkGPipeState::SkGPipeState() |
| 926 : fReader(0) | 926 : fReader(0) |
| 927 , fSilent(false) | 927 , fSilent(false) |
| 928 , fSharedHeap(NULL) | 928 , fSharedHeap(nullptr) |
| 929 , fFlags(0) { | 929 , fFlags(0) { |
| 930 | 930 |
| 931 } | 931 } |
| 932 | 932 |
| 933 SkGPipeState::~SkGPipeState() { | 933 SkGPipeState::~SkGPipeState() { |
| 934 fTypefaces.safeUnrefAll(); | 934 fTypefaces.safeUnrefAll(); |
| 935 fFlatArray.safeUnrefAll(); | 935 fFlatArray.safeUnrefAll(); |
| 936 fBitmaps.deleteAll(); | 936 fBitmaps.deleteAll(); |
| 937 SkSafeUnref(fSharedHeap); | 937 SkSafeUnref(fSharedHeap); |
| 938 } | 938 } |
| 939 | 939 |
| 940 /////////////////////////////////////////////////////////////////////////////// | 940 /////////////////////////////////////////////////////////////////////////////// |
| 941 | 941 |
| 942 #include "SkGPipe.h" | 942 #include "SkGPipe.h" |
| 943 | 943 |
| 944 SkGPipeReader::SkGPipeReader() { | 944 SkGPipeReader::SkGPipeReader() { |
| 945 fCanvas = NULL; | 945 fCanvas = nullptr; |
| 946 fState = NULL; | 946 fState = nullptr; |
| 947 fProc = NULL; | 947 fProc = nullptr; |
| 948 } | 948 } |
| 949 | 949 |
| 950 SkGPipeReader::SkGPipeReader(SkCanvas* target) { | 950 SkGPipeReader::SkGPipeReader(SkCanvas* target) { |
| 951 fCanvas = NULL; | 951 fCanvas = nullptr; |
| 952 this->setCanvas(target); | 952 this->setCanvas(target); |
| 953 fState = NULL; | 953 fState = nullptr; |
| 954 fProc = NULL; | 954 fProc = nullptr; |
| 955 } | 955 } |
| 956 | 956 |
| 957 void SkGPipeReader::setCanvas(SkCanvas *target) { | 957 void SkGPipeReader::setCanvas(SkCanvas *target) { |
| 958 SkRefCnt_SafeAssign(fCanvas, target); | 958 SkRefCnt_SafeAssign(fCanvas, target); |
| 959 } | 959 } |
| 960 | 960 |
| 961 SkGPipeReader::~SkGPipeReader() { | 961 SkGPipeReader::~SkGPipeReader() { |
| 962 SkSafeUnref(fCanvas); | 962 SkSafeUnref(fCanvas); |
| 963 delete fState; | 963 delete fState; |
| 964 } | 964 } |
| 965 | 965 |
| 966 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, | 966 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, |
| 967 uint32_t playbackFlags, size_t* by
tesRead) { | 967 uint32_t playbackFlags, size_t* by
tesRead) { |
| 968 if (NULL == fCanvas) { | 968 if (nullptr == fCanvas) { |
| 969 return kError_Status; | 969 return kError_Status; |
| 970 } | 970 } |
| 971 | 971 |
| 972 if (NULL == fState) { | 972 if (nullptr == fState) { |
| 973 fState = new SkGPipeState; | 973 fState = new SkGPipeState; |
| 974 } | 974 } |
| 975 | 975 |
| 976 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); | 976 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); |
| 977 | 977 |
| 978 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); | 978 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); |
| 979 | 979 |
| 980 const ReadProc* table = gReadTable; | 980 const ReadProc* table = gReadTable; |
| 981 SkReadBuffer reader(data, length); | 981 SkReadBuffer reader(data, length); |
| 982 reader.setBitmapDecoder(fProc); | 982 reader.setBitmapDecoder(fProc); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1008 status = kReadAtom_Status; | 1008 status = kReadAtom_Status; |
| 1009 break; | 1009 break; |
| 1010 } | 1010 } |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 if (bytesRead) { | 1013 if (bytesRead) { |
| 1014 *bytesRead = reader.offset(); | 1014 *bytesRead = reader.offset(); |
| 1015 } | 1015 } |
| 1016 return status; | 1016 return status; |
| 1017 } | 1017 } |
| OLD | NEW |