Make basic text shaping the default shaping strategy

This commit is contained in:
Héctor Ramón Jiménez 2023-04-19 01:19:56 +02:00
parent 57a276e165
commit 33b5a90019
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
24 changed files with 140 additions and 10 deletions

View file

@ -25,6 +25,7 @@ where
vertical_alignment: alignment::Vertical,
font: Option<Renderer::Font>,
style: <Renderer::Theme as StyleSheet>::Style,
advanced_shape: bool,
}
impl<'a, Renderer> Text<'a, Renderer>
@ -43,6 +44,7 @@ where
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
style: Default::default(),
advanced_shape: false,
}
}
@ -98,6 +100,20 @@ where
self.vertical_alignment = alignment;
self
}
/// Enables advanced text shaping and font fallback for the [`Text`].
///
/// You will need to enable this if the text contains a complex script, the
/// font used needs it, and/or multiple fonts in your system may be needed
/// to display all of the glyphs.
///
/// If your text isn't displaying properly, try enabling this!
///
/// Advanced shaping is expensive! You should only enable it when necessary.
pub fn advanced_shape(mut self) -> Self {
self.advanced_shape = true;
self
}
}
impl<'a, Message, Renderer> Widget<Message, Renderer> for Text<'a, Renderer>
@ -129,6 +145,7 @@ where
size,
self.font.unwrap_or_else(|| renderer.default_font()),
bounds,
self.advanced_shape,
);
let size = limits.resolve(Size::new(width, height));
@ -156,6 +173,7 @@ where
theme.appearance(self.style.clone()),
self.horizontal_alignment,
self.vertical_alignment,
self.advanced_shape,
);
}
}
@ -180,6 +198,7 @@ pub fn draw<Renderer>(
appearance: Appearance,
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
advanced_shape: bool,
) where
Renderer: text::Renderer,
{
@ -205,6 +224,7 @@ pub fn draw<Renderer>(
font: font.unwrap_or_else(|| renderer.default_font()),
horizontal_alignment,
vertical_alignment,
advanced_shape,
});
}
@ -234,6 +254,7 @@ where
vertical_alignment: self.vertical_alignment,
font: self.font,
style: self.style.clone(),
advanced_shape: self.advanced_shape,
}
}
}