Trait System
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> { ... }
fn pending_output(
&self,
_pending_key_state: &Self::PendingKeyState,
) -> 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§
type 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).
type 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.
type PendingKeyState
type PendingKeyState
Associated pending key state.
type KeyState
type KeyState
Associated key state type.
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 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 may schedule a tap_hold::Event::TapHoldTimeout so that holding the key resolves as a hold, when a timeout is configured).
Delays are from this call.
When the keymap replaces a pending key with another pending key
(e.g. chorded passthrough to tap-hold),
it backdates those After delays by time already spent on this press.
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>)
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.
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 update_state( &self, _key_state: &mut Self::KeyState, _ref: &Self::Ref, _context: &Self::Context, _keymap_index: u16, _event: Event<Self::Event>, ) -> KeyEvents<Self::Event>
Used to update the KeyState’s state, and possibly yield event(s).
fn key_output(
&self,
_ref: &Self::Ref,
_key_state: &Self::KeyState,
) -> Option<KeyOutput>
fn key_output( &self, _ref: &Self::Ref, _key_state: &Self::KeyState, ) -> Option<KeyOutput>
Output for the pressed key state.
fn pending_output(
&self,
_pending_key_state: &Self::PendingKeyState,
) -> Option<KeyOutput>
fn pending_output( &self, _pending_key_state: &Self::PendingKeyState, ) -> Option<KeyOutput>
HID while a pending session is live.
Default: no output until the pending key resolves.
crate::keymap::Keymap includes this in pressed-key HID
and aggregated modifiers while a pending session is live.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".