MCPcopy Create free account
hub / github.com/TheRedDeveloper/ply-engine / compute_vertical_scrollbar_geometry

Function compute_vertical_scrollbar_geometry

src/engine.rs:903–943  ·  view source on GitHub ↗
(
    bbox: BoundingBox,
    content_height: f32,
    scroll_position_positive: f32,
    config: ScrollbarConfig,
)

Source from the content-addressed store, hash-verified

901}
902
903fn compute_vertical_scrollbar_geometry(
904 bbox: BoundingBox,
905 content_height: f32,
906 scroll_position_positive: f32,
907 config: ScrollbarConfig,
908) -> Option<ScrollbarAxisGeometry> {
909 let viewport = bbox.height;
910 let max_scroll = (content_height - viewport).max(0.0);
911 if viewport <= 0.0 || max_scroll <= 0.0 {
912 return None;
913 }
914
915 let thickness = config.width.max(1.0);
916 let track_len = viewport;
917 let thumb_len = (track_len * (viewport / content_height.max(viewport)))
918 .max(config.min_thumb_size.max(1.0))
919 .min(track_len);
920 let thumb_travel = (track_len - thumb_len).max(0.0);
921 let thumb_offset = if thumb_travel <= 0.0 {
922 0.0
923 } else {
924 (scroll_position_positive.clamp(0.0, max_scroll) / max_scroll) * thumb_travel
925 };
926
927 Some(ScrollbarAxisGeometry {
928 track_bbox: BoundingBox::new(
929 bbox.x + bbox.width - thickness,
930 bbox.y,
931 thickness,
932 track_len,
933 ),
934 thumb_bbox: BoundingBox::new(
935 bbox.x + bbox.width - thickness,
936 bbox.y + thumb_offset,
937 thickness,
938 thumb_len,
939 ),
940 max_scroll,
941 thumb_travel,
942 })
943}
944
945fn compute_horizontal_scrollbar_geometry(
946 bbox: BoundingBox,

Calls

no outgoing calls

Tested by

no test coverage detected