pub struct BoxRenderer<'a> { /* private fields */ }Expand description
BoxRenderer - Unified rendering component with integrated overflow handling
This component consolidates ALL overflow logic from OverflowRenderer and provides unified content rendering for text, choices, and charts using existing scrollbar components.
IMPORTANT: This is a VISUAL COMPONENT ONLY - it does not replace the logical MuxBox struct. It queries the MuxBox for state and renders accordingly.
Implementations§
Source§impl<'a> BoxRenderer<'a>
impl<'a> BoxRenderer<'a>
Sourcepub fn new(muxbox: &'a MuxBox, component_id: String) -> Self
pub fn new(muxbox: &'a MuxBox, component_id: String) -> Self
Create a new BoxRenderer for the given MuxBox
Sourcepub fn initialize_dimensions(&mut self, bounds: Bounds)
pub fn initialize_dimensions(&mut self, bounds: Bounds)
Initialize dimensions for this box renderer
Sourcepub fn get_dimensions(&self) -> Option<&BoxDimensions>
pub fn get_dimensions(&self) -> Option<&BoxDimensions>
Get the formalized dimensions for this box
Sourcepub fn screen_to_inbox_coords(
&self,
screen_x: usize,
screen_y: usize,
) -> Option<(usize, usize)>
pub fn screen_to_inbox_coords( &self, screen_x: usize, screen_y: usize, ) -> Option<(usize, usize)>
Translate screen coordinates to inbox coordinates using formalized system This is the primary method all coordinate translation should use
Sourcepub fn inbox_to_screen_coords(
&self,
inbox_x: usize,
inbox_y: usize,
) -> Option<(usize, usize)>
pub fn inbox_to_screen_coords( &self, inbox_x: usize, inbox_y: usize, ) -> Option<(usize, usize)>
Translate inbox coordinates to screen coordinates using formalized system This is the primary method all coordinate translation should use
Sourcepub fn is_inbox_coords_visible(&self, inbox_x: usize, inbox_y: usize) -> bool
pub fn is_inbox_coords_visible(&self, inbox_x: usize, inbox_y: usize) -> bool
Check if inbox coordinates are currently visible
Sourcepub fn render(
&mut self,
app_context: &AppContext,
app_graph: &AppGraph,
adjusted_bounds: &HashMap<String, HashMap<String, Bounds>>,
layout: &Layout,
buffer: &mut ScreenBuffer,
) -> bool
pub fn render( &mut self, app_context: &AppContext, app_graph: &AppGraph, adjusted_bounds: &HashMap<String, HashMap<String, Bounds>>, layout: &Layout, buffer: &mut ScreenBuffer, ) -> bool
Main rendering function that orchestrates all box drawing
This replaces the logic that was in draw_muxbox() and render_muxbox() but preserves ALL existing functionality and behavior.
Sourcepub fn translate_box_relative_zones_to_absolute(
&self,
box_relative_zones: &[SensitiveZone],
bounds: &Bounds,
content_width: usize,
content_height: usize,
viewable_width: usize,
viewable_height: usize,
horizontal_scroll: f64,
vertical_scroll: f64,
_is_wrapped: bool,
) -> Vec<SensitiveZone>
pub fn translate_box_relative_zones_to_absolute( &self, box_relative_zones: &[SensitiveZone], bounds: &Bounds, content_width: usize, content_height: usize, viewable_width: usize, viewable_height: usize, horizontal_scroll: f64, vertical_scroll: f64, _is_wrapped: bool, ) -> Vec<SensitiveZone>
Translate box-relative sensitive zones to absolute screen coordinates This handles centering, scroll offsets, and coordinate translation CRITICAL FIX: Updated to use BoxDimensions for proper coordinate translation
Sourcepub fn store_translated_sensitive_zones(&mut self, zones: Vec<SensitiveZone>)
pub fn store_translated_sensitive_zones(&mut self, zones: Vec<SensitiveZone>)
Store sensitive zones for click detection CRITICAL FIX: Now stores zones in screen coordinates after proper translation
Sourcepub fn get_sensitive_zones(&self) -> &[SensitiveZone]
pub fn get_sensitive_zones(&self) -> &[SensitiveZone]
Get sensitive zones in absolute screen coordinates
Sourcepub fn translate_inbox_to_screen_coordinates(
&self,
inbox_x: usize,
inbox_y: usize,
bounds: &Bounds,
content_width: usize,
content_height: usize,
viewable_width: usize,
viewable_height: usize,
horizontal_scroll: f64,
vertical_scroll: f64,
) -> (usize, usize)
pub fn translate_inbox_to_screen_coordinates( &self, inbox_x: usize, inbox_y: usize, bounds: &Bounds, content_width: usize, content_height: usize, viewable_width: usize, viewable_height: usize, horizontal_scroll: f64, vertical_scroll: f64, ) -> (usize, usize)
Translate inbox coordinates to screen coordinates Inbox coordinates: content-local (0,0 = top-left of content area) Screen coordinates: absolute terminal coordinates
Sourcepub fn handle_click_with_dimensions(
&mut self,
screen_x: usize,
screen_y: usize,
dimensions: &BoxDimensions,
) -> Option<usize>
pub fn handle_click_with_dimensions( &mut self, screen_x: usize, screen_y: usize, dimensions: &BoxDimensions, ) -> Option<usize>
Translate screen coordinates to inbox coordinates Screen coordinates: absolute terminal coordinates Inbox coordinates: content-local (0,0 = top-left of content area) Handle click using formalized coordinate system Returns Some(choice_index) if a choice was clicked, None otherwise
Sourcepub fn handle_mouse_move_with_dimensions(
&mut self,
screen_x: usize,
screen_y: usize,
dimensions: &BoxDimensions,
) -> bool
pub fn handle_mouse_move_with_dimensions( &mut self, screen_x: usize, screen_y: usize, dimensions: &BoxDimensions, ) -> bool
Handle mouse move using formalized coordinate system
Sourcepub fn handle_mouse_hover_with_dimensions(
&mut self,
screen_x: usize,
screen_y: usize,
dimensions: &BoxDimensions,
) -> bool
pub fn handle_mouse_hover_with_dimensions( &mut self, screen_x: usize, screen_y: usize, dimensions: &BoxDimensions, ) -> bool
Handle mouse hover using formalized coordinate system
Sourcepub fn handle_mouse_drag_with_dimensions(
&mut self,
from_screen_x: usize,
from_screen_y: usize,
to_screen_x: usize,
to_screen_y: usize,
dimensions: &BoxDimensions,
) -> bool
pub fn handle_mouse_drag_with_dimensions( &mut self, from_screen_x: usize, from_screen_y: usize, to_screen_x: usize, to_screen_y: usize, dimensions: &BoxDimensions, ) -> bool
Handle mouse drag using formalized coordinate system
Auto Trait Implementations§
impl<'a> Freeze for BoxRenderer<'a>
impl<'a> RefUnwindSafe for BoxRenderer<'a>
impl<'a> Send for BoxRenderer<'a>
impl<'a> Sync for BoxRenderer<'a>
impl<'a> Unpin for BoxRenderer<'a>
impl<'a> UnsafeUnpin for BoxRenderer<'a>
impl<'a> UnwindSafe for BoxRenderer<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.