summaryrefslogtreecommitdiffstats
path: root/native/src/widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-14 07:09:24 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-02-14 07:09:24 +0100
commit7f1d58aa4591eba40dd6f3e6bc2869dcdc3e9adb (patch)
tree36171b72b9f918992147f16b5960047a001d54a3 /native/src/widget
parentfee1ab69e2bab01e5d736540be8b253ff62c3e5e (diff)
downloadiced-7f1d58aa4591eba40dd6f3e6bc2869dcdc3e9adb.tar.gz
iced-7f1d58aa4591eba40dd6f3e6bc2869dcdc3e9adb.tar.bz2
iced-7f1d58aa4591eba40dd6f3e6bc2869dcdc3e9adb.zip
Inline `Handle::content` for simplicity and efficiency
We can avoid downcasting `state` :^)
Diffstat (limited to 'native/src/widget')
-rw-r--r--native/src/widget/pick_list.rs53
1 files changed, 22 insertions, 31 deletions
diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs
index 8189dd61..b1cdfad4 100644
--- a/native/src/widget/pick_list.rs
+++ b/native/src/widget/pick_list.rs
@@ -224,7 +224,7 @@ where
self.selected.as_ref(),
&self.handle,
&self.style,
- tree.state.downcast_ref::<State<T>>(),
+ || tree.state.downcast_ref::<State<T>>(),
)
}
@@ -325,32 +325,6 @@ impl<Font> Default for Handle<Font> {
}
}
-impl<Font: Clone> Handle<Font> {
- fn content<Renderer: text::Renderer<Font = Font>>(
- &self,
- is_open: bool,
- ) -> Option<(Font, char, Option<u16>)> {
- match self {
- Self::Arrow { size } => {
- Some((Renderer::ICON_FONT, Renderer::ARROW_DOWN_ICON, *size))
- }
- Self::Static(Icon {
- font,
- code_point,
- size,
- }) => Some((font.clone(), *code_point, *size)),
- Self::Dynamic { open, closed } => {
- if is_open {
- Some((open.font.clone(), open.code_point, open.size))
- } else {
- Some((closed.font.clone(), closed.code_point, closed.size))
- }
- }
- Self::None => None,
- }
- }
-}
-
/// The icon of a [`Handle`].
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Icon<Font> {
@@ -593,7 +567,7 @@ pub fn draw<'a, T, Renderer>(
selected: Option<&T>,
handle: &Handle<Renderer::Font>,
style: &<Renderer::Theme as StyleSheet>::Style,
- state: &State<T>,
+ state: impl FnOnce() -> &'a State<T>,
) where
Renderer: text::Renderer,
Renderer::Theme: StyleSheet,
@@ -619,9 +593,26 @@ pub fn draw<'a, T, Renderer>(
style.background,
);
- if let Some((font, code_point, size)) =
- handle.content::<Renderer>(state.is_open)
- {
+ let handle = match handle {
+ Handle::Arrow { size } => {
+ Some((Renderer::ICON_FONT, Renderer::ARROW_DOWN_ICON, *size))
+ }
+ Handle::Static(Icon {
+ font,
+ code_point,
+ size,
+ }) => Some((font.clone(), *code_point, *size)),
+ Handle::Dynamic { open, closed } => {
+ if state().is_open {
+ Some((open.font.clone(), open.code_point, open.size))
+ } else {
+ Some((closed.font.clone(), closed.code_point, closed.size))
+ }
+ }
+ Handle::None => None,
+ };
+
+ if let Some((font, code_point, size)) = handle {
let size = f32::from(size.unwrap_or_else(|| renderer.default_size()));
renderer.fill_text(Text {