use super::super::Renderer;
impl Renderer {
pub fn set_shader_mouse_position(&mut self, x: f32, y: f32) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.set_mouse_position(x, y);
}
}
pub fn set_shader_mouse_button(&mut self, pressed: bool, x: f32, y: f32) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.set_mouse_button(pressed, x, y);
}
}
pub fn update_key_press_time(&mut self) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_key_press();
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_key_press();
}
}
pub fn update_shader_cursor(
&mut self,
col: usize,
row: usize,
opacity: f32,
color: [f32; 4],
style: par_term_emu_core_rust::cursor::CursorStyle,
) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_cursor(col, row, opacity, color, style);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_cursor(col, row, opacity, color, style);
}
}
pub fn clear_shader_cursor(&mut self) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.clear_cursor();
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.clear_cursor();
}
}
pub fn update_shader_progress(
&mut self,
state: f32,
percent: f32,
is_active: f32,
active_count: f32,
) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_progress(state, percent, is_active, active_count);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_progress(state, percent, is_active, active_count);
}
}
pub fn update_shader_command_status(&mut self, state: f32, exit_code: f32, running: f32) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_command_status(state, exit_code, running);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_command_status(state, exit_code, running);
}
}
pub fn update_shader_focused_pane(
&mut self,
focused_viewport: Option<&crate::cell_renderer::PaneViewport>,
) {
let pane = focused_viewport
.map(|viewport| {
[
viewport.x,
self.size.height as f32 - (viewport.y + viewport.height),
viewport.width,
viewport.height,
]
})
.unwrap_or([0.0, 0.0, self.size.width as f32, self.size.height as f32]);
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_focused_pane(pane[0], pane[1], pane[2], pane[3]);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_focused_pane(pane[0], pane[1], pane[2], pane[3]);
}
}
pub fn update_shader_scrollback(
&mut self,
offset: f32,
visible_lines: f32,
scrollback_lines: f32,
) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_scrollback(offset, visible_lines, scrollback_lines);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_scrollback(offset, visible_lines, scrollback_lines);
}
}
pub fn update_cursor_shader_config(
&mut self,
color: [u8; 3],
trail_duration: f32,
glow_radius: f32,
glow_intensity: f32,
) {
let physical_glow_radius = glow_radius * self.cell_renderer.scale_factor;
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.update_cursor_shader_config(
color,
trail_duration,
physical_glow_radius,
glow_intensity,
);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.update_cursor_shader_config(
color,
trail_duration,
physical_glow_radius,
glow_intensity,
);
}
}
pub fn pause_shader_animations(&mut self) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.set_animation_enabled(false);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.set_animation_enabled(false);
}
log::info!("[SHADER] Shader animations paused");
}
pub fn resume_shader_animations(
&mut self,
custom_shader_animation: bool,
cursor_shader_animation: bool,
) {
if let Some(ref mut custom_shader) = self.custom_shader_renderer {
custom_shader.set_animation_enabled(custom_shader_animation);
}
if let Some(ref mut cursor_shader) = self.cursor_shader_renderer {
cursor_shader.set_animation_enabled(cursor_shader_animation);
}
self.dirty = true;
log::info!(
"[SHADER] Shader animations resumed (custom: {}, cursor: {})",
custom_shader_animation,
cursor_shader_animation
);
}
}