From edea093350e1b576e2b7db50c525e7fa5c3bea9f Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Mon, 18 Oct 2021 15:19:04 +0700
Subject: Move `Defaults` from `iced_graphics` to `iced_native`

---
 native/src/element.rs                    | 11 +++--
 native/src/overlay.rs                    |  3 +-
 native/src/overlay/element.rs            | 11 ++---
 native/src/overlay/menu.rs               |  5 +-
 native/src/renderer.rs                   | 20 ++++++--
 native/src/renderer/null.rs              |  3 --
 native/src/renderer/text.rs              |  4 +-
 native/src/user_interface.rs             |  7 +--
 native/src/widget.rs                     |  3 +-
 native/src/widget/button.rs              |  3 +-
 native/src/widget/checkbox.rs            |  8 +--
 native/src/widget/column.rs              |  5 +-
 native/src/widget/container.rs           |  5 +-
 native/src/widget/image.rs               |  3 +-
 native/src/widget/image/viewer.rs        |  3 +-
 native/src/widget/pane_grid.rs           |  3 +-
 native/src/widget/pane_grid/content.rs   |  3 +-
 native/src/widget/pane_grid/title_bar.rs |  3 +-
 native/src/widget/pick_list.rs           |  3 +-
 native/src/widget/progress_bar.rs        |  8 +--
 native/src/widget/radio.rs               |  8 +--
 native/src/widget/row.rs                 |  5 +-
 native/src/widget/rule.rs                |  9 ++--
 native/src/widget/scrollable.rs          |  6 +--
 native/src/widget/slider.rs              |  6 ++-
 native/src/widget/space.rs               | 10 ++--
 native/src/widget/svg.rs                 | 11 ++---
 native/src/widget/text.rs                |  6 +--
 native/src/widget/text_input.rs          | 85 +++++++++++++-------------------
 native/src/widget/toggler.rs             |  3 +-
 native/src/widget/tooltip.rs             | 10 ++--
 31 files changed, 140 insertions(+), 133 deletions(-)

(limited to 'native/src')

diff --git a/native/src/element.rs b/native/src/element.rs
index 35e1b4f4..3ecd8e26 100644
--- a/native/src/element.rs
+++ b/native/src/element.rs
@@ -1,6 +1,7 @@
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{
     Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Widget,
 };
@@ -241,13 +242,13 @@ where
     pub fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
     ) {
         self.widget
-            .draw(renderer, defaults, layout, cursor_position, viewport)
+            .draw(renderer, style, layout, cursor_position, viewport)
     }
 
     /// Computes the _layout_ hash of the [`Element`].
@@ -336,13 +337,13 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
     ) {
         self.widget
-            .draw(renderer, defaults, layout, cursor_position, viewport)
+            .draw(renderer, style, layout, cursor_position, viewport)
     }
 
     fn hash_layout(&self, state: &mut Hasher) {
@@ -418,7 +419,7 @@ where
     fn draw(
         &self,
         _renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         _layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/overlay.rs b/native/src/overlay.rs
index 7054ee69..25b49adf 100644
--- a/native/src/overlay.rs
+++ b/native/src/overlay.rs
@@ -8,6 +8,7 @@ pub use menu::Menu;
 
 use crate::event::{self, Event};
 use crate::layout;
+use crate::renderer;
 use crate::{Clipboard, Hasher, Layout, Point, Size};
 
 /// An interactive component that can be displayed on top of other widgets.
@@ -32,7 +33,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
     );
diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs
index 081b62ce..bf3fb3f0 100644
--- a/native/src/overlay/element.rs
+++ b/native/src/overlay/element.rs
@@ -2,6 +2,7 @@ pub use crate::Overlay;
 
 use crate::event::{self, Event};
 use crate::layout;
+use crate::renderer;
 use crate::{Clipboard, Hasher, Layout, Point, Size, Vector};
 
 /// A generic [`Overlay`].
@@ -71,12 +72,11 @@ where
     pub fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
     ) {
-        self.overlay
-            .draw(renderer, defaults, layout, cursor_position)
+        self.overlay.draw(renderer, style, layout, cursor_position)
     }
 
     /// Computes the _layout_ hash of the [`Element`].
