summaryrefslogtreecommitdiff
path: root/src/widget_type.h
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2009-06-01 20:45:46 +0000
committeralberth <alberth@openttd.org>2009-06-01 20:45:46 +0000
commit9b15b8cd4a6e956e97a6c5f823f181d381684157 (patch)
tree1fa965c0aba102e3d143b370c91d33d7f024355e /src/widget_type.h
parentc077796ac61d88a8fea2228b7ff3a8fa446d91bb (diff)
downloadopenttd-9b15b8cd4a6e956e97a6c5f823f181d381684157.tar.xz
(svn r16501) -Codechange: Introduced different phases in resizing a nested widget tree.
Diffstat (limited to 'src/widget_type.h')
-rw-r--r--src/widget_type.h49
1 files changed, 36 insertions, 13 deletions
diff --git a/src/widget_type.h b/src/widget_type.h
index 888d9052d..3ddc33de6 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -144,8 +144,17 @@ struct Widget {
StringID tooltips; ///< Tooltips that are shown when rightclicking on a widget
};
+/** Different forms of sizing nested widgets, using NWidgetBase::AssignSizePosition() */
+enum SizingType {
+ ST_ARRAY, ///< Initialize nested widget tree to generate a #Widget * array.
+ ST_SMALLEST, ///< Initialize nested widget tree to smallest size. Also updates \e current_x and \e current_y.
+ ST_RESIZE, ///< Resize the nested widget tree.
+};
+
/**
* Baseclass for nested widgets.
+ * @invariant After initialization, \f$current\_x = smallest\_x + n * resize\_x, for n \geq 0\f$.
+ * @invariant After initialization, \f$current\_y = smallest\_y + m * resize\_y, for m \geq 0\f$.
* @ingroup NestedWidgets
*/
class NWidgetBase : public ZeroedMemoryAllocator {
@@ -153,7 +162,7 @@ public:
NWidgetBase(WidgetType tp);
virtual int SetupSmallestSize() = 0;
- virtual void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl) = 0;
+ virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl) = 0;
virtual void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl) = 0;
@@ -172,8 +181,8 @@ public:
this->padding_left = left;
};
- inline uint GetHorizontalStepSize() const;
- inline uint GetVerticalStepSize() const;
+ inline uint GetHorizontalStepSize(SizingType sizing) const;
+ inline uint GetVerticalStepSize(SizingType sizing) const;
WidgetType type; ///< Type of the widget / nested widget.
bool fill_x; ///< Allow horizontal filling from initial size.
@@ -185,6 +194,9 @@ public:
*/
uint smallest_x; ///< Smallest horizontal size of the widget in a filled window.
uint smallest_y; ///< Smallest vertical size of the widget in a filled window.
+ /* Current widget size (that is, after resizing). */
+ uint current_x; ///< Current horizontal size (after resizing).
+ uint current_y; ///< Current vertical size (after resizing).
uint pos_x; ///< Horizontal position of top-left corner of the widget in the window.
uint pos_y; ///< Vertical position of top-left corner of the widget in the window.
@@ -196,17 +208,28 @@ public:
uint8 padding_right; ///< Paddings added to the right of the widget. Managed by parent container widget.
uint8 padding_bottom; ///< Paddings added to the bottom of the widget. Managed by parent container widget.
uint8 padding_left; ///< Paddings added to the left of the widget. Managed by parent container widget.
+
+protected:
+ inline void StoreSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y);
};
-/** Get the horizontal sizing step. */
-inline uint NWidgetBase::GetHorizontalStepSize() const
+/**
+ * Get the horizontal sizing step.
+ * @param sizing Type of resize being performed.
+ */
+inline uint NWidgetBase::GetHorizontalStepSize(SizingType sizing) const
{
+ if (sizing == ST_RESIZE) return this->resize_x;
return this->fill_x ? 1 : 0;
}
-/** Get the vertical sizing step. */
-inline uint NWidgetBase::GetVerticalStepSize() const
+/**
+ * Get the vertical sizing step.
+ * @param sizing Type of resize being performed.
+ */
+inline uint NWidgetBase::GetVerticalStepSize(SizingType sizing) const
{
+ if (sizing == ST_RESIZE) return this->resize_y;
return this->fill_y ? 1 : 0;
}
@@ -220,7 +243,7 @@ public:
void SetFill(bool fill_x, bool fill_y);
void SetResize(uint resize_x, uint resize_y);
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
uint min_x; ///< Minimal horizontal size of only this widget.
uint min_y; ///< Minimal vertical size of only this widget.
@@ -269,7 +292,7 @@ public:
NWidgetStacked(WidgetType tp);
int SetupSmallestSize();
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
};
@@ -293,7 +316,7 @@ public:
NWidgetHorizontal();
int SetupSmallestSize();
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
};
@@ -304,7 +327,7 @@ class NWidgetHorizontalLTR : public NWidgetHorizontal {
public:
NWidgetHorizontalLTR();
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
};
@@ -316,7 +339,7 @@ public:
NWidgetVertical();
int SetupSmallestSize();
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
};
@@ -343,7 +366,7 @@ public:
void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post);
int SetupSmallestSize();
- void AssignSizePosition(uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
+ void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool allow_resize_x, bool allow_resize_y, bool rtl);
void StoreWidgets(Widget *widgets, int length, bool left_moving, bool top_moving, bool rtl);
private: