OpenTTD Source 20241224-master-gf74b0cf984
widget.cpp File Reference

Handling of the default/simple widgets. More...

#include "stdafx.h"
#include "core/backup_type.hpp"
#include "company_func.h"
#include "window_gui.h"
#include "viewport_func.h"
#include "zoom_func.h"
#include "strings_func.h"
#include "transparency.h"
#include "core/geometry_func.hpp"
#include "settings_type.h"
#include "querystring_gui.h"
#include "table/sprites.h"
#include "table/strings.h"
#include "table/string_colours.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

class  NWidgetLayer
 

Functions

static RectPadding ScaleGUITrad (const RectPadding &r)
 Scale a RectPadding to GUI zoom level.
 
static Dimension ScaleGUITrad (const Dimension &dim)
 Scale a Dimension to GUI zoom level.
 
Dimension GetScaledSpriteSize (SpriteID sprid)
 Scale sprite size for GUI.
 
void SetupWidgetDimensions ()
 Set up pre-scaled versions of Widget Dimensions.
 
static Point GetAlignedPosition (const Rect &r, const Dimension &d, StringAlignment align)
 Calculate x and y coordinates for an aligned object within a window.
 
static Point HandleScrollbarHittest (const Scrollbar *sb, int top, int bottom, bool horizontal)
 Compute the vertical position of the draggable part of scrollbar.
 
static void ScrollbarClickPositioning (Window *w, NWidgetScrollbar *sb, int x, int y, int mi, int ma)
 Compute new position of the scrollbar after a click and updates the window flags.
 
void ScrollbarClickHandler (Window *w, NWidgetCore *nw, int x, int y)
 Special handling for the scrollbar widget type.
 
WidgetID GetWidgetFromPos (const Window *w, int x, int y)
 Returns the index for the widget located at the given position relative to the window.
 
void DrawFrameRect (int left, int top, int right, int bottom, Colours colour, FrameFlags flags)
 Draw frame rectangle.
 
void DrawSpriteIgnorePadding (SpriteID img, PaletteID pal, const Rect &r, StringAlignment align)
 
static void DrawImageButtons (const Rect &r, WidgetType type, Colours colour, bool clicked, SpriteID img, StringAlignment align)
 Draw an image button.
 
static void DrawLabel (const Rect &r, WidgetType type, bool clicked, TextColour colour, StringID str, StringAlignment align, FontSize fs)
 Draw the label-part of a widget.
 
static void DrawText (const Rect &r, TextColour colour, StringID str, StringAlignment align, FontSize fs)
 Draw text.
 
static void DrawInset (const Rect &r, Colours colour, TextColour text_colour, StringID str, StringAlignment align, FontSize fs)
 Draw an inset widget.
 
static void DrawMatrix (const Rect &r, Colours colour, bool clicked, uint16_t data, uint resize_x, uint resize_y)
 Draw a matrix widget.
 
static void DrawVerticalScrollbar (const Rect &r, Colours colour, bool up_clicked, bool bar_dragged, bool down_clicked, const Scrollbar *scrollbar)
 Draw a vertical scrollbar.
 
static void DrawHorizontalScrollbar (const Rect &r, Colours colour, bool left_clicked, bool bar_dragged, bool right_clicked, const Scrollbar *scrollbar)
 Draw a horizontal scrollbar.
 
static void DrawFrame (const Rect &r, Colours colour, TextColour text_colour, StringID str, StringAlignment align, FontSize fs)
 Draw a frame widget.
 
static void DrawShadeBox (const Rect &r, Colours colour, bool clicked)
 Draw a shade box.
 
static void DrawStickyBox (const Rect &r, Colours colour, bool clicked)
 Draw a sticky box.
 
static void DrawDefSizeBox (const Rect &r, Colours colour, bool clicked)
 Draw a defsize box.
 
static void DrawDebugBox (const Rect &r, Colours colour, bool clicked)
 Draw a NewGRF debug box.
 
static void DrawResizeBox (const Rect &r, Colours colour, bool at_left, bool clicked, bool bevel)
 Draw a resize box.
 
static void DrawCloseBox (const Rect &r, Colours colour)
 Draw a close box.
 
void DrawCaption (const Rect &r, Colours colour, Owner owner, TextColour text_colour, StringID str, StringAlignment align, FontSize fs)
 Draw a caption bar.
 
