Merge pull request #1393 from iced-rs/deprecate-stateful-widgets
Replace stateful widgets with the new `iced_pure` API
This commit is contained in:
commit
1923dbf7f0
160 changed files with 4612 additions and 14928 deletions
|
|
@ -4,6 +4,7 @@ use crate::event::{self, Event};
|
|||
use crate::layout;
|
||||
use crate::mouse;
|
||||
use crate::renderer;
|
||||
use crate::widget;
|
||||
use crate::{Clipboard, Layout, Point, Rectangle, Shell, Size, Vector};
|
||||
|
||||
/// A generic [`Overlay`].
|
||||
|
|
@ -102,6 +103,15 @@ where
|
|||
self.overlay
|
||||
.draw(renderer, theme, style, layout, cursor_position)
|
||||
}
|
||||
|
||||
/// Applies an [`Operation`] to the [`Element`].
|
||||
pub fn operate(
|
||||
&self,
|
||||
layout: Layout<'_>,
|
||||
operation: &mut dyn widget::Operation<Message>,
|
||||
) {
|
||||
self.overlay.operate(layout, operation);
|
||||
}
|
||||
}
|
||||
|
||||
struct Map<'a, A, B, Renderer> {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ use crate::text::{self, Text};
|
|||
use crate::touch;
|
||||
use crate::widget::container::{self, Container};
|
||||
use crate::widget::scrollable::{self, Scrollable};
|
||||
use crate::widget::tree::{self, Tree};
|
||||
use crate::{
|
||||
Clipboard, Color, Element, Layout, Length, Padding, Point, Rectangle,
|
||||
Shell, Size, Vector, Widget,
|
||||
|
|
@ -114,15 +115,23 @@ where
|
|||
}
|
||||
|
||||
/// The local state of a [`Menu`].
|
||||
#[derive(Debug, Clone, Default)]
|
||||
#[derive(Debug)]
|
||||
pub struct State {
|
||||
scrollable: scrollable::State,
|
||||
tree: Tree,
|
||||
}
|
||||
|
||||
impl State {
|
||||
/// Creates a new [`State`] for a [`Menu`].
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
Self {
|
||||
tree: Tree::empty(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for State {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -131,6 +140,7 @@ where
|
|||
Renderer: crate::Renderer,
|
||||
Renderer::Theme: StyleSheet + container::StyleSheet,
|
||||
{
|
||||
state: &'a mut Tree,
|
||||
container: Container<'a, Message, Renderer>,
|
||||
width: u16,
|
||||
target_height: f32,
|
||||
|
|
@ -161,18 +171,20 @@ where
|
|||
style,
|
||||
} = menu;
|
||||
|
||||
let container =
|
||||
Container::new(Scrollable::new(&mut state.scrollable).push(List {
|
||||
options,
|
||||
hovered_option,
|
||||
last_selection,
|
||||
font,
|
||||
text_size,
|
||||
padding,
|
||||
style,
|
||||
}));
|
||||
let container = Container::new(Scrollable::new(List {
|
||||
options,
|
||||
hovered_option,
|
||||
last_selection,
|
||||
font,
|
||||
text_size,
|
||||
padding,
|
||||
style,
|
||||
}));
|
||||
|
||||
state.tree.diff(&container as &dyn Widget<_, _>);
|
||||
|
||||
Self {
|
||||
state: &mut state.tree,
|
||||
container,
|
||||
width,
|
||||
target_height,
|
||||
|
|
@ -187,6 +199,18 @@ where
|
|||
Renderer: text::Renderer,
|
||||
Renderer::Theme: StyleSheet + container::StyleSheet,
|
||||
{
|
||||
fn tag(&self) -> tree::Tag {
|
||||
self.container.tag()
|
||||
}
|
||||
|
||||
fn state(&self) -> tree::State {
|
||||
self.container.state()
|
||||
}
|
||||
|
||||
fn children(&self) -> Vec<Tree> {
|
||||
self.container.children()
|
||||
}
|
||||
|
||||
fn layout(
|
||||
&self,
|
||||
renderer: &Renderer,
|
||||
|
|
@ -230,6 +254,7 @@ where
|
|||
shell: &mut Shell<'_, Message>,
|
||||
) -> event::Status {
|
||||
self.container.on_event(
|
||||
self.state,
|
||||
event,
|
||||
layout,
|
||||
cursor_position,
|
||||
|
|
@ -247,6 +272,7 @@ where
|
|||
renderer: &Renderer,
|
||||
) -> mouse::Interaction {
|
||||
self.container.mouse_interaction(
|
||||
self.state,
|
||||
layout,
|
||||
cursor_position,
|
||||
viewport,
|
||||
|
|
@ -279,6 +305,7 @@ where
|
|||
);
|
||||
|
||||
self.container.draw(
|
||||
self.state,
|
||||
renderer,
|
||||
theme,
|
||||
style,
|
||||
|
|
@ -344,6 +371,7 @@ where
|
|||
|
||||
fn on_event(
|
||||
&mut self,
|
||||
_state: &mut Tree,
|
||||
event: Event,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
|
|
@ -407,6 +435,7 @@ where
|
|||
|
||||
fn mouse_interaction(
|
||||
&self,
|
||||
_state: &Tree,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
_viewport: &Rectangle,
|
||||
|
|
@ -423,6 +452,7 @@ where
|
|||
|
||||
fn draw(
|
||||
&self,
|
||||
_state: &Tree,
|
||||
renderer: &mut Renderer,
|
||||
theme: &Renderer::Theme,
|
||||
_style: &renderer::Style,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue