summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2021-09-15 15:50:10 +0700
committerLibravatar GitHub <noreply@github.com>2021-09-15 15:50:10 +0700
commit5870cbb312ec5de1219b6983e09e460419d95912 (patch)
treeadd25c986ba0582628d921e45c2eae4006e19ee4 /native
parent93fec8d273ef8305e1c2456abe0c8ecd7a9d9407 (diff)
parentc914b2a05be2c33ec936f63efd25daaf2b4c4739 (diff)
downloadiced-5870cbb312ec5de1219b6983e09e460419d95912.tar.gz
iced-5870cbb312ec5de1219b6983e09e460419d95912.tar.bz2
iced-5870cbb312ec5de1219b6983e09e460419d95912.zip
Merge pull request #1046 from iced-rs/fix/empty-text-hit-test
Use `Option` to encode empty text case in hit test methods
Diffstat (limited to 'native')
-rw-r--r--native/src/renderer/null.rs6
-rw-r--r--native/src/widget/text.rs2
-rw-r--r--native/src/widget/text_input.rs53
3 files changed, 32 insertions, 29 deletions
diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs
index b1a26c41..2c47ddf2 100644
--- a/native/src/renderer/null.rs
+++ b/native/src/renderer/null.rs
@@ -2,7 +2,7 @@ use crate::{
button, checkbox, column, container, pane_grid, progress_bar, radio, row,
scrollable, slider, text, text_input, toggler, Color, Element, Font,
HorizontalAlignment, Layout, Padding, Point, Rectangle, Renderer, Size,
- Vector, VerticalAlignment,
+ VerticalAlignment,
};
/// A renderer that does nothing.
@@ -75,8 +75,8 @@ impl text::Renderer for Null {
_bounds: Size,
_point: Point,
_nearest_only: bool,
- ) -> text::Hit {
- text::Hit::NearestCharOffset(0, Vector::new(0., 0.))
+ ) -> Option<text::Hit> {
+ None
}
fn draw(
diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs
index adf6a74f..d8bc0a00 100644
--- a/native/src/widget/text.rs
+++ b/native/src/widget/text.rs
@@ -196,7 +196,7 @@ pub trait Renderer: crate::Renderer {
bounds: Size,
point: Point,
nearest_only: bool,
- ) -> Hit;
+ ) -> Option<Hit>;
/// Draws a [`Text`] fragment.
///
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs
index f1a7a1a0..84d171be 100644
--- a/native/src/widget/text_input.rs
+++ b/native/src/widget/text_input.rs
@@ -268,41 +268,42 @@ where
match click.kind() {
click::Kind::Single => {
- if target > 0.0 {
+ let position = if target > 0.0 {
let value = if self.is_secure {
self.value.secure()
} else {
self.value.clone()
};
- let position = renderer.find_cursor_position(
+ renderer.find_cursor_position(
text_layout.bounds(),
self.font,
self.size,
&value,
&self.state,
target,
- );
-
- self.state.cursor.move_to(position);
+ )
} else {
- self.state.cursor.move_to(0);
- }
+ None
+ };
+ self.state.cursor.move_to(position.unwrap_or(0));
self.state.is_dragging = true;
}
click::Kind::Double => {
if self.is_secure {
self.state.cursor.select_all(&self.value);
} else {
- let position = renderer.find_cursor_position(
- text_layout.bounds(),
- self.font,
- self.size,
- &self.value,
- &self.state,
- target,
- );
+ let position = renderer
+ .find_cursor_position(
+ text_layout.bounds(),
+ self.font,
+ self.size,
+ &self.value,
+ &self.state,
+ target,
+ )
+ .unwrap_or(0);
self.state.cursor.select_range(
self.value.previous_start_of_word(position),
@@ -341,14 +342,16 @@ where
self.value.clone()
};
- let position = renderer.find_cursor_position(
- text_layout.bounds(),
- self.font,
- self.size,
- &value,
- &self.state,
- target,
- );
+ let position = renderer
+ .find_cursor_position(
+ text_layout.bounds(),
+ self.font,
+ self.size,
+ &value,
+ &self.state,
+ target,
+ )
+ .unwrap_or(0);
self.state.cursor.select_range(
self.state.cursor.start(&value),
@@ -702,7 +705,7 @@ pub trait Renderer: text::Renderer + Sized {
value: &Value,
state: &State,
x: f32,
- ) -> usize {
+ ) -> Option<usize> {
let size = size.unwrap_or(self.default_size());
let offset = self.offset(text_bounds, font, size, &value, &state);
@@ -715,7 +718,7 @@ pub trait Renderer: text::Renderer + Sized {
Point::new(x + offset, text_bounds.height / 2.0),
true,
)
- .cursor()
+ .map(text::Hit::cursor)
}
}