void SkPictureRecord::drawRRect(const SkRRect& rrect, const SkPaint& paint) { if (rrect.isRect()) { addDraw(DRAW_RECT); addPaint(paint); addRect(rrect.getBounds()); } else if (rrect.isOval()) { addDraw(DRAW_OVAL); addPaint(paint); addRect(rrect.getBounds()); } else { addDraw(DRAW_RRECT); addPaint(paint); addRRect(rrect); } validate(); }
void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode*, const uint16_t indices[], int indexCount, const SkPaint& paint) { uint32_t flags = 0; if (texs) { flags |= DRAW_VERTICES_HAS_TEXS; } if (colors) { flags |= DRAW_VERTICES_HAS_COLORS; } if (indexCount > 0) { flags |= DRAW_VERTICES_HAS_INDICES; } addDraw(DRAW_VERTICES); addPaint(paint); addInt(flags); addInt(vmode); addInt(vertexCount); addPoints(vertices, vertexCount); if (flags & DRAW_VERTICES_HAS_TEXS) { addPoints(texs, vertexCount); } if (flags & DRAW_VERTICES_HAS_COLORS) { fWriter.writeMul4(colors, vertexCount * sizeof(SkColor)); } if (flags & DRAW_VERTICES_HAS_INDICES) { addInt(indexCount); fWriter.writePad(indices, indexCount * sizeof(uint16_t)); } }
void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint) { size_t points = paint.countText(text, byteLength); if (0 == points) return; bool fast = paint.canComputeFastBounds(); addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : DRAW_POS_TEXT_H); addPaint(paint); addText(text, byteLength); addInt(points); #ifdef SK_DEBUG_SIZE size_t start = fWriter.size(); #endif if (fast) { addFontMetricsTopBottom(paint, constY); } addScalar(constY); fWriter.writeMul4(xpos, points * sizeof(SkScalar)); #ifdef SK_DEBUG_SIZE fPointBytes += fWriter.size() - start; fPointWrites += points; #endif validate(); }
void SkPictureRecord::drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint& paint) { addDraw(DRAW_POINTS); addPaint(paint); addInt(mode); addInt(count); fWriter.writeMul4(pts, count * sizeof(SkPoint)); validate(); }
void SkPictureRecord::drawTextOnPath(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { addDraw(DRAW_TEXT_ON_PATH); addPaint(paint); addText(text, byteLength); addPath(path); addMatrixPtr(matrix); validate(); }
void SkPictureRecord::drawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint) { size_t points = paint.countText(text, byteLength); if (0 == points) return; bool canUseDrawH = true; // check if the caller really should have used drawPosTextH() { const SkScalar firstY = pos[0].fY; for (size_t index = 1; index < points; index++) { if (pos[index].fY != firstY) { canUseDrawH = false; break; } } } bool fast = canUseDrawH && paint.canComputeFastBounds(); if (fast) { addDraw(DRAW_POS_TEXT_H_TOP_BOTTOM); } else { addDraw(canUseDrawH ? DRAW_POS_TEXT_H : DRAW_POS_TEXT); } addPaint(paint); addText(text, byteLength); addInt(points); #ifdef SK_DEBUG_SIZE size_t start = fWriter.size(); #endif if (canUseDrawH) { if (fast) { addFontMetricsTopBottom(paint, pos[0].fY); } addScalar(pos[0].fY); SkScalar* xptr = (SkScalar*)fWriter.reserve(points * sizeof(SkScalar)); for (size_t index = 0; index < points; index++) *xptr++ = pos[index].fX; } else { fWriter.writeMul4(pos, points * sizeof(SkPoint)); } #ifdef SK_DEBUG_SIZE fPointBytes += fWriter.size() - start; fPointWrites += points; #endif validate(); }
void SkPictureRecord::drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) { bool fast = paint.canComputeFastBounds(); addDraw(fast ? DRAW_TEXT_TOP_BOTTOM : DRAW_TEXT); addPaint(paint); addText(text, byteLength); addScalar(x); addScalar(y); if (fast) { addFontMetricsTopBottom(paint, y); } validate(); }
void SkPictureRecord::drawPath(const SkPath& path, const SkPaint& paint) { addDraw(DRAW_PATH); addPaint(paint); addPath(path); validate(); }
void SkPictureRecord::drawRect(const SkRect& rect, const SkPaint& paint) { addDraw(DRAW_RECT); addPaint(paint); addRect(rect); validate(); }
void SkPictureRecord::drawPaint(const SkPaint& paint) { addDraw(DRAW_PAINT); addPaint(paint); validate(); }
void SkPictureRecord::drawOval(const SkRect& oval, const SkPaint& paint) { addDraw(DRAW_OVAL); addPaint(paint); addRect(oval); validate(); }