summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar 13r0ck <bnr@tuta.io>2021-05-10 16:05:50 -0600
committerLibravatar 13r0ck <bnr@tuta.io>2021-05-10 16:05:50 -0600
commit8f319d7c6fde1efb1e88a15ed19ce93aef3d26c4 (patch)
tree7efeb0344c3e2fa25d70f0ed3c218630029f5d5c /native
parent77e6e111e0f655487076ce0e4605fd3b143e0320 (diff)
downloadiced-8f319d7c6fde1efb1e88a15ed19ce93aef3d26c4.tar.gz
iced-8f319d7c6fde1efb1e88a15ed19ce93aef3d26c4.tar.bz2
iced-8f319d7c6fde1efb1e88a15ed19ce93aef3d26c4.zip
Improve performance using iters
Diffstat (limited to '')
-rw-r--r--native/src/widget/pick_list.rs31
1 files changed, 8 insertions, 23 deletions
diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs
index eba15253..f2f6ba2d 100644
--- a/native/src/widget/pick_list.rs
+++ b/native/src/widget/pick_list.rs
@@ -265,19 +265,11 @@ where
};
if y.is_sign_negative() {
+ let mut options_iter = self.options.iter();
if let Some(selected) = self.selected.as_ref() {
- let i = self
- .options
- .iter()
- .position(|option| option == selected)
- .unwrap_or(0)
- + 1;
- if i < self.options.len() {
- messages.push((self.on_selected)(
- self.options[i].clone(),
- ));
- if let Some(msg) = self.on_change.take() {
- messages.push(msg)
+ if let Some(_) = options_iter.position(|o| o == selected) {
+ if let Some(prev_val) = options_iter.next() {
+ messages.push((self.on_selected)(prev_val.clone()));
}
}
} else {
@@ -288,18 +280,11 @@ where
}
}
} else {
+ let mut options_iter = self.options.iter().rev();
if let Some(selected) = self.selected.as_ref() {
- let i = self
- .options
- .iter()
- .position(|option| option == selected)
- .unwrap_or(0);
- if i != 0 {
- messages.push((self.on_selected)(
- self.options[i - 1].clone(),
- ));
- if let Some(msg) = self.on_change.take() {
- messages.push(msg)
+ if let Some(_) = options_iter.position(|o| o == selected) {
+ if let Some(next_val) = options_iter.next() {
+ messages.push((self.on_selected)(next_val.clone()));
}
}
} else {