Incular logoIncular
API ReferenceNavigation & Scrolling

Two-Dimensional Scrolling

Independent row and column scrolling with lazy delegates.

TwoDimensionalScrollable owns two independent scroll positions plus gesture policy; TwoDimensionalViewport owns row/column state with lazy extents.

use incular::prelude::*;

fn main() {
    let delegate =
        TwoDimensionalChildDelegate::new(10, 5, |vicinity: ChildVicinity| {
            Some(format!("{}:{}", vicinity.x_index, vicinity.y_index))
        });
    let mut scrollable = TwoDimensionalScrollable::with_new_controllers();
    scrollable.set_main_axis(Axis::Vertical);
    scrollable.set_diagonal_drag_behavior(DiagonalDragBehavior::Free);
    println!("rows: {}", delegate.row_count());
}

CacheExtentStyle: Pixels (default) / Viewport. DiagonalDragBehavior: None (default, lock dominant) / Free / Weighted. Layouts: TwoDimensionalChildLayout, TwoDimensionalViewportLayout (child(), ranges, cache rect), TwoDimensionalConstraints (as_box_constraints(), constrain(), biggest()).

Related: ScrollController, CustomScrollView.