ASW Lib
A.D.S. Games SDL Wrapper Library. A library targeted at Allegro4 users who want to switch to SDL3 and use modern c++.
Loading...
Searching...
No Matches
asw::ui::InputBox Class Reference

A text input widget. More...

#include <input_box.h>

Inheritance diagram for asw::ui::InputBox:
[legend]
Collaboration diagram for asw::ui::InputBox:
[legend]

Public Member Functions

 InputBox ()
 Default constructor.
 
 ~InputBox () override
 Stops text input if the box is destroyed while focused.
 
 InputBox (const InputBox &)=delete
 
InputBox & operator= (const InputBox &)=delete
 
void on_focus_changed (Context &ctx, bool focused) override
 Called when focus state changes.
 
bool on_event (Context &ctx, const UIEvent &e) override
 Handle a UI event.
 
void draw (Context &ctx) override
 Draw the input box.
 
const InputStyle & get_style (const Context &ctx) const
 Get the style this input box draws with.
 
- Public Member Functions inherited from asw::ui::Widget
 Widget ()
 Default constructor for Widget.
 
virtual ~Widget ()=default
 Default virtual destructor.
 
 Widget (Widget &&other) noexcept
 Move constructor. The children move over and point to the new widget as their parent. The new widget gets its own id and no parent, since it is not in the old parent's children. Removed children stay with the old widget, which is where Root finds and frees them.
 
Widget & operator= (Widget &&other) noexcept
 Move assignment operator. The children move over and point to this widget as their parent. This widget keeps its place in the tree: its parent, id and state. Its old children are removed as by clear_children. Removed children of the other widget stay with it.
 
 Widget (const Widget &)=delete
 
Widget & operator= (const Widget &)=delete
 
WidgetId id () const
 Get the unique identifier for this widget.
 
const std::vector< std::unique_ptr< Widget > > & children () const
 Get the child widgets. Change them with add_child, remove_child and clear_children, which keep removed widgets alive until Root is done with them.
 
virtual void measure (Context &ctx)
 Set this widget's own size, before its parent places it. Does nothing by default.
 
virtual void layout (Context &ctx)
 Lay out this widget and its children.
 
virtual void activate (Context &ctx)
 Called when the widget is clicked, or activated with the keyboard or a controller while focused. Does nothing by default.
 
template<class T , class... Args>
T & add_child (Args &&... args)
 Add a child widget.
 
bool remove_child (const Widget &child)
 Remove a child widget. It leaves the tree now and is destroyed at the next Root::update, so a callback can remove any widget, even the one it runs in.
 
void clear_children ()
 Remove every child widget, destroyed as for remove_child.
 
bool is_hovered () const
 Whether the pointer is currently over this widget.
 
bool is_pressed () const
 Whether this widget is currently being pressed.
 
bool is_focused () const
 Whether this widget currently holds focus.
 
bool is_captured () const
 Whether this widget was pressed and the pointer is still held, even if it has moved off the widget.
 
bool is_highlighted (const Context &ctx) const
 Whether to draw the hover look: hovered, pressed, or focused while focus is shown.
 

Public Attributes

std::function< void(const std::string &)> on_change
 Callback invoked when the value changes.
 
asw::Font font
 The font for the text. Uses the theme font when empty.
 
std::string value
 The current text value.
 
std::string placeholder
 Placeholder text shown when value is empty.
 
std::optional< InputStyle > style
 Style for this input box only. Uses the theme input style when empty.
 
- Public Attributes inherited from asw::ui::Widget
bool visible = true
 Whether the widget is visible.
 
bool enabled = true
 Whether the widget is enabled.
 
bool focusable = false
 Whether the widget can receive focus. Focusable widgets are also the ones the pointer can press.
 
Widget * nav_up = nullptr
 Widget to focus on up, instead of the nearest one. Optional.
 
Widget * nav_down = nullptr
 Widget to focus on down, instead of the nearest one. Optional.
 
Widget * nav_left = nullptr
 Widget to focus on left, instead of the nearest one. Optional.
 
Widget * nav_right = nullptr
 Widget to focus on right, instead of the nearest one. Optional.
 
