[][src]Enum kas::event::Event

#[non_exhaustive]pub enum Event {
    None,
    Activate,
    Control(ControlKey),
    LostCharFocus,
    LostSelFocus,
    ReceivedCharacter(char),
    Scroll(ScrollDelta),
    Pan {
        alpha: DVec2,
        delta: DVec2,
    },
    PressStart {
        source: PressSource,
        start_id: WidgetId,
        coord: Coord,
    },
    PressMove {
        source: PressSource,
        cur_id: Option<WidgetId>,
        coord: Coord,
        delta: Coord,
    },
    PressEnd {
        source: PressSource,
        end_id: Option<WidgetId>,
        coord: Coord,
    },
    TimerUpdate,
    HandleUpdate {
        handle: UpdateHandle,
        payload: u64,
    },
    NewPopup(WidgetId),
    PopupRemoved(WindowId),
    NavFocus,
}

Events addressed to a widget

Variants (Non-exhaustive)

Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
None

No event

Activate

Widget activation

For example, clicking a button, toggling a check-box, opening a menu or requesting char focus (keyboard input).

This event is triggered by keyboard navigation and accelerator key bindings, and may be used by a parent widget to activate a child.

Control(ControlKey)

Control / Navigation key input

This represents a "control" actions, usually triggered by a key, and are received with char focus (Manager::request_char_focus), nav focus (Manager::nav_focus) or as a nav fallback (Manager::register_nav_fallback).

Behaviour differs slightly between char and nav focus. When a widget has char focus, the Space key sends a space character via Event::ReceivedCharacter while the Return key sends ControlKey::Return. Without char focus, both Space and Return keys send Event::Activate to the widget with nav focus (if any, otherwise to the nav fallback, if any).

LostCharFocus

Widget lost keyboard input focus

LostSelFocus

Widget lost selection focus

Selection focus implies character focus, so this event implies that the widget has already received Event::LostCharFocus.

ReceivedCharacter(char)

Widget receives a character of text input

Scroll(ScrollDelta)

A mouse or touchpad scroll event

Pan

A mouse or touch-screen move/zoom/rotate event

Mouse-grabs generate translation (delta component) only. Touch grabs optionally also generate rotation and scaling components, depending on the GrabMode.

In general, a point p on the screen should be transformed as follows:

// Works for Coord type; for DVec2 type-conversions are unnecessary:
p = (alpha.complex_mul(p.into()) + delta).into();

When it is known that there is no rotational component, one can use a simpler transformation: alpha.0 * p + delta. When there is also no scaling component, we just have a translation: p + delta. Note however that if events are generated with rotation and/or scaling components, these simplifications are invalid.

Two such transforms may be combined as follows:

let alpha = alpha2.complex_mul(alpha1);
let delta = alpha2.complex_mul(delta1) + delta2;

If instead one uses a transform to map screen-space to world-space, this transform should be adjusted as follows:

world_alpha = world_alpha.complex_div(alpha.into());
world_delta = world_delta - world_alpha.complex_mul(delta.into());

Those familiar with complex numbers may recognise that alpha = a * e^{i*t} where a is the scale component and t is the angle of rotation. Calculate these components as follows:

let a = (alpha.0 * alpha.0 + alpha.1 * alpha.1).sqrt();
let t = (alpha.1).atan2(alpha.0);

Fields of Pan

alpha: DVec2

Rotation and scale component

delta: DVec2

Translation component

PressStart

A mouse button was pressed or touch event started

Fields of PressStart

source: PressSourcestart_id: WidgetIdcoord: Coord
PressMove

Movement of mouse or a touch press

Received only given a press grab.

Fields of PressMove

source: PressSourcecur_id: Option<WidgetId>coord: Coorddelta: Coord
PressEnd

End of a click/touch press

Received only given a press grab.

When end_id == None, this is a "cancelled press": the end of the press is outside the application window.

Fields of PressEnd

source: PressSourceend_id: Option<WidgetId>coord: Coord
TimerUpdate

Update from a timer

This event is received after requesting timed wake-up(s) (see Manager::update_on_timer).

HandleUpdate

Update triggerred via an UpdateHandle

This event may be received after registering an UpdateHandle via Manager::update_on_handle.

A user-defined payload is passed. Interpretation of this payload is user-defined and unfortunately not type safe.

Fields of HandleUpdate

handle: UpdateHandlepayload: u64
NewPopup(WidgetId)

Notification that a new popup has been created

This is sent to the parent of each open popup when a new popup is created. This enables parents to close their popups when the new popup is not a descendant of itself. The WidgetId is that of the popup.

PopupRemoved(WindowId)

Notification that a popup has been destroyed

This is sent to the popup's parent after a popup has been removed. Since popups may be removed directly by the Manager, the parent should clean up any associated state here.

NavFocus

Sent when a widget receives keyboard navigation focus

The widget should reply with Response::Focus.

Trait Implementations

impl Clone for Event[src]

impl Debug for Event[src]

impl PartialEq<Event> for Event[src]

impl StructuralPartialEq for Event[src]

Auto Trait Implementations

impl RefUnwindSafe for Event

impl Send for Event

impl Sync for Event

impl Unpin for Event

impl UnwindSafe for Event

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.