scrollXListener method
void
scrollXListener()
Implementation
void scrollXListener() {
final ScrollListener? listener = scrollListener;
final ViewportOffset? offset = scrollOffsetX;
// If scroll is happening while the render object is being torn down, ignore
// late notifications from the ScrollPosition/ViewportOffset.
if (listener == null || offset == null) {
return;
}
if (DebugFlags.debugLogScrollableEnabled) {
final double maxX = math.max(
0.0, (_scrollableSize?.width ?? 0) - (_viewportSize?.width ?? 0));
renderingLogger.finer(
'[Overflow-Scroll] <${renderStyle.target.tagName.toLowerCase()}> X pixels='
'${offset.pixels.toStringAsFixed(2)} max=${maxX.toStringAsFixed(2)}');
}
final AxisDirection dir = (renderStyle.direction == TextDirection.rtl)
? AxisDirection.left
: AxisDirection.right;
listener(offset.pixels, dir);
if (DebugFlags.debugLogSemanticsEnabled ||
DebugFlags.debugLogScrollableEnabled) {
debugPrint('[webf][a11y][scroll] ${renderStyle.target} '
'scrollX=${offset.pixels.toStringAsFixed(2)} '
'viewport=${_viewportSize?.width.toStringAsFixed(1) ?? '?'} '
'content=${_scrollableSize?.width.toStringAsFixed(1) ?? '?'} '
'→ markNeedsSemanticsUpdate');
}
// Keep semantics tree in sync with new scroll offset so accessibility
// focus/geometry follows the visible content after programmatic scrolls.
markNeedsSemanticsUpdate();
markNeedsPaint();
}