summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-09-15 14:49:13 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-09-15 14:49:13 +0700
commit643500bbdf1a169db1bcdcb8e971334037274d38 (patch)
treec2e4131f9bdc788052b584da05a6ee1ce2e8d71b /wgpu
parent93fec8d273ef8305e1c2456abe0c8ecd7a9d9407 (diff)
downloadiced-643500bbdf1a169db1bcdcb8e971334037274d38.tar.gz
iced-643500bbdf1a169db1bcdcb8e971334037274d38.tar.bz2
iced-643500bbdf1a169db1bcdcb8e971334037274d38.zip
Use `Option` to encode empty text case in hit test methods
Diffstat (limited to 'wgpu')
-rw-r--r--wgpu/src/backend.rs2
-rw-r--r--wgpu/src/text.rs18
2 files changed, 11 insertions, 9 deletions
diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs
index b31bf92c..51429e84 100644
--- a/wgpu/src/backend.rs
+++ b/wgpu/src/backend.rs
@@ -284,7 +284,7 @@ impl backend::Text for Backend {
bounds: Size,
point: iced_native::Point,
nearest_only: bool,
- ) -> text::Hit {
+ ) -> Option<text::Hit> {
self.text_pipeline.hit_test(
contents,
size,
diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs
index ee49ee4b..34fd5b58 100644
--- a/wgpu/src/text.rs
+++ b/wgpu/src/text.rs
@@ -129,7 +129,7 @@ impl Pipeline {
bounds: iced_native::Size,
point: iced_native::Point,
nearest_only: bool,
- ) -> Hit {
+ ) -> Option<Hit> {
use wgpu_glyph::GlyphCruncher;
let wgpu_glyph::FontId(font_id) = self.find_font(font);
@@ -190,23 +190,25 @@ impl Pipeline {
if !nearest_only {
for (idx, bounds) in bounds.clone() {
if bounds.contains(point) {
- return Hit::CharOffset(char_index(idx));
+ return Some(Hit::CharOffset(char_index(idx)));
}
}
}
let (idx, nearest) = bounds.fold(
- (0usize, iced_native::Point::ORIGIN),
- |acc: (usize, iced_native::Point), (idx, bounds)| {
- if bounds.center().distance(point) < acc.1.distance(point) {
- (idx, bounds.center())
+ (None, iced_native::Point::ORIGIN),
+ |best, (idx, bounds)| {
+ let center = bounds.center();
+
+ if center.distance(point) < best.1.distance(point) {
+ (Some(idx), center)
} else {
- acc
+ best
}
},
);
- Hit::NearestCharOffset(char_index(idx), (point - nearest).into())
+ idx.map(|idx| Hit::NearestCharOffset(char_index(idx), point - nearest))
}
pub fn trim_measurement_cache(&mut self) {