pub trait System<R>: Debug {
type Ref: Copy;
type Context: Copy;
type Event: Copy + Debug + PartialEq;
type PendingKeyState;
type KeyState;
// Required methods
fn new_pressed_key(
&self,
keymap_index: u16,
context: &Self::Context,
key_ref: Self::Ref,
) -> (PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>, KeyEvents<Self::Event>);
fn update_pending_state(
&self,
pending_state: &mut Self::PendingKeyState,
keymap_index: u16,
context: &Self::Context,
key_ref: Self::Ref,
event: Event<Self::Event>,
) -> (Option<NewPressedKey<R>>, KeyEvents<Self::Event>);
// Provided methods
fn update_state(
&self,
_key_state: &mut Self::KeyState,
_ref: &Self::Ref,
_context: &Self::Context,
_keymap_index: u16,
_event: Event<Self::Event>,
) -> KeyEvents<Self::Event> { ... }
fn key_output(
&self,
_ref: &Self::Ref,
_key_state: &Self::KeyState,
) -> Option<KeyOutput> { ... }
}
Expand description
The interface for key System
behaviour.
A System
has an associated Ref
, Context, Event
, and KeyState.
The generic PK
is used as the type of the PressedKey
that the Key
produces.
(e.g. layered::LayeredKey’s pressed key state passes-through to
the keys of its layers).
Required Associated Types§
Sourcetype Context: Copy
type Context: Copy
The associated Context is used to provide state that may affect behaviour when pressing the key. (e.g. the behaviour of layered::LayeredKey depends on which layers are active in layered::Context).
Sourcetype Event: Copy + Debug + PartialEq
type Event: Copy + Debug + PartialEq
The associated Event
is to be handled by the associated Context,
pending key states, and key states.
Sourcetype PendingKeyState
type PendingKeyState
Associated pending key state.
Required Methods§
Sourcefn new_pressed_key(
&self,
keymap_index: u16,
context: &Self::Context,
key_ref: Self::Ref,
) -> (PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>, KeyEvents<Self::Event>)
fn new_pressed_key( &self, keymap_index: u16, context: &Self::Context, key_ref: Self::Ref, ) -> (PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>, KeyEvents<Self::Event>)
Produces a pressed key value, and may yield some ScheduledEvents. (e.g. tap_hold::Key schedules a tap_hold::Event::TapHoldTimeout so that holding the key resolves as a hold).
Sourcefn update_pending_state(
&self,
pending_state: &mut Self::PendingKeyState,
keymap_index: u16,
context: &Self::Context,
key_ref: Self::Ref,
event: Event<Self::Event>,
) -> (Option<NewPressedKey<R>>, KeyEvents<Self::Event>)
fn update_pending_state( &self, pending_state: &mut Self::PendingKeyState, keymap_index: u16, context: &Self::Context, key_ref: Self::Ref, event: Event<Self::Event>, ) -> (Option<NewPressedKey<R>>, KeyEvents<Self::Event>)
Update the given pending key state with the given impl.