static void drawPoints_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { SkCanvas::PointMode mode = (SkCanvas::PointMode)DrawOp_unpackFlags(op32); size_t count = reader->readU32(); const SkPoint* pts = skip<SkPoint>(reader, count); canvas->drawPoints(mode, count, pts, state->paint()); }
static void drawVertices_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); SkCanvas::VertexMode mode = (SkCanvas::VertexMode)reader->readU32(); int vertexCount = reader->readU32(); const SkPoint* verts = skip<SkPoint>(reader, vertexCount); const SkPoint* texs = NULL; if (flags & kDrawVertices_HasTexs_DrawOpFlag) { texs = skip<SkPoint>(reader, vertexCount); } const SkColor* colors = NULL; if (flags & kDrawVertices_HasColors_DrawOpFlag) { colors = skip<SkColor>(reader, vertexCount); } // TODO: flatten/unflatten xfermodes SkXfermode* xfer = NULL; int indexCount = 0; const uint16_t* indices = NULL; if (flags & kDrawVertices_HasIndices_DrawOpFlag) { indexCount = reader->readU32(); indices = skipAlign<uint16_t>(reader, indexCount); } canvas->drawVertices(mode, vertexCount, verts, texs, colors, xfer, indices, indexCount, state->paint()); }
static void drawAtlas_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); const SkPaint* paint = NULL; if (flags & kDrawAtlas_HasPaint_DrawOpFlag) { paint = &state->paint(); } const int slot = reader->readU32(); const SkImage* atlas = state->getImage(slot); const int count = reader->readU32(); SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); const SkRSXform* xform = skip<SkRSXform>(reader, count); const SkRect* tex = skip<SkRect>(reader, count); const SkColor* colors = NULL; if (flags & kDrawAtlas_HasColors_DrawOpFlag) { colors = skip<SkColor>(reader, count); } const SkRect* cull = NULL; if (flags & kDrawAtlas_HasCull_DrawOpFlag) { cull = skip<SkRect>(reader, 1); } if (state->shouldDraw()) { canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, paint); } }
static void drawVertices_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readU32(); int vertexCount = reader->readU32(); const SkPoint* verts = skip<SkPoint>(reader, vertexCount); const SkPoint* texs = NULL; if (flags & kDrawVertices_HasTexs_DrawOpFlag) { texs = skip<SkPoint>(reader, vertexCount); } const SkColor* colors = NULL; if (flags & kDrawVertices_HasColors_DrawOpFlag) { colors = skip<SkColor>(reader, vertexCount); } SkAutoTUnref<SkXfermode> xfer; if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { SkXfermode::Mode mode = (SkXfermode::Mode)reader->readU32(); xfer.reset(SkXfermode::Create(mode)); } int indexCount = 0; const uint16_t* indices = NULL; if (flags & kDrawVertices_HasIndices_DrawOpFlag) { indexCount = reader->readU32(); indices = skipAlign<uint16_t>(reader, indexCount); } if (state->shouldDraw()) { canvas->drawVertices(vmode, vertexCount, verts, texs, colors, xfer, indices, indexCount, state->paint()); } }
static void drawPatch_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); const SkPoint* cubics = skip<SkPoint>(reader, SkPatchUtils::kNumCtrlPts); const SkColor* colors = NULL; if (flags & kDrawVertices_HasColors_DrawOpFlag) { colors = skip<SkColor>(reader, SkPatchUtils::kNumCorners); } const SkPoint* texCoords = NULL; if (flags & kDrawVertices_HasTexs_DrawOpFlag) { texCoords = skip<SkPoint>(reader, SkPatchUtils::kNumCorners); } SkAutoTUnref<SkXfermode> xfer; if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { int mode = reader->readInt(); if (mode < 0 || mode > SkXfermode::kLastMode) { mode = SkXfermode::kModulate_Mode; } xfer.reset(SkXfermode::Create((SkXfermode::Mode)mode)); } if (state->shouldDraw()) { canvas->drawPatch(cubics, colors, texCoords, xfer, state->paint()); } }
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 clipPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { SkPath path; reader->readPath(&path); bool doAA = SkToBool(DrawOp_unpackFlags(op32) & kClip_HasAntiAlias_DrawOpFlag); canvas->clipPath(path, (SkRegion::Op)DrawOp_unpackData(op32), doAA); }
static void drawClear_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { SkColor color = 0; if (DrawOp_unpackFlags(op32) & kClear_HasColor_DrawOpFlag) { color = reader->readU32(); } canvas->clear(color); }
static void drawSprite_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpFlag); const SkIPoint* point = skip<SkIPoint>(reader); const SkBitmap* bitmap = holder.getBitmap(); if (state->shouldDraw()) { canvas->drawSprite(*bitmap, point->fX, point->fY, hasPaint ? &state->paint() : NULL); } }
static void drawBitmap_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpFlag); SkScalar left = reader->readScalar(); SkScalar top = reader->readScalar(); const SkBitmap* bitmap = holder.getBitmap(); if (state->shouldDraw()) { canvas->drawBitmap(*bitmap, left, top, hasPaint ? &state->paint() : NULL); } }
static void drawImage_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned slot = DrawOp_unpackData(op32); unsigned flags = DrawOp_unpackFlags(op32); bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); SkScalar x = reader->readScalar(); SkScalar y = reader->readScalar(); const SkImage* image = state->getImage(slot); if (state->shouldDraw()) { canvas->drawImage(image, x, y, hasPaint ? &state->paint() : NULL); } }
static void drawImageNine_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned slot = DrawOp_unpackData(op32); unsigned flags = DrawOp_unpackFlags(op32); bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); const SkIRect* center = skip<SkIRect>(reader); const SkRect* dst = skip<SkRect>(reader); const SkImage* image = state->getImage(slot); if (state->shouldDraw()) { canvas->drawImageNine(image, *center, *dst, hasPaint ? &state->paint() : NULL); } }
static void saveLayer_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); SkCanvas::SaveFlags saveFlags = (SkCanvas::SaveFlags)DrawOp_unpackData(op32); const SkRect* bounds = NULL; if (flags & kSaveLayer_HasBounds_DrawOpFlag) { bounds = skip<SkRect>(reader); } const SkPaint* paint = NULL; if (flags & kSaveLayer_HasPaint_DrawOpFlag) { paint = &state->paint(); } canvas->saveLayer(bounds, paint, saveFlags); }
static void drawTextOnPath_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { size_t len = reader->readU32(); const void* text = reader->skip(SkAlign4(len)); SkPath path; path.unflatten(*reader); SkMatrix matrixStorage; const SkMatrix* matrix = NULL; if (DrawOp_unpackFlags(op32) & kDrawTextOnPath_HasMatrix_DrawOpFlag) { SkReadMatrix(reader, &matrixStorage); matrix = &matrixStorage; } canvas->drawTextOnPath(text, len, path, matrix, state->paint()); }
static void drawImageRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { unsigned slot = DrawOp_unpackData(op32); unsigned flags = DrawOp_unpackFlags(op32); bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); const SkRect* src = NULL; if (hasSrc) { src = skip<SkRect>(reader); } const SkRect* dst = skip<SkRect>(reader); SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstraint)reader->readInt(); const SkImage* image = state->getImage(slot); if (state->shouldDraw()) { canvas->legacy_drawImageRect(image, src, *dst, hasPaint ? &state->paint() : NULL, constraint); } }
static void drawBitmapRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { BitmapHolder holder(reader, op32, state); unsigned flags = DrawOp_unpackFlags(op32); bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); const SkRect* src; if (hasSrc) { src = skip<SkRect>(reader); } else { src = NULL; } SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint; if (flags & kDrawBitmap_Bleed_DrawOpFlag) { constraint = SkCanvas::kFast_SrcRectConstraint; } const SkRect* dst = skip<SkRect>(reader); const SkBitmap* bitmap = holder.getBitmap(); if (state->shouldDraw()) { canvas->legacy_drawBitmapRect(*bitmap, src, *dst, hasPaint ? &state->paint() : NULL, constraint); } }
static void def_PaintFlat_rp(SkCanvas*, SkReader32*, uint32_t op32, SkGPipeState* state) { PaintFlats pf = (PaintFlats)DrawOp_unpackFlags(op32); unsigned index = DrawOp_unpackData(op32); state->defFlattenable(pf, index); }
static void clipRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { const SkRect* rect = skip<SkRect>(reader); bool doAA = SkToBool(DrawOp_unpackFlags(op32) & kClip_HasAntiAlias_DrawOpFlag); canvas->clipRect(*rect, (SkRegion::Op)DrawOp_unpackData(op32), doAA); }
static void reportFlags_rp(SkCanvas*, SkReader32*, uint32_t op32, SkGPipeState* state) { unsigned flags = DrawOp_unpackFlags(op32); state->setFlags(flags); }