static void DrawButtonDropdown (const Rect &r, Colours colour, bool clicked_button, bool clicked_dropdown, StringID str, StringAlignment align)
 Draw a button with a dropdown (WWT_DROPDOWN and NWID_BUTTON_DROPDOWN).
 
static void DrawOutline (const Window *, const NWidgetBase *wid)
 
Rect ScrollRect (Rect r, const Scrollbar &sb, int resize_step)
 Apply 'scroll' to a rect to be drawn in.
 
static bool IsAttributeWidgetPartType (WidgetType tp)
 Test if (an NWidgetPart) WidgetType is an attribute widget part type.
 
static void ApplyNWidgetPartAttribute (const NWidgetPart &nwid, NWidgetBase *dest)
 Apply an attribute NWidgetPart to an NWidget.
 
static std::unique_ptr< NWidgetBaseMakeNWidget (const NWidgetPart &nwid)
 Make NWidget from an NWidgetPart.
 
static std::span< constNWidgetPart >::iterator MakeNWidget (std::span< const NWidgetPart >::iterator nwid_begin, std::span< const NWidgetPart >::iterator nwid_end, std::unique_ptr< NWidgetBase > &dest, bool &fill_dest)
 Construct a single nested widget in *dest from its parts.
 
bool IsContainerWidgetType (WidgetType tp)
 Test if WidgetType is a container widget.
 
static std::span< constNWidgetPart >::iterator MakeWidgetTree (std::span< const NWidgetPart >::iterator nwid_begin, std::span< const NWidgetPart >::iterator nwid_end, std::unique_ptr< NWidgetBase > &parent)
 Build a nested widget tree by recursively filling containers with nested widgets read from their parts.
 
std::unique_ptr< NWidgetBaseMakeNWidgets (std::span< const NWidgetPart > nwid_parts, std::unique_ptr< NWidgetBase > &&container)
 Construct a nested widget tree from an array of parts.
 
std::unique_ptr< NWidgetBaseMakeWindowNWidgetTree (std::span< const NWidgetPart > nwid_parts, NWidgetStacked **shade_select)
 Make a nested widget tree for a window from a parts array.
 
std::unique_ptr< NWidgetBaseMakeCompanyButtonRows (WidgetID widget_first, WidgetID widget_last, Colours button_colour, int max_length, StringID button_tooltip, bool resizable)
 Make a number of rows with button-like graphics, for enabling/disabling each company.
 

Variables

bool _draw_widget_outlines
 

Detailed Description

Handling of the default/simple widgets.

Definition in file widget.cpp.

Function Documentation

◆ ApplyNWidgetPartAttribute()

static void ApplyNWidgetPartAttribute ( const NWidgetPart nwid,
NWidgetBase dest 
)
static

Apply an attribute NWidgetPart to an NWidget.

Parameters
nwidAttribute NWidgetPart
destNWidget to apply attribute to.
Precondition
NWidgetPart must be an attribute NWidgetPart.

Definition at line 3061 of file widget.cpp.

References NWidgetPartAlignment::align, NWidgetPart::NWidgetPartUnion::align, NWidgetPart::NWidgetPartUnion::aspect, NWidgetBase::aspect_flags, NWidgetBase::aspect_ratio, NWidgetPartTextStyle::colour, NWidgetPartDataTip::data, NWidgetPart::NWidgetPartUnion::data_tip, FS_BEGIN, NWidgetPartWidget::index, NWidgetPartTextLines::lines, NWidgetPart::NWidgetPartUnion::padding, NWidgetPart::NWidgetPartUnion::pip, NWidgetPartPIP::post, NWidgetCore::scrollbar_index, NWidgetCore::SetAlignment(), NWidgetResizeBase::SetFill(), NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetMinimalTextLines(), NWidgetBase::SetPadding(), NWidgetPIPContainer::SetPIP(), NWidgetBackground::SetPIP(), NWidgetBackground::SetPIPRatio(), NWidgetPIPContainer::SetPIPRatio(), NWidgetResizeBase::SetResize(), NWidgetCore::SetTextStyle(), NWidgetPartTextLines::size, NWidgetPartTextStyle::size, NWidgetPartTextLines::spacing, NWidgetPart::NWidgetPartUnion::text_lines, NWidgetPart::NWidgetPartUnion::text_style, NWidgetCore::tool_tip, NWidgetPartDataTip::tooltip, NWidgetPart::type, NWidgetPart::NWidgetPartUnion::widget, NWidgetCore::widget_data, WPT_ALIGNMENT, WPT_ASPECT, WPT_DATATIP, WPT_FILL, WPT_MINSIZE, WPT_MINTEXTLINES, WPT_PADDING, WPT_PIPRATIO, WPT_PIPSPACE, WPT_RESIZE, WPT_SCROLLBAR, WPT_TEXTSTYLE, and NWidgetPart::NWidgetPartUnion::xy.

