OpenTTD Source
20241108-master-g80f628063a
|
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.
Functions | |
static RectPadding | ScaleGUITrad (const RectPadding &r) |
Scale a RectPadding to GUI zoom level. More... | |
static Dimension | ScaleGUITrad (const Dimension &dim) |
Scale a Dimension to GUI zoom level. More... | |
Dimension | GetScaledSpriteSize (SpriteID sprid) |
Scale sprite size for GUI. More... | |
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. More... | |
static Point | HandleScrollbarHittest (const Scrollbar *sb, int top, int bottom, bool horizontal) |
Compute the vertical position of the draggable part of scrollbar. More... | |
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. More... | |
void | ScrollbarClickHandler (Window *w, NWidgetCore *nw, int x, int y) |
Special handling for the scrollbar widget type. More... | |
WidgetID | GetWidgetFromPos (const Window *w, int x, int y) |
Returns the index for the widget located at the given position relative to the window. More... | |
void | DrawFrameRect (int left, int top, int right, int bottom, Colours colour, FrameFlags flags) |
Draw frame rectangle. More... | |
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. More... | |
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. More... | |
static void | DrawText (const Rect &r, TextColour colour, StringID str, StringAlignment align, FontSize fs) |
Draw text. More... | |
static void | DrawInset (const Rect &r, Colours colour, TextColour text_colour, StringID str, StringAlignment align, FontSize fs) |
Draw an inset widget. More... | |
static void | DrawMatrix (const Rect &r, Colours colour, bool clicked, uint16_t data, uint resize_x, uint resize_y) |
Draw a matrix widget. More... | |
static void | DrawVerticalScrollbar (const Rect &r, Colours colour, bool up_clicked, bool bar_dragged, bool down_clicked, const Scrollbar *scrollbar) |
Draw a vertical scrollbar. More... | |
static void | DrawHorizontalScrollbar (const Rect &r, Colours colour, bool left_clicked, bool bar_dragged, bool right_clicked, const Scrollbar *scrollbar) |
Draw a horizontal scrollbar. More... | |
static void | DrawFrame (const Rect &r, Colours colour, TextColour text_colour, StringID str, StringAlignment align, FontSize fs) |
Draw a frame widget. More... | |
static void | DrawShadeBox (const Rect &r, Colours colour, bool clicked) |
Draw a shade box. More... | |
static void | DrawStickyBox (const Rect &r, Colours colour, bool clicked) |
Draw a sticky box. More... | |
static void | DrawDefSizeBox (const Rect &r, Colours colour, bool clicked) |
Draw a defsize box. More... | |
static void | DrawDebugBox (const Rect &r, Colours colour, bool clicked) |
Draw a NewGRF debug box. More... | |
static void | DrawResizeBox (const Rect &r, Colours colour, bool at_left, bool clicked, bool bevel) |
Draw a resize box. More... | |
static void | DrawCloseBox (const Rect &r, Colours colour) |
Draw a close box. More... | |
void | DrawCaption (const Rect &r, Colours colour, Owner owner, TextColour text_colour, StringID str, StringAlignment align, FontSize fs) |
Draw a caption bar. More... | |
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). More... | |
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. More... | |
static bool | IsAttributeWidgetPartType (WidgetType tp) |
Test if (an NWidgetPart) WidgetType is an attribute widget part type. More... | |
static void | ApplyNWidgetPartAttribute (const NWidgetPart &nwid, NWidgetBase *dest) |
Apply an attribute NWidgetPart to an NWidget. More... | |
static std::unique_ptr< NWidgetBase > | MakeNWidget (const NWidgetPart &nwid) |
Make NWidget from an NWidgetPart. More... | |
static std::span< const NWidgetPart >::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. More... | |
bool | IsContainerWidgetType (WidgetType tp) |
Test if WidgetType is a container widget. More... | |
static std::span< const NWidgetPart >::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. More... | |
std::unique_ptr< NWidgetBase > | MakeNWidgets (std::span< const NWidgetPart > nwid_parts, std::unique_ptr< NWidgetBase > &&container) |
Construct a nested widget tree from an array of parts. More... | |
std::unique_ptr< NWidgetBase > | MakeWindowNWidgetTree (std::span< const NWidgetPart > nwid_parts, NWidgetStacked **shade_select) |
Make a nested widget tree for a window from a parts array. More... | |
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. More... | |
Variables | |
bool | _draw_widget_outlines |
Handling of the default/simple widgets.
Definition in file widget.cpp.
|
static |
Apply an attribute NWidgetPart to an NWidget.
nwid | Attribute NWidgetPart |
dest | NWidget to apply attribute to. |
Definition at line 3004 of file widget.cpp.
References FS_BEGIN, NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetResize(), NWidgetPartTextLines::size, NWidgetPart::NWidgetPartUnion::text_lines, NWidgetPart::type, WPT_MINSIZE, WPT_MINTEXTLINES, WPT_RESIZE, and NWidgetPart::NWidgetPartUnion::xy.
Referenced by MakeNWidget().
|
inlinestatic |
Draw a button with a dropdown (WWT_DROPDOWN and NWID_BUTTON_DROPDOWN).
r | Rectangle containing the widget. |
colour | Background colour of the widget. |
clicked_button | The button-part is clicked. |
clicked_dropdown | The drop-down part is clicked. |
str | Text of the button. |
align | Alignment of the text within the dropdown. |
Definition at line 709 of file widget.cpp.
References _current_text_dir, DrawFrameRect(), NWidgetLeaf::dropdown_dimension, FR_LOWERED, and TD_LTR.
void DrawCaption | ( | const Rect & | r, |
Colours | colour, | ||
Owner | owner, | ||
TextColour | text_colour, | ||
StringID | str, | ||
StringAlignment | align, | ||
FontSize | fs | ||
) |
Draw a caption bar.
r | Rectangle of the bar. |
colour | Colour of the window. |
owner | 'Owner' of the window. |
text_colour | Colour of the text. |
str | Text to draw in the bar. |
align | Alignment of the text. |
fs | Font size of the text. |
Definition at line 679 of file widget.cpp.
References _company_colours, WidgetDimensions::bevel, DrawFrameRect(), FR_BORDERONLY, FR_DARKENED, FR_LOWERED, GetColourGradient(), GfxFillRect(), MAX_COMPANIES, WidgetDimensions::scaled, and Rect::Shrink().
|
inlinestatic |
Draw a close box.
r | Rectangle of the box.` |
colour | Colour of the close box. |
Definition at line 658 of file widget.cpp.
|
inlinestatic |
Draw a NewGRF debug box.
r | Rectangle of the box. |
colour | Colour of the debug box. |
clicked | Box is lowered. |
Definition at line 630 of file widget.cpp.
References DrawImageButtons(), and WWT_DEBUGBOX.
|
inlinestatic |
Draw a defsize box.
r | Rectangle of the box. |
colour | Colour of the defsize box. |
clicked | Box is lowered. |
Definition at line 619 of file widget.cpp.
References DrawImageButtons(), and WWT_DEFSIZEBOX.
|
inlinestatic |
Draw a frame widget.
r | Rectangle of the frame. |
colour | Colour of the frame. |
text_colour | Colour of the text. |
str | Text of the frame. |
align | Alignment of the text in the frame. |
fs | Font size of the text. |
Definition at line 544 of file widget.cpp.
References DrawString(), WidgetDimensions::frametext, GetColourGradient(), and WidgetDimensions::scaled.
void DrawFrameRect | ( | int | left, |
int | top, | ||
int | right, | ||
int | bottom, | ||
Colours | colour, | ||
FrameFlags | flags | ||
) |
Draw frame rectangle.
left | Left edge of the frame |
top | Top edge of the frame |
right | Right edge of the frame |
bottom | Bottom edge of the frame |
colour | Colour table to use. |
flags | Flags controlling how to draw the frame. |
Definition at line 281 of file widget.cpp.
Referenced by DrawButtonDropdown(), DrawCaption(), DrawImageButtons(), DrawInset(), DrawResizeBox(), and Window::DrawWidgets().
|
inlinestatic |
Draw a horizontal scrollbar.
r | Rectangle of the scrollbar widget. |
colour | Colour of the scrollbar widget. |
left_clicked | Left-arrow is clicked. |
bar_dragged | Bar is dragged. |
right_clicked | Right-arrow is clicked. |
scrollbar | Scrollbar size, offset, and capacity information. |
Definition at line 504 of file widget.cpp.
References DrawImageButtons(), NWID_HSCROLLBAR, and Rect::WithWidth().
|
inlinestatic |
Draw an image button.
r | Rectangle of the button. |
type | Widget type (WWT_IMGBTN or WWT_IMGBTN_2). |
colour | Colour of the button. |
clicked | Button is clicked. |
img | Sprite to draw. |
align | Alignment of the sprite. |
Definition at line 337 of file widget.cpp.
References DrawFrameRect(), and FR_LOWERED.
Referenced by DrawDebugBox(), DrawDefSizeBox(), DrawHorizontalScrollbar(), DrawShadeBox(), DrawStickyBox(), and DrawVerticalScrollbar().
|
inlinestatic |
Draw an inset widget.
r | Rectangle of the background. |
colour | Colour of the inset. |
text_colour | Colour of the text. |
str | Text to draw. |
align | Alignment of the text. |
fs | Font size of the text. |
Definition at line 389 of file widget.cpp.
References DrawFrameRect(), DrawString(), FR_DARKENED, FR_LOWERED, WidgetDimensions::inset, WidgetDimensions::scaled, and Rect::Shrink().
|
inlinestatic |
Draw the label-part of a widget.
r | Rectangle of the label background. |
type | Widget type (WWT_TEXTBTN, WWT_TEXTBTN_2, or WWT_LABEL). |
clicked | Label is clicked. |
colour | Colour of the text. |
str | Text to draw. |
align | Alignment of the text. |
fs | Font size of the text. |
Definition at line 356 of file widget.cpp.
|
inlinestatic |
Draw a matrix widget.
r | Rectangle of the matrix background. |
colour | Colour of the background. |
clicked | Matrix is rendered lowered. |
data | Data of the widget, number of rows and columns of the widget. |
resize_x | Matrix resize unit size. |
resize_y | Matrix resize unit size. |
Definition at line 404 of file widget.cpp.
|
inlinestatic |
Draw a resize box.
r | Rectangle of the box. |
colour | Colour of the resize box. |
at_left | Resize box is at left-side of the window, |
clicked | Box is lowered. |
bevel | Draw bevel iff set. |
Definition at line 643 of file widget.cpp.
References DrawFrameRect(), and FR_LOWERED.
|
inlinestatic |
Draw a shade box.
r | Rectangle of the box. |
colour | Colour of the shade box. |
clicked | Box is lowered. |
Definition at line 597 of file widget.cpp.
References DrawImageButtons(), and WWT_SHADEBOX.
|
inlinestatic |
Draw a sticky box.
r | Rectangle of the box. |
colour | Colour of the sticky box. |
clicked | Box is lowered. |
Definition at line 608 of file widget.cpp.
References DrawImageButtons(), and WWT_STICKYBOX.
|
inlinestatic |
Draw text.
r | Rectangle of the background. |
colour | Colour of the text. |
str | Text to draw. |
align | Alignment of the text. |
fs | Font size of the text. |
Definition at line 373 of file widget.cpp.
References DrawString(), GetAlignedPosition(), and GetStringBoundingBox().
|
inlinestatic |
Draw a vertical scrollbar.
r | Rectangle of the scrollbar widget. |
colour | Colour of the scrollbar widget. |
up_clicked | Up-arrow is clicked. |
bar_dragged | Bar is dragged. |
down_clicked | Down-arrow is clicked. |
scrollbar | Scrollbar size, offset, and capacity information. |
Definition at line 464 of file widget.cpp.
References DrawImageButtons(), NWID_VSCROLLBAR, and Rect::WithHeight().
|
inlinestatic |
Calculate x and y coordinates for an aligned object within a window.
r | Rectangle of the widget to be drawn in. |
d | Dimension of the object to be drawn. |
align | Alignment of the object. |
Definition at line 106 of file widget.cpp.
References _current_text_dir, CenterBounds(), SA_FORCE, SA_HOR_CENTER, SA_HOR_MASK, SA_LEFT, SA_RIGHT, and TD_RTL.
Referenced by DrawText().
Scale sprite size for GUI.
Offset is ignored.
Definition at line 54 of file widget.cpp.
References GetSpriteSize(), ScaleGUITrad(), and ZOOM_LVL_NORMAL.
Referenced by DrawEngineList(), DepotWindow::OnInit(), NetworkContentListWindow::OnInit(), NetworkGameWindow::OnInit(), and NWidgetLeaf::SetupSmallestSize().
Returns the index for the widget located at the given position relative to the window.
It includes all widget-corner pixels as well.
Definition at line 266 of file widget.cpp.
Referenced by DropdownWindow::GetDropDownItem(), and Window::OnDropdownClose().
|
static |
Compute the vertical position of the draggable part of scrollbar.
sb | Scrollbar list data |
top | Top position of the scrollbar (top position of the up-button) |
bottom | Bottom position of the scrollbar (bottom position of the down-button) |
horizontal | Whether the scrollbar is horizontal or not |
Definition at line 135 of file widget.cpp.
References _current_text_dir, Scrollbar::GetCapacity(), Scrollbar::GetCount(), Scrollbar::GetPosition(), and TD_RTL.
|
static |
Test if (an NWidgetPart) WidgetType is an attribute widget part type.
tp | WidgetType to test. |
Definition at line 2993 of file widget.cpp.
References WPT_ATTRIBUTE_BEGIN, and WPT_ATTRIBUTE_END.
Referenced by MakeNWidget().
bool IsContainerWidgetType | ( | WidgetType | tp | ) |
Test if WidgetType is a container widget.
tp | WidgetType to test. |
Definition at line 3182 of file widget.cpp.
References NWID_HORIZONTAL, NWID_HORIZONTAL_LTR, NWID_MATRIX, NWID_SELECTION, NWID_VERTICAL, WWT_FRAME, WWT_INSET, and WWT_PANEL.
Referenced by IsNWidgetTreeClosed(), MakeNWidget(), and MakeWidgetTree().
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.
widget_first | The first widget index to use. |
widget_last | The last widget index to use. |
colour | The colour in which to draw the button. |
max_length | Maximal number of company buttons in one row. |
button_tooltip | The tooltip-string of every button. |
resizable | Whether the rows are resizable. |
Definition at line 3300 of file widget.cpp.
References GetSpriteSize().
Referenced by MakeCompanyButtonRowsGraphGUI(), MakeCompanyButtonRowsLinkGraphGUI(), and MakeCompanyButtonRowsScriptDebug().
|
static |
Make NWidget from an NWidgetPart.
nwid | NWidgetPart. |
Definition at line 3112 of file widget.cpp.
References NWidgetPartWidget::colour, NWidgetPart::NWidgetPartUnion::cont_flags, NWidgetPart::NWidgetPartUnion::func_ptr, NWidgetPartWidget::index, IsAttributeWidgetPartType(), NWID_HORIZONTAL, NWID_HORIZONTAL_LTR, NWID_HSCROLLBAR, NWID_MATRIX, NWID_SELECTION, NWID_SPACER, NWID_VERTICAL, NWID_VIEWPORT, NWID_VSCROLLBAR, NWidgetPart::type, NWidgetPart::NWidgetPartUnion::widget, WPT_ENDCONTAINER, WPT_FUNCTION, WWT_FRAME, WWT_INSET, and WWT_PANEL.
Referenced by MakeNWidget(), and MakeWidgetTree().
|
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.
nwid_begin | Iterator to beginning of nested widget parts. | |
nwid_end | Iterator to ending of nested widget parts. | |
[out] | dest | Address of pointer to use for returning the composed widget. |
[out] | fill_dest | Fill the composed widget with child widgets. |
Definition at line 3155 of file widget.cpp.
References ApplyNWidgetPartAttribute(), IsAttributeWidgetPartType(), IsContainerWidgetType(), MakeNWidget(), and WPT_ENDCONTAINER.
|
static |
Build a nested widget tree by recursively filling containers with nested widgets read from their parts.
nwid_begin | Iterator to beginning of nested widget parts. |
nwid_end | Iterator to ending of nested widget parts. |
parent | Pointer or container to use for storing the child widgets (*parent == nullptr or *parent == container or background widget). |
Definition at line 3195 of file widget.cpp.
References NWidgetBackground::Add(), NWidgetContainer::Add(), IsContainerWidgetType(), MakeNWidget(), and WPT_ENDCONTAINER.
Referenced by MakeNWidgets(), and MakeWindowNWidgetTree().
Scale a Dimension to GUI zoom level.
d | Dimension at ZOOM_BASE (traditional "normal" interface size). |
Definition at line 45 of file widget.cpp.
|
inlinestatic |
Scale a RectPadding to GUI zoom level.
r | RectPadding at ZOOM_BASE (traditional "normal" interface size). |
Definition at line 35 of file widget.cpp.
Referenced by NWidgetLeaf::Draw(), GetScaledSpriteSize(), NWidgetResizeBase::SetMinimalSize(), NWidgetResizeBase::SetMinimalTextLines(), NWidgetPIPContainer::SetPIP(), and SetupWidgetDimensions().
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.
w | Window on which a scroll was performed. |
nw | Pointer to the scrollbar widget. |
x | The X coordinate of the mouse click. |
y | The Y coordinate of the mouse click. |
Definition at line 242 of file widget.cpp.
|
static |
Compute new position of the scrollbar after a click and updates the window flags.
w | Window on which a scroll was performed. |
sb | Scrollbar |
mi | Minimum coordinate of the scroll bar. |
ma | Maximum coordinate of the scroll bar. |
x | The X coordinate of the mouse click. |
y | The Y coordinate of the mouse click. |
Definition at line 178 of file widget.cpp.
Apply 'scroll' to a rect to be drawn in.
r | Rect to be 'scrolled'. |
sb | The scrollbar affecting the scroll. |
resize_step | Resize step of the widget/scrollbar (1 if the scrollbar is pixel-based.) |
Definition at line 2411 of file widget.cpp.
References _current_text_dir, Scrollbar::GetCount(), Scrollbar::GetPosition(), Scrollbar::IsVertical(), and TD_RTL.