ratatui_toolkit/widgets/markdown_widget/widget/methods/
calculate_scrollbar_area.rs

1//! Calculate the scrollbar area for a given content area.
2
3use ratatui::layout::Rect;
4
5use crate::widgets::markdown_widget::widget::MarkdownWidget;
6
7impl<'a> MarkdownWidget<'a> {
8    /// Calculate the scrollbar area based on the content area.
9    ///
10    /// Returns `Some(Rect)` if the scrollbar should be shown, `None` otherwise.
11    ///
12    /// # Arguments
13    ///
14    /// * `area` - The main widget area
15    pub fn calculate_scrollbar_area(&self, area: Rect) -> Option<Rect> {
16        // Calculate content area (same logic as render)
17        let content_area = if self.show_statusline && area.height > 1 {
18            Rect {
19                height: area.height.saturating_sub(1),
20                ..area
21            }
22        } else {
23            area
24        };
25
26        // Only show scrollbar if content exceeds viewport
27        if !self.show_scrollbar || self.scroll.total_lines <= content_area.height as usize {
28            return None;
29        }
30
31        let scrollbar_width = self.scrollbar_config.width;
32
33        Some(Rect {
34            x: content_area.x + content_area.width.saturating_sub(scrollbar_width),
35            y: content_area.y,
36            width: scrollbar_width,
37            height: content_area.height,
38        })
39    }
40}