Referenced by MakeNWidget().

◆ DrawButtonDropdown()

static void DrawButtonDropdown ( const Rect r,
Colours  colour,
bool  clicked_button,
bool  clicked_dropdown,
StringID  str,
StringAlignment  align 
)
inlinestatic

Draw a button with a dropdown (WWT_DROPDOWN and NWID_BUTTON_DROPDOWN).

Parameters
rRectangle containing the widget.
colourBackground colour of the widget.
clicked_buttonThe button-part is clicked.
clicked_dropdownThe drop-down part is clicked.
strText of the button.
alignAlignment of the text within the dropdown.
Note
Magic constants are also used in NWidgetLeaf::ButtonHit.

Definition at line 710 of file widget.cpp.

References _current_text_dir, CenterBounds(), DrawFrameRect(), DrawImageButtons(), DrawString(), NWidgetLeaf::dropdown_dimension, WidgetDimensions::dropdowntext, FR_LOWERED, FS_NORMAL, GetCharacterHeight(), SA_CENTER, WidgetDimensions::scaled, TD_LTR, Rect::WithWidth(), and WWT_DROPDOWN.

Referenced by NWidgetLeaf::Draw().

◆ DrawCaption()

void DrawCaption ( const Rect r,
Colours  colour,
Owner  owner,
TextColour  text_colour,
StringID  str,
StringAlignment  align,
FontSize  fs 
)

Draw a caption bar.

Parameters
rRectangle of the bar.
colourColour of the window.
owner'Owner' of the window.
text_colourColour of the text.
strText to draw in the bar.
alignAlignment of the text.
fsFont size of the text.

Definition at line 680 of file widget.cpp.

References _company_colours, WidgetDimensions::bevel, WidgetDimensions::captiontext, DrawFrameRect(), DrawString(), FR_BORDERONLY, FR_DARKENED, FR_LOWERED, GetAlignedPosition(), GetColourGradient(), GetStringBoundingBox(), GfxFillRect(), MAX_COMPANIES, WidgetDimensions::scaled, and Rect::Shrink().

Referenced by NWidgetLeaf::Draw(), and NewsWindow::DrawWidget().

◆ DrawCloseBox()

static void DrawCloseBox ( const Rect r,
Colours  colour 
)
inlinestatic

Draw a close box.

