101 WWB_PUSHBUTTON = 1 << 7,
117enum class AspectFlag : uint8_t {
142 void ApplyAspectRatio();
161 template <
class NWID>
164 for (NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
165 if (NWID *nwid =
dynamic_cast<NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
175 template <
class NWID>
178 for (
const NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
179 if (
const NWID *nwid =
dynamic_cast<const NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
211 inline void SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
236 Rect GetCurrentRect()
const
239 r.left = this->
pos_x;
331 void SetAspect(
float ratio, AspectFlags flags = AspectFlag::ResizeX);
332 void SetAspect(
int x_ratio,
int y_ratio, AspectFlags flags = AspectFlag::ResizeX);
382 Colours alternate_colour = INVALID_COLOUR;
493class NWidgetContainer :
public NWidgetBase {
498 void Add(std::unique_ptr<NWidgetBase> &&wid);
524 std::vector<std::unique_ptr<NWidgetBase>>
children{};
546class NWidgetStacked :
public NWidgetContainer {
572class NWidgetPIPContainer :
public NWidgetContainer {
600class NWidgetHorizontal :
public NWidgetPIPContainer {
612class NWidgetHorizontalLTR :
public NWidgetHorizontal {
623class NWidgetVertical :
public NWidgetPIPContainer {
641class NWidgetMatrix :
public NWidgetPIPContainer {
667 void GetScrollOffsets(
int &start_x,
int &start_y,
int &base_offs_x,
int &base_offs_y);
694 void Add(std::unique_ptr<NWidgetBase> &&nwid);
695 void SetPIP(uint8_t pip_pre, uint8_t pip_inter, uint8_t pip_post);
696 void SetPIPRatio(uint8_t pip_ratio_pre, uint8_t pip_ratio_inter, uint8_t pip_ratio_post);
709 std::unique_ptr<NWidgetPIPContainer>
child{};
737 using size_type = int32_t;
738 static constexpr size_type max_size_type = std::numeric_limits<size_type>::max();
739 static constexpr size_type npos = max_size_type;
800 return this->is_vertical;
821 assert(num < Scrollbar::max_size_type);
835 assert(capacity < Scrollbar::max_size_type);
851 size_type old_pos = this->pos;
852 this->pos =
Clamp(position, 0, std::max(this->count - this->cap, 0));
853 return this->pos != old_pos;
865 if (difference == 0)
return false;
867 case SS_SMALL: difference *= this->stepsize;
break;
868 case SS_BIG: difference *= this->cap;
break;
898 template <
typename Tcontainer>
901 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
902 auto first = std::next(std::begin(container), this->
GetPosition());
904 return std::make_pair(first, last);
917 template <
typename Tcontainer>
920 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
922 if (row == Scrollbar::npos)
return std::end(container);
924 return std::next(std::begin(container), row);
942 static void InvalidateDimensionCache();
944 static Dimension GetHorizontalDimension();
985 if (base >= max_space || step == 0)
return base;
986 if (step == 1)
return max_space;
987 uint increment = max_space - base;
988 increment -= increment % step;
989 return base + increment;
1060 NWidContainerFlags flags;
1123 union NWidgetPartUnion {
1137 constexpr NWidgetPartUnion() :
xy() {}
1142 constexpr NWidgetPartUnion(NWidgetPartPIP
pip) :
pip(
pip) {}
1145 constexpr NWidgetPartUnion(NWidgetPartAlignment
align) :
align(
align) {}
1413 return SetPadding(padding, padding, padding, padding);
1507std::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.