aboutsummaryrefslogtreecommitdiff
path: root/src/pane.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-08-09 02:04:39 +0300
committerGitHub <noreply@github.com>2026-08-09 02:04:39 +0300
commit1777e9bba32b953ed1ad203b4a16d01105539000 (patch)
tree22096973812c9baba822453d8470bdcfe64fc2a6 /src/pane.rs
parent36a8d36a7258e08b40c01bf521b1f4006525f143 (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.rs29
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(