Parameters
rRectangle of the box.`
colourColour of the close box.

Definition at line 659 of file widget.cpp.

References CenterBounds(), DrawFrameRect(), DrawSprite(), GetSpriteSize(), PALETTE_TEXT_RECOLOUR, and ScaleSpriteTrad().

Referenced by NWidgetLeaf::Draw().

◆ DrawDebugBox()

static void DrawDebugBox ( const Rect r,
Colours  colour,
bool  clicked 
)
inlinestatic

Draw a NewGRF debug box.

Parameters
rRectangle of the box.
colourColour of the debug box.
clickedBox is lowered.

Definition at line 631 of file widget.cpp.

References DrawImageButtons(), SA_CENTER, and WWT_DEBUGBOX.

Referenced by NWidgetLeaf::Draw().

◆ DrawDefSizeBox()

static void DrawDefSizeBox ( const Rect r,
Colours  colour,
bool  clicked 
)
inlinestatic

Draw a defsize box.

Parameters
rRectangle of the box.
colourColour of the defsize box.
clickedBox is lowered.

Definition at line 620 of file widget.cpp.

References DrawImageButtons(), SA_CENTER, and WWT_DEFSIZEBOX.

Referenced by NWidgetLeaf::Draw().

◆ DrawFrame()

static void DrawFrame ( const Rect r,
Colours  colour,
TextColour  text_colour,
StringID  str,
StringAlignment  align,
FontSize  fs 
)
inlinestatic

Draw a frame widget.

Parameters
rRectangle of the frame.
colourColour of the frame.
text_colourColour of the text.
strText of the frame.
alignAlignment of the text in the frame.
fsFont size of the text.

Definition at line 545 of file widget.cpp.

References _current_text_dir, WidgetDimensions::bevel, DrawString(), Rect::Expand(), WidgetDimensions::frametext, FS_NORMAL, GetCharacterHeight(), GetColourGradient(), GfxFillRect(), WidgetDimensions::scaled, ScaleGUITrad(), Rect::Shrink(), and TD_LTR.

Referenced by NWidgetBackground::Draw().

◆ DrawFrameRect()

◆ DrawHorizontalScrollbar()

static void DrawHorizontalScrollbar ( const Rect r,
Colours  colour,
bool  left_clicked,
bool  bar_dragged,
bool  right_clicked,
const Scrollbar scrollbar 
)
inlinestatic

Draw a horizontal scrollbar.

Parameters
rRectangle of the scrollbar widget.
colourColour of the scrollbar widget.
left_clickedLeft-arrow is clicked.
bar_draggedBar is dragged.
right_clickedRight-arrow is clicked.
scrollbarScrollbar size, offset, and capacity information.

Definition at line 505 of file widget.cpp.

References WidgetDimensions::bevel, DrawFrameRect(), DrawImageButtons(), FILLRECT_CHECKER, FR_LOWERED, GetColourGradient(), GfxFillRect(), HandleScrollbarHittest(), Rect::Height(), NWID_HSCROLLBAR, SA_CENTER, WidgetDimensions::scaled, and Rect::WithWidth().

Referenced by NWidgetScrollbar::Draw().

◆ DrawImageButtons()

static void DrawImageButtons ( const Rect r,
WidgetType  type,
Colours  colour,
bool  clicked,
SpriteID  img,
StringAlignment  align 
)
inlinestatic

Draw an image button.

Parameters
rRectangle of the button.
typeWidget type (WWT_IMGBTN or WWT_IMGBTN_2).
colourColour of the button.
clickedButton is clicked.
imgSprite to draw.
alignAlignment of the sprite.

Definition at line 338 of file widget.cpp.

References DrawFrameRect(), FR_LOWERED, and WWT_IMGBTN_2.

Referenced by NWidgetLeaf::Draw(), DrawButtonDropdown(), DrawDebugBox(), DrawDefSizeBox(), DrawHorizontalScrollbar(), DrawShadeBox(), DrawStickyBox(), and DrawVerticalScrollbar().

◆ DrawInset()

static void DrawInset ( const Rect r,
Colours  colour,
TextColour  text_colour,
StringID  str,
StringAlignment  align,
FontSize  fs 
)
inlinestatic

Draw an inset widget.

Parameters
rRectangle of the background.
colourColour of the inset.
text_colourColour of the text.
strText to draw.
alignAlignment of the text.
fsFont size of the text.

Definition at line 390 of file widget.cpp.

References DrawFrameRect(), DrawString(), FR_DARKENED, FR_LOWERED, WidgetDimensions::inset, WidgetDimensions::scaled, and Rect::Shrink().

Referenced by NWidgetBackground::Draw().

◆ DrawLabel()

static void DrawLabel ( const Rect r,
WidgetType  type,
bool  clicked,
TextColour  colour,
StringID  str,
StringAlignment  align,
FontSize  fs 
)
inlinestatic

Draw the label-part of a widget.

Parameters
rRectangle of the label background.
typeWidget type (WWT_TEXTBTN, WWT_TEXTBTN_2, or WWT_LABEL).
clickedLabel is clicked.
colourColour of the text.
strText to draw.
alignAlignment of the text.
fsFont size of the text.

Definition at line 357 of file widget.cpp.

References DrawString(), GetAlignedPosition(), GetStringBoundingBox(), and WWT_TEXTBTN_2.

Referenced by NWidgetLeaf::Draw().

◆ DrawMatrix()

static void DrawMatrix ( const Rect r,
Colours  colour,
bool  clicked,
uint16_t  data,
uint  resize_x,
uint  resize_y 
)
inlinestatic

Draw a matrix widget.

Parameters
rRectangle of the matrix background.
colourColour of the background.
clickedMatrix is rendered lowered.
dataData of the widget, number of rows and columns of the widget.
resize_xMatrix resize unit size.
resize_yMatrix resize unit size.

Definition at line 405 of file widget.cpp.

References WidgetDimensions::bevel, DrawFrameRect(), FR_LOWERED, GB(), GetColourGradient(), GfxFillRect(), Rect::Height(), MAT_COL_BITS, MAT_COL_START, MAT_ROW_BITS, MAT_ROW_START, WidgetDimensions::scaled, and Rect::Width().

Referenced by NWidgetLeaf::Draw().

◆ DrawOutline()

static void DrawOutline ( const Window ,
const NWidgetBase wid 
)
static

Definition at line 788 of file widget.cpp.

◆ DrawResizeBox()

static void DrawResizeBox ( const Rect r,
Colours  colour,
bool  at_left,
bool  clicked,
bool  bevel 
)
inlinestatic

Draw a resize box.

Parameters
rRectangle of the box.
colourColour of the resize box.
at_leftResize box is at left-side of the window,
clickedBox is lowered.
bevelDraw bevel iff set.

Definition at line 644 of file widget.cpp.

References WidgetDimensions::bevel, DrawFrameRect(), FR_LOWERED, GetColourGradient(), GfxFillRect(), SA_BOTTOM, SA_FORCE, SA_LEFT, SA_RIGHT, WidgetDimensions::scaled, ScaleGUITrad(), and Rect::Shrink().

Referenced by NWidgetLeaf::Draw().

◆ DrawShadeBox()

static void DrawShadeBox ( const Rect r,
Colours  colour,
bool  clicked 
)
inlinestatic

Draw a shade box.

Parameters
rRectangle of the box.
colourColour of the shade box.
clickedBox is lowered.

Definition at line 598 of file widget.cpp.

References DrawImageButtons(), SA_CENTER, and WWT_SHADEBOX.

Referenced by NWidgetLeaf::Draw().

◆ DrawSpriteIgnorePadding()

void DrawSpriteIgnorePadding ( SpriteID  img,
PaletteID  pal,
const Rect r,
StringAlignment  align 
)

Definition at line 318 of file widget.cpp.

◆ DrawStickyBox()

static void DrawStickyBox ( const Rect r,
Colours  colour,
bool  clicked 
)
inlinestatic

Draw a sticky box.

Parameters
rRectangle of the box.
colourColour of the sticky box.
clickedBox is lowered.

Definition at line 609 of file widget.cpp.

References DrawImageButtons(), SA_CENTER, and WWT_STICKYBOX.

Referenced by NWidgetLeaf::Draw().

◆ DrawText()

static void DrawText ( const Rect r,
TextColour  colour,
StringID  str,
StringAlignment  align,
FontSize  fs 
)
inlinestatic

Draw text.

Parameters
rRectangle of the background.
colourColour of the text.
strText to draw.
alignAlignment of the text.
fsFont size of the text.

Definition at line 374 of file widget.cpp.

References DrawString(), GetAlignedPosition(), and GetStringBoundingBox().

Referenced by NWidgetLeaf::Draw().

◆ DrawVerticalScrollbar()

static void DrawVerticalScrollbar ( const Rect r,
Colours  colour,
bool  up_clicked,
bool  bar_dragged,
bool  down_clicked,
const Scrollbar scrollbar 
)
inlinestatic

Draw a vertical scrollbar.

Parameters
rRectangle of the scrollbar widget.
colourColour of the scrollbar widget.
up_clickedUp-arrow is clicked.
bar_draggedBar is dragged.
down_clickedDown-arrow is clicked.
scrollbarScrollbar size, offset, and capacity information.

Definition at line 465 of file widget.cpp.

References WidgetDimensions::bevel, DrawFrameRect(), DrawImageButtons(), FILLRECT_CHECKER, FR_LOWERED, GetColourGradient(), GfxFillRect(), HandleScrollbarHittest(), NWID_VSCROLLBAR, SA_CENTER, WidgetDimensions::scaled, Rect::Width(), and Rect::WithHeight().

Referenced by NWidgetScrollbar::Draw().

◆ GetAlignedPosition()

static Point GetAlignedPosition ( const Rect r,
const Dimension d,
StringAlignment  align 
)
inlinestatic

Calculate x and y coordinates for an aligned object within a window.

Parameters
rRectangle of the widget to be drawn in.
dDimension of the object to be drawn.
alignAlignment of the object.
Returns
A point containing the position at which to draw.

Definition at line 106 of file widget.cpp.

References _current_text_dir, CenterBounds(), SA_BOTTOM, SA_FORCE, SA_HOR_CENTER, SA_HOR_MASK, SA_LEFT, SA_RIGHT, SA_TOP, SA_VERT_CENTER, SA_VERT_MASK, and TD_RTL.

Referenced by DrawCaption(), DrawLabel(), and DrawText().

◆ GetScaledSpriteSize()

◆ GetWidgetFromPos()

WidgetID GetWidgetFromPos ( const Window w,
int  x,
int  y 
)

Returns the index for the widget located at the given position relative to the window.

It includes all widget-corner pixels as well.

Parameters
*wWindow to look inside
xThe Window client X coordinate
yThe Window client y coordinate
Returns
A widget index, or -1 if no widget was found.

Definition at line 268 of file widget.cpp.

References NWidgetCore::index, and Window::nested_root.

Referenced by DropdownWindow::GetDropDownItem(), HandleMouseDragDrop(), and Window::OnDropdownClose().

◆ HandleScrollbarHittest()

static Point HandleScrollbarHittest ( const Scrollbar sb,
int  top,
int  bottom,
bool  horizontal 
)
static

Compute the vertical position of the draggable part of scrollbar.

Parameters
sbScrollbar list data
topTop position of the scrollbar (top position of the up-button)
bottomBottom position of the scrollbar (bottom position of the down-button)
horizontalWhether the scrollbar is horizontal or not
Returns
A Point, with x containing the top coordinate of the draggable part, and y containing the bottom coordinate of the draggable part

Definition at line 135 of file widget.cpp.

References _current_text_dir, Scrollbar::GetCapacity(), Scrollbar::GetCount(), Scrollbar::GetPosition(), and TD_RTL.

Referenced by DrawHorizontalScrollbar(), DrawVerticalScrollbar(), and ScrollbarClickPositioning().

◆ IsAttributeWidgetPartType()

static bool IsAttributeWidgetPartType ( WidgetType  tp)
static

Test if (an NWidgetPart) WidgetType is an attribute widget part type.

Parameters
tpWidgetType to test.
Returns
True iff WidgetType is an attribute widget.

Definition at line 3050 of file widget.cpp.

References WPT_ATTRIBUTE_BEGIN, and WPT_ATTRIBUTE_END.

Referenced by MakeNWidget(), and MakeNWidget().

◆ IsContainerWidgetType()

bool IsContainerWidgetType ( WidgetType  tp)

Test if WidgetType is a container widget.

Parameters
tpWidgetType to test.
Returns
True iff WidgetType is a container widget.

Definition at line 3240 of file widget.cpp.

References NWID_HORIZONTAL, NWID_HORIZONTAL_LTR, NWID_LAYER, NWID_MATRIX, NWID_SELECTION, NWID_VERTICAL, WWT_FRAME, WWT_INSET, and WWT_PANEL.

Referenced by IsNWidgetTreeClosed(), MakeNWidget(), and MakeWidgetTree().

◆ MakeCompanyButtonRows()

std::unique_ptr< NWidgetBase > MakeCompanyButtonRows ( WidgetID  widget_first,
WidgetID  widget_last,
Colours  button_colour,
int  max_length,
StringID  button_tooltip,
bool  resizable 
)

Make a number of rows with button-like graphics, for enabling/disabling each company.

Parameters
widget_firstThe first widget index to use.
widget_lastThe last widget index to use.
colourThe colour in which to draw the button.
max_lengthMaximal number of company buttons in one row.
button_tooltipThe tooltip-string of every button.
resizableWhether the rows are resizable.
Returns
Panel with rows of company buttons.

Definition at line 3358 of file widget.cpp.

References GetSpriteSize(), RectPadding::Horizontal(), WidgetDimensions::matrix, WidgetDimensions::unscaled, RectPadding::Vertical(), WWT_PANEL, and ZOOM_LVL_NORMAL.

Referenced by MakeCompanyButtonRowsGraphGUI(), MakeCompanyButtonRowsLinkGraphGUI(), and MakeCompanyButtonRowsScriptDebug().

◆ MakeNWidget() [1/2]

◆ MakeNWidget() [2/2]

static std::span< constNWidgetPart >::iterator MakeNWidget ( std::span< const NWidgetPart >::iterator  nwid_begin,
std::span< const NWidgetPart >::iterator  nwid_end,
std::unique_ptr< NWidgetBase > &  dest,
bool &  fill_dest 
)
static

Construct a single nested widget in *dest from its parts.

Construct a NWidgetBase object from a NWidget function, and apply all attributes that follow it, until encountering a EndContainer, another NWidget, or the end of the parts array.

Parameters
nwid_beginIterator to beginning of nested widget parts.
nwid_endIterator to ending of nested widget parts.
[out]destAddress of pointer to use for returning the composed widget.
[out]fill_destFill the composed widget with child widgets.
Returns
Iterator to remaining nested widget parts.

Definition at line 3213 of file widget.cpp.

References ApplyNWidgetPartAttribute(), IsAttributeWidgetPartType(), IsContainerWidgetType(), MakeNWidget(), and WPT_ENDCONTAINER.

◆ MakeWidgetTree()

static std::span< constNWidgetPart >::iterator MakeWidgetTree ( std::span< const NWidgetPart >::iterator  nwid_begin,
std::span< const NWidgetPart >::iterator  nwid_end,
std::unique_ptr< NWidgetBase > &  parent 
)
static

Build a nested widget tree by recursively filling containers with nested widgets read from their parts.

Parameters
nwid_beginIterator to beginning of nested widget parts.
nwid_endIterator to ending of nested widget parts.
parentPointer or container to use for storing the child widgets (*parent == nullptr or *parent == container or background widget).
Returns
Iterator to remaining nested widget parts.

Definition at line 3253 of file widget.cpp.

References NWidgetBackground::Add(), NWidgetContainer::Add(), IsContainerWidgetType(), MakeNWidget(), MakeWidgetTree(), and WPT_ENDCONTAINER.

Referenced by MakeNWidgets(), MakeWidgetTree(), and MakeWindowNWidgetTree().

◆ ScaleGUITrad() [1/2]

static Dimension ScaleGUITrad ( const Dimension dim)
inlinestatic

Scale a Dimension to GUI zoom level.

Parameters
dDimension at ZOOM_BASE (traditional "normal" interface size).
Returns
Dimension at ZOOM_LVL_GUI (current interface size).

Definition at line 45 of file widget.cpp.

References ScaleGUITrad().

◆ ScaleGUITrad() [2/2]

static RectPadding ScaleGUITrad ( const RectPadding r)
inlinestatic

Scale a RectPadding to GUI zoom level.

Parameters
rRectPadding at ZOOM_BASE (traditional "normal" interface size).
Returns
RectPadding at ZOOM_LVL_GUI (current interface size).

Definition at line 35 of file widget.cpp.

References ScaleGUITrad().

Referenced by NWidgetServerListHeader::AssignSizePosition(), NWidgetNewGRFDisplay::AssignSizePosition(), SpriteFontCache::ClearFontCache(), ClickSliderWidget(), NWidgetLeaf::Draw(), DrawCargoIconOverlay(), LinkGraphOverlay::DrawContent(), DrawFrame(), BaseGraphWindow::DrawGraph(), DrawHouseInGUI(), DrawLayoutLine(), LinkGraphOverlay::DrawLinks(), DrawResizeBox(), DrawSliderWidget(), SmallMapWindow::DrawSmallMap(), LinkGraphOverlay::DrawStationDots(), BaseVehicleListWindow::DrawVehicleListItems(), LinkGraphOverlay::DrawVertex(), DepotWindow::DrawWidget(), SmallMapWindow::DrawWidget(), StatusBarWindow::DrawWidget(), ScenarioEditorLandscapeGenerationWindow::DrawWidget(), BuildTreesWindow::DrawWidget(), VehicleDetailsWindow::DrawWidget(), WindowDesc::GetDefaultHeight(), WindowDesc::GetDefaultWidth(), GetMaxTreeSpriteSize(), VehicleDetailsWindow::GetRoadVehDetailsHeight(), GetScaledSpriteSize(), GetVehicleListHeight(), NetworkDrawChatMessage(), NetworkInitChatMessage(), NetworkReInitChatBoxSize(), IndustryCargoesWindow::OnInit(), MainWindow::OnPaint(), NetworkClientListWindow::OnTooltip(), ScaleGUITrad(), ScaleGUITrad(), NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetMinimalTextLines(), NWidgetPIPContainer::SetPIP(), NWidgetLeaf::SetupSmallestSize(), SetupWidgetDimensions(), ShowDropDownList(), SpriteFontCache::SpriteFontCache(), StationsWndShowStationRating(), UpdateGUIZoom(), BuildDocksDepotWindow::UpdateWidgetSize(), BaseGraphWindow::UpdateWidgetSize(), LandInfoWindow::UpdateWidgetSize(), TooltipsWindow::UpdateWidgetSize(), NetworkClientListWindow::UpdateWidgetSize(), SpriteAlignerWindow::UpdateWidgetSize(), BuildObjectWindow::UpdateWidgetSize(), PickerWindow::UpdateWidgetSize(), BuildRailStationWindow::UpdateWidgetSize(), BuildRailDepotWindow::UpdateWidgetSize(), BuildRoadDepotWindow::UpdateWidgetSize(), BuildRoadStationWindow::UpdateWidgetSize(), CompanyStationsWindow::UpdateWidgetSize(), ScenarioEditorLandscapeGenerationWindow::UpdateWidgetSize(), BuildTreesWindow::UpdateWidgetSize(), RefitWindow::UpdateWidgetSize(), and VehicleDetailsWindow::UpdateWidgetSize().

◆ ScrollbarClickHandler()

void ScrollbarClickHandler ( Window w,
NWidgetCore nw,
int  x,
int  y 
)

Special handling for the scrollbar widget type.

Handles the special scrolling buttons and other scrolling.

Parameters
wWindow on which a scroll was performed.
nwPointer to the scrollbar widget.
xThe X coordinate of the mouse click.
yThe Y coordinate of the mouse click.

Definition at line 244 of file widget.cpp.

References NWidgetBase::current_x, NWidgetBase::current_y, NWID_HSCROLLBAR, NWidgetBase::pos_x, NWidgetBase::pos_y, ScrollbarClickPositioning(), and NWidgetBase::type.

Referenced by DispatchLeftClickEvent().

◆ ScrollbarClickPositioning()

static void ScrollbarClickPositioning ( Window w,
NWidgetScrollbar sb,
int  x,
int  y,
int  mi,
int  ma 
)
static

Compute new position of the scrollbar after a click and updates the window flags.

Parameters
wWindow on which a scroll was performed.
sbScrollbar
miMinimum coordinate of the scroll bar.
maMaximum coordinate of the scroll bar.
xThe X coordinate of the mouse click.
yThe Y coordinate of the mouse click.

Definition at line 180 of file widget.cpp.

References _current_text_dir, NWidgetCore::disp_flags, HandleScrollbarHittest(), NWidgetCore::index, Window::mouse_capture_widget, NDB_SCROLLBAR_DOWN, NDB_SCROLLBAR_UP, NWID_HSCROLLBAR, CursorVars::pos, SetBit(), Window::SetDirty(), NWidgetBase::SetDirty(), Scrollbar::SS_BIG, TD_RTL, NWidgetBase::type, and Scrollbar::UpdatePosition().

Referenced by ScrollbarClickHandler().

◆ ScrollRect()

Rect ScrollRect ( Rect  r,
const Scrollbar sb,
int  resize_step 
)

Apply 'scroll' to a rect to be drawn in.

Parameters
rRect to be 'scrolled'.
sbThe scrollbar affecting the scroll.
resize_stepResize step of the widget/scrollbar (1 if the scrollbar is pixel-based.)
Returns
Scrolled rect.

Definition at line 2468 of file widget.cpp.

References _current_text_dir, Scrollbar::GetCount(), Scrollbar::GetPosition(), Scrollbar::IsVertical(), and TD_RTL.

Referenced by IndustryDirectoryWindow::DrawWidget(), TextfileWindow::DrawWidget(), and ScriptDebugWindow::DrawWidgetLog().

◆ SetupWidgetDimensions()

Variable Documentation

◆ _draw_widget_outlines

bool _draw_widget_outlines

Definition at line 786 of file widget.cpp.