Remove duplication of measuring logic in PickList

This commit is contained in:
Héctor Ramón Jiménez 2021-07-22 20:09:13 +07:00
parent 45bd685f7c
commit 26b2a824a9
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -162,37 +162,31 @@ where
.pad(self.padding);
let text_size = self.text_size.unwrap_or(renderer.default_size());
let font = self.font;
let max_width = match self.width {
Length::Shrink => {
let labels = self.options.iter().map(ToString::to_string);
let labels_width = labels
.map(|label| {
let (width, _) = renderer.measure(
&label,
text_size,
self.font,
Size::new(f32::INFINITY, f32::INFINITY),
);
let measure = |label: &str| -> u32 {
let (width, _) = renderer.measure(
label,
text_size,
font,
Size::new(f32::INFINITY, f32::INFINITY),
);
width.round() as u32
})
.max()
.unwrap_or(100);
width.round() as u32
};
let labels = self.options.iter().map(ToString::to_string);
let labels_width =
labels.map(|label| measure(&label)).max().unwrap_or(100);
let placeholder_width = self
.placeholder
.as_ref()
.map(|placeholder| {
let (width, _) = renderer.measure(
placeholder,
text_size,
self.font,
Size::new(f32::INFINITY, f32::INFINITY),
);
width.round() as u32
})
.map(String::as_str)
.map(measure)
.unwrap_or(100);
labels_width.max(placeholder_width)