summaryrefslogtreecommitdiffstats
path: root/native/src/text.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-31 16:13:03 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-10-31 16:14:38 +0700
commitb3a01973c6c726e6539be959659f4306ef3234c6 (patch)
tree06e6ce43b5e47eb78f2707eb2c6177a2f9af91f4 /native/src/text.rs
parent0aafcde0ef1533c9eeba0379de8c0082e30c7504 (diff)
downloadiced-b3a01973c6c726e6539be959659f4306ef3234c6.tar.gz
iced-b3a01973c6c726e6539be959659f4306ef3234c6.tar.bz2
iced-b3a01973c6c726e6539be959659f4306ef3234c6.zip
Introduce first-class `text` module in `iced_native`
Diffstat (limited to 'native/src/text.rs')
-rw-r--r--native/src/text.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/native/src/text.rs b/native/src/text.rs
new file mode 100644
index 00000000..f112a8f3
--- /dev/null
+++ b/native/src/text.rs
@@ -0,0 +1,71 @@
+use crate::alignment;
+use crate::{Color, Point, Rectangle, Size};
+
+pub use iced_core::text::Hit;
+
+#[derive(Debug, Clone, Copy)]
+pub struct Text<'a, Font> {
+ pub content: &'a str,
+ pub bounds: Rectangle,
+ pub size: f32,
+ pub color: Color,
+ pub font: Font,
+ pub horizontal_alignment: alignment::Horizontal,
+ pub vertical_alignment: alignment::Vertical,
+}
+
+pub trait Renderer: crate::Renderer {
+ /// The font type used.
+ type Font: Default + Copy;
+
+ /// The icon font of the backend.
+ const ICON_FONT: Self::Font;
+
+ /// The `char` representing a ✔ icon in the [`ICON_FONT`].
+ ///
+ /// [`ICON_FONT`]: Self::ICON_FONT
+ const CHECKMARK_ICON: char;
+
+ /// The `char` representing a ▼ icon in the built-in [`ICON_FONT`].
+ ///
+ /// [`ICON_FONT`]: Self::ICON_FONT
+ const ARROW_DOWN_ICON: char;
+
+ /// Returns the default size of [`Text`].
+ fn default_size(&self) -> u16;
+
+ /// Measures the text in the given bounds and returns the minimum boundaries
+ /// that can fit the contents.
+ fn measure(
+ &self,
+ content: &str,
+ size: u16,
+ font: Self::Font,
+ bounds: Size,
+ ) -> (f32, f32);
+
+ fn measure_width(&self, content: &str, size: u16, font: Self::Font) -> f32 {
+ let (width, _) = self.measure(content, size, font, Size::INFINITY);
+
+ width
+ }
+
+ /// Tests whether the provided point is within the boundaries of [`Text`]
+ /// laid out with the given parameters, returning information about
+ /// the nearest character.
+ ///
+ /// If `nearest_only` is true, the hit test does not consider whether the
+ /// the point is interior to any glyph bounds, returning only the character
+ /// with the nearest centeroid.
+ fn hit_test(
+ &self,
+ contents: &str,
+ size: f32,
+ font: Self::Font,
+ bounds: Size,
+ point: Point,
+ nearest_only: bool,
+ ) -> Option<Hit>;
+
+ fn fill_text(&mut self, text: Text<'_, Self::Font>);
+}