resolvePositionGestureDetails function

CursorOffset? resolvePositionGestureDetails(
  1. PositionedGestureDetails details,
  2. BuildContext context,
  3. Widget widget
)

Implementation

CursorOffset? resolvePositionGestureDetails(PositionedGestureDetails details, BuildContext context, Widget widget) {
  final renderBox = context.findRenderObject() as RenderBox;
  final result = BoxHitTestResult();
  final localPosition = renderBox.globalToLocal(details.globalPosition);
  renderBox.hitTest(result, position: localPosition);

  //Search for RenderFluentParagraph first
  RenderFluentParagraph? foundParagraph;
  for (final entry in result.path) {
    if (entry.target is RenderFluentParagraph) {
      foundParagraph = entry.target as RenderFluentParagraph;
      final fragmentResult = foundParagraph.getFragmentAtPosition(localPosition);
      if (fragmentResult != null) {
        return CursorOffset(
          id: fragmentResult.fragmentId,
          offset: fragmentResult.localOffset,
        );
      }
    }
  }

  // Fallback: old method with RenderFluentFragment
  for (final entry in result.path) {
    if (entry.target is RenderFluentFragment) {
      if ((entry.target as RenderFluentFragment).node is! InlineContainerNode) {
        return detectOffsetOnRenderFluentFragment(entry.target as RenderFluentFragment, renderBox, localPosition, context, widget);
      }
    }
  }
  return null;
}