diff --git a/src/window_gui.h b/src/window_gui.h --- a/src/window_gui.h +++ b/src/window_gui.h @@ -238,6 +238,8 @@ public: void LowerWidget(byte widget_index); void RaiseWidget(byte widget_index); bool IsWidgetLowered(byte widget_index) const; + void AlignWidgetRight(byte widget_index_a, byte widget_index_b); + int GetWidgetWidth(byte widget_index) const; void RaiseButtons(); void CDECL SetWidgetsDisabledState(bool disab_stat, int widgets, ...); @@ -716,4 +718,29 @@ inline bool Window::IsWidgetLowered(byte return HasBit(this->widget[widget_index].display_flags, WIDG_LOWERED); } +/** + * Align widgets a and b next to each other. + * @param widget_index_a the left widget + * @param widget_index_b the right widget (fixed) + */ +inline void Window::AlignWidgetRight(byte widget_index_a, byte widget_index_b) +{ + assert(widget_index_a < this->widget_count); + assert(widget_index_b < this->widget_count); + int w = this->widget[widget_index_a].right - this->widget[widget_index_a].left; + this->widget[widget_index_a].right = this->widget[widget_index_b].left - 1; + this->widget[widget_index_a].left = this->widget[widget_index_a].right - w; +} + +/** + * Get the width of a widget. + * @param widget_index the widget + * @return width of the widget + */ +inline int Window::GetWidgetWidth(byte widget_index) const +{ + assert(widget_index < this->widget_count); + return this->widget[widget_index].right - this->widget[widget_index].left + 1; +} + #endif /* WINDOW_GUI_H */