}
if (mClipper) {
- if (mask.empty()) {
- mask = mClipper->rle();
- } else {
- mask = mClipper->rle() & mask;
- }
+ mask = mClipper->rle(mask);
+ if (mask.empty()) return;
}
LOTLayerItem *matte = nullptr;
mRasterizer.rasterize(mPath);
}
-VRle LOTClipperItem::rle()
+VRle LOTClipperItem::rle(const VRle& mask)
{
- return mRasterizer.rle();
+ if (mask.empty())
+ return mRasterizer.rle();
+
+ mMaskedRle.clone(mask);
+ mMaskedRle &= mRasterizer.rle();
+ return mMaskedRle;
}
void LOTCompLayerItem::updateContent()
public:
explicit LOTClipperItem(VSize size): mSize(size){}
void update(const VMatrix &matrix);
- VRle rle();
+ VRle rle(const VRle& mask);
public:
VSize mSize;
VPath mPath;
+ VRle mMaskedRle;
VRasterizer mRasterizer;
};