Introduce Widget::overlay 🎉
This commit is contained in:
parent
5c4f5ae5ec
commit
c901f40fd6
25 changed files with 80 additions and 32 deletions
|
|
@ -25,7 +25,7 @@ mod circle {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, B> Widget<Message, Renderer<B>> for Circle
|
||||
impl<'a, Message, B> Widget<'a, Message, Renderer<B>> for Circle
|
||||
where
|
||||
B: Backend,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ mod rainbow {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, B> Widget<Message, Renderer<B>> for Rainbow
|
||||
impl<'a, Message, B> Widget<'a, Message, Renderer<B>> for Rainbow
|
||||
where
|
||||
B: Backend,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -425,7 +425,7 @@ impl Filter {
|
|||
}
|
||||
}
|
||||
|
||||
fn loading_message() -> Element<'static, Message> {
|
||||
fn loading_message<'a>() -> Element<'a, Message> {
|
||||
Container::new(
|
||||
Text::new("Loading...")
|
||||
.horizontal_alignment(HorizontalAlignment::Center)
|
||||
|
|
@ -437,7 +437,7 @@ fn loading_message() -> Element<'static, Message> {
|
|||
.into()
|
||||
}
|
||||
|
||||
fn empty_message(message: &str) -> Element<'static, Message> {
|
||||
fn empty_message<'a>(message: &str) -> Element<'a, Message> {
|
||||
Container::new(
|
||||
Text::new(message)
|
||||
.width(Length::Fill)
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ where
|
|||
fn explain<Message>(
|
||||
&mut self,
|
||||
defaults: &Defaults,
|
||||
widget: &dyn Widget<Message, Self>,
|
||||
widget: &dyn Widget<'_, Message, Self>,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
color: Color,
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ impl<Message, P: Program<Message>> Canvas<Message, P> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, P, B> Widget<Message, Renderer<B>> for Canvas<Message, P>
|
||||
impl<'a, Message, P, B> Widget<'a, Message, Renderer<B>> for Canvas<Message, P>
|
||||
where
|
||||
P: Program<Message>,
|
||||
B: Backend,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use crate::{
|
||||
layout, Clipboard, Color, Event, Hasher, Layout, Length, Point, Widget,
|
||||
layout, Clipboard, Color, Event, Hasher, Layout, Length, Overlay, Point,
|
||||
Widget,
|
||||
};
|
||||
|
||||
/// A generic [`Widget`].
|
||||
|
|
@ -15,7 +16,7 @@ use crate::{
|
|||
/// [`Element`]: struct.Element.html
|
||||
#[allow(missing_debug_implementations)]
|
||||
pub struct Element<'a, Message, Renderer> {
|
||||
pub(crate) widget: Box<dyn Widget<Message, Renderer> + 'a>,
|
||||
pub(crate) widget: Box<dyn Widget<'a, Message, Renderer> + 'a>,
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Element<'a, Message, Renderer>
|
||||
|
|
@ -27,7 +28,7 @@ where
|
|||
/// [`Element`]: struct.Element.html
|
||||
/// [`Widget`]: widget/trait.Widget.html
|
||||
pub fn new(
|
||||
widget: impl Widget<Message, Renderer> + 'a,
|
||||
widget: impl Widget<'a, Message, Renderer> + 'a,
|
||||
) -> Element<'a, Message, Renderer> {
|
||||
Element {
|
||||
widget: Box::new(widget),
|
||||
|
|
@ -270,16 +271,22 @@ where
|
|||
pub fn hash_layout(&self, state: &mut Hasher) {
|
||||
self.widget.hash_layout(state);
|
||||
}
|
||||
|
||||
pub fn overlay(
|
||||
&mut self,
|
||||
) -> Option<Box<dyn Overlay<Message, Renderer> + 'a>> {
|
||||
self.widget.overlay()
|
||||
}
|
||||
}
|
||||
|
||||
struct Map<'a, A, B, Renderer> {
|
||||
widget: Box<dyn Widget<A, Renderer> + 'a>,
|
||||
widget: Box<dyn Widget<'a, A, Renderer> + 'a>,
|
||||
mapper: Box<dyn Fn(A) -> B>,
|
||||
}
|
||||
|
||||
impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> {
|
||||
pub fn new<F>(
|
||||
widget: Box<dyn Widget<A, Renderer> + 'a>,
|
||||
widget: Box<dyn Widget<'a, A, Renderer> + 'a>,
|
||||
mapper: F,
|
||||
) -> Map<'a, A, B, Renderer>
|
||||
where
|
||||
|
|
@ -292,7 +299,7 @@ impl<'a, A, B, Renderer> Map<'a, A, B, Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer>
|
||||
impl<'a, A, B, Renderer> Widget<'a, B, Renderer> for Map<'a, A, B, Renderer>
|
||||
where
|
||||
Renderer: crate::Renderer,
|
||||
{
|
||||
|
|
@ -367,7 +374,7 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Explain<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: crate::Renderer + layout::Debugger,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ pub trait Debugger: Renderer {
|
|||
fn explain<Message>(
|
||||
&mut self,
|
||||
defaults: &Self::Defaults,
|
||||
widget: &dyn Widget<Message, Self>,
|
||||
widget: &dyn Widget<'_, Message, Self>,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
color: Color,
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
//! [`Widget`]: widget/trait.Widget.html
|
||||
//! [`UserInterface`]: struct.UserInterface.html
|
||||
//! [renderer]: renderer/index.html
|
||||
#![deny(missing_docs)]
|
||||
//#![deny(missing_docs)]
|
||||
#![deny(missing_debug_implementations)]
|
||||
#![deny(unused_results)]
|
||||
#![forbid(unsafe_code)]
|
||||
|
|
@ -48,6 +48,7 @@ mod clipboard;
|
|||
mod element;
|
||||
mod event;
|
||||
mod hasher;
|
||||
mod overlay;
|
||||
mod runtime;
|
||||
mod user_interface;
|
||||
|
||||
|
|
@ -75,6 +76,7 @@ pub use element::Element;
|
|||
pub use event::Event;
|
||||
pub use hasher::Hasher;
|
||||
pub use layout::Layout;
|
||||
pub use overlay::Overlay;
|
||||
pub use program::Program;
|
||||
pub use renderer::Renderer;
|
||||
pub use runtime::Runtime;
|
||||
|
|
|
|||
33
native/src/overlay.rs
Normal file
33
native/src/overlay.rs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
use crate::{layout, Clipboard, Event, Hasher, Layout, Point};
|
||||
|
||||
pub trait Overlay<Message, Renderer>
|
||||
where
|
||||
Renderer: crate::Renderer,
|
||||
{
|
||||
fn layout(
|
||||
&self,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
) -> layout::Node;
|
||||
|
||||
fn draw(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
defaults: &Renderer::Defaults,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: Point,
|
||||
) -> Renderer::Output;
|
||||
|
||||
fn hash_layout(&self, state: &mut Hasher);
|
||||
|
||||
fn on_event(
|
||||
&mut self,
|
||||
_event: Event,
|
||||
_layout: Layout<'_>,
|
||||
_cursor_position: Point,
|
||||
_messages: &mut Vec<Message>,
|
||||
_renderer: &Renderer,
|
||||
_clipboard: Option<&dyn Clipboard>,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ pub use text::Text;
|
|||
#[doc(no_inline)]
|
||||
pub use text_input::TextInput;
|
||||
|
||||
use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Point};
|
||||
use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Overlay, Point};
|
||||
|
||||
/// A component that displays information and allows interaction.
|
||||
///
|
||||
|
|
@ -94,7 +94,7 @@ use crate::{layout, Clipboard, Event, Hasher, Layout, Length, Point};
|
|||
/// [`geometry`]: https://github.com/hecrj/iced/tree/0.1/examples/geometry
|
||||
/// [`lyon`]: https://github.com/nical/lyon
|
||||
/// [`iced_wgpu`]: https://github.com/hecrj/iced/tree/0.1/wgpu
|
||||
pub trait Widget<Message, Renderer>
|
||||
pub trait Widget<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: crate::Renderer,
|
||||
{
|
||||
|
|
@ -175,4 +175,8 @@ where
|
|||
_clipboard: Option<&dyn Clipboard>,
|
||||
) {
|
||||
}
|
||||
|
||||
fn overlay(&mut self) -> Option<Box<dyn Overlay<Message, Renderer> + 'a>> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Button<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ impl<Message, Renderer: self::Renderer + text::Renderer>
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Checkbox<Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer + text::Renderer + row::Renderer,
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ impl<'a, Message, Renderer> Column<'a, Message, Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Column<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Container<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ impl Image {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer> for Image
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Image
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -387,7 +387,7 @@ pub struct KeyPressEvent {
|
|||
pub modifiers: keyboard::ModifiersState,
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for PaneGrid<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ impl<Renderer: self::Renderer> ProgressBar<Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer> for ProgressBar<Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for ProgressBar<Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -121,7 +121,8 @@ impl<Message, Renderer: self::Renderer + text::Renderer>
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Radio<Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer + text::Renderer + row::Renderer,
|
||||
Message: Clone,
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ impl<'a, Message, Renderer> Row<'a, Message, Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Row<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ impl<'a, Message, Renderer: self::Renderer> Scrollable<'a, Message, Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Scrollable<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer + column::Renderer,
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, T, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, T, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for Slider<'a, T, Message, Renderer>
|
||||
where
|
||||
T: Copy + Into<f64> + num_traits::FromPrimitive,
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ impl Space {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer> for Space
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Space
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ impl Svg {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer> for Svg
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Svg
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ impl<Renderer: self::Renderer> Text<Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer> for Text<Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
{
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ impl<'a, Message, Renderer: self::Renderer> TextInput<'a, Message, Renderer> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer> Widget<Message, Renderer>
|
||||
impl<'a, Message, Renderer> Widget<'a, Message, Renderer>
|
||||
for TextInput<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: self::Renderer,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue