diff options
author | scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-30 14:40:01 +0000 |
---|---|---|
committer | scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-30 14:40:01 +0000 |
commit | 6e29c75903762ed024c2e9b7cf0c397a6fee8bbc (patch) | |
tree | 025b9fc65694549db2de298e9493c8cce200e9b1 /pipe/SkGPipeRead.cpp | |
parent | 81fe1c51f0b3b844d5442a838999ad618ddb5f19 (diff) | |
download | src-6e29c75903762ed024c2e9b7cf0c397a6fee8bbc.tar.gz |
Share code in various SkGPipeCanvas::drawBitmap_ calls.
Also implement SkGPipeCanvas::drawBitmapMatrix, and
create a GM to make sure it works properly.
Use a flag instead of writing a bool for determining whether
drawBitmap_ has a paint and whether drawBitmapRect has a source
rectangle.
BUG=
TEST=drawbitmapmatrix GM
Review URL: https://codereview.appspot.com/6450053
git-svn-id: http://skia.googlecode.com/svn/trunk/src@4828 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'pipe/SkGPipeRead.cpp')
-rw-r--r-- | pipe/SkGPipeRead.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/pipe/SkGPipeRead.cpp b/pipe/SkGPipeRead.cpp index 450f19ce..41650b17 100644 --- a/pipe/SkGPipeRead.cpp +++ b/pipe/SkGPipeRead.cpp @@ -407,7 +407,7 @@ BitmapHolder::BitmapHolder(SkReader32* reader, uint32_t op32, static void drawBitmap_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); - bool hasPaint = reader->readBool(); + bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpsFlag); SkScalar left = reader->readScalar(); SkScalar top = reader->readScalar(); canvas->drawBitmap(*holder.getBitmap(), left, top, hasPaint ? &state->paint() : NULL); @@ -415,13 +415,18 @@ static void drawBitmap_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, static void drawBitmapMatrix_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { - UNIMPLEMENTED + BitmapHolder holder(reader, op32, state); + bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpsFlag); + SkMatrix matrix; + reader->readMatrix(&matrix); + canvas->drawBitmapMatrix(*holder.getBitmap(), matrix, + hasPaint ? &state->paint() : NULL); } static void drawBitmapNine_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); - bool hasPaint = reader->readBool(); + bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpsFlag); const SkIRect* center = skip<SkIRect>(reader); const SkRect* dst = skip<SkRect>(reader); canvas->drawBitmapNine(*holder.getBitmap(), *center, *dst, @@ -431,8 +436,9 @@ static void drawBitmapNine_rp(SkCanvas* canvas, SkReader32* reader, static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); - bool hasPaint = reader->readBool(); - bool hasSrc = reader->readBool(); + unsigned flags = DrawOp_unpackFlags(op32); + bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpsFlag); + bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpsFlag); const SkIRect* src; if (hasSrc) { src = skip<SkIRect>(reader); @@ -446,7 +452,7 @@ static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader, static void drawSprite_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); - bool hasPaint = reader->readBool(); + bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpsFlag); const SkIPoint* point = skip<SkIPoint>(reader); canvas->drawSprite(*holder.getBitmap(), point->fX, point->fY, hasPaint ? &state->paint() : NULL); } |