summaryrefslogtreecommitdiffstats
path: root/native/src
diff options
context:
space:
mode:
Diffstat (limited to 'native/src')
-rw-r--r--native/src/widget/checkbox.rs14
-rw-r--r--native/src/widget/radio.rs10
-rw-r--r--native/src/widget/text.rs69
-rw-r--r--native/src/widget/toggler.rs10
-rw-r--r--native/src/widget/tooltip.rs9
5 files changed, 69 insertions, 43 deletions
diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs
index cedbb7d8..9e7f183a 100644
--- a/native/src/widget/checkbox.rs
+++ b/native/src/widget/checkbox.rs
@@ -35,7 +35,7 @@ pub use iced_style::checkbox::{Appearance, StyleSheet};
pub struct Checkbox<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
is_checked: bool,
on_toggle: Box<dyn Fn(bool) -> Message + 'a>,
@@ -51,7 +51,7 @@ where
impl<'a, Message, Renderer> Checkbox<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
/// The default size of a [`Checkbox`].
const DEFAULT_SIZE: u16 = 20;
@@ -130,7 +130,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Checkbox<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
self.width
@@ -262,9 +262,11 @@ where
style,
label_layout,
&self.label,
- self.font.clone(),
self.text_size,
- custom_style.text_color,
+ self.font.clone(),
+ widget::text::Appearance {
+ color: custom_style.text_color,
+ },
alignment::Horizontal::Left,
alignment::Vertical::Center,
);
@@ -277,7 +279,7 @@ impl<'a, Message, Renderer> From<Checkbox<'a, Message, Renderer>>
where
Message: 'a,
Renderer: 'a + text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn from(
checkbox: Checkbox<'a, Message, Renderer>,
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index de7e2735..ba45a0f4 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -144,7 +144,7 @@ impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message, Renderer>
where
Message: Clone,
Renderer: text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
self.width
@@ -277,9 +277,11 @@ where
style,
label_layout,
&self.label,
- self.font.clone(),
self.text_size,
- custom_style.text_color,
+ self.font.clone(),
+ widget::text::Appearance {
+ color: custom_style.text_color,
+ },
alignment::Horizontal::Left,
alignment::Vertical::Center,
);
@@ -292,7 +294,7 @@ impl<'a, Message, Renderer> From<Radio<Message, Renderer>>
where
Message: 'a + Clone,
Renderer: 'a + text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn from(radio: Radio<Message, Renderer>) -> Element<'a, Message, Renderer> {
Element::new(radio)
diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs
index 5f7e9159..242247b0 100644
--- a/native/src/widget/text.rs
+++ b/native/src/widget/text.rs
@@ -3,45 +3,57 @@ use crate::alignment;
use crate::layout;
use crate::renderer;
use crate::text;
-use crate::{Color, Element, Layout, Length, Point, Rectangle, Size, Widget};
+use crate::{Element, Layout, Length, Point, Rectangle, Size, Widget};
+
+pub use iced_style::text::{Appearance, StyleSheet};
/// A paragraph of text.
///
/// # Example
///
/// ```
+/// # use iced_native::Color;
+/// #
/// # type Text = iced_native::widget::Text<iced_native::renderer::Null>;
/// #
/// Text::new("I <3 iced!")
-/// .color([0.0, 0.0, 1.0])
-/// .size(40);
+/// .size(40)
+/// .style(Color::from([0.0, 0.0, 1.0]));
/// ```
///
/// ![Text drawn by `iced_wgpu`](https://github.com/iced-rs/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/text.png?raw=true)
-#[derive(Debug)]
-pub struct Text<Renderer: text::Renderer> {
+#[allow(missing_debug_implementations)]
+pub struct Text<Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
+{
content: String,
size: Option<u16>,
- color: Option<Color>,
- font: Renderer::Font,
width: Length,
height: Length,
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
+ font: Renderer::Font,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<Renderer: text::Renderer> Text<Renderer> {
+impl<Renderer> Text<Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
+{
/// Create a new fragment of [`Text`] with the given contents.
pub fn new<T: Into<String>>(label: T) -> Self {
Text {
content: label.into(),
size: None,
- color: None,
font: Default::default(),
width: Length::Shrink,
height: Length::Shrink,
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
+ style: Default::default(),
}
}
@@ -51,12 +63,6 @@ impl<Renderer: text::Renderer> Text<Renderer> {
self
}
- /// Sets the [`Color`] of the [`Text`].
- pub fn color<C: Into<Color>>(mut self, color: C) -> Self {
- self.color = Some(color.into());
- self
- }
-
/// Sets the [`Font`] of the [`Text`].
///
/// [`Font`]: crate::text::Renderer::Font
@@ -65,6 +71,15 @@ impl<Renderer: text::Renderer> Text<Renderer> {
self
}
+ /// Sets the [`Color`] of the [`Text`].
+ pub fn style(
+ mut self,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
+ ) -> Self {
+ self.style = style.into();
+ self
+ }
+
/// Sets the width of the [`Text`] boundaries.
pub fn width(mut self, width: Length) -> Self {
self.width = width;
@@ -99,6 +114,7 @@ impl<Renderer: text::Renderer> Text<Renderer> {
impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn width(&self) -> Length {
self.width
@@ -130,7 +146,7 @@ where
fn draw(
&self,
renderer: &mut Renderer,
- _theme: &Renderer::Theme,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
_cursor_position: Point,
@@ -141,9 +157,9 @@ where
style,
layout,
&self.content,
- self.font.clone(),
self.size,
- self.color,
+ self.font.clone(),
+ theme.appearance(self.style),
self.horizontal_alignment,
self.vertical_alignment,
);
@@ -165,9 +181,9 @@ pub fn draw<Renderer>(
style: &renderer::Style,
layout: Layout<'_>,
content: &str,
- font: Renderer::Font,
size: Option<u16>,
- color: Option<Color>,
+ font: Renderer::Font,
+ appearance: Appearance,
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
) where
@@ -191,7 +207,7 @@ pub fn draw<Renderer>(
content,
size: f32::from(size.unwrap_or(renderer.default_size())),
bounds: Rectangle { x, y, ..bounds },
- color: color.unwrap_or(style.text_color),
+ color: appearance.color.unwrap_or(style.text_color),
font,
horizontal_alignment,
vertical_alignment,
@@ -202,23 +218,28 @@ impl<'a, Message, Renderer> From<Text<Renderer>>
for Element<'a, Message, Renderer>
where
Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn from(text: Text<Renderer>) -> Element<'a, Message, Renderer> {
Element::new(text)
}
}
-impl<Renderer: text::Renderer> Clone for Text<Renderer> {
+impl<Renderer> Clone for Text<Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
+{
fn clone(&self) -> Self {
Self {
content: self.content.clone(),
size: self.size,
- color: self.color,
- font: self.font.clone(),
width: self.width,
height: self.height,
horizontal_alignment: self.horizontal_alignment,
vertical_alignment: self.vertical_alignment,
+ font: self.font.clone(),
+ style: self.style,
}
}
}
diff --git a/native/src/widget/toggler.rs b/native/src/widget/toggler.rs
index 25391404..0936c271 100644
--- a/native/src/widget/toggler.rs
+++ b/native/src/widget/toggler.rs
@@ -5,7 +5,7 @@ use crate::layout;
use crate::mouse;
use crate::renderer;
use crate::text;
-use crate::widget::{Row, Text};
+use crate::widget::{self, Row, Text};
use crate::{
Alignment, Clipboard, Element, Event, Layout, Length, Point, Rectangle,
Shell, Widget,
@@ -136,7 +136,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Toggler<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
self.width
@@ -240,9 +240,9 @@ where
style,
label_layout,
&label,
- self.font.clone(),
self.text_size,
- None,
+ self.font.clone(),
+ Default::default(),
self.text_alignment,
alignment::Vertical::Center,
);
@@ -312,7 +312,7 @@ impl<'a, Message, Renderer> From<Toggler<'a, Message, Renderer>>
where
Message: 'a,
Renderer: 'a + text::Renderer,
- Renderer::Theme: StyleSheet,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn from(
toggler: Toggler<'a, Message, Renderer>,
diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs
index d034f648..0548e9da 100644
--- a/native/src/widget/tooltip.rs
+++ b/native/src/widget/tooltip.rs
@@ -4,6 +4,7 @@ use crate::layout;
use crate::mouse;
use crate::renderer;
use crate::text;
+use crate::widget;
use crate::widget::container;
use crate::widget::text::Text;
use crate::{
@@ -16,7 +17,7 @@ use crate::{
pub struct Tooltip<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: container::StyleSheet,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
content: Element<'a, Message, Renderer>,
tooltip: Text<Renderer>,
@@ -29,7 +30,7 @@ where
impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: container::StyleSheet,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
/// The default padding of a [`Tooltip`] drawn by this renderer.
const DEFAULT_PADDING: u16 = 5;
@@ -224,7 +225,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Tooltip<'a, Message, Renderer>
where
Renderer: text::Renderer,
- Renderer::Theme: container::StyleSheet,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
self.content.width()
@@ -330,7 +331,7 @@ impl<'a, Message, Renderer> From<Tooltip<'a, Message, Renderer>>
where
Message: 'a,
Renderer: 'a + text::Renderer,
- Renderer::Theme: container::StyleSheet,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
fn from(
tooltip: Tooltip<'a, Message, Renderer>,