Chromium Code Reviews| Index: src/pipe/SkGPipeWrite.cpp |
| diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp |
| index 41b02344805ffceb09c1797367a78355024a7e1d..764764aeb3479210ad3be019f672fe030d32e14d 100644 |
| --- a/src/pipe/SkGPipeWrite.cpp |
| +++ b/src/pipe/SkGPipeWrite.cpp |
| @@ -250,6 +250,11 @@ public: |
| const SkPaint*) SK_OVERRIDE; |
| virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, |
| const SkRect& dst, const SkPaint* paint = NULL) SK_OVERRIDE; |
| + virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top, |
| + const SkPaint* paint) SK_OVERRIDE; |
| + virtual void drawImageRect(const SkImage* image, const SkRect* src, |
| + const SkRect& dst, |
| + const SkPaint* paint) SK_OVERRIDE; |
| virtual void drawSprite(const SkBitmap&, int left, int top, |
| const SkPaint*) SK_OVERRIDE; |
| virtual void drawVertices(VertexMode, int vertexCount, |
| @@ -359,6 +364,9 @@ private: |
| bool commonDrawBitmap(const SkBitmap& bm, DrawOps op, unsigned flags, |
| size_t opBytesNeeded, const SkPaint* paint); |
| + bool commonDrawImage(const SkImage* image, DrawOps op, unsigned flags, |
| + size_t opBytesNeeded, const SkPaint* paint); |
| + |
| SkPaint fPaint; |
| void writePaint(const SkPaint&); |
| @@ -471,6 +479,7 @@ SkGPipeCanvas::SkGPipeCanvas(SkGPipeController* controller, |
| } |
| } |
| fFlattenableHeap.setBitmapStorage(fBitmapHeap); |
| + |
| this->doNotify(); |
| } |
| @@ -799,6 +808,73 @@ bool SkGPipeCanvas::commonDrawBitmap(const SkBitmap& bm, DrawOps op, |
| return false; |
| } |
| +bool SkGPipeCanvas::commonDrawImage(const SkImage* image, DrawOps op, |
| + unsigned flags, |
| + size_t opBytesNeeded, |
| + const SkPaint* paint) { |
| + if (fDone) { |
| + return false; |
| + } |
| + |
| + if (paint != NULL) { |
| + flags |= kDrawBitmap_HasPaint_DrawOpFlag; |
| + this->writePaint(*paint); |
| + } |
| + |
| + opBytesNeeded += sizeof (SkImage*); |
| + |
| + if (this->needOpBytes(opBytesNeeded)) { |
| + this->writeOp(op, flags, 0); |
| + |
| + image->ref(); // The SkGPipeReader will have to call unref() |
| + fWriter.writePtr(static_cast<void*>(const_cast<SkImage*>(image))); |
| + |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +void SkGPipeCanvas::drawImage(const SkImage* image, SkScalar left, SkScalar top, |
| + const SkPaint* paint) { |
| + if (is_cross_process(fFlags)){ |
|
reed1
2014/10/01 14:12:39
// We call the inherited because ... ?
Rémi Piotaix
2014/10/01 19:29:58
Done.
|
| + this->INHERITED::drawImage(image, left, top, paint); |
| + } else { |
| + NOTIFY_SETUP(this); |
| + size_t opBytesNeeded = sizeof(SkScalar) * 2; |
| + |
| + if (this->commonDrawImage(image, kDrawImage_DrawOp, 0, opBytesNeeded, paint)) { |
| + fWriter.writeScalar(left); |
| + fWriter.writeScalar(top); |
| + } |
| + } |
| +} |
| + |
| +void SkGPipeCanvas::drawImageRect(const SkImage* image, const SkRect* src, |
| + const SkRect& dst, |
| + const SkPaint* paint) { |
| + if (is_cross_process(fFlags)){ |
|
reed1
2014/10/01 14:12:39
// We call the inherited because ... ?
Rémi Piotaix
2014/10/01 19:29:58
Done.
|
| + this->INHERITED::drawImageRect(image, src, dst, paint); |
| + } else { |
| + NOTIFY_SETUP(this); |
| + size_t opBytesNeeded = sizeof (SkRect); |
| + bool hasSrc = src != NULL; |
| + unsigned flags; |
| + if (hasSrc) { |
| + flags = kDrawImage_HasSrcRect_DrawOpFlag; |
| + opBytesNeeded += sizeof (SkRect); |
| + } else { |
| + flags = 0; |
| + } |
| + |
| + if (this->commonDrawImage(image, kDrawImageRect_DrawOp, flags, opBytesNeeded, paint)) { |
| + if (hasSrc) { |
| + fWriter.writeRect(*src); |
| + } |
| + fWriter.writeRect(dst); |
| + } |
| + } |
| +} |
| + |
| void SkGPipeCanvas::drawBitmap(const SkBitmap& bm, SkScalar left, SkScalar top, |
| const SkPaint* paint) { |
| NOTIFY_SETUP(this); |
| @@ -1090,7 +1166,7 @@ void SkGPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4 |
| const SkPoint texCoords[4], SkXfermode* xmode, |
| const SkPaint& paint) { |
| NOTIFY_SETUP(this); |
| - |
| + |
| size_t size = SkPatchUtils::kNumCtrlPts * sizeof(SkPoint); |
| unsigned flags = 0; |
| if (colors) { |
| @@ -1108,21 +1184,21 @@ void SkGPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4 |
| size += sizeof(int32_t); |
| } |
| } |
| - |
| + |
| this->writePaint(paint); |
| if (this->needOpBytes(size)) { |
| this->writeOp(kDrawPatch_DrawOp, flags, 0); |
| - |
| + |
| fWriter.write(cubics, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint)); |
| - |
| + |
| if (colors) { |
| fWriter.write(colors, SkPatchUtils::kNumCorners * sizeof(SkColor)); |
| } |
| - |
| + |
| if (texCoords) { |
| fWriter.write(texCoords, SkPatchUtils::kNumCorners * sizeof(SkPoint)); |
| } |
| - |
| + |
| if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { |
| SkXfermode::Mode mode = SkXfermode::kModulate_Mode; |
| SkAssertResult(xmode->asMode(&mode)); |