diff options
author | 2020-08-18 03:37:32 +0200 | |
---|---|---|
committer | 2020-10-28 06:21:07 +0100 | |
commit | d328b07b3937c968fc8139f0b5c61903ebb893e7 (patch) | |
tree | 940ae9e93006ad4fdae2d86a2f70833ee99e0b10 /native/src/widget | |
parent | 8a3ce90959e281cd73a7486d800df8d65478a698 (diff) | |
download | iced-d328b07b3937c968fc8139f0b5c61903ebb893e7.tar.gz iced-d328b07b3937c968fc8139f0b5c61903ebb893e7.tar.bz2 iced-d328b07b3937c968fc8139f0b5c61903ebb893e7.zip |
Introduce `viewport` to `Widget::draw`
This should eventually allow us to only generate primitives that are
visible.
Diffstat (limited to 'native/src/widget')
-rw-r--r-- | native/src/widget/button.rs | 1 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 1 | ||||
-rw-r--r-- | native/src/widget/column.rs | 16 | ||||
-rw-r--r-- | native/src/widget/container.rs | 3 | ||||
-rw-r--r-- | native/src/widget/image.rs | 4 | ||||
-rw-r--r-- | native/src/widget/pane_grid.rs | 1 | ||||
-rw-r--r-- | native/src/widget/pick_list.rs | 1 | ||||
-rw-r--r-- | native/src/widget/progress_bar.rs | 1 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 1 | ||||
-rw-r--r-- | native/src/widget/row.rs | 19 | ||||
-rw-r--r-- | native/src/widget/scrollable.rs | 5 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 1 | ||||
-rw-r--r-- | native/src/widget/space.rs | 1 | ||||
-rw-r--r-- | native/src/widget/svg.rs | 4 | ||||
-rw-r--r-- | native/src/widget/text.rs | 1 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 1 |
16 files changed, 51 insertions, 10 deletions
diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index fd74563a..995ba7bc 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -217,6 +217,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw( defaults, diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index 99178aae..e389427e 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -180,6 +180,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let bounds = layout.bounds(); let mut children = layout.children(); diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index a5ac2101..e874ad42 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -1,9 +1,11 @@ //! Distribute content vertically. use std::hash::Hash; +use crate::layout; +use crate::overlay; use crate::{ - layout, overlay, Align, Clipboard, Element, Event, Hasher, Layout, Length, - Point, Widget, + Align, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, + Widget, }; use std::u32; @@ -181,8 +183,15 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Renderer::Output { - renderer.draw(defaults, &self.children, layout, cursor_position) + renderer.draw( + defaults, + &self.children, + layout, + cursor_position, + viewport, + ) } fn hash_layout(&self, state: &mut Hasher) { @@ -237,6 +246,7 @@ pub trait Renderer: crate::Renderer + Sized { content: &[Element<'_, Message, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output; } diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index b8316e62..5b04d699 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -191,11 +191,13 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Renderer::Output { renderer.draw( defaults, layout.bounds(), cursor_position, + viewport, &self.style, &self.content, layout.children().next().unwrap(), @@ -242,6 +244,7 @@ pub trait Renderer: crate::Renderer { defaults: &Self::Defaults, bounds: Rectangle, cursor_position: Point, + viewport: &Rectangle, style: &Self::Style, content: &Element<'_, Message, Self>, content_layout: Layout<'_>, diff --git a/native/src/widget/image.rs b/native/src/widget/image.rs index 132f249d..9586da0f 100644 --- a/native/src/widget/image.rs +++ b/native/src/widget/image.rs @@ -1,5 +1,6 @@ //! Display images in your user interface. -use crate::{layout, Element, Hasher, Layout, Length, Point, Size, Widget}; +use crate::layout; +use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget}; use std::{ hash::{Hash, Hasher as _}, @@ -97,6 +98,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw(self.handle.clone(), layout) } diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 5180fd3b..276bfae3 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -588,6 +588,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let picked_split = self .state diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index 0e42a3e4..e086e367 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -256,6 +256,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { self::Renderer::draw( renderer, diff --git a/native/src/widget/progress_bar.rs b/native/src/widget/progress_bar.rs index 5ab76d47..4f8a7e1b 100644 --- a/native/src/widget/progress_bar.rs +++ b/native/src/widget/progress_bar.rs @@ -104,6 +104,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw( layout.bounds(), diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index a7cabd49..06d3f846 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -183,6 +183,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let bounds = layout.bounds(); let mut children = layout.children(); diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index b37a5cfc..bc8a3df1 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -1,11 +1,12 @@ //! Distribute content horizontally. -use std::hash::Hash; - +use crate::layout; +use crate::overlay; use crate::{ - layout, overlay, Align, Clipboard, Element, Event, Hasher, Layout, Length, - Point, Widget, + Align, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, + Widget, }; +use std::hash::Hash; use std::u32; /// A container that distributes its contents horizontally. @@ -182,8 +183,15 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Renderer::Output { - renderer.draw(defaults, &self.children, layout, cursor_position) + renderer.draw( + defaults, + &self.children, + layout, + cursor_position, + viewport, + ) } fn hash_layout(&self, state: &mut Hasher) { @@ -238,6 +246,7 @@ pub trait Renderer: crate::Renderer + Sized { children: &[Element<'_, Message, Self>], layout: Layout<'_>, cursor_position: Point, + viewport: &Rectangle, ) -> Self::Output; } diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index cb181899..60ec2d7d 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -303,6 +303,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let bounds = layout.bounds(); let content_layout = layout.children().next().unwrap(); @@ -335,6 +336,10 @@ where defaults, content_layout, cursor_position, + &Rectangle { + y: bounds.y + offset as f32, + ..bounds + }, ) }; diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 3255dd04..d6e366aa 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -259,6 +259,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let start = *self.range.start(); let end = *self.range.end(); diff --git a/native/src/widget/space.rs b/native/src/widget/space.rs index f1576ffb..032f341d 100644 --- a/native/src/widget/space.rs +++ b/native/src/widget/space.rs @@ -71,6 +71,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw(layout.bounds()) } diff --git a/native/src/widget/svg.rs b/native/src/widget/svg.rs index 114d5e41..ede1aff8 100644 --- a/native/src/widget/svg.rs +++ b/native/src/widget/svg.rs @@ -1,5 +1,6 @@ //! Display vector graphics in your application. -use crate::{layout, Element, Hasher, Layout, Length, Point, Size, Widget}; +use crate::layout; +use crate::{Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget}; use std::{ hash::{Hash, Hasher as _}, @@ -103,6 +104,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw(self.handle.clone(), layout) } diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index 48a69e34..c2544b8e 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -149,6 +149,7 @@ where defaults: &Renderer::Defaults, layout: Layout<'_>, _cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { renderer.draw( defaults, diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 32a57ce6..64182f2d 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -497,6 +497,7 @@ where _defaults: &Renderer::Defaults, layout: Layout<'_>, cursor_position: Point, + _viewport: &Rectangle, ) -> Renderer::Output { let bounds = layout.bounds(); let text_bounds = layout.children().next().unwrap().bounds(); |