in the clip rect, viewport must be accumulated to the smaller one.
this patch improves that corner-case.
//Case A: Fast Track Rectangle Drawing
if (!hasComposite && (shape->rect = _fastTrack(shape->outline))) return true;
//Case B: Normale Shape RLE Drawing
- if ((shape->rle = rleRender(shape->rle, shape->outline, shape->bbox,antiAlias))) return true;
+ if ((shape->rle = rleRender(shape->rle, shape->outline, shape->bbox, antiAlias))) return true;
return false;
}
RenderRegion viewport2;
if ((cmpFastTrack = _clipPathFastTrack(cmpTarget, pTransform, viewport2))) {
viewport = renderer.viewport();
+ viewport2.merge(viewport);
renderer.viewport(viewport2);
}
}
struct RenderRegion {
uint32_t x, y, w, h;
+
+ void merge(const RenderRegion& rhs)
+ {
+ auto x1 = x + w;
+ auto y1 = y + h;
+ auto x2 = rhs.x + rhs.w;
+ auto y2 = rhs.y + rhs.h;
+
+ x = max(x, rhs.x);
+ y = max(y, rhs.y);
+ w = min(x1, x2) - x;
+ h = min(y1, y2) - y;
+ }
};
struct RenderTransform