bool focus_ring = true
 Draw the theme focus ring around this widget while it has visible focus. Turn off for widgets that show focus themselves.
 
Widget * parent = nullptr
 Pointer to the parent widget.
 
asw::Quad< float > transform
 The transform (position and size) of the widget.
 
Anchor anchor = Anchor::None
 Pin this widget to a point of its parent, e.g. BottomRight for a corner button. The parent places it on every layout, so it stays in place when the screen or its own size changes. Stack and Grid place their children themselves and ignore it.
 
asw::Vec2< float > anchor_margin { 0.0F, 0.0F }
 Space between an anchored widget and the parent's edges.
 

Private Attributes

std::size_t _cursor_pos = 0
 
float _scroll = 0.0F
 How far the text is scrolled left, so the caret stays in view.
 

Additional Inherited Members

- Protected Member Functions inherited from asw::ui::Widget
void place_anchored (Widget &child) const
 Place a child that has an anchor inside this widget.
 
- Protected Attributes inherited from asw::ui::Widget
bool _hovered = false
 
bool _pressed = false
 
bool _focused = false
 
bool _captured = false
 

Detailed Description

A text input widget.

Definition at line 24 of file input_box.h.

Constructor & Destructor Documentation

◆ InputBox() [1/2]

asw::ui::InputBox::InputBox ( )
inline

Default constructor.

Definition at line 28 of file input_box.h.

◆ ~InputBox()

asw::ui::InputBox::~InputBox ( )
override

Stops text input if the box is destroyed while focused.

Definition at line 44 of file input_box.cpp.

◆ InputBox() [2/2]

asw::ui::InputBox::InputBox ( const InputBox & )
delete

Member Function Documentation

◆ draw()

void asw::ui::InputBox::draw ( Context & ctx)
overridevirtual

Draw the input box.

Parameters
ctxThe UI context.

Reimplemented from asw::ui::Widget.

Definition at line 144 of file input_box.cpp.

◆ get_style()

const InputStyle & asw::ui::InputBox::get_style ( const Context & ctx) const
inline

Get the style this input box draws with.

Parameters
ctxThe UI context.
Returns
The input box's own style, or the theme input style.

Definition at line 81 of file input_box.h.

◆ on_event()

bool asw::ui::InputBox::on_event ( Context & ctx,
const UIEvent & e )
overridevirtual

Handle a UI event.

Parameters
ctxThe UI context.
eThe event to handle.
Returns
True if the event was handled.

Reimplemented from asw::ui::Widget.

Definition at line 63 of file input_box.cpp.

◆ on_focus_changed()

void asw::ui::InputBox::on_focus_changed ( Context & ctx,
bool focused )
overridevirtual

Called when focus state changes.

Parameters
ctxThe UI context.
focusedWhether the widget is now focused.

Reimplemented from asw::ui::Widget.

Definition at line 51 of file input_box.cpp.

◆ operator=()

InputBox & asw::ui::InputBox::operator= ( const InputBox & )
delete

Member Data Documentation

◆ _cursor_pos

std::size_t asw::ui::InputBox::_cursor_pos = 0
private

Definition at line 87 of file input_box.h.

◆ _scroll

float asw::ui::InputBox::_scroll = 0.0F
private

How far the text is scrolled left, so the caret stays in view.

Definition at line 90 of file input_box.h.

◆ font

asw::Font asw::ui::InputBox::font

The font for the text. Uses the theme font when empty.

Definition at line 65 of file input_box.h.

◆ on_change

std::function<void(const std::string&)> asw::ui::InputBox::on_change

Callback invoked when the value changes.

Definition at line 41 of file input_box.h.

◆ placeholder

std::string asw::ui::InputBox::placeholder

Placeholder text shown when value is empty.

Definition at line 71 of file input_box.h.

◆ style

std::optional<InputStyle> asw::ui::InputBox::style

Style for this input box only. Uses the theme input style when empty.

Definition at line 74 of file input_box.h.

◆ value

std::string asw::ui::InputBox::value

The current text value.

Definition at line 68 of file input_box.h.


The documentation for this class was generated from the following files: