101 WWB_PUSHBUTTON = 1 << 7,
117enum class AspectFlag : uint8_t {
139 virtual ~NWidgetBase() =
default;
141 void ApplyAspectRatio();
160 template <
class NWID>
163 for (NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
164 if (NWID *nwid =
dynamic_cast<NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
174 template <
class NWID>
177 for (
const NWidgetBase *nwid_parent = this->
parent; nwid_parent !=
nullptr; nwid_parent = nwid_parent->parent) {
178 if (
const NWID *nwid =
dynamic_cast<const NWID *
>(nwid_parent); nwid !=
nullptr)
return nwid;
210 inline void SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
235 Rect GetCurrentRect()
const
238 r.left = this->
pos_x;
328 void SetAspect(
float ratio, AspectFlags flags = AspectFlag::ResizeX);
329 void SetAspect(
int x_ratio,
int y_ratio, AspectFlags flags = AspectFlag::ResizeX);
379 Colours alternate_colour = INVALID_COLOUR;
484class NWidgetContainer :
public NWidgetBase {
489 void Add(std::unique_ptr<NWidgetBase> &&wid);
512 std::vector<std::unique_ptr<NWidgetBase>>
children{};
534class NWidgetStacked :
public NWidgetContainer {
560class NWidgetPIPContainer :
public NWidgetContainer {
588class NWidgetHorizontal :
public NWidgetPIPContainer {
600class NWidgetHorizontalLTR :
public NWidgetHorizontal {
611class NWidgetVertical :
public NWidgetPIPContainer {
627class NWidgetMatrix :
public NWidgetPIPContainer {
653 void GetScrollOffsets(
int &start_x,
int &start_y,
int &base_offs_x,
int &base_offs_y);
680 void Add(std::unique_ptr<NWidgetBase> &&nwid);
681 void SetPIP(uint8_t pip_pre, uint8_t pip_inter, uint8_t pip_post);
682 void SetPIPRatio(uint8_t pip_ratio_pre, uint8_t pip_ratio_inter, uint8_t pip_ratio_post);
695 std::unique_ptr<NWidgetPIPContainer>
child{};
723 using size_type = int32_t;
724 static constexpr size_type max_size_type = std::numeric_limits<size_type>::max();
725 static constexpr size_type npos = max_size_type;
786 return this->is_vertical;
807 assert(num < Scrollbar::max_size_type);
821 assert(capacity < Scrollbar::max_size_type);
837 size_type old_pos = this->pos;
838 this->pos =
Clamp(position, 0, std::max(this->count - this->cap, 0));
839 return this->pos != old_pos;
851 if (difference == 0)
return false;
853 case SS_SMALL: difference *= this->stepsize;
break;
854 case SS_BIG: difference *= this->cap;
break;
884 template <
typename Tcontainer>
887 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
888 auto first = std::next(std::begin(container), this->
GetPosition());
890 return std::make_pair(first, last);
903 template <
typename Tcontainer>
906 assert(
static_cast<size_t>(this->
GetCount()) == container.size());
908 if (row == Scrollbar::npos)
return std::end(container);
910 return std::next(std::begin(container), row);
928 static void InvalidateDimensionCache();
930 static Dimension GetHorizontalDimension();
971 if (base >= max_space || step == 0)
return base;
972 if (step == 1)
return max_space;
973 uint increment = max_space - base;
974 increment -= increment % step;
975 return base + increment;
1046 NWidContainerFlags flags;
1109 union NWidgetPartUnion {
1123 constexpr NWidgetPartUnion() :
xy() {}
1128 constexpr NWidgetPartUnion(NWidgetPartPIP
pip) :
pip(
pip) {}
1131 constexpr NWidgetPartUnion(NWidgetPartAlignment
align) :
align(
align) {}
1378 return SetPadding(padding, padding, padding, padding);
1465std::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.