Skip to content

ScrollView

#include <ScrollView.hpp>

Inherits: Widget

A clipping container that lets a child widget be scrolled inside a fixed viewport.

ScrollView renders its child into an internal viewport and only copies the visible region back to the parent buffer. This makes it useful for long text blocks, logs, and any content that should be partially visible inside a smaller area.

ReturnNameDescription
ScrollViewDefaulted constructor.
ScrollView explicit
voidsetContentSets the widget to display inside the scroll view.
std::shared_ptr< Widget >getContent const inlineGets the current child widget.
voidsetContentSizeSets an explicit content size for the scrollable area.
voidclearContentSizeClears any explicit content size and falls back to measure().
intscrollX const inlineGets the horizontal scroll offset.
intscrollY const inlineGets the vertical scroll offset.
voidsetScrollSets the scroll offset, clamped to the current content bounds.
voidscrollByScrolls relative to the current position.
boolisFocusable virtual const inlineReturns whether this widget can receive keyboard focus.
core::Sizemeasure virtualMeasures how much space this widget needs.
voidlayout virtualPositions and sizes this widget and its children.
boolonEvent virtualHandles an input event.
std::vector< std::shared_ptr< Widget > >getChildren virtual const inlineReturns this widget’s children.
std::vector< std::shared_ptr< Widget > >getFocusChildren virtual const inlineReturns this widget’s children for focus traversal.

ScrollView() = default

Defaulted constructor.


explicit

explicit ScrollView(std::shared_ptr< Widget > child)

void setContent(std::shared_ptr< Widget > child)

Sets the widget to display inside the scroll view.

  • child The content widget to scroll, or nullptr to clear it

const inline

inline std::shared_ptr< Widget > getContent() const

Gets the current child widget.

The scroll view content, or nullptr if empty


void setContentSize(core::Size size)

Sets an explicit content size for the scrollable area.

Use this when the content widget’s natural measurement does not reflect its full scrollable size, such as when wrapping a container or layout. Passing 0 for a dimension auto-fills that dimension from the viewport.

  • size The scrollable content size in cells

void clearContentSize()

Clears any explicit content size and falls back to measure().


const inline

inline int scrollX() const

Gets the horizontal scroll offset.


const inline

inline int scrollY() const

Gets the vertical scroll offset.


void setScroll(int x, int y)

Sets the scroll offset, clamped to the current content bounds.


void scrollBy(int dx, int dy)

Scrolls relative to the current position.


virtual const inline

virtual inline bool isFocusable() const

Returns whether this widget can receive keyboard focus.

Widgets like Button and Input return true; containers return false.

True if this widget can be focused, false otherwise


virtual

virtual core::Size measure(int availW, int availH)

Measures how much space this widget needs.

Called during the measurement pass to determine widget size requirements. Should return the preferred size based on available space.

  • availW Maximum available width (may be ignored by widget)

  • availH Maximum available height (may be ignored by widget)

The Size this widget wants, or needs at minimum


virtual

virtual void layout(int x, int y, int width, int height)

Positions and sizes this widget and its children.

Called after measurement to actually place the widget at a specific location. If your widget has children, you must call their layout() methods here.

  • x The X coordinate for this widget

  • y The Y coordinate for this widget

  • width The width allocated to this widget

  • height The height allocated to this widget


virtual

virtual bool onEvent(const core::events::Event & event)

Handles an input event.

Called by the framework to deliver an event to this widget. The default implementation runs any listeners registered via addEventListener(), then returns false. Subclasses (Button, Input, etc.) override this to add built-in behavior, and should call Widget::onEvent(event) first to give user listeners a chance to handle the event before the widget’s own logic.

Return true if the event was handled, false to let it bubble to the parent widget.

  • event The input event

True if this widget (or one of its listeners) handled the event


virtual const inline

virtual inline std::vector< std::shared_ptr< Widget > > getChildren() const

Returns this widget’s children.

Vector of child widgets (empty if no children)


virtual const inline

virtual inline std::vector< std::shared_ptr< Widget > > getFocusChildren() const

Returns this widget’s children for focus traversal.

By default this matches getChildren(). Widgets with custom rendering behavior (like clipping/compositing) can override this without affecting paint traversal.

ReturnNameDescription
voiddrawContent virtualDraws this widget’s content.

virtual

virtual void drawContent(backend::Buffer & buf, core::Rect inner)

Draws this widget’s content.

Called by render() after background and borders are drawn. This is where you should draw your widget’s actual content. The inner rectangle accounts for borders and padding.

  • buf The buffer to draw to

  • inner The inner rectangle (excluding border/padding)

ReturnNameDescription
std::shared_ptr< Widget >content
boolhasExplicitContentSize
core::SizeexplicitContentSize
core::SizecurrentContentSize
core::RectcurrentInner
boolhasLayout
core::Posscroll

std::shared_ptr< Widget > content

bool hasExplicitContentSize = false

core::Size explicitContentSize {}

core::Size currentContentSize {}

core::Rect currentInner {}

bool hasLayout = false

core::Pos scroll {}
ReturnNameDescription
voidclampScroll
voidrelayoutContent
core::SizeresolveContentSize const

void clampScroll()

void relayoutContent()

const

core::Size resolveContentSize(core::Rect inner) const