@@ -142,12 +142,11 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
     ) {
-        self.content
-            .draw(renderer, defaults, layout, cursor_position)
+        self.content.draw(renderer, style, layout, cursor_position)
     }
 
     fn hash_layout(&self, state: &mut Hasher, position: Point) {
diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs
index c4f64f85..f2367ae7 100644
--- a/native/src/overlay/menu.rs
+++ b/native/src/overlay/menu.rs
@@ -4,6 +4,7 @@ use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
 use crate::overlay;
+use crate::renderer;
 use crate::scrollable;
 use crate::text;
 use crate::touch;
@@ -236,7 +237,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
     ) {
@@ -380,7 +381,7 @@ where
     fn draw(
         &self,
         _renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        _style: &renderer::Style,
         _layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/renderer.rs b/native/src/renderer.rs
index 382edb61..e48c701d 100644
--- a/native/src/renderer.rs
+++ b/native/src/renderer.rs
@@ -34,11 +34,6 @@ use crate::{Background, Color, Element, Rectangle, Vector};
 /// A component that can take the state of a user interface and produce an
 /// output for its users.
 pub trait Renderer: Sized {
-    /// The default styling attributes of the [`Renderer`].
-    ///
-    /// This type can be leveraged to implement style inheritance.
-    type Defaults: Default;
-
     /// Lays out the elements of a user interface.
     ///
     /// You should override this if you need to perform any operations before or
@@ -71,3 +66,18 @@ pub struct Quad {
     pub border_width: f32,
     pub border_color: Color,
 }
+
+/// The styling attributes of a [`Renderer`].
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub struct Style {
+    /// The text color
+    pub text_color: Color,
+}
+
+impl Default for Style {
+    fn default() -> Self {
+        Style {
+            text_color: Color::BLACK,
+        }
+    }
+}
diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs
index 960a5727..268248fd 100644
--- a/native/src/renderer/null.rs
+++ b/native/src/renderer/null.rs
@@ -5,7 +5,6 @@ use crate::pane_grid;
 use crate::progress_bar;
 use crate::radio;
 use crate::renderer::{self, Renderer};
-use crate::scrollable;
 use crate::slider;
 use crate::text;
 use crate::text_input;
@@ -26,8 +25,6 @@ impl Null {
 }
 
 impl Renderer for Null {
-    type Defaults = ();
-
     fn with_layer(
         &mut self,
         _bounds: Rectangle,
diff --git a/native/src/renderer/text.rs b/native/src/renderer/text.rs
index 5c189d89..9234c587 100644
--- a/native/src/renderer/text.rs
+++ b/native/src/renderer/text.rs
@@ -12,8 +12,8 @@ pub trait Text: Renderer {
 pub struct Section<'a, Font> {
     pub content: &'a str,
     pub bounds: Rectangle,
-    pub size: Option<f32>,
-    pub color: Option<Color>,
+    pub size: f32,
+    pub color: Color,
     pub font: Font,
     pub horizontal_alignment: alignment::Horizontal,
     pub vertical_alignment: alignment::Vertical,
diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs
index eb57670d..2f76c084 100644
--- a/native/src/user_interface.rs
+++ b/native/src/user_interface.rs
@@ -1,6 +1,7 @@
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{Clipboard, Element, Layout, Point, Rectangle, Size, Vector};
 
 use std::hash::Hasher;
@@ -353,7 +354,7 @@ where
                 |renderer| {
                     overlay.draw(
                         renderer,
-                        &Renderer::Defaults::default(),
+                        &renderer::Style::default(),
                         Layout::new(&layer.layout),
                         cursor_position,
                     );
@@ -376,7 +377,7 @@ where
 
             self.root.widget.draw(
                 renderer,
-                &Renderer::Defaults::default(),
+                &renderer::Style::default(),
                 Layout::new(&self.base.layout),
                 base_cursor,
                 &viewport,
@@ -384,7 +385,7 @@ where
         } else {
             self.root.widget.draw(
                 renderer,
-                &Renderer::Defaults::default(),
+                &renderer::Style::default(),
                 Layout::new(&self.base.layout),
                 cursor_position,
                 &viewport,
diff --git a/native/src/widget.rs b/native/src/widget.rs
index 01c5bed3..9a494771 100644
--- a/native/src/widget.rs
+++ b/native/src/widget.rs
@@ -81,6 +81,7 @@ pub use tooltip::Tooltip;
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{Clipboard, Hasher, Layout, Length, Point, Rectangle};
 
 /// A component that displays information and allows interaction.
@@ -131,7 +132,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs
index 1c7f80ef..2aeffd03 100644
--- a/native/src/widget/button.rs
+++ b/native/src/widget/button.rs
@@ -5,6 +5,7 @@ use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
 use crate::overlay;
+use crate::renderer;
 use crate::touch;
 use crate::{
     Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
@@ -244,7 +245,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs
index 579e4ee3..52113322 100644
--- a/native/src/widget/checkbox.rs
+++ b/native/src/widget/checkbox.rs
@@ -1,15 +1,15 @@
 //! Show toggle controls using checkboxes.
 use std::hash::Hash;
 
-use crate::alignment::{self, Alignment};
 use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
+use crate::renderer;
 use crate::text;
 use crate::touch;
 use crate::{
-    Clipboard, Color, Element, Hasher, Layout, Length, Point, Rectangle, Row,
-    Text, Widget,
+    Alignment, Clipboard, Color, Element, Hasher, Layout, Length, Point,
+    Rectangle, Row, Text, Widget,
 };
 
 /// A box that can be checked.
@@ -182,7 +182,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs
index 7cf6d345..e7ce0041 100644
--- a/native/src/widget/column.rs
+++ b/native/src/widget/column.rs
@@ -4,6 +4,7 @@ use std::hash::Hash;
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{
     Alignment, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
     Rectangle, Widget,
@@ -165,13 +166,13 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
     ) {
         for (child, layout) in self.children.iter().zip(layout.children()) {
-            child.draw(renderer, defaults, layout, cursor_position, viewport);
+            child.draw(renderer, style, layout, cursor_position, viewport);
         }
     }
 
diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs
index af40f2ab..92869873 100644
--- a/native/src/widget/container.rs
+++ b/native/src/widget/container.rs
@@ -5,6 +5,7 @@ use crate::alignment::{self, Alignment};
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{
     Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
     Widget,
@@ -175,14 +176,14 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
     ) {
         self.content.draw(
             renderer,
-            defaults,
+            style,
             layout.children().next().unwrap(),
             cursor_position,
             viewport,
diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs
index 1607a596..b6b8dc1f 100644
--- a/native/src/widget/image.rs
+++ b/native/src/widget/image.rs
@@ -3,6 +3,7 @@ pub mod viewer;
 pub use viewer::Viewer;
 
 use crate::layout;
+use crate::renderer;
 use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget};
 
 use std::{
@@ -92,7 +93,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        _style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/image/viewer.rs b/native/src/widget/image/viewer.rs
index d483ed61..63087f5f 100644
--- a/native/src/widget/image/viewer.rs
+++ b/native/src/widget/image/viewer.rs
@@ -3,6 +3,7 @@ use crate::event::{self, Event};
 use crate::image;
 use crate::layout;
 use crate::mouse;
+use crate::renderer;
 use crate::{
     Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector,
     Widget,
@@ -283,7 +284,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs
index b4a8cdb1..1e63fdeb 100644
--- a/native/src/widget/pane_grid.rs
+++ b/native/src/widget/pane_grid.rs
@@ -32,6 +32,7 @@ use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
 use crate::overlay;
+use crate::renderer;
 use crate::touch;
 use crate::{
     Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector,
@@ -475,7 +476,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs
index e94955f7..22b3a310 100644
--- a/native/src/widget/pane_grid/content.rs
+++ b/native/src/widget/pane_grid/content.rs
@@ -3,6 +3,7 @@ use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
 use crate::pane_grid::{self, TitleBar};
+use crate::renderer;
 use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size};
 
 /// The content of a [`Pane`].
@@ -57,7 +58,7 @@ where
     pub fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs
index 9b0b7c78..ce9249d2 100644
--- a/native/src/widget/pane_grid/title_bar.rs
+++ b/native/src/widget/pane_grid/title_bar.rs
@@ -3,6 +3,7 @@ use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
 use crate::pane_grid;
+use crate::renderer;
 use crate::{
     Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size,
 };
@@ -85,7 +86,7 @@ where
     pub fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs
index 73b01b01..ed688a61 100644
--- a/native/src/widget/pick_list.rs
+++ b/native/src/widget/pick_list.rs
@@ -5,6 +5,7 @@ use crate::layout;
 use crate::mouse;
 use crate::overlay;
 use crate::overlay::menu::{self, Menu};
+use crate::renderer;
 use crate::text;
 use crate::touch;
 use crate::{
@@ -322,7 +323,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/progress_bar.rs b/native/src/widget/progress_bar.rs
index d8cf5376..98dd9989 100644
--- a/native/src/widget/progress_bar.rs
+++ b/native/src/widget/progress_bar.rs
@@ -1,7 +1,7 @@
 //! Provide progress feedback to your users.
-use crate::{
-    layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
-};
+use crate::layout;
+use crate::renderer;
+use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget};
 
 use std::{hash::Hash, ops::RangeInclusive};
 
@@ -93,7 +93,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs
index c6955079..ba9bd9aa 100644
--- a/native/src/widget/radio.rs
+++ b/native/src/widget/radio.rs
@@ -1,15 +1,15 @@
 //! Create choices using radio buttons.
 use std::hash::Hash;
 
-use crate::alignment::{self, Alignment};
 use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
+use crate::renderer;
 use crate::text;
 use crate::touch;
 use crate::{
-    Clipboard, Color, Element, Hasher, Layout, Length, Point, Rectangle, Row,
-    Text, Widget,
+    Alignment, Clipboard, Color, Element, Hasher, Layout, Length, Point,
+    Rectangle, Row, Text, Widget,
 };
 
 /// A circular button representing a choice.
@@ -194,7 +194,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs
index 7eb5ab55..af63c7da 100644
--- a/native/src/widget/row.rs
+++ b/native/src/widget/row.rs
@@ -2,6 +2,7 @@
 use crate::event::{self, Event};
 use crate::layout;
 use crate::overlay;
+use crate::renderer;
 use crate::{
     Alignment, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
     Rectangle, Widget,
@@ -164,13 +165,13 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         viewport: &Rectangle,
     ) {
         for (child, layout) in self.children.iter().zip(layout.children()) {
-            child.draw(renderer, defaults, layout, cursor_position, viewport);
+            child.draw(renderer, style, layout, cursor_position, viewport);
         }
     }
 
diff --git a/native/src/widget/rule.rs b/native/src/widget/rule.rs
index 1fab77bc..24c4a51a 100644
--- a/native/src/widget/rule.rs
+++ b/native/src/widget/rule.rs
@@ -1,11 +1,10 @@
 //! Display a horizontal or vertical rule for dividing content.
+use crate::layout;
+use crate::renderer;
+use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget};
 
 use std::hash::Hash;
 
-use crate::{
-    layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
-};
-
 /// Display a horizontal or vertical rule for dividing content.
 #[derive(Debug, Copy, Clone)]
 pub struct Rule<Renderer: self::Renderer> {
@@ -68,7 +67,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs
index 98357928..63da539f 100644
--- a/native/src/widget/scrollable.rs
+++ b/native/src/widget/scrollable.rs
@@ -425,7 +425,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
@@ -452,7 +452,7 @@ where
             renderer.with_layer(bounds, Vector::new(0, offset), |renderer| {
                 self.content.draw(
                     renderer,
-                    defaults,
+                    style,
                     content_layout,
                     cursor_position,
                     &Rectangle {
@@ -502,7 +502,7 @@ where
         } else {
             self.content.draw(
                 renderer,
-                defaults,
+                style,
                 content_layout,
                 cursor_position,
                 &Rectangle {
diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs
index bcf811fe..7bdb72af 100644
--- a/native/src/widget/slider.rs
+++ b/native/src/widget/slider.rs
@@ -4,12 +4,14 @@
 use crate::event::{self, Event};
 use crate::layout;
 use crate::mouse;
+use crate::renderer;
 use crate::touch;
 use crate::{
     Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
 };
 
-use std::{hash::Hash, ops::RangeInclusive};
+use std::hash::Hash;
+use std::ops::RangeInclusive;
 
 /// An horizontal bar and a handle that selects a single value from a range of
 /// values.
@@ -246,7 +248,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/space.rs b/native/src/widget/space.rs
index 9a70dab1..1bf8cd68 100644
--- a/native/src/widget/space.rs
+++ b/native/src/widget/space.rs
@@ -1,9 +1,9 @@
 //! Distribute content vertically.
-use std::hash::Hash;
+use crate::layout;
+use crate::renderer;
+use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget};
 
-use crate::{
-    layout, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
-};
+use std::hash::Hash;
 
 /// An amount of empty space.
 ///
@@ -62,7 +62,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/svg.rs b/native/src/widget/svg.rs
index 737dd8d4..cce560cb 100644
--- a/native/src/widget/svg.rs
+++ b/native/src/widget/svg.rs
@@ -1,12 +1,11 @@
 //! Display vector graphics in your application.
 use crate::layout;
+use crate::renderer;
 use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget};
 
-use std::{
-    hash::{Hash, Hasher as _},
-    path::PathBuf,
-    sync::Arc,
-};
+use std::hash::{Hash, Hasher as _};
+use std::path::PathBuf;
+use std::sync::Arc;
 
 /// A vector graphics image.
 ///
@@ -90,7 +89,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs
index ea1ba7ac..a2438d9c 100644
--- a/native/src/widget/text.rs
+++ b/native/src/widget/text.rs
@@ -135,7 +135,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
@@ -156,9 +156,9 @@ where
 
         renderer.fill_text(renderer::text::Section {
             content: &self.content,
-            size: self.size.map(f32::from),
+            size: f32::from(self.size.unwrap_or(renderer.default_size())),
             bounds: Rectangle { x, y, ..bounds },
-            color: self.color,
+            color: self.color.unwrap_or(style.text_color),
             font: self.font,
             horizontal_alignment: self.horizontal_alignment,
             vertical_alignment: self.vertical_alignment,
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs
index fe95eb95..93af04d1 100644
--- a/native/src/widget/text_input.rs
+++ b/native/src/widget/text_input.rs
@@ -15,6 +15,7 @@ use crate::event::{self, Event};
 use crate::keyboard;
 use crate::layout;
 use crate::mouse::{self, click};
+use crate::renderer;
 use crate::text;
 use crate::touch;
 use crate::{
@@ -158,54 +159,6 @@ where
     }
 }
 
-impl<'a, Message, Renderer> TextInput<'a, Message, Renderer>
-where
-    Renderer: self::Renderer,
-{
-    /// Draws the [`TextInput`] with the given [`Renderer`], overriding its
-    /// [`Value`] if provided.
-    pub fn draw(
-        &self,
-        renderer: &mut Renderer,
-        layout: Layout<'_>,
-        cursor_position: Point,
-        value: Option<&Value>,
-    ) {
-        // TODO
-        // let value = value.unwrap_or(&self.value);
-        // let bounds = layout.bounds();
-        // let text_bounds = layout.children().next().unwrap().bounds();
-
-        // if self.is_secure {
-        //     self::Renderer::draw(
-        //         renderer,
-        //         bounds,
-        //         text_bounds,
-        //         cursor_position,
-        //         self.font,
-        //         self.size.unwrap_or(renderer.default_size()),
-        //         &self.placeholder,
-        //         &value.secure(),
-        //         &self.state,
-        //         &self.style,
-        //     )
-        // } else {
-        //     self::Renderer::draw(
-        //         renderer,
-        //         bounds,
-        //         text_bounds,
-        //         cursor_position,
-        //         self.font,
-        //         self.size.unwrap_or(renderer.default_size()),
-        //         &self.placeholder,
-        //         value,
-        //         &self.state,
-        //         &self.style,
-        //     )
-        // }
-    }
-}
-
 impl<'a, Message, Renderer> Widget<Message, Renderer>
     for TextInput<'a, Message, Renderer>
 where
@@ -627,12 +580,44 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        _style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
     ) {
-        self.draw(renderer, layout, cursor_position, None)
+
+        // TODO
+        // let value = value.unwrap_or(&self.value);
+        // let bounds = layout.bounds();
+        // let text_bounds = layout.children().next().unwrap().bounds();
+
+        // if self.is_secure {
+        //     self::Renderer::draw(
+        //         renderer,
+        //         bounds,
+        //         text_bounds,
+        //         cursor_position,
+        //         self.font,
+        //         self.size.unwrap_or(renderer.default_size()),
+        //         &self.placeholder,
+        //         &value.secure(),
+        //         &self.state,
+        //         &self.style,
+        //     )
+        // } else {
+        //     self::Renderer::draw(
+        //         renderer,
+        //         bounds,
+        //         text_bounds,
+        //         cursor_position,
+        //         self.font,
+        //         self.size.unwrap_or(renderer.default_size()),
+        //         &self.placeholder,
+        //         value,
+        //         &self.state,
+        //         &self.style,
+        //     )
+        // }
     }
 
     fn hash_layout(&self, state: &mut Hasher) {
diff --git a/native/src/widget/toggler.rs b/native/src/widget/toggler.rs
index 4a1f1f5d..6c7fa97b 100644
--- a/native/src/widget/toggler.rs
+++ b/native/src/widget/toggler.rs
@@ -5,6 +5,7 @@ use crate::alignment;
 use crate::event;
 use crate::layout;
 use crate::mouse;
+use crate::renderer;
 use crate::text;
 use crate::{
     Alignment, Clipboard, Element, Event, Hasher, Layout, Length, Point,
@@ -185,7 +186,7 @@ where
     fn draw(
         &self,
         renderer: &mut Renderer,
-        defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         layout: Layout<'_>,
         cursor_position: Point,
         _viewport: &Rectangle,
diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs
index 83d04675..496cd41e 100644
--- a/native/src/widget/tooltip.rs
+++ b/native/src/widget/tooltip.rs
@@ -3,12 +3,12 @@ use std::hash::Hash;
 
 use iced_core::Rectangle;
 
+use crate::event;
+use crate::layout;
+use crate::renderer;
 use crate::widget::container;
 use crate::widget::text::{self, Text};
-use crate::{
-    event, layout, Clipboard, Element, Event, Hasher, Layout, Length, Point,
-    Widget,
-};
+use crate::{Clipboard, Element, Event, Hasher, Layout, Length, Point, Widget};
 
 /// An element to display a widget over another.
 #[allow(missing_debug_implementations)]
@@ -137,7 +137,7 @@ where
     fn draw(
         &self,
         _renderer: &mut Renderer,
-        _defaults: &Renderer::Defaults,
+        style: &renderer::Style,
         _layout: Layout<'_>,
         _cursor_position: Point,
         _viewport: &Rectangle,
-- 
cgit