Skip to content

Commit

Permalink
Fix hit test issue in text line
Browse files Browse the repository at this point in the history
  • Loading branch information
Amir-P committed Jul 19, 2023
1 parent a45e30e commit 8cfe749
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
2 changes: 1 addition & 1 deletion packages/fleather/lib/src/rendering/editable_box.dart
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ class RenderEditableContainerBox extends RenderBox

var mainAxisExtent = _resolvedPadding!.top;
var child = firstChild;
final innerConstraints = constraints.loosen().deflate(_resolvedPadding!);
final innerConstraints = constraints.deflate(_resolvedPadding!);
while (child != null) {
child.layout(innerConstraints, parentUsesSize: true);
final childParentData = child.parentData as EditableContainerParentData;
Expand Down
31 changes: 19 additions & 12 deletions packages/fleather/lib/src/rendering/editable_text_line.dart
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ class RenderEditableTextLine extends RenderEditableBox {
));
return;
}
final innerConstraints = constraints.loosen().deflate(_resolvedPadding!);
final innerConstraints = constraints.deflate(_resolvedPadding!);

final indentWidth = textDirection == TextDirection.ltr
? _resolvedPadding!.left
Expand Down Expand Up @@ -782,23 +782,30 @@ class RenderEditableTextLine extends RenderEditableBox {
if (leading != null) {
final childParentData = leading!.parentData as BoxParentData;
final isHit = result.addWithPaintOffset(
offset: childParentData.offset,
position: position,
hitTest: (BoxHitTestResult result, Offset transformed) {
assert(transformed == position - childParentData.offset);
return leading!.hitTest(result, position: transformed);
});
offset: childParentData.offset,
position: position,
hitTest: (result, transformed) =>
leading!.hitTest(result, position: transformed),
);
if (isHit) return true;
}
if (body == null) return false;
final parentData = body!.parentData as BoxParentData;
return result.addWithPaintOffset(
final offset = position - parentData.offset;
final textBoxes = body!.getBoxesForSelection(
TextSelection(baseOffset: 0, extentOffset: node.toPlainText().length));
final isInTextBoxes = textBoxes.any((e) =>
Rect.fromLTRB(e.left, e.top, e.right, e.bottom).contains(offset));
if (isInTextBoxes) {
return result.addWithPaintOffset(
offset: parentData.offset,
position: position,
hitTest: (BoxHitTestResult result, Offset position) {
return body!.hitTest(result, position: position);
});
hitTest: (result, position) =>
body!.hitTest(result, position: position),
);
}
return false;
}

// End render box overrides
}
}

0 comments on commit 8cfe749

Please sign in to comment.