1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//! Mouse service, properties, events and other types.
//!
//! The example below defines a window that shows the pressed mouse buttons and prints the button state changes. The
//! pressed buttons text follows the cursor position.
//!
//! ```
//! use zng::prelude::*;
//! # let _scope = APP.defaults();
//!
//! # let _ =
//! Window! {
//!     child_align = layout::Align::TOP_LEFT;
//!     child = Text! {
//!         txt = mouse::MOUSE.buttons().map_debug();
//!         layout::offset = mouse::MOUSE.position().map(|p| match p {
//!             Some(p) => layout::Vector::from(p.position.to_vector()) - layout::Vector::new(0, 100.pct()),
//!             None => layout::Vector::zero(),
//!         });
//!     };
//!     mouse::on_mouse_input = hn!(|args: &mouse::MouseInputArgs| {
//!         println!("button {:?} {:?}", args.button, args.state);
//!     });
//! }
//! # ;
//! ```
//!
//! Mouse events are send to the top widget under the cursor. This module also provides mouse exclusive gestures like mouse clicks
//! and mouse hovered, these gestures are composed with others in [`gesture`] to provide the final pointer gestures. You should
//! prefer using [`gesture::on_click`] over [`on_mouse_click`], unless you really want to exclusively handle mouse clicks.
//!
//! [`gesture`]: crate::gesture
//! [`gesture::on_click`]: fn@crate::gesture::on_click
//! [`on_mouse_click`]: fn@on_mouse_click
//!
//! # Full API
//!
//! See [`zng_ext_input::mouse`] and [`zng_wgt_input::mouse`] for the full mouse API.

pub use zng_ext_input::mouse::{
    ButtonRepeatConfig, ButtonState, ClickMode, ClickTrigger, MouseButton, MouseClickArgs, MouseHoverArgs, MouseInputArgs, MouseMoveArgs,
    MousePosition, MouseScrollDelta, MouseWheelArgs, MultiClickConfig, WidgetInfoBuilderMouseExt, WidgetInfoMouseExt, MOUSE,
    MOUSE_CLICK_EVENT, MOUSE_HOVERED_EVENT, MOUSE_INPUT_EVENT, MOUSE_MOVE_EVENT, MOUSE_WHEEL_EVENT,
};

pub use zng_wgt_input::mouse::{
    on_disabled_mouse_any_click, on_disabled_mouse_click, on_disabled_mouse_hovered, on_disabled_mouse_input, on_disabled_mouse_wheel,
    on_mouse_any_click, on_mouse_any_double_click, on_mouse_any_single_click, on_mouse_any_triple_click, on_mouse_click,
    on_mouse_double_click, on_mouse_down, on_mouse_enter, on_mouse_hovered, on_mouse_input, on_mouse_leave, on_mouse_move, on_mouse_scroll,
    on_mouse_single_click, on_mouse_triple_click, on_mouse_up, on_mouse_wheel, on_mouse_zoom, on_pre_disabled_mouse_any_click,
    on_pre_disabled_mouse_click, on_pre_disabled_mouse_hovered, on_pre_disabled_mouse_input, on_pre_disabled_mouse_wheel,
    on_pre_mouse_any_click, on_pre_mouse_any_double_click, on_pre_mouse_any_single_click, on_pre_mouse_any_triple_click,
    on_pre_mouse_click, on_pre_mouse_double_click, on_pre_mouse_down, on_pre_mouse_enter, on_pre_mouse_hovered, on_pre_mouse_input,
    on_pre_mouse_leave, on_pre_mouse_move, on_pre_mouse_scroll, on_pre_mouse_single_click, on_pre_mouse_triple_click, on_pre_mouse_up,
    on_pre_mouse_wheel, on_pre_mouse_zoom,
};

pub use zng_wgt_input::{click_mode, cursor, is_cap_mouse_pressed, is_mouse_pressed, CursorIcon, CursorImg, CursorSource};

/// Raw mouse hardware events, received independent of what window is under the pointer.
///
/// You must enable device events in the app to receive this events.
pub mod raw_device_events {
    pub use zng_app::view_process::raw_device_events::{
        ButtonArgs, MouseMotionArgs, MouseWheelArgs, BUTTON_EVENT, MOUSE_MOTION_EVENT, MOUSE_WHEEL_EVENT,
    };
}