Skip to main content

fission_core/input/
mod.rs

1use crate::env::{Clipboard, InteractionStateMap, ScrollStateMap, TextEditStateMap};
2use crate::event::InputEvent;
3use crate::{ActionEnvelope, ActionInput};
4use fission_ir::{CoreIR, NodeId};
5use fission_layout::{LayoutSnapshot, TextMeasurer};
6use std::sync::Arc;
7
8pub mod text;
9pub mod slider;
10pub mod gesture;
11
12pub struct ControllerContext<'a> {
13    pub ir: &'a CoreIR,
14    pub layout: &'a LayoutSnapshot,
15    pub text_edit: &'a mut TextEditStateMap,
16    pub interaction: &'a mut InteractionStateMap,
17    pub scroll: &'a mut ScrollStateMap,
18    pub ime_preedit: &'a mut Option<(NodeId, String)>,
19    pub gesture: &'a mut crate::env::GestureState,
20    pub clipboard: Option<&'a Arc<dyn Clipboard>>,
21    pub measurer: Option<&'a Arc<dyn TextMeasurer>>,
22    // We queue actions here instead of dispatching immediately to keep Controller pure logic
23    pub dispatched_actions: Vec<(NodeId, ActionEnvelope, ActionInput)>,
24}
25
26pub trait InputController {
27    fn handle_event(&mut self, ctx: &mut ControllerContext, event: &InputEvent) -> bool;
28}