OpenTTD Source 20260208-master-g43af8e94d0
NWidgetResizeBase Class Reference

Base class for a resizable nested widget. More...

#include <widget_type.h>

Inheritance diagram for NWidgetResizeBase:
NWidgetBase NWidgetCore NWidgetSpacer NWidgetBackground NWidgetLeaf NWidgetScrollbar NWidgetViewport NWidgetBadgeFilter

Public Member Functions

 NWidgetResizeBase (WidgetType tp, WidgetID index, uint fill_x, uint fill_y)
 Constructor for resizable nested widgets.
void AdjustPaddingForZoom () override
 Adjust the padding based on the user interface zoom.
void SetMinimalSize (uint min_x, uint min_y)
 Set minimal size of the widget.
void SetMinimalSizeAbsolute (uint min_x, uint min_y)
 Set absolute (post-scaling) minimal size of the widget.
void SetMinimalTextLines (uint8_t min_lines, uint8_t spacing, FontSize size)
 Set minimal text lines for the widget.
void SetFill (uint fill_x, uint fill_y)
 Set the filling of the widget from initial size.
void SetResize (uint resize_x, uint resize_y)
 Set resize step of the widget.
void SetAspect (float ratio, AspectFlags flags=AspectFlag::ResizeX)
 Set desired aspect ratio of this widget.
void SetAspect (int x_ratio, int y_ratio, AspectFlags flags=AspectFlag::ResizeX)
 Set desired aspect ratio of this widget, in terms of horizontal and vertical dimensions.
bool UpdateMultilineWidgetSize (const std::string &str, int max_lines)
 Try to set optimum widget size for a multiline text widget.
bool UpdateSize (uint min_x, uint min_y)
 Set absolute (post-scaling) minimal size of the widget.
bool UpdateVerticalSize (uint min_y)
 Set absolute (post-scaling) minimal size of the widget.
void AssignSizePosition (SizingType sizing, int x, int y, uint given_width, uint given_height, bool rtl) override
 Assign size and position to the widget.
Public Member Functions inherited from NWidgetBase
 NWidgetBase (WidgetType tp, WidgetID index=INVALID_WIDGET)
void ApplyAspectRatio ()
virtual void SetupSmallestSize (Window *w)=0
 Compute smallest size needed by the widget.
virtual void FillWidgetLookup (WidgetLookup &widget_lookup)
 Fill the Window::widget_lookup with pointers to nested widgets in the tree.
virtual NWidgetCoreGetWidgetFromPos (int x, int y)=0
 Retrieve a widget by its position.
virtual NWidgetBaseGetWidgetOfType (WidgetType tp)
 Retrieve a widget by its type.
template<class NWID>
NWID * GetParentWidget ()
 Get parent widget of type NWID.
template<class NWID>
const NWID * GetParentWidget () const
 Get parent widget of type NWID.
WidgetID GetIndex () const
virtual bool IsHighlighted () const
 Whether the widget is currently highlighted or not.
virtual TextColour GetHighlightColour () const
 Get the colour of the highlighted text.
virtual void SetHighlighted (TextColour highlight_colour)
 Highlight the widget or not.
