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

Function compute_horizontal_scrollbar_geometry

src/engine.rs:945–985  ·  view source on GitHub ↗
(
    bbox: BoundingBox,
    content_width: f32,
    scroll_position_positive: f32,
    config: ScrollbarConfig,
)

Source from the content-addressed store, hash-verified

943}
944
945fn compute_horizontal_scrollbar_geometry(
946 bbox: BoundingBox,
947 content_width: f32,
948 scroll_position_positive: f32,
949 config: ScrollbarConfig,
950) -> Option<ScrollbarAxisGeometry> {
951 let viewport = bbox.width;
952 let max_scroll = (content_width - viewport).max(0.0);
953 if viewport <= 0.0 || max_scroll <= 0.0 {
954 return None;
955 }
956
957 let thickness = config.width.max(1.0);
958 let track_len = viewport;
959 let thumb_len = (track_len * (viewport / content_width.max(viewport)))
960 .max(config.min_thumb_size.max(1.0))
961 .min(track_len);
962 let thumb_travel = (track_len - thumb_len).max(0.0);
963 let thumb_offset = if thumb_travel <= 0.0 {
964 0.0
965 } else {
966 (scroll_position_positive.clamp(0.0, max_scroll) / max_scroll) * thumb_travel
967 };
968
969 Some(ScrollbarAxisGeometry {
970 track_bbox: BoundingBox::new(
971 bbox.x,
972 bbox.y + bbox.height - thickness,
973 track_len,
974 thickness,
975 ),
976 thumb_bbox: BoundingBox::new(
977 bbox.x + thumb_offset,
978 bbox.y + bbox.height - thickness,
979 thumb_len,
980 thickness,
981 ),
982 max_scroll,
983 thumb_travel,
984 })
985}
986
987impl<CustomElementData: Clone + Default + std::fmt::Debug> PlyContext<CustomElementData> {
988 pub fn new(dimensions: Dimensions) -> Self {

Calls

no outgoing calls

Tested by

no test coverage detected