diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-12-12 19:02:53 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-12-12 19:02:53 +0000 |
commit | 528d8cb43c755e51e09255afced6bd913fa2eaba (patch) | |
tree | c404aebcbe8345df8e2d28dd13b9c87c6328bafd /pipe/SkGPipeRead.cpp | |
parent | 25cb17ae1158e6bd818441c4a6f6fc6b3861bc7b (diff) | |
download | src-528d8cb43c755e51e09255afced6bd913fa2eaba.tar.gz |
make RRect and Oval first-class drawing primitives in SkCanvas.
add RRect as a first-class clip primitive.
Review URL: https://codereview.appspot.com/6923058
git-svn-id: http://skia.googlecode.com/svn/trunk/src@6762 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'pipe/SkGPipeRead.cpp')
-rw-r--r-- | pipe/SkGPipeRead.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/pipe/SkGPipeRead.cpp b/pipe/SkGPipeRead.cpp index 1f13dafa..8a86c582 100644 --- a/pipe/SkGPipeRead.cpp +++ b/pipe/SkGPipeRead.cpp @@ -21,6 +21,7 @@ #include "SkOrderedReadBuffer.h" #include "SkPathEffect.h" #include "SkRasterizer.h" +#include "SkRRect.h" #include "SkShader.h" #include "SkTypeface.h" #include "SkXfermode.h" @@ -237,6 +238,14 @@ static void clipRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, canvas->clipRect(*rect, (SkRegion::Op)DrawOp_unpackData(op32), doAA); } +static void clipRRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, + SkGPipeState* state) { + SkRRect rrect; + reader->readRRect(&rrect); + bool doAA = SkToBool(DrawOp_unpackFlags(op32) & kClip_HasAntiAlias_DrawOpFlag); + canvas->clipRRect(rrect, (SkRegion::Op)DrawOp_unpackData(op32), doAA); +} + /////////////////////////////////////////////////////////////////////////////// static void setMatrix_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, @@ -332,6 +341,14 @@ static void drawPoints_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, } } +static void drawOval_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, + SkGPipeState* state) { + const SkRect* rect = skip<SkRect>(reader); + if (state->shouldDraw()) { + canvas->drawOval(*rect, state->paint()); + } +} + static void drawRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { const SkRect* rect = skip<SkRect>(reader); @@ -340,6 +357,15 @@ static void drawRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, } } +static void drawRRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, + SkGPipeState* state) { + SkRRect rrect; + reader->readRRect(&rrect); + if (state->shouldDraw()) { + canvas->drawRRect(rrect, state->paint()); + } +} + static void drawPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { SkPath path; @@ -677,6 +703,7 @@ static const ReadProc gReadTable[] = { clipPath_rp, clipRegion_rp, clipRect_rp, + clipRRect_rp, concat_rp, drawBitmap_rp, drawBitmapMatrix_rp, @@ -684,6 +711,7 @@ static const ReadProc gReadTable[] = { drawBitmapRect_rp, drawClear_rp, drawData_rp, + drawOval_rp, drawPaint_rp, drawPath_rp, drawPicture_rp, @@ -691,6 +719,7 @@ static const ReadProc gReadTable[] = { drawPosText_rp, drawPosTextH_rp, drawRect_rp, + drawRRect_rp, drawSprite_rp, drawText_rp, drawTextOnPath_rp, |