Compare commits
	
		
			10 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 747715f588 | |||
| 589f3beba5 | |||
| 9e9baa725b | |||
| 340601f526 | |||
| 9cdd7c5527 | |||
| 05abfc00cc | |||
| 1d3010ca84 | |||
| cdb828c4e5 | |||
| dc09da8878 | |||
| 270b60f660 | 
@ -1,5 +1,5 @@
 | 
				
			|||||||
//! Create interactive, native cross-platform applications.
 | 
					//! Create interactive, native cross-platform applications.
 | 
				
			||||||
use crate::{mouse, Error, Executor, Runtime};
 | 
					use crate::{mouse, Error, Executor, Runtime, Vector};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use iced_winit::Application;
 | 
					pub use iced_winit::Application;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -187,6 +187,7 @@ async fn run_instance<A, E, C>(
 | 
				
			|||||||
                let statuses = user_interface.update(
 | 
					                let statuses = user_interface.update(
 | 
				
			||||||
                    &events,
 | 
					                    &events,
 | 
				
			||||||
                    state.cursor_position(),
 | 
					                    state.cursor_position(),
 | 
				
			||||||
 | 
					                    Vector::new(0.0, 0.0),
 | 
				
			||||||
                    &mut renderer,
 | 
					                    &mut renderer,
 | 
				
			||||||
                    &mut clipboard,
 | 
					                    &mut clipboard,
 | 
				
			||||||
                    &mut messages,
 | 
					                    &mut messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Widget,
 | 
					    Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Widget,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -223,6 +223,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -231,6 +232,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
@ -311,6 +313,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<B>,
 | 
					        messages: &mut Vec<B>,
 | 
				
			||||||
@ -321,6 +324,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            &mut original_messages,
 | 
					            &mut original_messages,
 | 
				
			||||||
@ -401,6 +405,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -409,6 +414,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ pub use element::Element;
 | 
				
			|||||||
pub use menu::Menu;
 | 
					pub use menu::Menu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{Clipboard, Hasher, Layout, Point, Size};
 | 
					use crate::{Clipboard, Hasher, Layout, Point, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// An interactive component that can be displayed on top of other widgets.
 | 
					/// An interactive component that can be displayed on top of other widgets.
 | 
				
			||||||
@ -67,6 +67,7 @@ where
 | 
				
			|||||||
        _event: Event,
 | 
					        _event: Event,
 | 
				
			||||||
        _layout: Layout<'_>,
 | 
					        _layout: Layout<'_>,
 | 
				
			||||||
        _cursor_position: Point,
 | 
					        _cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        _messages: &mut Vec<Message>,
 | 
					        _messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -53,6 +53,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -61,6 +62,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
@ -117,6 +119,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<B>,
 | 
					        messages: &mut Vec<B>,
 | 
				
			||||||
@ -127,6 +130,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            &mut original_messages,
 | 
					            &mut original_messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -219,6 +219,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -227,6 +228,7 @@ where
 | 
				
			|||||||
            event.clone(),
 | 
					            event.clone(),
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
@ -320,6 +322,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        _messages: &mut Vec<Message>,
 | 
					        _messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Cache, Command, Debug, Event, Point, Program, Renderer, Size, UserInterface,
 | 
					    Cache, Command, Debug, Event, Point, Program, Renderer, Size,
 | 
				
			||||||
 | 
					    UserInterface, Vector,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// The execution state of a [`Program`]. It leverages caching, event
 | 
					/// The execution state of a [`Program`]. It leverages caching, event
 | 
				
			||||||
@ -90,6 +91,7 @@ where
 | 
				
			|||||||
        &mut self,
 | 
					        &mut self,
 | 
				
			||||||
        bounds: Size,
 | 
					        bounds: Size,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &mut P::Renderer,
 | 
					        renderer: &mut P::Renderer,
 | 
				
			||||||
        clipboard: &mut P::Clipboard,
 | 
					        clipboard: &mut P::Clipboard,
 | 
				
			||||||
        debug: &mut Debug,
 | 
					        debug: &mut Debug,
 | 
				
			||||||
@ -108,6 +110,7 @@ where
 | 
				
			|||||||
        let _ = user_interface.update(
 | 
					        let _ = user_interface.update(
 | 
				
			||||||
            &self.queued_events,
 | 
					            &self.queued_events,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            &mut messages,
 | 
					            &mut messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{Clipboard, Element, Layout, Point, Rectangle, Size};
 | 
					use crate::{Clipboard, Element, Layout, Point, Rectangle, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use std::hash::Hasher;
 | 
					use std::hash::Hasher;
 | 
				
			||||||
@ -194,6 +194,7 @@ where
 | 
				
			|||||||
        &mut self,
 | 
					        &mut self,
 | 
				
			||||||
        events: &[Event],
 | 
					        events: &[Event],
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -216,6 +217,7 @@ where
 | 
				
			|||||||
                        event,
 | 
					                        event,
 | 
				
			||||||
                        Layout::new(&layer.layout),
 | 
					                        Layout::new(&layer.layout),
 | 
				
			||||||
                        cursor_position,
 | 
					                        cursor_position,
 | 
				
			||||||
 | 
					                        scroll_offset,
 | 
				
			||||||
                        renderer,
 | 
					                        renderer,
 | 
				
			||||||
                        clipboard,
 | 
					                        clipboard,
 | 
				
			||||||
                        messages,
 | 
					                        messages,
 | 
				
			||||||
@ -247,6 +249,7 @@ where
 | 
				
			|||||||
                    event,
 | 
					                    event,
 | 
				
			||||||
                    Layout::new(&self.base.layout),
 | 
					                    Layout::new(&self.base.layout),
 | 
				
			||||||
                    base_cursor,
 | 
					                    base_cursor,
 | 
				
			||||||
 | 
					                    Vector::new(0.0, 0.0),
 | 
				
			||||||
                    renderer,
 | 
					                    renderer,
 | 
				
			||||||
                    clipboard,
 | 
					                    clipboard,
 | 
				
			||||||
                    messages,
 | 
					                    messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -79,8 +79,8 @@ pub use toggler::Toggler;
 | 
				
			|||||||
pub use tooltip::Tooltip;
 | 
					pub use tooltip::Tooltip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{Clipboard, Hasher, Layout, Length, Point, Rectangle};
 | 
					use crate::{Clipboard, Hasher, Layout, Length, Point, Rectangle};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A component that displays information and allows interaction.
 | 
					/// A component that displays information and allows interaction.
 | 
				
			||||||
@ -167,6 +167,7 @@ where
 | 
				
			|||||||
        _event: Event,
 | 
					        _event: Event,
 | 
				
			||||||
        _layout: Layout<'_>,
 | 
					        _layout: Layout<'_>,
 | 
				
			||||||
        _cursor_position: Point,
 | 
					        _cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        _messages: &mut Vec<Message>,
 | 
					        _messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,14 +2,16 @@
 | 
				
			|||||||
//!
 | 
					//!
 | 
				
			||||||
//! A [`Button`] has some local [`State`].
 | 
					//! A [`Button`] has some local [`State`].
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::mouse;
 | 
					use crate::mouse;
 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
 | 
					use crate::touch::Finger;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
					    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
				
			||||||
    Widget,
 | 
					    Widget,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					use std::collections::HashSet;
 | 
				
			||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A generic widget that produces a message when pressed.
 | 
					/// A generic widget that produces a message when pressed.
 | 
				
			||||||
@ -63,6 +65,7 @@ pub struct Button<'a, Message, Renderer: self::Renderer> {
 | 
				
			|||||||
    min_height: u32,
 | 
					    min_height: u32,
 | 
				
			||||||
    padding: Padding,
 | 
					    padding: Padding,
 | 
				
			||||||
    style: Renderer::Style,
 | 
					    style: Renderer::Style,
 | 
				
			||||||
 | 
					    fingers_mid_press: HashSet<Finger>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a, Message, Renderer> Button<'a, Message, Renderer>
 | 
					impl<'a, Message, Renderer> Button<'a, Message, Renderer>
 | 
				
			||||||
@ -86,6 +89,8 @@ where
 | 
				
			|||||||
            min_height: 0,
 | 
					            min_height: 0,
 | 
				
			||||||
            padding: Renderer::DEFAULT_PADDING,
 | 
					            padding: Renderer::DEFAULT_PADDING,
 | 
				
			||||||
            style: Renderer::Style::default(),
 | 
					            style: Renderer::Style::default(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fingers_mid_press: HashSet::with_capacity(2),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -188,6 +193,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -196,6 +202,7 @@ where
 | 
				
			|||||||
            event.clone(),
 | 
					            event.clone(),
 | 
				
			||||||
            layout.children().next().unwrap(),
 | 
					            layout.children().next().unwrap(),
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
@ -204,8 +211,7 @@ where
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        match event {
 | 
					        match event {
 | 
				
			||||||
            Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
 | 
					            Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => {
 | 
				
			||||||
            | Event::Touch(touch::Event::FingerPressed { .. }) => {
 | 
					 | 
				
			||||||
                if self.on_press.is_some() {
 | 
					                if self.on_press.is_some() {
 | 
				
			||||||
                    let bounds = layout.bounds();
 | 
					                    let bounds = layout.bounds();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -216,8 +222,7 @@ where
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
 | 
					            Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => {
 | 
				
			||||||
            | Event::Touch(touch::Event::FingerLifted { .. }) => {
 | 
					 | 
				
			||||||
                if let Some(on_press) = self.on_press.clone() {
 | 
					                if let Some(on_press) = self.on_press.clone() {
 | 
				
			||||||
                    let bounds = layout.bounds();
 | 
					                    let bounds = layout.bounds();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -232,8 +237,46 @@ where
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Event::Touch(touch::Event::FingerLost { .. }) => {
 | 
					            Event::Touch(x) => {
 | 
				
			||||||
                self.state.is_pressed = false;
 | 
					                eprintln!(
 | 
				
			||||||
 | 
					                    "B {:?} Bds {:?} P {:?}",
 | 
				
			||||||
 | 
					                    x,
 | 
				
			||||||
 | 
					                    layout.bounds(),
 | 
				
			||||||
 | 
					                    self.fingers_mid_press
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					                match x {
 | 
				
			||||||
 | 
					                    touch::Event::FingerPressed { id, position } => {
 | 
				
			||||||
 | 
					                        if layout.bounds().contains(position + scroll_offset) {
 | 
				
			||||||
 | 
					                            eprintln!("ins");
 | 
				
			||||||
 | 
					                            let _ = self.fingers_mid_press.insert(id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            return event::Status::Captured;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerMoved { id, position } => {
 | 
				
			||||||
 | 
					                        if !layout.bounds().contains(position + scroll_offset) {
 | 
				
			||||||
 | 
					                            eprintln!("exited");
 | 
				
			||||||
 | 
					                            let _ = self.fingers_mid_press.remove(&id);
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            return event::Status::Captured;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerLifted { id, .. } => {
 | 
				
			||||||
 | 
					                        // !!! The finger position seems to be buggy on the Lift event.
 | 
				
			||||||
 | 
					                        if self.fingers_mid_press.remove(&id) {
 | 
				
			||||||
 | 
					                            eprintln!("lifted");
 | 
				
			||||||
 | 
					                            // this should be treated as a click
 | 
				
			||||||
 | 
					                            if let Some(on_press) = self.on_press.clone() {
 | 
				
			||||||
 | 
					                                messages.push(on_press);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            return event::Status::Captured;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerLost { id, .. } => {
 | 
				
			||||||
 | 
					                        let _ = self.fingers_mid_press.remove(&id);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            _ => {}
 | 
					            _ => {}
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -2,11 +2,11 @@
 | 
				
			|||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::mouse;
 | 
					use crate::mouse;
 | 
				
			||||||
use crate::row;
 | 
					use crate::row;
 | 
				
			||||||
use crate::text;
 | 
					use crate::text;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Align, Clipboard, Color, Element, Hasher, HorizontalAlignment, Layout,
 | 
					    Align, Clipboard, Color, Element, Hasher, HorizontalAlignment, Layout,
 | 
				
			||||||
    Length, Point, Rectangle, Row, Text, VerticalAlignment, Widget,
 | 
					    Length, Point, Rectangle, Row, Text, VerticalAlignment, Widget,
 | 
				
			||||||
@ -158,6 +158,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,8 @@
 | 
				
			|||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
					    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
				
			||||||
    Rectangle, Widget,
 | 
					    Rectangle, Widget,
 | 
				
			||||||
@ -142,6 +142,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -154,6 +155,7 @@ where
 | 
				
			|||||||
                    event.clone(),
 | 
					                    event.clone(),
 | 
				
			||||||
                    layout,
 | 
					                    layout,
 | 
				
			||||||
                    cursor_position,
 | 
					                    cursor_position,
 | 
				
			||||||
 | 
					                    scroll_offset,
 | 
				
			||||||
                    renderer,
 | 
					                    renderer,
 | 
				
			||||||
                    clipboard,
 | 
					                    clipboard,
 | 
				
			||||||
                    messages,
 | 
					                    messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,8 @@
 | 
				
			|||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
					    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
				
			||||||
    Rectangle, Widget,
 | 
					    Rectangle, Widget,
 | 
				
			||||||
@ -153,6 +153,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -161,6 +162,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout.children().next().unwrap(),
 | 
					            layout.children().next().unwrap(),
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -155,6 +155,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        _messages: &mut Vec<Message>,
 | 
					        _messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -362,6 +362,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -461,6 +462,7 @@ where
 | 
				
			|||||||
                        event.clone(),
 | 
					                        event.clone(),
 | 
				
			||||||
                        layout,
 | 
					                        layout,
 | 
				
			||||||
                        cursor_position,
 | 
					                        cursor_position,
 | 
				
			||||||
 | 
					                        scroll_offset,
 | 
				
			||||||
                        renderer,
 | 
					                        renderer,
 | 
				
			||||||
                        clipboard,
 | 
					                        clipboard,
 | 
				
			||||||
                        messages,
 | 
					                        messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
use crate::container;
 | 
					 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					use crate::layout;
 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
use crate::pane_grid::{self, TitleBar};
 | 
					use crate::pane_grid::{self, TitleBar};
 | 
				
			||||||
 | 
					use crate::{container, Vector};
 | 
				
			||||||
use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size};
 | 
					use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// The content of a [`Pane`].
 | 
					/// The content of a [`Pane`].
 | 
				
			||||||
@ -146,6 +146,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -159,6 +160,7 @@ where
 | 
				
			|||||||
                event.clone(),
 | 
					                event.clone(),
 | 
				
			||||||
                children.next().unwrap(),
 | 
					                children.next().unwrap(),
 | 
				
			||||||
                cursor_position,
 | 
					                cursor_position,
 | 
				
			||||||
 | 
					                scroll_offset,
 | 
				
			||||||
                renderer,
 | 
					                renderer,
 | 
				
			||||||
                clipboard,
 | 
					                clipboard,
 | 
				
			||||||
                messages,
 | 
					                messages,
 | 
				
			||||||
@ -173,6 +175,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            body_layout,
 | 
					            body_layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
use crate::container;
 | 
					 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					use crate::layout;
 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
use crate::pane_grid;
 | 
					use crate::pane_grid;
 | 
				
			||||||
 | 
					use crate::{container, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size,
 | 
					    Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -207,6 +207,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -224,6 +225,7 @@ where
 | 
				
			|||||||
                event.clone(),
 | 
					                event.clone(),
 | 
				
			||||||
                controls_layout,
 | 
					                controls_layout,
 | 
				
			||||||
                cursor_position,
 | 
					                cursor_position,
 | 
				
			||||||
 | 
					                scroll_offset,
 | 
				
			||||||
                renderer,
 | 
					                renderer,
 | 
				
			||||||
                clipboard,
 | 
					                clipboard,
 | 
				
			||||||
                messages,
 | 
					                messages,
 | 
				
			||||||
@ -236,6 +238,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            title_layout,
 | 
					            title_layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,12 @@
 | 
				
			|||||||
//! Display a dropdown list of selectable values.
 | 
					//! Display a dropdown list of selectable values.
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::mouse;
 | 
					use crate::mouse;
 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
use crate::overlay::menu::{self, Menu};
 | 
					use crate::overlay::menu::{self, Menu};
 | 
				
			||||||
use crate::scrollable;
 | 
					use crate::scrollable;
 | 
				
			||||||
use crate::text;
 | 
					use crate::text;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
					    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
				
			||||||
    Size, Widget,
 | 
					    Size, Widget,
 | 
				
			||||||
@ -211,6 +211,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,11 +2,11 @@
 | 
				
			|||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::mouse;
 | 
					 | 
				
			||||||
use crate::row;
 | 
					use crate::row;
 | 
				
			||||||
use crate::text;
 | 
					use crate::text;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
use crate::{layout, Color};
 | 
					use crate::{layout, Color};
 | 
				
			||||||
 | 
					use crate::{mouse, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Align, Clipboard, Element, Hasher, HorizontalAlignment, Layout, Length,
 | 
					    Align, Clipboard, Element, Hasher, HorizontalAlignment, Layout, Length,
 | 
				
			||||||
    Point, Rectangle, Row, Text, VerticalAlignment, Widget,
 | 
					    Point, Rectangle, Row, Text, VerticalAlignment, Widget,
 | 
				
			||||||
@ -172,6 +172,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
//! Distribute content horizontally.
 | 
					//! Distribute content horizontally.
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::overlay;
 | 
					use crate::overlay;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
					    Align, Clipboard, Element, Hasher, Layout, Length, Padding, Point,
 | 
				
			||||||
    Rectangle, Widget,
 | 
					    Rectangle, Widget,
 | 
				
			||||||
@ -141,6 +141,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -153,6 +154,7 @@ where
 | 
				
			|||||||
                    event.clone(),
 | 
					                    event.clone(),
 | 
				
			||||||
                    layout,
 | 
					                    layout,
 | 
				
			||||||
                    cursor_position,
 | 
					                    cursor_position,
 | 
				
			||||||
 | 
					                    scroll_offset,
 | 
				
			||||||
                    renderer,
 | 
					                    renderer,
 | 
				
			||||||
                    clipboard,
 | 
					                    clipboard,
 | 
				
			||||||
                    messages,
 | 
					                    messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -192,6 +192,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -235,6 +236,7 @@ where
 | 
				
			|||||||
                event.clone(),
 | 
					                event.clone(),
 | 
				
			||||||
                content,
 | 
					                content,
 | 
				
			||||||
                cursor_position,
 | 
					                cursor_position,
 | 
				
			||||||
 | 
					                scroll_offset + Vector::new(0.0, self.state.offset.absolute(bounds, content_bounds)),
 | 
				
			||||||
                renderer,
 | 
					                renderer,
 | 
				
			||||||
                clipboard,
 | 
					                clipboard,
 | 
				
			||||||
                messages,
 | 
					                messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@
 | 
				
			|||||||
//!
 | 
					//!
 | 
				
			||||||
//! A [`Slider`] has some local [`State`].
 | 
					//! A [`Slider`] has some local [`State`].
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::layout;
 | 
					 | 
				
			||||||
use crate::mouse;
 | 
					use crate::mouse;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
 | 
					use crate::{layout, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
 | 
					    Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -180,6 +180,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -12,11 +12,11 @@ pub use value::Value;
 | 
				
			|||||||
use editor::Editor;
 | 
					use editor::Editor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::event::{self, Event};
 | 
					use crate::event::{self, Event};
 | 
				
			||||||
use crate::keyboard;
 | 
					 | 
				
			||||||
use crate::layout;
 | 
					use crate::layout;
 | 
				
			||||||
use crate::mouse::{self, click};
 | 
					use crate::mouse::{self, click};
 | 
				
			||||||
use crate::text;
 | 
					use crate::text;
 | 
				
			||||||
use crate::touch;
 | 
					use crate::touch;
 | 
				
			||||||
 | 
					use crate::{keyboard, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
					    Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle,
 | 
				
			||||||
    Size, Widget,
 | 
					    Size, Widget,
 | 
				
			||||||
@ -246,6 +246,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        _scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,13 @@
 | 
				
			|||||||
//! Show toggle controls using togglers.
 | 
					//! Show toggle controls using togglers.
 | 
				
			||||||
use std::hash::Hash;
 | 
					use std::hash::Hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::touch::Finger;
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    event, layout, mouse, row, text, Align, Clipboard, Element, Event, Hasher,
 | 
					    event, layout, mouse, row, text, touch, Align, Clipboard, Element, Event,
 | 
				
			||||||
    HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text,
 | 
					    Hasher, HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text,
 | 
				
			||||||
    VerticalAlignment, Widget,
 | 
					    Vector, VerticalAlignment, Widget,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					use std::collections::HashSet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A toggler widget
 | 
					/// A toggler widget
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
@ -34,6 +36,8 @@ pub struct Toggler<Message, Renderer: self::Renderer + text::Renderer> {
 | 
				
			|||||||
    spacing: u16,
 | 
					    spacing: u16,
 | 
				
			||||||
    font: Renderer::Font,
 | 
					    font: Renderer::Font,
 | 
				
			||||||
    style: Renderer::Style,
 | 
					    style: Renderer::Style,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fingers_mid_press: HashSet<Finger>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<Message, Renderer: self::Renderer + text::Renderer>
 | 
					impl<Message, Renderer: self::Renderer + text::Renderer>
 | 
				
			||||||
@ -66,6 +70,8 @@ impl<Message, Renderer: self::Renderer + text::Renderer>
 | 
				
			|||||||
            spacing: 0,
 | 
					            spacing: 0,
 | 
				
			||||||
            font: Renderer::Font::default(),
 | 
					            font: Renderer::Font::default(),
 | 
				
			||||||
            style: Renderer::Style::default(),
 | 
					            style: Renderer::Style::default(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fingers_mid_press: HashSet::with_capacity(2),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -158,6 +164,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        _renderer: &Renderer,
 | 
					        _renderer: &Renderer,
 | 
				
			||||||
        _clipboard: &mut dyn Clipboard,
 | 
					        _clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -174,6 +181,45 @@ where
 | 
				
			|||||||
                    event::Status::Ignored
 | 
					                    event::Status::Ignored
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            Event::Touch(x) => {
 | 
				
			||||||
 | 
					                match x {
 | 
				
			||||||
 | 
					                    touch::Event::FingerPressed { id, position } => {
 | 
				
			||||||
 | 
					                        if layout.bounds().contains(position + scroll_offset) {
 | 
				
			||||||
 | 
					                            let _ = self.fingers_mid_press.insert(id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            event::Status::Captured
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            event::Status::Ignored
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerMoved { id, position } => {
 | 
				
			||||||
 | 
					                        if !layout.bounds().contains(position + scroll_offset) {
 | 
				
			||||||
 | 
					                            let _ = self.fingers_mid_press.remove(&id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            event::Status::Captured
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            event::Status::Ignored
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerLifted { id, .. } => {
 | 
				
			||||||
 | 
					                        // !!! The finger position seems to be buggy on the Lift event.
 | 
				
			||||||
 | 
					                        if self.fingers_mid_press.remove(&id)
 | 
				
			||||||
 | 
					                        // && layout.bounds().contains(position)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            // this should be treated as a click
 | 
				
			||||||
 | 
					                            messages.push((self.on_toggle)(!self.is_active));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            event::Status::Captured
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            event::Status::Ignored
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    touch::Event::FingerLost { id, .. } => {
 | 
				
			||||||
 | 
					                        let _ = self.fingers_mid_press.remove(&id);
 | 
				
			||||||
 | 
					                        event::Status::Ignored
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            _ => event::Status::Ignored,
 | 
					            _ => event::Status::Ignored,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ use crate::widget::container;
 | 
				
			|||||||
use crate::widget::text::{self, Text};
 | 
					use crate::widget::text::{self, Text};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    event, layout, Clipboard, Element, Event, Hasher, Layout, Length, Point,
 | 
					    event, layout, Clipboard, Element, Event, Hasher, Layout, Length, Point,
 | 
				
			||||||
    Widget,
 | 
					    Vector, Widget,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// An element to display a widget over another.
 | 
					/// An element to display a widget over another.
 | 
				
			||||||
@ -120,6 +120,7 @@ where
 | 
				
			|||||||
        event: Event,
 | 
					        event: Event,
 | 
				
			||||||
        layout: Layout<'_>,
 | 
					        layout: Layout<'_>,
 | 
				
			||||||
        cursor_position: Point,
 | 
					        cursor_position: Point,
 | 
				
			||||||
 | 
					        scroll_offset: Vector<f32>,
 | 
				
			||||||
        renderer: &Renderer,
 | 
					        renderer: &Renderer,
 | 
				
			||||||
        clipboard: &mut dyn Clipboard,
 | 
					        clipboard: &mut dyn Clipboard,
 | 
				
			||||||
        messages: &mut Vec<Message>,
 | 
					        messages: &mut Vec<Message>,
 | 
				
			||||||
@ -128,6 +129,7 @@ where
 | 
				
			|||||||
            event,
 | 
					            event,
 | 
				
			||||||
            layout,
 | 
					            layout,
 | 
				
			||||||
            cursor_position,
 | 
					            cursor_position,
 | 
				
			||||||
 | 
					            scroll_offset,
 | 
				
			||||||
            renderer,
 | 
					            renderer,
 | 
				
			||||||
            clipboard,
 | 
					            clipboard,
 | 
				
			||||||
            messages,
 | 
					            messages,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,8 @@ mod state;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pub use state::State;
 | 
					pub use state::State;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::conversion;
 | 
					 | 
				
			||||||
use crate::mouse;
 | 
					use crate::mouse;
 | 
				
			||||||
 | 
					use crate::{conversion, Vector};
 | 
				
			||||||
use crate::{
 | 
					use crate::{
 | 
				
			||||||
    Clipboard, Color, Command, Debug, Error, Executor, Mode, Proxy, Runtime,
 | 
					    Clipboard, Color, Command, Debug, Error, Executor, Mode, Proxy, Runtime,
 | 
				
			||||||
    Settings, Size, Subscription,
 | 
					    Settings, Size, Subscription,
 | 
				
			||||||
@ -261,6 +261,7 @@ async fn run_instance<A, E, C>(
 | 
				
			|||||||
                let statuses = user_interface.update(
 | 
					                let statuses = user_interface.update(
 | 
				
			||||||
                    &events,
 | 
					                    &events,
 | 
				
			||||||
                    state.cursor_position(),
 | 
					                    state.cursor_position(),
 | 
				
			||||||
 | 
					                    Vector::new(0.0, 0.0),
 | 
				
			||||||
                    &mut renderer,
 | 
					                    &mut renderer,
 | 
				
			||||||
                    &mut clipboard,
 | 
					                    &mut clipboard,
 | 
				
			||||||
                    &mut messages,
 | 
					                    &mut messages,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user