detectOffsetOnRenderFluentFragment function

CursorOffset? detectOffsetOnRenderFluentFragment(
  1. RenderFluentFragment fragment,
  2. RenderBox renderBox,
  3. Offset localPosition,
  4. BuildContext context,
  5. Widget widget,
)

Implementation

CursorOffset? detectOffsetOnRenderFluentFragment(RenderFluentFragment fragment, RenderBox renderBox, Offset localPosition, BuildContext context, Widget widget) {
    final fragmentBox = fragment;
    final localInFragment = fragmentBox.globalToLocal(
      renderBox.localToGlobal(localPosition),
    );
    final localOffset = fragment.getOffsetForPosition(localInFragment);
    // Walk up the render tree to find the top-level RenderFluentNode
    final topLevel = _findTopLevelRenderNodeRecursive(fragment);
    if (topLevel != null) {
      final globalOffset = _computeGlobalOffset(topLevel.node, fragment.node, localOffset);
      return CursorOffset(
        id: topLevel.id,
        offset: globalOffset,
      );
    }
    // Fallback: use widget's node (may be Link-relative for nested structures)
    return CursorOffset(
      id: (widget as FluentParagraphWidget).node.id,
      offset: absoluteOffset(fragment, localOffset, widget),
    );
}