102 WWB_PUSHBUTTON = 1 << 7,
144 void ApplyAspectRatio();
163 template <
class NWID>
166 for (NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
167 if (NWID *nwid =
dynamic_cast<NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
177 template <
class NWID>
180 for (
const NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
181 if (
const NWID *nwid =
dynamic_cast<const NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
213 inline void SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
238 Rect GetCurrentRect()
const
241 r.left = this->
pos_x;
386 Colours alternate_colour = INVALID_COLOUR;
497class NWidgetContainer :
public NWidgetBase {
502 void Add(std::unique_ptr<NWidgetBase> &&wid);
528 std::vector<std::unique_ptr<NWidgetBase>>
children{};
550class NWidgetStacked :
public NWidgetContainer {
576class NWidgetPIPContainer :
public NWidgetContainer {
604class NWidgetHorizontal :
public NWidgetPIPContainer {
616class NWidgetHorizontalLTR :
public NWidgetHorizontal {
627class NWidgetVertical :
public NWidgetPIPContainer {
645class NWidgetMatrix :
public NWidgetPIPContainer {
671 void GetScrollOffsets(
int &start_x,
int &start_y,
int &base_offs_x,
int &base_offs_y);
698 void Add(std::unique_ptr<NWidgetBase> &&nwid);
699 void SetPIP(uint8_t pip_pre, uint8_t pip_inter, uint8_t pip_post);
700 void SetPIPRatio(uint8_t pip_ratio_pre, uint8_t pip_ratio_inter, uint8_t pip_ratio_post);
713 std::unique_ptr<NWidgetPIPContainer>
child{};
741 using size_type = int32_t;
742 static constexpr size_type max_size_type = std::numeric_limits<size_type>::max();
743 static constexpr size_type npos = max_size_type;
804 return this->is_vertical;
825 assert(num < Scrollbar::max_size_type);
839 assert(capacity < Scrollbar::max_size_type);
855 size_type old_pos = this->pos;
856 this->pos =
Clamp(position, 0, std::max(this->count - this->cap, 0));
857 return this->pos != old_pos;
869 if (difference == 0)
return false;
902 template <
typename Tcontainer>
905 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
906 auto first = std::next(std::begin(container), this->
GetPosition());
908 return std::make_pair(first, last);
921 template <
typename Tcontainer>
924 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
926 if (row == Scrollbar::npos)
return std::end(container);
928 return std::next(std::begin(container), row);
946 static void InvalidateDimensionCache();
948 static Dimension GetHorizontalDimension();
989 if (base >= max_space || step == 0)
return base;
990 if (step == 1)
return max_space;
991 uint increment = max_space - base;
992 increment -= increment % step;
993 return base + increment;
1064 NWidContainerFlags flags;
1127 union NWidgetPartUnion {
1141 constexpr NWidgetPartUnion() :
xy() {}
1146 constexpr NWidgetPartUnion(NWidgetPartPIP
pip) :
pip(
pip) {}
1149 constexpr NWidgetPartUnion(NWidgetPartAlignment
align) :
align(
align) {}
1417 return SetPadding(padding, padding, padding, padding);
1511std::unique_ptr<NWidgetBase>
MakeNWidgets(std::span<const NWidgetPart> nwid_parts, std::unique_ptr<NWidgetBase> &&container);
Types related to the graphics and/or input devices.
uint32_t SpriteID
The number of a sprite, without mapping bits and colourtables.
FontSize
Available font sizes.
@ FS_NORMAL
Index of the normal font in the font tables.
StringAlignment
How to align the to-be drawn text.
@ SA_CENTER
Center both horizontally and vertically.
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
#define Rect
Macro that prevents name conflicts between included headers.
#define Point
Macro that prevents name conflicts between included headers.
constexpr bool IsInsideBS(const T x, const size_t base, const size_t size)
Checks if a value is between a window started at some base point.
constexpr T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
constexpr To ClampTo(From value)
Clamp the given value down to lie within the requested type.
Types related to strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Dimensions (a width and height) of a rectangle in 2D.
Widget part for storing minimal text line data.
uint8_t lines
Number of text lines.
uint8_t spacing
Extra spacing around lines.
FontSize size
Font size of text lines.
Widget part for storing text colour.
TextColour colour
TextColour for DrawString.
FontSize size
Font size of text.
Padding dimensions to apply to each side of a Rect.
Data structure for an opened window.
Types related to windows.
EventState
State of handling an event.
static constexpr WidgetID INVALID_WIDGET
An invalid widget index.
ZoomLevel
All zoom levels we know.