bool SkPictureRecord::clipRegion(const SkRegion& region, SkRegion::Op op) { addDraw(CLIP_REGION); addRegion(region); addInt(ClipParams_pack(op, false)); recordRestoreOffsetPlaceholder(op); validate(); return this->INHERITED::clipRegion(region, op); }
bool SkPictureRecord::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { addDraw(CLIP_RECT); addRect(rect); addInt(ClipParams_pack(op, doAA)); recordRestoreOffsetPlaceholder(op); validate(); return this->INHERITED::clipRect(rect, op, doAA); }
size_t SkPictureRecord::recordClipPath(int pathID, SkClipOp op, bool doAA) { // op + path index + clip params size_t size = 3 * kUInt32Size; // recordRestoreOffsetPlaceholder doesn't always write an offset if (!fRestoreOffsetStack.isEmpty()) { // + restore offset size += kUInt32Size; } size_t initialOffset = this->addDraw(CLIP_PATH, &size); this->addInt(pathID); this->addInt(ClipParams_pack(op, doAA)); size_t offset = recordRestoreOffsetPlaceholder(op); this->validate(initialOffset, size); return offset; }
size_t SkPictureRecord::recordClipRRect(const SkRRect& rrect, SkClipOp op, bool doAA) { // op + rrect + clip params size_t size = 1 * kUInt32Size + SkRRect::kSizeInMemory + 1 * kUInt32Size; // recordRestoreOffsetPlaceholder doesn't always write an offset if (!fRestoreOffsetStack.isEmpty()) { // + restore offset size += kUInt32Size; } size_t initialOffset = this->addDraw(CLIP_RRECT, &size); this->addRRect(rrect); this->addInt(ClipParams_pack(op, doAA)); size_t offset = recordRestoreOffsetPlaceholder(op); this->validate(initialOffset, size); return offset; }
bool SkPictureRecord::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { addDraw(CLIP_PATH); addPath(path); addInt(ClipParams_pack(op, doAA)); this->recordOffsetForRestore(op); validate(); if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) { return this->INHERITED::clipRect(path.getBounds(), op, doAA); } else { return this->INHERITED::clipPath(path, op, doAA); } }
size_t SkPictureRecord::recordClipRegion(const SkRegion& region, SkClipOp op) { // op + clip params + region size_t size = 2 * kUInt32Size + region.writeToMemory(nullptr); // recordRestoreOffsetPlaceholder doesn't always write an offset if (!fRestoreOffsetStack.isEmpty()) { // + restore offset size += kUInt32Size; } size_t initialOffset = this->addDraw(CLIP_REGION, &size); this->addRegion(region); this->addInt(ClipParams_pack(op, false)); size_t offset = this->recordRestoreOffsetPlaceholder(op); this->validate(initialOffset, size); return offset; }
bool SkPictureRecord::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) { if (rrect.isRect()) { return this->SkPictureRecord::clipRect(rrect.getBounds(), op, doAA); } addDraw(CLIP_RRECT); addRRect(rrect); addInt(ClipParams_pack(op, doAA)); recordRestoreOffsetPlaceholder(op); validate(); if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) { return this->INHERITED::clipRect(rrect.getBounds(), op, doAA); } else { return this->INHERITED::clipRRect(rrect, op, doAA); } }
bool SkPictureRecord::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { SkRect r; if (!path.isInverseFillType() && path.isRect(&r)) { return this->clipRect(r, op, doAA); } addDraw(CLIP_PATH); addPath(path); addInt(ClipParams_pack(op, doAA)); recordRestoreOffsetPlaceholder(op); validate(); if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) { return this->INHERITED::clipRect(path.getBounds(), op, doAA); } else { return this->INHERITED::clipPath(path, op, doAA); } }