playbookVisibleRect function
The part of element that is on screen, in global coordinates, or null
when none of it is.
The box is clipped to the screen and to every scrollable it sits in.
Implementation
Rect? playbookVisibleRect(Element element) {
if (!element.mounted) return null;
final RenderObject? object = element.renderObject;
if (object is! RenderBox || !object.attached || !object.hasSize) {
return null;
}
Rect rect;
try {
rect = MatrixUtils.transformRect(
object.getTransformTo(null),
Offset.zero & object.size,
);
} catch (_) {
return null;
}
final FlutterView? view = View.maybeOf(element);
if (view != null) {
rect = rect.intersect(
Offset.zero & (view.physicalSize / view.devicePixelRatio),
);
}
element.visitAncestorElements((Element ancestor) {
final RenderObject? render = ancestor is RenderObjectElement
? ancestor.renderObject
: null;
if (render is RenderViewportBase && render.attached && render.hasSize) {
rect = rect.intersect(
MatrixUtils.transformRect(
render.getTransformTo(null),
Offset.zero & render.size,
),
);
}
return true;
});
if (rect.width < 1 || rect.height < 1) return null;
return rect;
}