Overhaul Font type to allow font family selection
This commit is contained in:
parent
a7580e0696
commit
b29de28d1f
25 changed files with 147 additions and 256 deletions
|
|
@ -55,7 +55,7 @@ where
|
|||
size: f32,
|
||||
spacing: f32,
|
||||
text_size: Option<f32>,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
icon: Icon<Renderer::Font>,
|
||||
style: <Renderer::Theme as StyleSheet>::Style,
|
||||
}
|
||||
|
|
@ -91,7 +91,7 @@ where
|
|||
size: Self::DEFAULT_SIZE,
|
||||
spacing: Self::DEFAULT_SPACING,
|
||||
text_size: None,
|
||||
font: Renderer::Font::default(),
|
||||
font: None,
|
||||
icon: Icon {
|
||||
font: Renderer::ICON_FONT,
|
||||
code_point: Renderer::CHECKMARK_ICON,
|
||||
|
|
@ -128,8 +128,8 @@ where
|
|||
/// Sets the [`Font`] of the text of the [`Checkbox`].
|
||||
///
|
||||
/// [`Font`]: crate::text::Renderer::Font
|
||||
pub fn font(mut self, font: Renderer::Font) -> Self {
|
||||
self.font = font;
|
||||
pub fn font(mut self, font: impl Into<Renderer::Font>) -> Self {
|
||||
self.font = Some(font.into());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +175,7 @@ where
|
|||
.push(Row::new().width(self.size).height(self.size))
|
||||
.push(
|
||||
Text::new(&self.label)
|
||||
.font(self.font.clone())
|
||||
.font(self.font.unwrap_or_else(|| renderer.default_font()))
|
||||
.width(self.width)
|
||||
.size(
|
||||
self.text_size
|
||||
|
|
@ -288,6 +288,7 @@ where
|
|||
|
||||
{
|
||||
let label_layout = children.next().unwrap();
|
||||
let font = self.font.unwrap_or_else(|| renderer.default_font());
|
||||
|
||||
widget::text::draw(
|
||||
renderer,
|
||||
|
|
@ -295,7 +296,7 @@ where
|
|||
label_layout,
|
||||
&self.label,
|
||||
self.text_size,
|
||||
self.font.clone(),
|
||||
font,
|
||||
widget::text::Appearance {
|
||||
color: custom_style.text_color,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ where
|
|||
width: Length,
|
||||
padding: Padding,
|
||||
text_size: Option<f32>,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
handle: Handle<Renderer::Font>,
|
||||
style: <Renderer::Theme as StyleSheet>::Style,
|
||||
}
|
||||
|
|
@ -70,7 +70,7 @@ where
|
|||
width: Length::Shrink,
|
||||
padding: Self::DEFAULT_PADDING,
|
||||
text_size: None,
|
||||
font: Default::default(),
|
||||
font: None,
|
||||
handle: Default::default(),
|
||||
style: Default::default(),
|
||||
}
|
||||
|
|
@ -101,8 +101,8 @@ where
|
|||
}
|
||||
|
||||
/// Sets the font of the [`PickList`].
|
||||
pub fn font(mut self, font: Renderer::Font) -> Self {
|
||||
self.font = font;
|
||||
pub fn font(mut self, font: impl Into<Renderer::Font>) -> Self {
|
||||
self.font = Some(font.into());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -163,7 +163,7 @@ where
|
|||
self.width,
|
||||
self.padding,
|
||||
self.text_size,
|
||||
&self.font,
|
||||
self.font.unwrap_or_else(|| renderer.default_font()),
|
||||
self.placeholder.as_deref(),
|
||||
&self.options,
|
||||
)
|
||||
|
|
@ -212,6 +212,7 @@ where
|
|||
cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
let font = self.font.unwrap_or_else(|| renderer.default_font());
|
||||
draw(
|
||||
renderer,
|
||||
theme,
|
||||
|
|
@ -219,7 +220,7 @@ where
|
|||
cursor_position,
|
||||
self.padding,
|
||||
self.text_size,
|
||||
&self.font,
|
||||
font,
|
||||
self.placeholder.as_deref(),
|
||||
self.selected.as_ref(),
|
||||
&self.handle,
|
||||
|
|
@ -232,7 +233,7 @@ where
|
|||
&'b mut self,
|
||||
tree: &'b mut Tree,
|
||||
layout: Layout<'_>,
|
||||
_renderer: &Renderer,
|
||||
renderer: &Renderer,
|
||||
) -> Option<overlay::Element<'b, Message, Renderer>> {
|
||||
let state = tree.state.downcast_mut::<State<T>>();
|
||||
|
||||
|
|
@ -241,7 +242,7 @@ where
|
|||
state,
|
||||
self.padding,
|
||||
self.text_size,
|
||||
self.font.clone(),
|
||||
self.font.unwrap_or_else(|| renderer.default_font()),
|
||||
&self.options,
|
||||
self.style.clone(),
|
||||
)
|
||||
|
|
@ -343,7 +344,7 @@ pub fn layout<Renderer, T>(
|
|||
width: Length,
|
||||
padding: Padding,
|
||||
text_size: Option<f32>,
|
||||
font: &Renderer::Font,
|
||||
font: Renderer::Font,
|
||||
placeholder: Option<&str>,
|
||||
options: &[T],
|
||||
) -> layout::Node
|
||||
|
|
@ -362,7 +363,7 @@ where
|
|||
let (width, _) = renderer.measure(
|
||||
label,
|
||||
text_size,
|
||||
font.clone(),
|
||||
font,
|
||||
Size::new(f32::INFINITY, f32::INFINITY),
|
||||
);
|
||||
|
||||
|
|
@ -560,7 +561,7 @@ pub fn draw<'a, T, Renderer>(
|
|||
cursor_position: Point,
|
||||
padding: Padding,
|
||||
text_size: Option<f32>,
|
||||
font: &Renderer::Font,
|
||||
font: Renderer::Font,
|
||||
placeholder: Option<&str>,
|
||||
selected: Option<&T>,
|
||||
handle: &Handle<Renderer::Font>,
|
||||
|
|
@ -637,7 +638,7 @@ pub fn draw<'a, T, Renderer>(
|
|||
renderer.fill_text(Text {
|
||||
content: label,
|
||||
size: text_size,
|
||||
font: font.clone(),
|
||||
font,
|
||||
color: if is_selected {
|
||||
style.text_color
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ where
|
|||
size: f32,
|
||||
spacing: f32,
|
||||
text_size: Option<f32>,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
style: <Renderer::Theme as StyleSheet>::Style,
|
||||
}
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ where
|
|||
size: Self::DEFAULT_SIZE,
|
||||
spacing: Self::DEFAULT_SPACING, //15
|
||||
text_size: None,
|
||||
font: Default::default(),
|
||||
font: None,
|
||||
style: Default::default(),
|
||||
}
|
||||
}
|
||||
|
|
@ -125,8 +125,8 @@ where
|
|||
}
|
||||
|
||||
/// Sets the text font of the [`Radio`] button.
|
||||
pub fn font(mut self, font: Renderer::Font) -> Self {
|
||||
self.font = font;
|
||||
pub fn font(mut self, font: impl Into<Renderer::Font>) -> Self {
|
||||
self.font = Some(font.into());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -268,6 +268,7 @@ where
|
|||
|
||||
{
|
||||
let label_layout = children.next().unwrap();
|
||||
let font = self.font.unwrap_or(renderer.default_font());
|
||||
|
||||
widget::text::draw(
|
||||
renderer,
|
||||
|
|
@ -275,7 +276,7 @@ where
|
|||
label_layout,
|
||||
&self.label,
|
||||
self.text_size,
|
||||
self.font.clone(),
|
||||
font,
|
||||
widget::text::Appearance {
|
||||
color: custom_style.text_color,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ where
|
|||
height: Length,
|
||||
horizontal_alignment: alignment::Horizontal,
|
||||
vertical_alignment: alignment::Vertical,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
style: <Renderer::Theme as StyleSheet>::Style,
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ where
|
|||
Text {
|
||||
content: content.into(),
|
||||
size: None,
|
||||
font: Default::default(),
|
||||
font: None,
|
||||
width: Length::Shrink,
|
||||
height: Length::Shrink,
|
||||
horizontal_alignment: alignment::Horizontal::Left,
|
||||
|
|
@ -70,7 +70,7 @@ where
|
|||
///
|
||||
/// [`Font`]: crate::text::Renderer::Font
|
||||
pub fn font(mut self, font: impl Into<Renderer::Font>) -> Self {
|
||||
self.font = font.into();
|
||||
self.font = Some(font.into());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -138,8 +138,12 @@ where
|
|||
|
||||
let bounds = limits.max();
|
||||
|
||||
let (width, height) =
|
||||
renderer.measure(&self.content, size, self.font.clone(), bounds);
|
||||
let (width, height) = renderer.measure(
|
||||
&self.content,
|
||||
size,
|
||||
self.font.unwrap_or_else(|| renderer.default_font()),
|
||||
bounds,
|
||||
);
|
||||
|
||||
let size = limits.resolve(Size::new(width, height));
|
||||
|
||||
|
|
@ -156,13 +160,15 @@ where
|
|||
_cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
let font = self.font.unwrap_or_else(|| renderer.default_font());
|
||||
|
||||
draw(
|
||||
renderer,
|
||||
style,
|
||||
layout,
|
||||
&self.content,
|
||||
self.size,
|
||||
self.font.clone(),
|
||||
font,
|
||||
theme.appearance(self.style),
|
||||
self.horizontal_alignment,
|
||||
self.vertical_alignment,
|
||||
|
|
@ -242,7 +248,7 @@ where
|
|||
height: self.height,
|
||||
horizontal_alignment: self.horizontal_alignment,
|
||||
vertical_alignment: self.vertical_alignment,
|
||||
font: self.font.clone(),
|
||||
font: self.font,
|
||||
style: self.style,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ where
|
|||
placeholder: String,
|
||||
value: Value,
|
||||
is_secure: bool,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
width: Length,
|
||||
padding: Padding,
|
||||
size: Option<f32>,
|
||||
|
|
@ -92,7 +92,7 @@ where
|
|||
placeholder: String::from(placeholder),
|
||||
value: Value::new(value),
|
||||
is_secure: false,
|
||||
font: Default::default(),
|
||||
font: None,
|
||||
width: Length::Fill,
|
||||
padding: Padding::new(5.0),
|
||||
size: None,
|
||||
|
|
@ -129,7 +129,7 @@ where
|
|||
///
|
||||
/// [`Font`]: text::Renderer::Font
|
||||
pub fn font(mut self, font: Renderer::Font) -> Self {
|
||||
self.font = font;
|
||||
self.font = Some(font);
|
||||
self
|
||||
}
|
||||
/// Sets the width of the [`TextInput`].
|
||||
|
|
@ -179,6 +179,8 @@ where
|
|||
cursor_position: Point,
|
||||
value: Option<&Value>,
|
||||
) {
|
||||
let font = self.font.unwrap_or(renderer.default_font());
|
||||
|
||||
draw(
|
||||
renderer,
|
||||
theme,
|
||||
|
|
@ -188,7 +190,7 @@ where
|
|||
value.unwrap_or(&self.value),
|
||||
&self.placeholder,
|
||||
self.size,
|
||||
&self.font,
|
||||
font,
|
||||
self.is_secure,
|
||||
&self.style,
|
||||
)
|
||||
|
|
@ -258,7 +260,7 @@ where
|
|||
shell,
|
||||
&mut self.value,
|
||||
self.size,
|
||||
&self.font,
|
||||
self.font.unwrap_or(renderer.default_font()),
|
||||
self.is_secure,
|
||||
self.on_change.as_ref(),
|
||||
self.on_paste.as_deref(),
|
||||
|
|
@ -277,6 +279,8 @@ where
|
|||
cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
) {
|
||||
let font = self.font.unwrap_or(renderer.default_font());
|
||||
|
||||
draw(
|
||||
renderer,
|
||||
theme,
|
||||
|
|
@ -286,7 +290,7 @@ where
|
|||
&self.value,
|
||||
&self.placeholder,
|
||||
self.size,
|
||||
&self.font,
|
||||
font,
|
||||
self.is_secure,
|
||||
&self.style,
|
||||
)
|
||||
|
|
@ -410,7 +414,7 @@ pub fn update<'a, Message, Renderer>(
|
|||
shell: &mut Shell<'_, Message>,
|
||||
value: &mut Value,
|
||||
size: Option<f32>,
|
||||
font: &Renderer::Font,
|
||||
font: Renderer::Font,
|
||||
is_secure: bool,
|
||||
on_change: &dyn Fn(String) -> Message,
|
||||
on_paste: Option<&dyn Fn(String) -> Message>,
|
||||
|
|
@ -459,7 +463,7 @@ where
|
|||
find_cursor_position(
|
||||
renderer,
|
||||
text_layout.bounds(),
|
||||
font.clone(),
|
||||
font,
|
||||
size,
|
||||
&value,
|
||||
state,
|
||||
|
|
@ -487,7 +491,7 @@ where
|
|||
let position = find_cursor_position(
|
||||
renderer,
|
||||
text_layout.bounds(),
|
||||
font.clone(),
|
||||
font,
|
||||
size,
|
||||
value,
|
||||
state,
|
||||
|
|
@ -536,7 +540,7 @@ where
|
|||
let position = find_cursor_position(
|
||||
renderer,
|
||||
text_layout.bounds(),
|
||||
font.clone(),
|
||||
font,
|
||||
size,
|
||||
&value,
|
||||
state,
|
||||
|
|
@ -816,7 +820,7 @@ pub fn draw<Renderer>(
|
|||
value: &Value,
|
||||
placeholder: &str,
|
||||
size: Option<f32>,
|
||||
font: &Renderer::Font,
|
||||
font: Renderer::Font,
|
||||
is_secure: bool,
|
||||
style: &<Renderer::Theme as StyleSheet>::Style,
|
||||
) where
|
||||
|
|
@ -862,7 +866,7 @@ pub fn draw<Renderer>(
|
|||
value,
|
||||
size,
|
||||
position,
|
||||
font.clone(),
|
||||
font,
|
||||
);
|
||||
|
||||
let is_cursor_visible = ((focus.now - focus.updated_at)
|
||||
|
|
@ -903,7 +907,7 @@ pub fn draw<Renderer>(
|
|||
value,
|
||||
size,
|
||||
left,
|
||||
font.clone(),
|
||||
font,
|
||||
);
|
||||
|
||||
let (right_position, right_offset) =
|
||||
|
|
@ -913,7 +917,7 @@ pub fn draw<Renderer>(
|
|||
value,
|
||||
size,
|
||||
right,
|
||||
font.clone(),
|
||||
font,
|
||||
);
|
||||
|
||||
let width = right_position - left_position;
|
||||
|
|
@ -948,7 +952,7 @@ pub fn draw<Renderer>(
|
|||
let text_width = renderer.measure_width(
|
||||
if text.is_empty() { placeholder } else { &text },
|
||||
size,
|
||||
font.clone(),
|
||||
font,
|
||||
);
|
||||
|
||||
let render = |renderer: &mut Renderer| {
|
||||
|
|
@ -963,7 +967,7 @@ pub fn draw<Renderer>(
|
|||
} else {
|
||||
theme.value_color(style)
|
||||
},
|
||||
font: font.clone(),
|
||||
font: font,
|
||||
bounds: Rectangle {
|
||||
y: text_bounds.center_y(),
|
||||
width: f32::INFINITY,
|
||||
|
|
@ -1195,8 +1199,7 @@ where
|
|||
{
|
||||
let size = size.unwrap_or_else(|| renderer.default_size());
|
||||
|
||||
let offset =
|
||||
offset(renderer, text_bounds, font.clone(), size, value, state);
|
||||
let offset = offset(renderer, text_bounds, font, size, value, state);
|
||||
|
||||
renderer
|
||||
.hit_test(
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ where
|
|||
text_size: Option<f32>,
|
||||
text_alignment: alignment::Horizontal,
|
||||
spacing: f32,
|
||||
font: Renderer::Font,
|
||||
font: Option<Renderer::Font>,
|
||||
style: <Renderer::Theme as StyleSheet>::Style,
|
||||
}
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ where
|
|||
text_size: None,
|
||||
text_alignment: alignment::Horizontal::Left,
|
||||
spacing: 0.0,
|
||||
font: Renderer::Font::default(),
|
||||
font: None,
|
||||
style: Default::default(),
|
||||
}
|
||||
}
|
||||
|
|
@ -117,8 +117,8 @@ where
|
|||
/// Sets the [`Font`] of the text of the [`Toggler`]
|
||||
///
|
||||
/// [`Font`]: crate::text::Renderer::Font
|
||||
pub fn font(mut self, font: Renderer::Font) -> Self {
|
||||
self.font = font;
|
||||
pub fn font(mut self, font: impl Into<Renderer::Font>) -> Self {
|
||||
self.font = Some(font.into());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ where
|
|||
row = row.push(
|
||||
Text::new(label)
|
||||
.horizontal_alignment(self.text_alignment)
|
||||
.font(self.font.clone())
|
||||
.font(self.font.unwrap_or_else(|| renderer.default_font()))
|
||||
.width(self.width)
|
||||
.size(
|
||||
self.text_size
|
||||
|
|
@ -236,6 +236,7 @@ where
|
|||
|
||||
if let Some(label) = &self.label {
|
||||
let label_layout = children.next().unwrap();
|
||||
let font = self.font.unwrap_or_else(|| renderer.default_font());
|
||||
|
||||
crate::widget::text::draw(
|
||||
renderer,
|
||||
|
|
@ -243,7 +244,7 @@ where
|
|||
label_layout,
|
||||
label,
|
||||
self.text_size,
|
||||
self.font.clone(),
|
||||
font,
|
||||
Default::default(),
|
||||
self.text_alignment,
|
||||
alignment::Vertical::Center,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue