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§
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 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.
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.
Provided Methods§
Sourcefn 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).
Sourcefn 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.
Sourcefn 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".