simvx.core.ui.virtual_scroll¶
VirtualScrollContainer – only renders visible items for large lists.
Items are provided via a data source callback. Only items within the visible viewport range are instantiated and laid out, enabling efficient handling of thousands of items.
Module Contents¶
Classes¶
ScrollContainer that only renders visible items. |
Data¶
API¶
- simvx.core.ui.virtual_scroll.__all__¶
[‘VirtualScrollContainer’]
- class simvx.core.ui.virtual_scroll.VirtualScrollContainer(item_height: float = 24.0, **kwargs)¶
Bases:
simvx.core.ui.containers.ContainerScrollContainer that only renders visible items.
Items are provided via a data source callback. Only items within the visible viewport range are instantiated and laid out. Off-screen items are recycled to minimize allocation.
Example: vs = VirtualScrollContainer(item_height=24.0) vs.size = Vec2(300, 400)
def make_label(index, recycled): from simvx.core.ui.widgets import Label lbl = recycled or Label() lbl.text = f"Item {index}" return lbl vs.set_data_source(10000, make_label)Initialization
- set_data_source(count: int, factory: collections.abc.Callable[[int, simvx.core.ui.core.Control | None], simvx.core.ui.core.Control], data_fn: collections.abc.Callable[[int], Any] | None = None)¶
Configure the virtual list.
Args: count: Total number of items. factory: Creates/updates a Control for item at index. Signature: fn(index, existing_or_None) -> Control data_fn: Optional callback returning data for item at index.
- update_item_count(count: int)¶
Update total item count and refresh visible items.
- property total_height: float¶
Total content height based on item count and row height.
- property visible_range: tuple[int, int]¶
Return (first_visible_index, last_visible_index_exclusive).
- scroll_to(offset: float)¶
Scroll to absolute pixel offset.
- scroll_to_index(index: int)¶
Scroll so the item at index is at the top of the viewport.
- on_scroll(delta: float)¶
Handle scroll wheel input (positive delta = scroll down).
- separation¶
‘Property(…)’
- ready()¶
- add_child(node)¶
- remove_child(node)¶
- mark_layout_dirty()¶
- process(dt: float)¶
- size_x¶
‘Property(…)’
- size_y¶
‘Property(…)’
- property size: simvx.core.math.types.Vec2¶
- get_theme() simvx.core.ui.core.Theme¶
- get_rect() tuple[float, float, float, float]¶
- get_global_rect() tuple[float, float, float, float]¶
- is_point_inside(point) bool¶
- set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
- set_focus()¶
- grab_focus()¶
- release_focus()¶
- has_focus() bool¶
- focus_next_control()¶
- focus_previous_control()¶
- grab_mouse()¶
- release_mouse()¶
- set_drag_preview(control: simvx.core.ui.core.Control)¶
- draw_popup(renderer)¶
- is_popup_point_inside(point) bool¶
- popup_input(event)¶
- dismiss_popup()¶
- z_index¶
‘Property(…)’
- z_as_relative¶
‘Property(…)’
- property absolute_z_index: int¶
- property position: simvx.core.math.types.Vec2¶
- property rotation: float¶
- property rotation_degrees: float¶
- property scale: simvx.core.math.types.Vec2¶
- property global_position: simvx.core.math.types.Vec2¶
- property global_rotation: float¶
- property global_scale: simvx.core.math.types.Vec2¶
- property forward: simvx.core.math.types.Vec2¶
- property right: simvx.core.math.types.Vec2¶
- translate(offset: tuple[float, float] | numpy.ndarray)¶
- rotate(radians: float)¶
- rotate_deg(degrees: float)¶
- look_at(target: tuple[float, float] | numpy.ndarray)¶
- transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
- draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
- wrap_screen(margin: float = 20)¶
- script_error_raised¶
‘Signal(…)’
- classmethod __init_subclass__(**kwargs)¶
- property name: str¶
- property process_mode: simvx.core.descriptors.ProcessMode¶
- reset_error() None¶
- reparent(new_parent: simvx.core.node.Node)¶
- get_node(path: str) simvx.core.node.Node¶
- find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
- find(node_type: type) simvx.core.node.Node | None¶
- property path: str¶
- add_to_group(group: str)¶
- remove_from_group(group: str)¶
- is_in_group(group: str) bool¶
- enter_tree() None¶
- exit_tree() None¶
- physics_process(dt: float) None¶
- draw(renderer) None¶
- input_event(event: simvx.core.events.InputEvent) None¶
- input(event: simvx.core.events.TreeInputEvent) None¶
- unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
- start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
- stop_coroutine(gen_or_handle)¶
- destroy()¶
- queue_free¶
None
- property tree: simvx.core.scene_tree.SceneTree¶
- get_tree() simvx.core.scene_tree.SceneTree¶
- __getitem__(key: str)¶
- classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
- get_settings¶
None
- __repr__()¶