Incular logoIncular
API ReferenceNavigation & Scrolling

Wheel Views

Cylindrical picker viewport with projection matrices.

ListWheelViewport is fixed-extent wheel state; ListWheelScrollView wraps it Flutter-style; FixedExtentScrollController adds item ops over an ordinary controller.

use incular::prelude::*;

fn main() {
    let mut viewport = ListWheelViewport::new(
        ScrollController::new(),
        48.0,
        WheelChildDelegate::builder(Some(10), |i| Some(format!("item {i}"))),
    );
    viewport.set_projection(WheelProjection::new(2.0, 0.003, 0.0, 1.0));
    viewport.jump_to_item(2);
    println!("selected: {:?}", viewport.selected_item());
}

WheelChildDelegate: Children(Vec) / Builder { child_count, builder }. WheelProjection { diameter_ratio, perspective, off_axis_fraction, squeeze } with transform_for(...). WheelMatrix 4×4: identity, multiply, translation, rotation_x/y, scale, cylindrical_projection, project_point, inverse. ChangeReportingBehavior: OnScrollUpdate (default) / OnScrollEnd. WheelChildLayout / WheelLayout carry angles, transforms, opacity, and visibility per row.

Related: PageView, ScrollController.