void SetPadding (uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
 Set additional space (padding) around the widget.
void SetPadding (const RectPadding &padding)
 Set additional space (padding) around the widget.
uint GetHorizontalStepSize (SizingType sizing) const
 Get the horizontal sizing step.
uint GetVerticalStepSize (SizingType sizing) const
 Get the vertical sizing step.
virtual void Draw (const Window *w)=0
 Draw the widgets of the tree.
virtual void SetDirty (const Window *w) const
 Mark the widget as 'dirty' (in need of repaint).
Rect GetCurrentRect () const

Data Fields

uint min_x = 0
 Minimal horizontal size of only this widget.
uint min_y = 0
 Minimal vertical size of only this widget.
bool absolute = false
 Set if minimum size is fixed and should not be resized.
uint uz_min_x = 0
 Unscaled Minimal horizontal size of only this widget.
uint uz_min_y = 0
 Unscaled Minimal vertical size of only this widget.
uint8_t uz_text_lines = 0
 'Unscaled' text lines, stored for resize calculation.
uint8_t uz_text_spacing = 0
 'Unscaled' text padding, stored for resize calculation.
FontSize uz_text_size {}
 'Unscaled' font size, stored for resize calculation.
Data Fields inherited from NWidgetBase
WidgetType type {}
 Type of the widget / nested widget.
uint fill_x = 0
 Horizontal fill stepsize (from initial size, 0 means not resizable).
uint fill_y = 0
 Vertical fill stepsize (from initial size, 0 means not resizable).
uint resize_x = 0
 Horizontal resize step (0 means not resizable).
uint resize_y = 0
 Vertical resize step (0 means not resizable).
uint smallest_x = 0
 Smallest horizontal size of the widget in a filled window.
uint smallest_y = 0
 Smallest vertical size of the widget in a filled window.
uint current_x = 0
 Current horizontal size (after resizing).
uint current_y = 0
 Current vertical size (after resizing).
float aspect_ratio = 0
 Desired aspect ratio of widget.
AspectFlags aspect_flags = AspectFlag::ResizeX
 Which dimensions can be resized.
int pos_x = 0
 Horizontal position of top-left corner of the widget in the window.
int pos_y = 0
 Vertical position of top-left corner of the widget in the window.
RectPadding padding {}
 Padding added to the widget. Managed by parent container widget. (parent container may swap left and right for RTL).
RectPadding uz_padding {}
 Unscaled padding, for resize calculation.
NWidgetBaseparent = nullptr
 Parent widget of this widget, automatically filled in when added to container.

Additional Inherited Members

Protected Member Functions inherited from NWidgetBase
void StoreSizePosition (SizingType sizing, int x, int y, uint given_width, uint given_height)
 Store size and position.
Protected Attributes inherited from NWidgetBase
const WidgetID index = INVALID_WIDGET
 Index of the nested widget (INVALID_WIDGET means 'not used').

Detailed Description

Base class for a resizable nested widget.

Definition at line 318 of file widget_type.h.

Constructor & Destructor Documentation

◆ NWidgetResizeBase()

NWidgetResizeBase::NWidgetResizeBase ( WidgetType tp,
WidgetID index,
uint fill_x,
uint fill_y )

Constructor for resizable nested widgets.

Parameters
tpNested widget type.
indexIndex of the widget within the window.
fill_xHorizontal fill step size, 0 means no filling is allowed.
fill_yVertical fill step size, 0 means no filling is allowed.

Definition at line 982 of file widget.cpp.

References NWidgetBase::fill_x, NWidgetBase::fill_y, and NWidgetBase::index.

Referenced by NWidgetCore::NWidgetCore(), and NWidgetSpacer::NWidgetSpacer().

Member Function Documentation

◆ AdjustPaddingForZoom()

void NWidgetResizeBase::AdjustPaddingForZoom ( )
overridevirtual

Adjust the padding based on the user interface zoom.

Reimplemented from NWidgetBase.

Definition at line 1010 of file widget.cpp.

References absolute, NWidgetBase::AdjustPaddingForZoom(), GetCharacterHeight(), min_x, min_y, ScaleGUITrad(), uz_min_x, uz_min_y, uz_text_lines, uz_text_size, and uz_text_spacing.

◆ AssignSizePosition()

void NWidgetResizeBase::AssignSizePosition ( SizingType sizing,
int x,
int y,
uint given_width,
uint given_height,
bool rtl )
overridevirtual

Assign size and position to the widget.

Parameters
sizingType of resizing to perform.
xHorizontal offset of the widget relative to the left edge of the window.
yVertical offset of the widget relative to the top edge of the window.
given_widthWidth allocated to the widget.
given_heightHeight allocated to the widget.
rtlAdapt for right-to-left languages (position contents of horizontal containers backwards).

Afterwards, pos_x and pos_y contain the top-left position of the widget, smallest_x and smallest_y contain the smallest size such that all widgets of the window are consistent, and current_x and current_y contain the current size.

Implements NWidgetBase.

Definition at line 1128 of file widget.cpp.

References NWidgetBase::StoreSizePosition().

Referenced by NWidgetMatrix::Draw(), and NWidgetMatrix::GetWidgetFromPos().

◆ SetAspect() [1/2]

void NWidgetResizeBase::SetAspect ( float ratio,
AspectFlags flags = AspectFlag::ResizeX )

Set desired aspect ratio of this widget.

Parameters
ratioDesired aspect ratio, or 0 for none.
flagsDimensions which should be resized.

Definition at line 993 of file widget.cpp.

References NWidgetBase::aspect_flags, and NWidgetBase::aspect_ratio.

Referenced by NWidgetLeaf::NWidgetLeaf(), and SetAspect().

◆ SetAspect() [2/2]

void NWidgetResizeBase::SetAspect ( int x_ratio,
int y_ratio,
AspectFlags flags = AspectFlag::ResizeX )

Set desired aspect ratio of this widget, in terms of horizontal and vertical dimensions.

Parameters
x_ratioDesired horizontal component of aspect ratio.
y_ratioDesired vertical component of aspect ratio.
flagsDimensions which should be resized.

Definition at line 1005 of file widget.cpp.

References SetAspect().

◆ SetFill()

void NWidgetResizeBase::SetFill ( uint fill_x,
uint fill_y )

Set the filling of the widget from initial size.

Parameters
fill_xHorizontal fill step size, 0 means no filling is allowed.
fill_yVertical fill step size, 0 means no filling is allowed.

Definition at line 1063 of file widget.cpp.

References NWidgetBase::fill_x, and NWidgetBase::fill_y.

Referenced by ApplyNWidgetPartAttribute(), and NWidgetLeaf::NWidgetLeaf().

◆ SetMinimalSize()

void NWidgetResizeBase::SetMinimalSize ( uint min_x,
uint min_y )

Set minimal size of the widget.

Parameters
min_xHorizontal minimal size of the widget.
min_yVertical minimal size of the widget.

Definition at line 1024 of file widget.cpp.

References GetCharacterHeight(), min_x, min_y, ScaleGUITrad(), uz_min_x, uz_min_y, uz_text_lines, uz_text_size, and uz_text_spacing.

Referenced by ApplyNWidgetPartAttribute(), NWidgetLeaf::NWidgetLeaf(), and NWidgetSpacer::NWidgetSpacer().

◆ SetMinimalSizeAbsolute()

void NWidgetResizeBase::SetMinimalSizeAbsolute ( uint min_x,
uint min_y )

Set absolute (post-scaling) minimal size of the widget.

Parameters
min_xHorizontal minimal size of the widget.
min_yVertical minimal size of the widget.

Definition at line 1037 of file widget.cpp.

References absolute, min_x, and min_y.

Referenced by NWidgetScrollbar::SetupSmallestSize().

◆ SetMinimalTextLines()

void NWidgetResizeBase::SetMinimalTextLines ( uint8_t min_lines,
uint8_t spacing,
FontSize size )

Set minimal text lines for the widget.

Parameters
min_linesNumber of text lines of the widget.
spacingExtra unscaled spacing (eg WidgetDimensions::unscaled.framerect.Vertical()) of the widget.
sizeFont size of text.

Definition at line 1050 of file widget.cpp.

References GetCharacterHeight(), min_y, ScaleGUITrad(), uz_min_y, uz_text_lines, uz_text_size, and uz_text_spacing.

Referenced by ApplyNWidgetPartAttribute(), and NWidgetLeaf::NWidgetLeaf().

◆ SetResize()

void NWidgetResizeBase::SetResize ( uint resize_x,
uint resize_y )

Set resize step of the widget.

Parameters
resize_xResize step in horizontal direction, value 0 means no resize, otherwise the step size in pixels.
resize_yResize step in vertical direction, value 0 means no resize, otherwise the step size in pixels.

Definition at line 1074 of file widget.cpp.

References NWidgetBase::resize_x, and NWidgetBase::resize_y.

Referenced by ApplyNWidgetPartAttribute(), NWidgetLeaf::NWidgetLeaf(), and NWidgetSpacer::NWidgetSpacer().

◆ UpdateMultilineWidgetSize()

bool NWidgetResizeBase::UpdateMultilineWidgetSize ( const std::string & str,
int max_lines )

Try to set optimum widget size for a multiline text widget.

The window will need to be reinited if the size is changed.

Parameters
strMultiline string contents that will fill the widget.
max_linesMaximum number of lines.
Returns
true iff the widget minimum size has changed.

Definition at line 1087 of file widget.cpp.

References NWidgetBase::current_x, FS_NORMAL, GetCharacterHeight(), GetStringBoundingBox(), GetStringHeight(), UpdateSize(), and UpdateVerticalSize().

◆ UpdateSize()

bool NWidgetResizeBase::UpdateSize ( uint min_x,
uint min_y )

Set absolute (post-scaling) minimal size of the widget.

The window will need to be reinited if the size is changed.

Parameters
min_xHorizontal minimal size of the widget.
min_yVertical minimal size of the widget.
Returns
true iff the widget minimum size has changed.

Definition at line 1107 of file widget.cpp.

References min_x, and min_y.

Referenced by UpdateMultilineWidgetSize().

◆ UpdateVerticalSize()

bool NWidgetResizeBase::UpdateVerticalSize ( uint min_y)

Set absolute (post-scaling) minimal size of the widget.

The window will need to be reinited if the size is changed.

Parameters
min_yVertical minimal size of the widget.
Returns
true iff the widget minimum size has changed.

Definition at line 1121 of file widget.cpp.

References min_y.

Referenced by CompanyWindow::OnResize(), GameOptionsWindow::OnResize(), NewsWindow::OnResize(), and UpdateMultilineWidgetSize().

Field Documentation

◆ absolute

bool NWidgetResizeBase::absolute = false

Set if minimum size is fixed and should not be resized.

Definition at line 340 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), and SetMinimalSizeAbsolute().

◆ min_x

◆ min_y

◆ uz_min_x

uint NWidgetResizeBase::uz_min_x = 0

Unscaled Minimal horizontal size of only this widget.

Definition at line 341 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), and SetMinimalSize().

◆ uz_min_y

uint NWidgetResizeBase::uz_min_y = 0

Unscaled Minimal vertical size of only this widget.

Definition at line 342 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), SetMinimalSize(), and SetMinimalTextLines().

◆ uz_text_lines

uint8_t NWidgetResizeBase::uz_text_lines = 0

'Unscaled' text lines, stored for resize calculation.

Definition at line 344 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), SetMinimalSize(), and SetMinimalTextLines().

◆ uz_text_size

FontSize NWidgetResizeBase::uz_text_size {}

'Unscaled' font size, stored for resize calculation.

Definition at line 346 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), SetMinimalSize(), and SetMinimalTextLines().

◆ uz_text_spacing

uint8_t NWidgetResizeBase::uz_text_spacing = 0

'Unscaled' text padding, stored for resize calculation.

Definition at line 345 of file widget_type.h.

Referenced by AdjustPaddingForZoom(), SetMinimalSize(), and SetMinimalTextLines().


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