mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-27 04:26:58 +08:00
opt win selection
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -865,6 +865,26 @@ class RichTextEditingController extends TextEditingController {
|
||||
return position;
|
||||
}
|
||||
|
||||
int tapOffsetSimple(int offset) {
|
||||
for (var e in items) {
|
||||
final range = e.range;
|
||||
if (offset >= range.end) {
|
||||
continue;
|
||||
}
|
||||
if (offset <= range.start) {
|
||||
break;
|
||||
}
|
||||
if (e.isRich) {
|
||||
if (offset * 2 > range.start + range.end) {
|
||||
return range.end;
|
||||
} else {
|
||||
return range.start;
|
||||
}
|
||||
}
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
int tapOffset(
|
||||
int offset, {
|
||||
required TextPainter textPainter,
|
||||
|
||||
@@ -117,6 +117,7 @@ class _CupertinoTextFieldSelectionGestureDetectorBuilder
|
||||
extends TextSelectionGestureDetectorBuilder {
|
||||
_CupertinoTextFieldSelectionGestureDetectorBuilder({
|
||||
required _CupertinoRichTextFieldState state,
|
||||
required super.controller,
|
||||
}) : _state = state,
|
||||
super(delegate: state);
|
||||
|
||||
@@ -1254,6 +1255,7 @@ class _CupertinoRichTextFieldState extends State<CupertinoRichTextField>
|
||||
_selectionGestureDetectorBuilder =
|
||||
_CupertinoTextFieldSelectionGestureDetectorBuilder(
|
||||
state: this,
|
||||
controller: widget.controller,
|
||||
);
|
||||
// if (widget.controller == null) {
|
||||
// _createLocalController();
|
||||
|
||||
@@ -2227,6 +2227,15 @@ class RenderEditable extends RenderBox
|
||||
lastTapDownPosition: from,
|
||||
);
|
||||
extentOffset = baseOffset;
|
||||
} else {
|
||||
// select
|
||||
final isNormalized = baseOffset < extentOffset;
|
||||
final newOffset = controller.longPressOffset(
|
||||
isNormalized ? baseOffset : extentOffset,
|
||||
isNormalized ? extentOffset : baseOffset,
|
||||
);
|
||||
baseOffset = isNormalized ? newOffset.startOffset : newOffset.endOffset;
|
||||
extentOffset = isNormalized ? newOffset.endOffset : newOffset.startOffset;
|
||||
}
|
||||
|
||||
final TextSelection newSelection = TextSelection(
|
||||
|
||||
@@ -84,9 +84,11 @@ typedef InputCounterWidgetBuilder =
|
||||
|
||||
class _TextFieldSelectionGestureDetectorBuilder
|
||||
extends TextSelectionGestureDetectorBuilder {
|
||||
_TextFieldSelectionGestureDetectorBuilder({required RichTextFieldState state})
|
||||
: _state = state,
|
||||
super(delegate: state);
|
||||
_TextFieldSelectionGestureDetectorBuilder({
|
||||
required RichTextFieldState state,
|
||||
required super.controller,
|
||||
}) : _state = state,
|
||||
super(delegate: state);
|
||||
|
||||
final RichTextFieldState _state;
|
||||
|
||||
@@ -1373,7 +1375,10 @@ class RichTextFieldState extends State<RichTextField>
|
||||
void initState() {
|
||||
super.initState();
|
||||
_selectionGestureDetectorBuilder =
|
||||
_TextFieldSelectionGestureDetectorBuilder(state: this);
|
||||
_TextFieldSelectionGestureDetectorBuilder(
|
||||
state: this,
|
||||
controller: widget.controller,
|
||||
);
|
||||
// if (widget.controller == null) {
|
||||
// _createLocalController();
|
||||
// }
|
||||
|
||||
@@ -49,7 +49,10 @@ abstract class TextSelectionGestureDetectorBuilderDelegate {
|
||||
/// Cupertino-specific gesture logic of an [EditableText].
|
||||
class TextSelectionGestureDetectorBuilder {
|
||||
/// Creates a [TextSelectionGestureDetectorBuilder].
|
||||
TextSelectionGestureDetectorBuilder({required this.delegate});
|
||||
TextSelectionGestureDetectorBuilder({
|
||||
required this.delegate,
|
||||
required this.controller,
|
||||
});
|
||||
|
||||
/// The delegate for this [TextSelectionGestureDetectorBuilder].
|
||||
///
|
||||
@@ -62,6 +65,8 @@ class TextSelectionGestureDetectorBuilder {
|
||||
@protected
|
||||
final TextSelectionGestureDetectorBuilderDelegate delegate;
|
||||
|
||||
final RichTextEditingController controller;
|
||||
|
||||
// Shows the magnifier on supported platforms at the given offset, currently
|
||||
// only Android and iOS.
|
||||
void _showMagnifierIfSupportedByPlatform(Offset positionToShow) {
|
||||
@@ -177,7 +182,7 @@ class TextSelectionGestureDetectorBuilder {
|
||||
);
|
||||
final TextSelection selection = renderEditable.selection!;
|
||||
final TextSelection nextSelection = selection.copyWith(
|
||||
extentOffset: tappedPosition.offset,
|
||||
extentOffset: controller.tapOffsetSimple(tappedPosition.offset),
|
||||
);
|
||||
|
||||
editableText.userUpdateTextEditingValue(
|
||||
|
||||
Reference in New Issue
Block a user