mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-07-25 13:00:14 +08:00
fix selection separator
Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
@@ -14,15 +14,53 @@ index 97a41dafb8d..70c55832625 100644
|
|||||||
context.canvas.drawRect(textBox.toRect().shift(offset), selectionPaint);
|
context.canvas.drawRect(textBox.toRect().shift(offset), selectionPaint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
diff --git a/packages/flutter/lib/src/rendering/selection.dart b/packages/flutter/lib/src/rendering/selection.dart
|
||||||
|
index a813e141dc4..78b9bb84c0e 100644
|
||||||
|
--- a/packages/flutter/lib/src/rendering/selection.dart
|
||||||
|
+++ b/packages/flutter/lib/src/rendering/selection.dart
|
||||||
|
@@ -114,6 +114,8 @@ abstract class SelectionHandler implements ValueListenable<SelectionGeometry> {
|
||||||
|
|
||||||
|
/// The length of the content in this object.
|
||||||
|
int get contentLength;
|
||||||
|
+
|
||||||
|
+ Object? get separator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This class stores the range information of the selection under a [Selectable]
|
||||||
|
@@ -236,6 +238,8 @@ class SelectedContent with Diagnosticable {
|
||||||
|
/// See also:
|
||||||
|
/// * [SelectableRegion], which provides an overview of selection system.
|
||||||
|
mixin Selectable implements SelectionHandler {
|
||||||
|
+ Object? get separator => null;
|
||||||
|
+
|
||||||
|
/// {@macro flutter.rendering.RenderObject.getTransformTo}
|
||||||
|
Matrix4 getTransformTo(RenderObject? ancestor);
|
||||||
|
|
||||||
|
diff --git a/packages/flutter/lib/src/widgets/scrollable.dart b/packages/flutter/lib/src/widgets/scrollable.dart
|
||||||
|
index 9df2d633f16..54d30883245 100644
|
||||||
|
--- a/packages/flutter/lib/src/widgets/scrollable.dart
|
||||||
|
+++ b/packages/flutter/lib/src/widgets/scrollable.dart
|
||||||
|
@@ -1177,6 +1177,9 @@ class _ScrollableSelectionContainerDelegate extends MultiSelectableSelectionCont
|
||||||
|
_position.addListener(_scheduleLayoutChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ @override
|
||||||
|
+ Object separator = '\n';
|
||||||
|
+
|
||||||
|
// Pointer drag is a single point, it should not have a size.
|
||||||
|
static const double _kDefaultDragTargetSize = 0;
|
||||||
|
|
||||||
diff --git a/packages/flutter/lib/src/widgets/selectable_region.dart b/packages/flutter/lib/src/widgets/selectable_region.dart
|
diff --git a/packages/flutter/lib/src/widgets/selectable_region.dart b/packages/flutter/lib/src/widgets/selectable_region.dart
|
||||||
index 59de8bae20b..17220a77d04 100644
|
index 59de8bae20b..39bfeb2b4f0 100644
|
||||||
--- a/packages/flutter/lib/src/widgets/selectable_region.dart
|
--- a/packages/flutter/lib/src/widgets/selectable_region.dart
|
||||||
+++ b/packages/flutter/lib/src/widgets/selectable_region.dart
|
+++ b/packages/flutter/lib/src/widgets/selectable_region.dart
|
||||||
@@ -402,8 +402,10 @@ class SelectableRegionState extends State<SelectableRegion>
|
@@ -401,9 +401,11 @@ class SelectableRegionState extends State<SelectableRegion>
|
||||||
|
final LayerLink _startHandleLayerLink = LayerLink();
|
||||||
final LayerLink _endHandleLayerLink = LayerLink();
|
final LayerLink _endHandleLayerLink = LayerLink();
|
||||||
final LayerLink _toolbarLayerLink = LayerLink();
|
final LayerLink _toolbarLayerLink = LayerLink();
|
||||||
final StaticSelectionContainerDelegate _selectionDelegate = StaticSelectionContainerDelegate();
|
- final StaticSelectionContainerDelegate _selectionDelegate = StaticSelectionContainerDelegate();
|
||||||
+ StaticSelectionContainerDelegate get selectionDelegate => _selectionDelegate;
|
+ final StaticSelectionContainerDelegate _selectionDelegate = StaticSelectionContainerDelegate(separator: '\n');
|
||||||
|
+ StaticSelectionContainerDelegate get selectionDelegate => _selectionDelegate;
|
||||||
// there should only ever be one selectable, which is the SelectionContainer.
|
// there should only ever be one selectable, which is the SelectionContainer.
|
||||||
Selectable? _selectable;
|
Selectable? _selectable;
|
||||||
+ Selectable? get selectable => _selectable;
|
+ Selectable? get selectable => _selectable;
|
||||||
@@ -146,15 +184,48 @@ index 59de8bae20b..17220a77d04 100644
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: CompositedTransformTarget(
|
child: CompositedTransformTarget(
|
||||||
@@ -2822,7 +2796,10 @@ abstract class MultiSelectableSelectionContainerDelegate extends SelectionContai
|
@@ -2087,6 +2061,11 @@ class _DirectionallyExtendCaretSelectionAction<T extends DirectionalCaretMovemen
|
||||||
|
/// * [MultiSelectableSelectionContainerDelegate], for the class that provides
|
||||||
|
/// the main implementation details of this [SelectionContainerDelegate].
|
||||||
|
class StaticSelectionContainerDelegate extends MultiSelectableSelectionContainerDelegate {
|
||||||
|
+ StaticSelectionContainerDelegate({this.separator});
|
||||||
|
+
|
||||||
|
+ @override
|
||||||
|
+ final Object? separator;
|
||||||
|
+
|
||||||
|
/// The set of [Selectable]s that have received start events.
|
||||||
|
final Set<Selectable> _hasReceivedStartEvent = <Selectable>{};
|
||||||
|
|
||||||
|
@@ -2822,8 +2801,17 @@ abstract class MultiSelectableSelectionContainerDelegate extends SelectionContai
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final buffer = StringBuffer();
|
final buffer = StringBuffer();
|
||||||
- for (final selection in selections) {
|
- for (final selection in selections) {
|
||||||
+ for (final (i, selection) in selections.indexed) {
|
- buffer.write(selection.plainText);
|
||||||
+ if (i != 0) {
|
+ if (separator != null) {
|
||||||
+ buffer.write('\n');
|
+ for (final (i, selection) in selections.indexed) {
|
||||||
|
+ if (i != 0) {
|
||||||
|
+ buffer.write(separator);
|
||||||
|
+ }
|
||||||
|
+ buffer.write(selection.plainText);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ for (final selection in selections) {
|
||||||
|
+ buffer.write(selection.plainText);
|
||||||
+ }
|
+ }
|
||||||
buffer.write(selection.plainText);
|
|
||||||
}
|
}
|
||||||
return SelectedContent(plainText: buffer.toString());
|
return SelectedContent(plainText: buffer.toString());
|
||||||
|
}
|
||||||
|
diff --git a/packages/flutter/lib/src/widgets/selection_container.dart b/packages/flutter/lib/src/widgets/selection_container.dart
|
||||||
|
index 5d5a2386a7a..92e7d1eb70a 100644
|
||||||
|
--- a/packages/flutter/lib/src/widgets/selection_container.dart
|
||||||
|
+++ b/packages/flutter/lib/src/widgets/selection_container.dart
|
||||||
|
@@ -270,6 +270,8 @@ class SelectionRegistrarScope extends InheritedWidget {
|
||||||
|
/// This delegate needs to implement [SelectionRegistrar] to register
|
||||||
|
/// [Selectable]s in the [SelectionContainer] subtree.
|
||||||
|
abstract class SelectionContainerDelegate implements SelectionHandler, SelectionRegistrar {
|
||||||
|
+ Object? get separator => null;
|
||||||
|
+
|
||||||
|
BuildContext? _selectionContainerContext;
|
||||||
|
|
||||||
|
/// Gets the paint transform from the [Selectable] child to
|
||||||
|
|||||||
Reference in New Issue
Block a user