summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2012-06-16 20:01:34 +0000
committerfrosch <frosch@openttd.org>2012-06-16 20:01:34 +0000
commit149672fedb9e9e7497fa20ae3b07c2d3d516a519 (patch)
treefbb973bb82f37a788803f56b8e99a7c72dc053e5
parent27c319c34bddba3f1674b5d5cd7632982765e4de (diff)
downloadopenttd-149672fedb9e9e7497fa20ae3b07c2d3d516a519.tar.xz
(svn r24346) -Fix: EQUALSIZE widget containers within EQUALSIZE containers were initialised with wrong sizes.
-rw-r--r--src/widget.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/widget.cpp b/src/widget.cpp
index c38a6fa2b..e18e2eed2 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -1153,7 +1153,17 @@ void NWidgetHorizontal::AssignSizePosition(SizingType sizing, uint x, uint y, ui
{
assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
- uint additional_length = given_width - this->smallest_x; // Additional width given to us.
+ /* Compute additional width given to us. */
+ uint additional_length = given_width;
+ if (sizing == ST_SMALLEST && (this->flags & NC_EQUALSIZE)) {
+ /* For EQUALSIZE containers this does not sum to smallest_x during initialisation */
+ for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) {
+ additional_length -= child_wid->smallest_x + child_wid->padding_right + child_wid->padding_left;
+ }
+ } else {
+ additional_length -= this->smallest_x;
+ }
+
this->StoreSizePosition(sizing, x, y, given_width, given_height);
/* In principle, the additional horizontal space is distributed evenly over the available resizable childs. Due to step sizes, this may not always be feasible.
@@ -1305,7 +1315,17 @@ void NWidgetVertical::AssignSizePosition(SizingType sizing, uint x, uint y, uint
{
assert(given_width >= this->smallest_x && given_height >= this->smallest_y);
- int additional_length = given_height - this->smallest_y; // Additional height given to us.
+ /* Compute additional height given to us. */
+ uint additional_length = given_height;
+ if (sizing == ST_SMALLEST && (this->flags & NC_EQUALSIZE)) {
+ /* For EQUALSIZE containers this does not sum to smallest_y during initialisation */
+ for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) {
+ additional_length -= child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom;
+ }
+ } else {
+ additional_length -= this->smallest_y;
+ }
+
this->StoreSizePosition(sizing, x, y, given_width, given_height);
/* Like the horizontal container, the vertical container also distributes additional height evenly, starting with the childs with the biggest resize steps.