summaryrefslogtreecommitdiffstats
path: root/native/src/widget
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/widget
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/widget')
-rw-r--r--native/src/widget/checkbox.rs16
-rw-r--r--native/src/widget/pick_list.rs14
-rw-r--r--native/src/widget/radio.rs14
-rw-r--r--native/src/widget/text.rs17
-rw-r--r--native/src/widget/text_input.rs19
-rw-r--r--native/src/widget/toggler.rs12
-rw-r--r--native/src/widget/tooltip.rs9
7 files changed, 51 insertions, 50 deletions
diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs
index b81a444e..624e01d6 100644
--- a/native/src/widget/checkbox.rs
+++ b/native/src/widget/checkbox.rs
@@ -6,9 +6,9 @@ use crate::event::{self, Event};
use crate::layout;
use crate::mouse;
use crate::renderer;
+use crate::text;
use crate::touch;
-use crate::widget::text;
-use crate::widget::{Row, Text};
+use crate::widget::{self, Row, Text};
use crate::{
Alignment, Clipboard, Color, Element, Hasher, Layout, Length, Point,
Rectangle, Widget,
@@ -34,7 +34,7 @@ pub use iced_style::checkbox::{Style, StyleSheet};
///
/// ![Checkbox drawn by `iced_wgpu`](https://github.com/hecrj/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/checkbox.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Checkbox<'a, Message, Renderer: renderer::Text> {
+pub struct Checkbox<'a, Message, Renderer: text::Renderer> {
is_checked: bool,
on_toggle: Box<dyn Fn(bool) -> Message>,
label: String,
@@ -47,7 +47,7 @@ pub struct Checkbox<'a, Message, Renderer: renderer::Text> {
style_sheet: &'a dyn StyleSheet,
}
-impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> {
+impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {
/// The default size of a [`Checkbox`].
const DEFAULT_SIZE: u16 = 20;
@@ -128,7 +128,7 @@ impl<'a, Message, Renderer: renderer::Text> Checkbox<'a, Message, Renderer> {
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Checkbox<'a, Message, Renderer>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.width
@@ -232,7 +232,7 @@ where
});
if self.is_checked {
- renderer.fill_text(renderer::text::Section {
+ renderer.fill_text(text::Text {
content: &Renderer::CHECKMARK_ICON.to_string(),
font: Renderer::ICON_FONT,
size: bounds.height * 0.7,
@@ -251,7 +251,7 @@ where
{
let label_layout = children.next().unwrap();
- text::draw(
+ widget::text::draw(
renderer,
style,
label_layout,
@@ -276,7 +276,7 @@ where
impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + renderer::Text,
+ Renderer: 'a + text::Renderer,
Message: 'a,
{
fn from(
diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs
index 6fe5feb7..3a393e14 100644
--- a/native/src/widget/pick_list.rs
+++ b/native/src/widget/pick_list.rs
@@ -7,7 +7,7 @@ use crate::mouse;
use crate::overlay;
use crate::overlay::menu::{self, Menu};
use crate::renderer;
-use crate::renderer::text;
+use crate::text::{self, Text};
use crate::touch;
use crate::{
Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
@@ -19,7 +19,7 @@ pub use iced_style::pick_list::{Style, StyleSheet};
/// A widget for selecting a single value from a list of options.
#[allow(missing_debug_implementations)]
-pub struct PickList<'a, T, Message, Renderer: renderer::Text>
+pub struct PickList<'a, T, Message, Renderer: text::Renderer>
where
[T]: ToOwned<Owned = Vec<T>>,
{
@@ -61,7 +61,7 @@ impl<T> Default for State<T> {
}
}
-impl<'a, T: 'a, Message, Renderer: renderer::Text>
+impl<'a, T: 'a, Message, Renderer: text::Renderer>
PickList<'a, T, Message, Renderer>
where
T: ToString + Eq,
@@ -151,7 +151,7 @@ where
T: Clone + ToString + Eq,
[T]: ToOwned<Owned = Vec<T>>,
Message: 'static,
- Renderer: renderer::Text + 'a,
+ Renderer: text::Renderer + 'a,
{
fn width(&self) -> Length {
self.width
@@ -368,7 +368,7 @@ where
border_radius: style.border_radius,
});
- renderer.fill_text(text::Section {
+ renderer.fill_text(Text {
content: &Renderer::ARROW_DOWN_ICON.to_string(),
font: Renderer::ICON_FONT,
size: bounds.height * style.icon_size,
@@ -390,7 +390,7 @@ where
.as_ref()
.or_else(|| self.placeholder.as_ref())
{
- renderer.fill_text(text::Section {
+ renderer.fill_text(Text {
content: label,
size: f32::from(
self.text_size.unwrap_or(renderer.default_size()),
@@ -444,7 +444,7 @@ impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
T: Clone + ToString + Eq,
[T]: ToOwned<Owned = Vec<T>>,
- Renderer: renderer::Text + 'a,
+ Renderer: text::Renderer + 'a,
Message: 'static,
{
fn into(self) -> Element<'a, Message, Renderer> {
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index 91de8be5..afe85b76 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -6,9 +6,9 @@ use crate::event::{self, Event};
use crate::layout;
use crate::mouse;
use crate::renderer;
+use crate::text;
use crate::touch;
-use crate::widget::text;
-use crate::widget::{Row, Text};
+use crate::widget::{self, Row, Text};
use crate::{
Alignment, Background, Clipboard, Color, Element, Hasher, Layout, Length,
Point, Rectangle, Widget,
@@ -43,7 +43,7 @@ pub use iced_style::radio::{Style, StyleSheet};
///
/// ![Radio buttons drawn by `iced_wgpu`](https://github.com/hecrj/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/radio.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Radio<'a, Message, Renderer: renderer::Text> {
+pub struct Radio<'a, Message, Renderer: text::Renderer> {
is_selected: bool,
on_click: Message,
label: String,
@@ -56,7 +56,7 @@ pub struct Radio<'a, Message, Renderer: renderer::Text> {
style_sheet: &'a dyn StyleSheet,
}
-impl<'a, Message, Renderer: renderer::Text> Radio<'a, Message, Renderer>
+impl<'a, Message, Renderer: text::Renderer> Radio<'a, Message, Renderer>
where
Message: Clone,
{
@@ -145,7 +145,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Radio<'a, Message, Renderer>
where
Message: Clone,
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.width
@@ -267,7 +267,7 @@ where
{
let label_layout = children.next().unwrap();
- text::draw(
+ widget::text::draw(
renderer,
style,
label_layout,
@@ -293,7 +293,7 @@ impl<'a, Message, Renderer> From<Radio<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
Message: 'a + Clone,
- Renderer: 'a + renderer::Text,
+ Renderer: 'a + text::Renderer,
{
fn from(
radio: Radio<'a, Message, Renderer>,
diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs
index 563ab8c4..79688b28 100644
--- a/native/src/widget/text.rs
+++ b/native/src/widget/text.rs
@@ -2,12 +2,11 @@
use crate::alignment;
use crate::layout;
use crate::renderer;
+use crate::text;
use crate::{
Color, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
};
-pub use iced_core::text::Hit;
-
use std::hash::Hash;
/// A paragraph of text.
@@ -24,7 +23,7 @@ use std::hash::Hash;
///
/// ![Text drawn by `iced_wgpu`](https://github.com/hecrj/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/text.png?raw=true)
#[derive(Debug)]
-pub struct Text<Renderer: renderer::Text> {
+pub struct Text<Renderer: text::Renderer> {
content: String,
size: Option<u16>,
color: Option<Color>,
@@ -35,7 +34,7 @@ pub struct Text<Renderer: renderer::Text> {
vertical_alignment: alignment::Vertical,
}
-impl<Renderer: renderer::Text> Text<Renderer> {
+impl<Renderer: text::Renderer> Text<Renderer> {
/// Create a new fragment of [`Text`] with the given contents.
pub fn new<T: Into<String>>(label: T) -> Self {
Text {
@@ -103,7 +102,7 @@ impl<Renderer: renderer::Text> Text<Renderer> {
impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.width
@@ -175,7 +174,7 @@ pub fn draw<Renderer>(
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
) where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
let bounds = layout.bounds();
@@ -191,7 +190,7 @@ pub fn draw<Renderer>(
alignment::Vertical::Bottom => bounds.y + bounds.height,
};
- renderer.fill_text(renderer::text::Section {
+ renderer.fill_text(crate::text::Text {
content,
size: f32::from(size.unwrap_or(renderer.default_size())),
bounds: Rectangle { x, y, ..bounds },
@@ -205,14 +204,14 @@ pub fn draw<Renderer>(
impl<'a, Message, Renderer> From<Text<Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: renderer::Text + 'a,
+ Renderer: text::Renderer + 'a,
{
fn from(text: Text<Renderer>) -> Element<'a, Message, Renderer> {
Element::new(text)
}
}
-impl<Renderer: renderer::Text> Clone for Text<Renderer> {
+impl<Renderer: text::Renderer> Clone for Text<Renderer> {
fn clone(&self) -> Self {
Self {
content: self.content.clone(),
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs
index 5d67ddfe..a3641330 100644
--- a/native/src/widget/text_input.rs
+++ b/native/src/widget/text_input.rs
@@ -17,6 +17,7 @@ use crate::keyboard;
use crate::layout;
use crate::mouse::{self, click};
use crate::renderer;
+use crate::text::{self, Text};
use crate::touch;
use crate::{
Background, Clipboard, Color, Element, Hasher, Layout, Length, Padding,
@@ -53,7 +54,7 @@ pub use iced_style::text_input::{Style, StyleSheet};
/// ```
/// ![Text input drawn by `iced_wgpu`](https://github.com/hecrj/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/text_input.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct TextInput<'a, Message, Renderer: renderer::Text> {
+pub struct TextInput<'a, Message, Renderer: text::Renderer> {
state: &'a mut State,
placeholder: String,
value: Value,
@@ -71,7 +72,7 @@ pub struct TextInput<'a, Message, Renderer: renderer::Text> {
impl<'a, Message, Renderer> TextInput<'a, Message, Renderer>
where
Message: Clone,
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
/// Creates a new [`TextInput`].
///
@@ -166,7 +167,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for TextInput<'a, Message, Renderer>
where
Message: Clone,
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.width
@@ -728,7 +729,7 @@ where
renderer.fill_rectangle(cursor);
}
- renderer.fill_text(renderer::text::Section {
+ renderer.fill_text(Text {
content: if text.is_empty() {
&self.placeholder
} else {
@@ -776,7 +777,7 @@ impl<'a, Message, Renderer> From<TextInput<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
Message: 'a + Clone,
- Renderer: 'a + renderer::Text,
+ Renderer: 'a + text::Renderer,
{
fn from(
text_input: TextInput<'a, Message, Renderer>,
@@ -877,7 +878,7 @@ fn offset<Renderer>(
state: &State,
) -> f32
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
if state.is_focused() {
let cursor = state.cursor();
@@ -911,7 +912,7 @@ fn measure_cursor_and_scroll_offset<Renderer>(
font: Renderer::Font,
) -> (f32, f32)
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
let text_before_cursor = value.until(cursor_index).to_string();
@@ -935,7 +936,7 @@ fn find_cursor_position<Renderer>(
x: f32,
) -> Option<usize>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
let size = size.unwrap_or(renderer.default_size());
@@ -950,5 +951,5 @@ where
Point::new(x + offset, text_bounds.height / 2.0),
true,
)
- .map(renderer::text::Hit::cursor)
+ .map(text::Hit::cursor)
}
diff --git a/native/src/widget/toggler.rs b/native/src/widget/toggler.rs
index 20cfea74..e5229d52 100644
--- a/native/src/widget/toggler.rs
+++ b/native/src/widget/toggler.rs
@@ -6,7 +6,7 @@ use crate::event;
use crate::layout;
use crate::mouse;
use crate::renderer;
-use crate::widget::text;
+use crate::text;
use crate::widget::{Row, Text};
use crate::{
Alignment, Clipboard, Element, Event, Hasher, Layout, Length, Point,
@@ -31,7 +31,7 @@ pub use iced_style::toggler::{Style, StyleSheet};
/// Toggler::new(is_active, String::from("Toggle me!"), |b| Message::TogglerToggled(b));
/// ```
#[allow(missing_debug_implementations)]
-pub struct Toggler<Message, Renderer: renderer::Text> {
+pub struct Toggler<Message, Renderer: text::Renderer> {
is_active: bool,
on_toggle: Box<dyn Fn(bool) -> Message>,
label: Option<String>,
@@ -44,7 +44,7 @@ pub struct Toggler<Message, Renderer: renderer::Text> {
style_sheet: Box<dyn StyleSheet>,
}
-impl<Message, Renderer: renderer::Text> Toggler<Message, Renderer> {
+impl<Message, Renderer: text::Renderer> Toggler<Message, Renderer> {
/// The default size of a [`Toggler`].
pub const DEFAULT_SIZE: u16 = 20;
@@ -126,7 +126,7 @@ impl<Message, Renderer: renderer::Text> Toggler<Message, Renderer> {
impl<Message, Renderer> Widget<Message, Renderer> for Toggler<Message, Renderer>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.width
@@ -223,7 +223,7 @@ where
if let Some(label) = &self.label {
let label_layout = children.next().unwrap();
- text::draw(
+ crate::widget::text::draw(
renderer,
style,
label_layout,
@@ -297,7 +297,7 @@ where
impl<'a, Message, Renderer> From<Toggler<Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + renderer::Text,
+ Renderer: 'a + text::Renderer,
Message: 'a,
{
fn from(
diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs
index a00158f6..a7f3a042 100644
--- a/native/src/widget/tooltip.rs
+++ b/native/src/widget/tooltip.rs
@@ -6,6 +6,7 @@ use iced_core::Rectangle;
use crate::event;
use crate::layout;
use crate::renderer;
+use crate::text;
use crate::widget::container;
use crate::widget::text::Text;
use crate::{
@@ -15,7 +16,7 @@ use crate::{
/// An element to display a widget over another.
#[allow(missing_debug_implementations)]
-pub struct Tooltip<'a, Message, Renderer: renderer::Text> {
+pub struct Tooltip<'a, Message, Renderer: text::Renderer> {
content: Element<'a, Message, Renderer>,
tooltip: Text<Renderer>,
position: Position,
@@ -26,7 +27,7 @@ pub struct Tooltip<'a, Message, Renderer: renderer::Text> {
impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
/// The default padding of a [`Tooltip`] drawn by this renderer.
const DEFAULT_PADDING: u16 = 5;
@@ -100,7 +101,7 @@ pub enum Position {
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Tooltip<'a, Message, Renderer>
where
- Renderer: renderer::Text,
+ Renderer: text::Renderer,
{
fn width(&self) -> Length {
self.content.width()
@@ -260,7 +261,7 @@ where
impl<'a, Message, Renderer> From<Tooltip<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + renderer::Text,
+ Renderer: 'a + text::Renderer,
Message: 'a,
{
fn from(