Introduce selector flag and decouple iced_widget from iced_runtime
This commit is contained in:
parent
34a42b5ad4
commit
81d1eda7fe
22 changed files with 118 additions and 67 deletions
|
|
@ -34,7 +34,6 @@ use crate::core::{
|
|||
Padding, Pixels, Rectangle, Shadow, Shell, Size, Theme, Vector, Widget,
|
||||
color,
|
||||
};
|
||||
use crate::runtime::Task;
|
||||
|
||||
/// A widget that aligns its contents inside of its boundaries.
|
||||
///
|
||||
|
|
@ -457,12 +456,6 @@ pub fn draw_background<Renderer>(
|
|||
}
|
||||
}
|
||||
|
||||
/// Produces a [`Task`] that queries the visible screen bounds of the
|
||||
/// [`Container`] with the given [`widget::Id`].
|
||||
pub fn visible_bounds(_id: impl Into<widget::Id>) -> Task<Option<Rectangle>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
/// The appearance of a container.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Default)]
|
||||
pub struct Style {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ use crate::core::widget::{self, Widget};
|
|||
use crate::core::{
|
||||
self, Clipboard, Event, Length, Rectangle, Shell, Size, Vector,
|
||||
};
|
||||
use crate::runtime::overlay::Nested;
|
||||
|
||||
use ouroboros::self_referencing;
|
||||
use rustc_hash::FxHasher;
|
||||
|
|
@ -286,7 +285,7 @@ where
|
|||
element
|
||||
.as_widget_mut()
|
||||
.overlay(tree, *layout, renderer, viewport, translation)
|
||||
.map(|overlay| RefCell::new(Nested::new(overlay)))
|
||||
.map(|overlay| RefCell::new(overlay::Nested::new(overlay)))
|
||||
},
|
||||
}
|
||||
.build();
|
||||
|
|
@ -317,7 +316,7 @@ struct Inner<'a, Message: 'a, Theme: 'a, Renderer: 'a> {
|
|||
|
||||
#[borrows(mut element, mut tree, layout)]
|
||||
#[not_covariant]
|
||||
overlay: Option<RefCell<Nested<'this, Message, Theme, Renderer>>>,
|
||||
overlay: Option<RefCell<overlay::Nested<'this, Message, Theme, Renderer>>>,
|
||||
}
|
||||
|
||||
struct Overlay<'a, Message, Theme, Renderer>(
|
||||
|
|
@ -334,7 +333,7 @@ impl<Message, Theme, Renderer> Drop for Overlay<'_, Message, Theme, Renderer> {
|
|||
impl<Message, Theme, Renderer> Overlay<'_, Message, Theme, Renderer> {
|
||||
fn with_overlay_maybe<T>(
|
||||
&self,
|
||||
f: impl FnOnce(&mut Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.0.as_ref().unwrap().with_overlay(|overlay| {
|
||||
overlay.as_ref().map(|nested| (f)(&mut nested.borrow_mut()))
|
||||
|
|
@ -343,7 +342,7 @@ impl<Message, Theme, Renderer> Overlay<'_, Message, Theme, Renderer> {
|
|||
|
||||
fn with_overlay_mut_maybe<T>(
|
||||
&mut self,
|
||||
f: impl FnOnce(&mut Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.0.as_mut().unwrap().with_overlay_mut(|overlay| {
|
||||
overlay.as_mut().map(|nested| (f)(nested.get_mut()))
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ use crate::core::widget::tree::{self, Tree};
|
|||
use crate::core::{
|
||||
self, Clipboard, Element, Length, Rectangle, Shell, Size, Vector, Widget,
|
||||
};
|
||||
use crate::runtime::overlay::Nested;
|
||||
|
||||
use ouroboros::self_referencing;
|
||||
use std::cell::RefCell;
|
||||
|
|
@ -472,7 +471,9 @@ where
|
|||
viewport,
|
||||
translation,
|
||||
)
|
||||
.map(|overlay| RefCell::new(Nested::new(overlay)))
|
||||
.map(|overlay| {
|
||||
RefCell::new(overlay::Nested::new(overlay))
|
||||
})
|
||||
},
|
||||
)
|
||||
},
|
||||
|
|
@ -519,7 +520,7 @@ struct Inner<'a, 'b, Message, Theme, Renderer, Event, S> {
|
|||
|
||||
#[borrows(mut instance, mut tree)]
|
||||
#[not_covariant]
|
||||
overlay: Option<RefCell<Nested<'this, Event, Theme, Renderer>>>,
|
||||
overlay: Option<RefCell<overlay::Nested<'this, Event, Theme, Renderer>>>,
|
||||
}
|
||||
|
||||
struct OverlayInstance<'a, 'b, Message, Theme, Renderer, Event, S> {
|
||||
|
|
@ -531,7 +532,7 @@ impl<Message, Theme, Renderer, Event, S>
|
|||
{
|
||||
fn with_overlay_maybe<T>(
|
||||
&self,
|
||||
f: impl FnOnce(&mut Nested<'_, Event, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Event, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.overlay
|
||||
.as_ref()
|
||||
|
|
@ -546,7 +547,7 @@ impl<Message, Theme, Renderer, Event, S>
|
|||
|
||||
fn with_overlay_mut_maybe<T>(
|
||||
&mut self,
|
||||
f: impl FnOnce(&mut Nested<'_, Event, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Event, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.overlay
|
||||
.as_mut()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ use crate::core::{
|
|||
Vector, Widget,
|
||||
};
|
||||
use crate::horizontal_space;
|
||||
use crate::runtime::overlay::Nested;
|
||||
|
||||
use ouroboros::self_referencing;
|
||||
use std::cell::{RefCell, RefMut};
|
||||
|
|
@ -327,7 +326,9 @@ where
|
|||
viewport,
|
||||
translation,
|
||||
)
|
||||
.map(|overlay| RefCell::new(Nested::new(overlay))),
|
||||
.map(|overlay| {
|
||||
RefCell::new(overlay::Nested::new(overlay))
|
||||
}),
|
||||
is_layout_invalid,
|
||||
)
|
||||
},
|
||||
|
|
@ -364,7 +365,7 @@ struct Overlay<'a, 'b, Message, Theme, Renderer> {
|
|||
#[borrows(mut content, mut tree)]
|
||||
#[not_covariant]
|
||||
overlay: (
|
||||
Option<RefCell<Nested<'this, Message, Theme, Renderer>>>,
|
||||
Option<RefCell<overlay::Nested<'this, Message, Theme, Renderer>>>,
|
||||
&'this mut bool,
|
||||
),
|
||||
}
|
||||
|
|
@ -372,7 +373,7 @@ struct Overlay<'a, 'b, Message, Theme, Renderer> {
|
|||
impl<Message, Theme, Renderer> Overlay<'_, '_, Message, Theme, Renderer> {
|
||||
fn with_overlay_maybe<T>(
|
||||
&self,
|
||||
f: impl FnOnce(&mut Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.with_overlay(|(overlay, _layout)| {
|
||||
overlay.as_ref().map(|nested| (f)(&mut nested.borrow_mut()))
|
||||
|
|
@ -381,7 +382,7 @@ impl<Message, Theme, Renderer> Overlay<'_, '_, Message, Theme, Renderer> {
|
|||
|
||||
fn with_overlay_mut_maybe<T>(
|
||||
&mut self,
|
||||
f: impl FnOnce(&mut Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
f: impl FnOnce(&mut overlay::Nested<'_, Message, Theme, Renderer>) -> T,
|
||||
) -> Option<T> {
|
||||
self.with_overlay_mut(|(overlay, _layout)| {
|
||||
overlay.as_mut().map(|nested| (f)(nested.get_mut()))
|
||||
|
|
|
|||
|
|
@ -4,9 +4,8 @@
|
|||
)]
|
||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||
pub use iced_renderer as renderer;
|
||||
pub use iced_renderer::core;
|
||||
pub use iced_renderer::graphics;
|
||||
pub use iced_runtime as runtime;
|
||||
pub use iced_runtime::core;
|
||||
|
||||
pub use core::widget::Id;
|
||||
|
||||
|
|
@ -25,7 +24,6 @@ pub mod container;
|
|||
pub mod float;
|
||||
pub mod grid;
|
||||
pub mod keyed;
|
||||
pub mod operation;
|
||||
pub mod overlay;
|
||||
pub mod pane_grid;
|
||||
pub mod pick_list;
|
||||
|
|
|
|||
|
|
@ -1,88 +0,0 @@
|
|||
//! Change internal widget state.
|
||||
use crate::Id;
|
||||
use crate::core::widget::operation;
|
||||
use crate::runtime::task;
|
||||
use crate::runtime::{Action, Task};
|
||||
|
||||
pub use crate::core::widget::operation::scrollable::{
|
||||
AbsoluteOffset, RelativeOffset,
|
||||
};
|
||||
|
||||
/// Snaps the scrollable with the given [`Id`] to the provided [`RelativeOffset`].
|
||||
pub fn snap_to<T>(id: impl Into<Id>, offset: RelativeOffset) -> Task<T> {
|
||||
task::effect(Action::widget(operation::scrollable::snap_to(
|
||||
id.into(),
|
||||
offset,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Snaps the scrollable with the given [`Id`] to the [`RelativeOffset::END`].
|
||||
pub fn snap_to_end<T>(id: impl Into<Id>) -> Task<T> {
|
||||
task::effect(Action::widget(operation::scrollable::snap_to(
|
||||
id.into(),
|
||||
RelativeOffset::END,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Scrolls the scrollable with the given [`Id`] to the provided [`AbsoluteOffset`].
|
||||
pub fn scroll_to<T>(id: impl Into<Id>, offset: AbsoluteOffset) -> Task<T> {
|
||||
task::effect(Action::widget(operation::scrollable::scroll_to(
|
||||
id.into(),
|
||||
offset,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Scrolls the scrollable with the given [`Id`] by the provided [`AbsoluteOffset`].
|
||||
pub fn scroll_by<T>(id: impl Into<Id>, offset: AbsoluteOffset) -> Task<T> {
|
||||
task::effect(Action::widget(operation::scrollable::scroll_by(
|
||||
id.into(),
|
||||
offset,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Focuses the previous focusable widget.
|
||||
pub fn focus_previous<T>() -> Task<T> {
|
||||
task::effect(Action::widget(operation::focusable::focus_previous()))
|
||||
}
|
||||
|
||||
/// Focuses the next focusable widget.
|
||||
pub fn focus_next<T>() -> Task<T> {
|
||||
task::effect(Action::widget(operation::focusable::focus_next()))
|
||||
}
|
||||
|
||||
/// Returns whether the widget with the given [`Id`] is focused or not.
|
||||
pub fn is_focused(id: impl Into<Id>) -> Task<bool> {
|
||||
task::widget(operation::focusable::is_focused(id.into()))
|
||||
}
|
||||
|
||||
/// Focuses the widget with the given [`Id`].
|
||||
pub fn focus<T>(id: impl Into<Id>) -> Task<T> {
|
||||
task::effect(Action::widget(operation::focusable::focus(id.into())))
|
||||
}
|
||||
|
||||
/// Moves the cursor of the widget with the given [`Id`] to the end.
|
||||
pub fn move_cursor_to_end<T>(id: impl Into<Id>) -> Task<T> {
|
||||
task::effect(Action::widget(operation::text_input::move_cursor_to_end(
|
||||
id.into(),
|
||||
)))
|
||||
}
|
||||
|
||||
/// Moves the cursor of the widget with the given [`Id`] to the front.
|
||||
pub fn move_cursor_to_front<T>(id: impl Into<Id>) -> Task<T> {
|
||||
task::effect(Action::widget(operation::text_input::move_cursor_to_front(
|
||||
id.into(),
|
||||
)))
|
||||
}
|
||||
|
||||
/// Moves the cursor of the widget with the given [`Id`] to the provided position.
|
||||
pub fn move_cursor_to<T>(id: impl Into<Id>, position: usize) -> Task<T> {
|
||||
task::effect(Action::widget(operation::text_input::move_cursor_to(
|
||||
id.into(),
|
||||
position,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Selects all the content of the widget with the given [`Id`].
|
||||
pub fn select_all<T>(id: impl Into<Id>) -> Task<T> {
|
||||
task::effect(Action::widget(operation::text_input::select_all(id.into())))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue