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();
}