diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-09 02:04:39 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-09 02:04:39 +0300 |
| commit | 1777e9bba32b953ed1ad203b4a16d01105539000 (patch) | |
| tree | 22096973812c9baba822453d8470bdcfe64fc2a6 /src/pane.rs | |
| parent | 36a8d36a7258e08b40c01bf521b1f4006525f143 (diff) | |
feat(graphics): add direct pane frame streaming (#2523)
* feat(graphics): add direct pane frame streaming
* feat(graphics): expose pane visibility
* test(graphics): preserve legacy terminal image output
* fix(graphics): harden streaming lifecycle
* fix(input): preserve mouse releases outside panes
Diffstat (limited to 'src/pane.rs')
| -rw-r--r-- | src/pane.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/pane.rs b/src/pane.rs index ab984946..da99f55e 100644 --- a/src/pane.rs +++ b/src/pane.rs @@ -2780,40 +2780,41 @@ impl PaneRuntime { pub fn encode_mouse_button( &self, kind: crossterm::event::MouseEventKind, - column: u16, - row: u16, + position: crate::input::mouse::Position, modifiers: crossterm::event::KeyModifiers, ) -> Option<Vec<u8>> { if !self.input_state()?.mouse_protocol_mode.reporting_enabled() { return None; } - self.terminal - .encode_mouse_button(kind, column, row, modifiers) + self.terminal.encode_mouse_button(kind, position, modifiers) } - pub fn encode_mouse_motion( + pub(crate) fn encode_mouse_motion( &self, kind: crossterm::event::MouseEventKind, - column: u16, - row: u16, + position: crate::input::mouse::Position, modifiers: crossterm::event::KeyModifiers, ) -> Option<Vec<u8>> { - self.terminal - .encode_mouse_motion(kind, column, row, modifiers) + self.terminal.encode_mouse_motion(kind, position, modifiers) } - pub fn encode_mouse_wheel( + pub(crate) fn encode_mouse_wheel( &self, kind: crossterm::event::MouseEventKind, - column: u16, - row: u16, + position: crate::input::mouse::Position, modifiers: crossterm::event::KeyModifiers, ) -> Option<Vec<u8>> { if self.wheel_routing()? != WheelRouting::MouseReport { return None; } - self.terminal - .encode_mouse_wheel(kind, column, row, modifiers) + self.terminal.encode_mouse_wheel(kind, position, modifiers) + } + + pub(crate) fn pixel_size(&self) -> Option<(u32, u32)> { + let (rows, cols, cell_width_px, cell_height_px) = self.current_size.get(); + let width = u32::from(cols).checked_mul(cell_width_px)?; + let height = u32::from(rows).checked_mul(cell_height_px)?; + (width > 0 && height > 0).then_some((width, height)) } pub fn encode_alternate_scroll( |
