OpenTTD: updated default settings, applied and removed patch files

This commit is contained in:
pelya
2014-03-16 00:17:25 +02:00
parent a0ceb71cd9
commit 5d7ece0760
73 changed files with 8 additions and 8611 deletions

View File

@@ -1,47 +0,0 @@
From 421c7f351ded614e3c1eb0d10c079e5d26865bd5 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 19 Oct 2013 11:48:29 +0000
Subject: [PATCH 006/249] Position of landscaping toolbar.
---
src/terraform_gui.cpp | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index 89e6204..2524b29 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -259,13 +259,6 @@ struct TerraformToolbarWindow : Window {
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
}
- virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number)
- {
- Point pt = GetToolbarAlignedWindowPosition(sm_width);
- pt.y += sm_height;
- return pt;
- }
-
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
{
if (pt.x != -1) {
@@ -348,7 +341,7 @@ static const NWidgetPart _nested_terraform_widgets[] = {
};
static WindowDesc _terraform_desc(
- WDP_MANUAL, "toolbar_landscape", 0, 0,
+ WDP_ALIGN_TOOLBAR, "toolbar_landscape", 0, 0,
WC_SCEN_LAND_GEN, WC_NONE,
WDF_CONSTRUCTION,
_nested_terraform_widgets, lengthof(_nested_terraform_widgets),
@@ -372,7 +365,6 @@ Window *ShowTerraformToolbar(Window *link)
DeleteWindowById(WC_SCEN_LAND_GEN, 0, true);
Window *w = AllocateWindowDescFront<TerraformToolbarWindow>(&_terraform_desc, 0);
/* Align the terraform toolbar under the main toolbar. */
- w->top -= w->height;
w->SetDirty();
/* Put the linked toolbar to the left / right of it. */
link->left = w->left + (_current_text_dir == TD_RTL ? w->width : -link->width);
--
1.8.1.2

View File

@@ -1,49 +0,0 @@
From fd1f3a3f2f615e12b5be1f318b2ddc6d9f854944 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 5 Oct 2013 17:40:42 +0000
Subject: [PATCH 007/249] Landscaping dropdown doesn't need trees and place
signs entries.
---
src/lang/english.txt | 2 --
src/toolbar_gui.cpp | 4 +---
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 0ebfe96..665b826 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -442,8 +442,6 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Airport constru
############ range for landscaping menu starts
STR_LANDSCAPING_MENU_LANDSCAPING :Landscaping
-STR_LANDSCAPING_MENU_PLANT_TREES :Plant trees
-STR_LANDSCAPING_MENU_PLACE_SIGN :Place sign
############ range ends here
############ range for music menu starts
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index f4cb584..cd7b9f6 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -958,7 +958,7 @@ static CallBackFunction MenuClickBuildAir(int index)
static CallBackFunction ToolbarForestClick(Window *w)
{
- PopupMainToolbMenu(w, WID_TN_LANDSCAPE, STR_LANDSCAPING_MENU_LANDSCAPING, 3);
+ PopupMainToolbMenu(w, WID_TN_LANDSCAPE, STR_LANDSCAPING_MENU_LANDSCAPING, 1);
return CBF_NONE;
}
@@ -972,8 +972,6 @@ static CallBackFunction MenuClickForest(int index)
{
switch (index) {
case 0: ShowTerraformToolbar(); break;
- case 1: ShowBuildTreesToolbar(); break;
- case 2: return SelectSignTool();
}
return CBF_NONE;
}
--
1.8.1.2

View File

@@ -1,97 +0,0 @@
From 43c03c190fae34d1cdbaa7028f21c54342b81ada Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 6 Jul 2013 22:08:58 +0200
Subject: [PATCH 008/249] Allow dropdown to be drawn above the origin widget,
even in the case the dropdown needs a scrollbar.
---
src/widgets/dropdown.cpp | 45 ++++++++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp
index 6b0f60e..fa5753d 100644
--- a/src/widgets/dropdown.cpp
+++ b/src/widgets/dropdown.cpp
@@ -334,10 +334,10 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b
{
DeleteWindowById(WC_DROPDOWN_MENU, 0);
- /* The preferred position is just below the dropdown calling widget */
+ /* The preferred position is just below the dropdown calling widget. */
int top = w->top + wi_rect.bottom + 1;
- /* The preferred width equals the calling widget */
+ /* The preferred width equals the calling widget. */
uint width = wi_rect.right - wi_rect.left + 1;
uint max_item_width = 0;
@@ -350,7 +350,7 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b
}
}
- /* Total length of list */
+ /* Total length of list. */
int list_height = 0;
for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) {
@@ -358,28 +358,47 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b
list_height += item->Height(width);
}
- /* Height of window visible */
+ /* Height of the dropdown window; by default, the total length of the list. */
int height = list_height;
/* Check if the status bar is visible, as we don't want to draw over it */
int screen_bottom = GetMainViewBottom();
bool scroll = false;
- /* Check if the dropdown will fully fit below the widget */
+ /* Check if the dropdown will fully fit below the widget. */
if (top + height + 4 >= screen_bottom) {
- /* If not, check if it will fit above the widget */
- if (w->top + wi_rect.top - height > GetMainViewTop()) {
+ /* If not, check if it will fit above the widget. */
+ int screen_top = GetMainViewTop();
+ if (w->top + wi_rect.top > screen_top + height) {
top = w->top + wi_rect.top - height - 4;
} else {
- /* ... and lastly if it won't, enable the scroll bar and fit the
- * list in below the widget */
+ /* If it doesn't fit above the widget, we need to enable a scrollbar... */
int avg_height = list_height / (int)list->Length();
- int rows = (screen_bottom - 4 - top) / avg_height;
- height = rows * avg_height;
scroll = true;
- /* Add space for the scroll bar if we automatically determined
- * the width of the list. */
+
+ /* ... and choose whether to put the list above or below the widget. */
+ bool put_above = false;
+ int available_height = screen_bottom - w->top - wi_rect.bottom;
+ if (w->top + wi_rect.top - screen_top > available_height) {
+ // Put it above.
+ available_height = w->top + wi_rect.top - screen_top;
+ put_above = true;
+ }
+
+ /* Check at least there is space for one item. */
+ assert(available_height >= avg_height);
+
+ /* And lastly, fit the list,... */
+ int rows = available_height / avg_height;
+ height = rows * avg_height;
+
+ /* ... add space for the scrollbar,... */
max_item_width += NWidgetScrollbar::GetVerticalDimension().width;
+
+ /* ... and set the top position if needed. */
+ if (put_above) {
+ top = w->top + wi_rect.top - height - 4;
+ }
}
}
--
1.8.1.2

View File

@@ -1,27 +0,0 @@
From 70e27c1f16620f76591f32955a76da59dcde3ec9 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Wed, 24 Apr 2013 18:40:21 +0200
Subject: [PATCH 012/249] Modify the length of the Group GUI.
Set it to the length of the 'a' character * maximum length of a group name.
---
src/group_gui.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index ed3176e..3048f17 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -165,7 +165,8 @@ private:
uint ComputeGroupInfoSize()
{
this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype));
- this->column_size[VGC_NAME].width = max(170u, this->column_size[VGC_NAME].width);
+/* We consider the max average length of characters to be the one of "a" */
+ this->column_size[VGC_NAME].width = max(GetCharacterWidth(FS_NORMAL, 97) * (MAX_LENGTH_GROUP_NAME_CHARS - 4), this->column_size[VGC_NAME].width);
this->tiny_step_height = this->column_size[VGC_NAME].height;
this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT);
--
1.8.1.2

View File

@@ -1,35 +0,0 @@
From 629484ecf00a137de94f7e38d46da094866902c0 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 31 Dec 2012 11:47:07 +0100
Subject: [PATCH 013/249] The space between the group name and the sprite is
set to 2 instead of 8. Less unused space.
---
src/group_gui.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index 3048f17..d8dbadd 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -191,7 +191,7 @@ private:
this->tiny_step_height += WD_MATRIX_TOP;
return WD_FRAMERECT_LEFT + 8 +
- this->column_size[VGC_NAME].width + 8 +
+ this->column_size[VGC_NAME].width + 2 +
this->column_size[VGC_PROTECT].width + 2 +
this->column_size[VGC_AUTOREPLACE].width + 2 +
this->column_size[VGC_PROFIT].width + 2 +
@@ -235,7 +235,7 @@ private:
DrawString(x, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
/* draw autoreplace protection */
- x = rtl ? x - 8 - this->column_size[VGC_PROTECT].width : x + 8 + this->column_size[VGC_NAME].width;
+ x = rtl ? x - 2 - this->column_size[VGC_PROTECT].width : x + 2 + this->column_size[VGC_NAME].width;
if (protection) DrawSprite(SPR_GROUP_REPLACE_PROTECT, PAL_NONE, x, y + (this->tiny_step_height - this->column_size[VGC_PROTECT].height) / 2);
/* draw autoreplace status */
--
1.8.1.2

View File

@@ -1,41 +0,0 @@
From 1531195c111c9857513a9978901afc883e183f4f Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 31 Dec 2012 11:47:33 +0100
Subject: [PATCH 014/249] Display of group names is longer when
autoreplace/protection sprites are hidden.
---
src/group_gui.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index d8dbadd..11502c7 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -222,6 +222,7 @@ private:
bool rtl = _current_text_dir == TD_RTL;
/* draw group name */
+ int longer_name = 0;
StringID str;
if (IsAllGroupID(g_id)) {
str = STR_GROUP_ALL_TRAINS + this->vli.vtype;
@@ -230,9 +231,13 @@ private:
} else {
SetDParam(0, g_id);
str = STR_GROUP_NAME;
+ if (!protection) {
+ longer_name += this->column_size[VGC_PROTECT].width + 2;
+ if (!stats.autoreplace_defined) longer_name += this->column_size[VGC_AUTOREPLACE].width + 2;
+ }
}
- int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8;
- DrawString(x, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
+ int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width - longer_name + 1 : left + WD_FRAMERECT_LEFT + 8;
+ DrawString(x, x + this->column_size[VGC_NAME].width + longer_name - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour);
/* draw autoreplace protection */
x = rtl ? x - 2 - this->column_size[VGC_PROTECT].width : x + 2 + this->column_size[VGC_NAME].width;
--
1.8.1.2

View File

@@ -1,145 +0,0 @@
From b26a95ac71bf3b079e0decb9ed73f6548ed4e30b Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 31 Dec 2012 11:25:18 +0100
Subject: [PATCH 018/249] Some small helpers to draw strings and sprites
dealing with left-to-right/right-to-left.
---
src/gfx.cpp | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/gfx_func.h | 11 +++++++
2 files changed, 112 insertions(+)
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 938404c..eabb49c 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -1657,3 +1657,104 @@ void SortResolutions(int count)
{
QSortT(_resolutions, count, &compare_res);
}
+
+
+/**
+ * Returns the initial value for a margin, after telling where are the left and right margins and where we want to draw/write (begining/end of line)
+ * @param left is the left margin of the horizontal space we want to draw to
+ * @param right: right margin
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ * @return the margin we asked
+ */
+int InitTempMargin(int left, int right, bool to_end_line)
+{
+ return to_end_line ^ (_current_text_dir == TD_RTL) ? right :left;
+}
+
+/**
+ * Consumes a space in an horizontal margin
+ * @param space: amount of space used
+ * @param here: the margin where to add the space
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ */
+void AddSpace(int space, int &here, bool to_end_line)
+{
+ here += to_end_line ^ (_current_text_dir == TD_RTL) ? -space : space;
+}
+
+/**
+ * After drawing something, update a margin
+ * @param end is where we ended drawing (usually the return value of a DrawString function)
+ * @param margin is the margin we want to update
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ */
+void UpdateMarginEnd(int end, int &margin, bool to_end_line)
+{
+ margin = to_end_line ^ (_current_text_dir == TD_RTL) ? min(end, margin) : max(end, margin);
+}
+
+/**
+ * After drawing something, horizontal margins are updated
+ * @param end: last position drawn
+ * @param left is the left margin of the horizontal space drawn
+ * @param right: right margin
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ */
+void UpdateMarginsEnd(int end, int &left, int &right, bool to_end_line)
+{
+ if (to_end_line ^ (_current_text_dir == TD_RTL)) {
+ right = end;
+ } else {
+ left = end;
+ }
+}
+
+/**
+ * After drawing something of a certain width, update margins
+ * @param width: used space
+ * @param initial left margin
+ * @param initial right margin
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ */
+void UpdateMarginsWidth(int width, int &left, int &right, bool to_end_line)
+{
+ if (to_end_line ^ (_current_text_dir == TD_RTL)) {
+ right -= width;
+ } else {
+ left += width;
+ }
+}
+
+/**
+ * Draws a string in a delimited space; temporal margin gets updated
+ * @param left is the left margin of the horizontal space we want to draw to
+ * @param right: right margin of the horizontal space we want to draw to
+ * @param top: vertical position
+ * @param margin keeps the most extreme limit used of the line (this should be previously initialized with InitTempLimit)
+ * @param string to draw
+ * @param colour for the string
+ * @param alignment of the string (only left or right alignment)
+ * @param underline
+ */
+void DrawString2(int left, int right, int top, int &margin, StringID str, TextColour colour, StringAlignment align, bool underline)
+{
+ int end = DrawString(left, right, top, str, colour, align, underline);
+ UpdateMarginEnd(end, margin, align == SA_RIGHT);
+}
+
+/**
+ * Draws a sprite in a delimited space; temporal margin gets updated
+ * @param width of the sprite
+ * @param left is the left margin of the horizontal space we want to draw to
+ * @param right: right margin of the horizontal space
+ * @param top: vertical position
+ * @param margin keeps the most extreme limit used of the line (this should be previously initialized with InitTempLimit)
+ * @param sprite
+ * @param palette
+ * @param to_end_line: 0 if working at the begining of the line, 1 if working at the end
+ */
+void DrawSprite2(int width, int left, int right, int top, int &margin, SpriteID img, PaletteID pal, bool to_end_line, SubSprite *sub)
+{
+ DrawSprite(img, pal, to_end_line ^ (_current_text_dir == TD_RTL) ? right - width : left, top, sub);
+ margin = to_end_line ^ (_current_text_dir == TD_RTL) ? min(right - width, margin): max(margin, left + width);
+}
diff --git a/src/gfx_func.h b/src/gfx_func.h
index 69d2e45..3a59073 100644
--- a/src/gfx_func.h
+++ b/src/gfx_func.h
@@ -170,6 +170,17 @@ int GetCharacterHeight(FontSize size);
/** Height of characters in the large (#FS_MONO) font. */
#define FONT_HEIGHT_MONO (GetCharacterHeight(FS_MONO))
+int InitTempMargin(int left, int right, bool to_end_line);
+void AddSpace(int space, int &here, bool to_end_line);
+
+void UpdateMarginEnd(int end, int &margin, bool to_end_line);
+void UpdateMarginWidth(int adding, int &margin, bool to_end_line);
+void UpdateMarginsEnd(int end, int &left, int &right, bool to_end_line);
+void UpdateMarginsWidth(int width, int &left, int &right, bool to_end_line);
+
+void DrawString2(int left, int right, int top, int &margin, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
+void DrawSprite2(int width, int left, int right, int top, int &margin, SpriteID img, PaletteID pal, bool to_end_line = false, SubSprite *sub = NULL);
+
extern DrawPixelInfo *_cur_dpi;
TextColour GetContrastColour(uint8 background);
--
1.8.1.2

View File

@@ -1,195 +0,0 @@
From 0704c42d1428c1ffc94680972fcf1d146c5c2724 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Wed, 24 Apr 2013 18:58:14 +0200
Subject: [PATCH 019/249] Adapt the boxes showing waiting cargo on the Station
List:
- rtl suport.
- size of the boxes adapted to the height of the normal font.
- draw a shadowed box if there is no cargo waiting but cargo has been accepted in that station.
- also always draw the box for a cargo if cargo has been produced but there are no waiting units.
---
src/station_base.h | 8 ++++
src/station_gui.cpp | 119 ++++++++++++++++++++++++++++++++--------------------
2 files changed, 81 insertions(+), 46 deletions(-)
diff --git a/src/station_base.h b/src/station_base.h
index c0bb96c..523b52b 100644
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -290,6 +290,14 @@ struct GoodsEntry {
FlowStatMap::const_iterator flow_it(this->flows.find(source));
return flow_it != this->flows.end() ? flow_it->second.GetVia(excluded, excluded2) : INVALID_STATION;
}
+
+ /**
+ * Return true if a cargo type has a rating here or if there is cargo waiting for this type.
+ */
+ inline bool IsSourceStationForCargo() const
+ {
+ return this->HasRating() || this->cargo.TotalCount() > 0;
+ }
};
/** All airport-related information. Only valid if tile != INVALID_TILE. */
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index e658c1f..e46bcac 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -100,44 +100,90 @@ void CheckRedrawStationCoverage(const Window *w)
* @param type Cargo type
* @param amount Cargo amount
* @param rating ratings data for that particular cargo
- *
- * @note Each cargo-bar is 16 pixels wide and 6 pixels high
- * @note Each rating 14 pixels wide and 1 pixel high and is 1 pixel below the cargo-bar
*/
static void StationsWndShowStationRating(int left, int right, int y, CargoID type, uint amount, byte rating)
{
- static const uint units_full = 576; ///< number of units to show station as 'full'
- static const uint rating_full = 224; ///< rating needed so it is shown as 'full'
+ static const uint units_full = 1 << 9; ///< Number of units to show station as full.
+ static const uint rating_full = 224; ///< Rating needed so it is shown as full.
const CargoSpec *cs = CargoSpec::Get(type);
if (!cs->IsValid()) return;
+ y++; ///< Make boxes 1 pixel shorter.
+ int left_start = left;
+ int right_start = right;
+ int height = GetCharacterHeight(FS_SMALL) - 2;
int colour = cs->rating_colour;
- TextColour tc = GetContrastColour(colour);
- uint w = (minu(amount, units_full) + 5) / 36;
- int height = GetCharacterHeight(FS_SMALL);
+ /* Get width of the box to draw. */
+ uint width = minu(amount, units_full) * (right - left) / units_full;
- /* Draw total cargo (limited) on station (fits into 16 pixels) */
- if (w != 0) GfxFillRect(left, y, left + w - 1, y + height, colour);
+ /* Update the end margin, adding the width of the box not to be drawn... */
+ if (width != 0) UpdateMarginsWidth(right - left - width, left_start, right_start, true);
+ /* ... or prepare margins in case width == 0 and amount > 0 (just one pixel bar). */
+ else left_start = right_start = _current_text_dir ? right : left;
- /* Draw a one pixel-wide bar of additional cargo meter, useful
- * for stations with only a small amount (<=30) */
- if (w == 0) {
- uint rest = amount / 5;
- if (rest != 0) {
- w += left;
- GfxFillRect(w, y + height - rest, w, y + height, colour);
- }
- }
+ /* Draw total cargo (limited) on station */
+ if (amount > 0) GfxFillRect(left_start, y, right_start, y + height, colour);
- DrawString(left + 1, right, y, cs->abbrev, tc);
+ DrawString(left, right, y, cs->abbrev, GetContrastColour(colour), SA_CENTER);
- /* Draw green/red ratings bar (fits into 14 pixels) */
+ /* Draw green/red ratings bar*/
y += height + 2;
- GfxFillRect(left + 1, y, left + 14, y, PC_RED);
- rating = minu(rating, rating_full) / 16;
- if (rating != 0) GfxFillRect(left + 1, y, left + rating, y, PC_GREEN);
+ left_start = left + 1;
+ right_start = right - 1;
+ if (rating != 0) {
+ GfxFillRect(left_start, y, right_start, y, PC_GREEN);
+ width = minu(rating, rating_full) * (right_start - left_start) / rating_full;
+ UpdateMarginsWidth(width, left_start, right_start, false);
+ }
+ GfxFillRect(left_start, y, right_start, y, PC_RED);
+}
+
+/**
+ * Draw small boxes of cargo accepted.
+ * @param left Left most coordinate to draw the box at.
+ * @param right Right most coordinate to draw the box at.
+ * @param y Coordinate to draw the box at.
+ * @param type Cargo type.
+ * @param acceptance_pickup_byte Acceptance byte.
+ */
+static void StationsWndShowAcceptance(int left, int right, int y, CargoID type)
+{
+ const CargoSpec *cs = CargoSpec::Get(type);
+ if (!cs->IsValid()) return;
+ y++;
+ GfxFillRect(left, y, right, y + GetCharacterHeight(FS_SMALL), cs->rating_colour, FILLRECT_CHECKER);
+ DrawString(left, right, y, cs->abbrev, TC_BLACK, SA_CENTER);
+}
+
+/**
+ * Draw small boxes showing cargo waiting, ratings... for a given station.
+ * @param st Station to draw statistics of.
+ * @param x Position to start drawing at.
+ * @param width Width for each box.
+ * @param y Height position to draw the box at.
+ */
+void StationsWndShowStationRating(const Station *st, int left, int right, int x, int width, int y)
+{
+ bool rtl = _current_text_dir == TD_RTL;
+ AddSpace(5, x, false);
+
+ /* For RTL we work in exactly the opposite direction. So
+ * decrement the space needed first, then draw to the left
+ * instead of drawing to the left and then incrementing
+ * the space. */
+ if (rtl) x -= width + 4;
+ for (uint j = 0; j < _sorted_standard_cargo_specs_size && ( x > left && x + width < right ); j++) {
+ CargoID cid = _sorted_cargo_specs[j]->Index();
+ if (st->goods[cid].IsSourceStationForCargo()) {
+ StationsWndShowStationRating(x, x + width, y, cid, st->goods[cid].cargo.TotalCount(), st->goods[cid].rating);
+ AddSpace(width + 4, x, false);
+ } else if (HasBit(st->goods[cid].acceptance_pickup, GoodsEntry::GES_EVER_ACCEPTED)) {
+ StationsWndShowAcceptance(x, x + width, y, cid);
+ AddSpace(width + 4, x, false);
+ }
+ }
}
typedef GUIList<const Station*> GUIStationList;
@@ -404,7 +450,6 @@ public:
break;
case WID_STL_LIST: {
- bool rtl = _current_text_dir == TD_RTL;
int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.Length());
int y = r.top + WD_FRAMERECT_TOP;
for (int i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner
@@ -418,27 +463,9 @@ public:
SetDParam(0, st->index);
SetDParam(1, st->facilities);
int x = DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_LIST_STATION);
- x += rtl ? -5 : 5;
-
- /* show cargo waiting and station ratings */
- for (uint j = 0; j < _sorted_standard_cargo_specs_size; j++) {
- CargoID cid = _sorted_cargo_specs[j]->Index();
- if (st->goods[cid].cargo.TotalCount() > 0) {
- /* For RTL we work in exactly the opposite direction. So
- * decrement the space needed first, then draw to the left
- * instead of drawing to the left and then incrementing
- * the space. */
- if (rtl) {
- x -= 20;
- if (x < r.left + WD_FRAMERECT_LEFT) break;
- }
- StationsWndShowStationRating(x, x + 16, y, cid, st->goods[cid].cargo.TotalCount(), st->goods[cid].rating);
- if (!rtl) {
- x += 20;
- if (x > r.right - WD_FRAMERECT_RIGHT) break;
- }
- }
- }
+
+ StationsWndShowStationRating(st, r.left, r.right, x, FONT_HEIGHT_NORMAL + 2, y);
+
y += FONT_HEIGHT_NORMAL;
}
--
1.8.1.2

View File

@@ -1,33 +0,0 @@
From 199983be811c042a54b4079139d5521e9dcce9d5 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 9 Aug 2013 09:33:12 +0000
Subject: [PATCH 172/249] Center yes/no buttons on query string.
---
src/misc_gui.cpp | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index d771f92..2e54b4f 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -1155,9 +1155,13 @@ static const NWidgetPart _nested_query_widgets[] = {
EndContainer(),
NWidget(WWT_PANEL, COLOUR_RED), SetPIP(8, 15, 8),
NWidget(WWT_TEXT, COLOUR_RED, WID_Q_TEXT), SetMinimalSize(200, 12),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(20, 29, 20),
- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_Q_NO), SetMinimalSize(71, 12), SetDataTip(STR_QUIT_NO, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_Q_YES), SetMinimalSize(71, 12), SetDataTip(STR_QUIT_YES, STR_NULL),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY), SetFill(1, 1),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(20, 29, 20),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_Q_NO), SetMinimalSize(71, 12), SetDataTip(STR_QUIT_NO, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_Q_YES), SetMinimalSize(71, 12), SetDataTip(STR_QUIT_YES, STR_NULL),
+ EndContainer(),
+ NWidget(WWT_EMPTY), SetFill(1, 1),
EndContainer(),
EndContainer(),
};
--
1.8.1.2

View File

@@ -1,86 +0,0 @@
From acd5c1d49292557fb174c42b33d02232b52b9c6f Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Wed, 26 Jun 2013 20:34:38 +0200
Subject: [PATCH 173/249] Reorder DrawWidget on StatusBarWindow.
---
src/statusbar_gui.cpp | 27 +++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp
index 62799e1..fe9b2b3 100644
--- a/src/statusbar_gui.cpp
+++ b/src/statusbar_gui.cpp
@@ -128,11 +128,13 @@ struct StatusBarWindow : Window {
virtual void DrawWidget(const Rect &r, int widget) const
{
+ StringID str = INVALID_STRING_ID;
+
switch (widget) {
case WID_S_LEFT:
/* Draw the date */
SetDParam(0, _date);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_WHITE_DATE_LONG;
break;
case WID_S_RIGHT: {
@@ -140,7 +142,7 @@ struct StatusBarWindow : Window {
const Company *c = Company::GetIfValid(_local_company);
if (c != NULL) {
SetDParam(0, c->money);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_COMPANY_MONEY;
}
break;
}
@@ -148,11 +150,11 @@ struct StatusBarWindow : Window {
case WID_S_MIDDLE:
/* Draw status bar */
if (this->saving) { // true when saving is active
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_SAVING_GAME, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_STATUSBAR_SAVING_GAME;
} else if (_do_autosave) {
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_STATUSBAR_AUTOSAVE;
} else if (_pause_mode != PM_UNPAUSED) {
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_PAUSED, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_STATUSBAR_PAUSED;
} else if (this->ticker_scroll < TICKER_STOP && FindWindowById(WC_NEWS_WINDOW, 0) == NULL && _statusbar_news_item != NULL && _statusbar_news_item->string_id != 0) {
/* Draw the scrolling news text */
if (!DrawScrollingStatusText(_statusbar_news_item, this->ticker_scroll, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom)) {
@@ -160,22 +162,23 @@ struct StatusBarWindow : Window {
if (Company::IsValidID(_local_company)) {
/* This is the default text */
SetDParam(0, _local_company);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_STATUSBAR_COMPANY_NAME;
}
}
} else {
if (Company::IsValidID(_local_company)) {
/* This is the default text */
SetDParam(0, _local_company);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
+ str = STR_STATUSBAR_COMPANY_NAME;
}
}
+ }
- if (this->reminder_timeout > 0) {
- Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS);
- DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + WD_FRAMERECT_TOP + (int)(FONT_HEIGHT_NORMAL - icon_size.height) / 2);
- }
- break;
+ if (str != INVALID_STRING_ID) DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_FROMSTRING, SA_HOR_CENTER);
+
+ if (widget == WID_S_MIDDLE && this->reminder_timeout > 0) {
+ Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS);
+ DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + WD_FRAMERECT_TOP + (int)(FONT_HEIGHT_NORMAL - icon_size.height) / 2);
}
}
--
1.8.1.2

View File

@@ -1,50 +0,0 @@
From 44eb7d5368be869a0e8bcaf9251fa2e368427b3c Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 9 Aug 2013 09:33:00 +0000
Subject: [PATCH 174/249] Get better sizes for widgets of statusbar.
---
src/statusbar_gui.cpp | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp
index fe9b2b3..a6123e5 100644
--- a/src/statusbar_gui.cpp
+++ b/src/statusbar_gui.cpp
@@ -103,20 +103,30 @@ struct StatusBarWindow : Window {
{
Dimension d;
switch (widget) {
+ /* Left and right should have same sizing. */
case WID_S_LEFT:
+ case WID_S_RIGHT: {
SetDParamMaxValue(0, MAX_YEAR * DAYS_IN_YEAR);
d = GetStringBoundingBox(STR_WHITE_DATE_LONG);
- break;
- case WID_S_RIGHT: {
int64 max_money = UINT32_MAX;
const Company *c;
FOR_ALL_COMPANIES(c) max_money = max<int64>(c->money, max_money);
SetDParam(0, 100LL * max_money);
- d = GetStringBoundingBox(STR_COMPANY_MONEY);
+ d = maxdim(d, GetStringBoundingBox(STR_COMPANY_MONEY));
break;
}
+ case WID_S_MIDDLE:
+ d = GetStringBoundingBox(STR_STATUSBAR_AUTOSAVE);
+ d = maxdim(d, GetStringBoundingBox(STR_STATUSBAR_PAUSED));
+
+ if (Company::IsValidID(_local_company)) {
+ SetDParam(0, _local_company);
+ d = maxdim(d, GetStringBoundingBox(STR_STATUSBAR_COMPANY_NAME));
+ }
+ break;
+
default:
return;
}
--
1.8.1.2

View File

@@ -1,28 +0,0 @@
From d55046d99644223cdecb03763e87401349c816c0 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 10 Aug 2013 19:44:28 +0000
Subject: [PATCH 176/249] Make icons for selling, selling all,
autoreplacing,... the same height.
---
src/depot_gui.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp
index c677d03..c71089b 100644
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -60,8 +60,8 @@ static const NWidgetPart _nested_train_depot_widgets[] = {
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_SELL_CHAIN),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_D_SELL_CHAIN), SetDataTip(SPR_SELL_CHAIN_TRAIN, STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP), SetResize(0, 1), SetFill(0, 1),
EndContainer(),
- NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_SELL_ALL), SetDataTip(0x0, STR_NULL),
- NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_AUTOREPLACE), SetDataTip(0x0, STR_NULL),
+ NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_SELL_ALL), SetResize(0, 1), SetFill(0, 1), SetDataTip(0x0, STR_NULL),
+ NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_AUTOREPLACE), SetResize(0, 1), SetFill(0, 1), SetDataTip(0x0, STR_NULL),
EndContainer(),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_D_V_SCROLL),
EndContainer(),
--
1.8.1.2

View File

@@ -1,47 +0,0 @@
From 3b35d40eaf709c7851a95f5788d29470bad25d1e Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 11 Aug 2013 13:33:33 +0000
Subject: [PATCH 177/249] Change the SetFill/Resize status of order/group by
widgets on station GUI.
---
src/station_gui.cpp | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 4373ff3..c011f7c 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -612,12 +612,12 @@ static const NWidgetPart _nested_station_view_widgets[] = {
NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SORT_ORDER), SetMinimalSize(81, 12), SetFill(1, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_SORT_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SV_SORT_ORDER), SetMinimalSize(81, 12), SetFill(0, 1), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_SORT_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
EndContainer(),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_GROUP), SetMinimalSize(81, 12), SetFill(1, 1), SetDataTip(STR_STATION_VIEW_GROUP, 0x0),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_GROUP_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(0, 1), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SV_GROUP), SetMinimalSize(81, 12), SetFill(0, 1), SetDataTip(STR_STATION_VIEW_GROUP, 0x0),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SV_GROUP_BY), SetMinimalSize(168, 12), SetResize(1, 0), SetFill(1, 1), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_GREY, WID_SV_WAITING), SetMinimalSize(237, 44), SetResize(1, 10), SetScrollbar(WID_SV_SCROLLBAR), EndContainer(),
@@ -1234,6 +1234,12 @@ struct StationViewWindow : public Window {
fill->width = 0;
}
break;
+
+ case WID_SV_SORT_ORDER:
+ case WID_SV_GROUP:
+ *size = maxdim(GetStringBoundingBox(STR_BUTTON_SORT_BY), GetStringBoundingBox(STR_STATION_VIEW_GROUP));
+ size->width += padding.width;
+ break;
}
}
--
1.8.1.2

View File

@@ -1,35 +0,0 @@
From 35dca6035b51dcaf5519e7cd20dbc1671b4a9bbd Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Wed, 26 Jun 2013 20:13:41 +0200
Subject: [PATCH 178/249] Use resize.step_height, so the height of each element
doesn't need to be FONT_HEIGHT_NORMAL.
---
src/town_gui.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index f575839..b00be1a 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -203,7 +203,7 @@ public:
if (--pos < 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_LOCAL_AUTHORITY_ACTIONS_TITLE);
- y += FONT_HEIGHT_NORMAL;
+ y += this->resize.step_height;
}
for (int i = 0; buttons; i++, buttons >>= 1) {
@@ -212,7 +212,7 @@ public:
if ((buttons & 1) && --pos < 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y,
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i, this->sel_index == i ? TC_WHITE : TC_ORANGE);
- y += FONT_HEIGHT_NORMAL;
+ y += this->resize.step_height;
}
}
break;
--
1.8.1.2

View File

@@ -1,35 +0,0 @@
From f68093a3e526ea71fc67bd764c2f1ef0e39b9438 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 22 Jun 2013 20:09:00 +0200
Subject: [PATCH 179/249] Functions for drawing vertically aligned strings.
---
src/gfx_func.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/gfx_func.h b/src/gfx_func.h
index 3a59073..4750b3c 100644
--- a/src/gfx_func.h
+++ b/src/gfx_func.h
@@ -181,6 +181,18 @@ void UpdateMarginsWidth(int width, int &left, int &right, bool to_end_line);
void DrawString2(int left, int right, int top, int &margin, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
void DrawSprite2(int width, int left, int right, int top, int &margin, SpriteID img, PaletteID pal, bool to_end_line = false, SubSprite *sub = NULL);
+/**
+ * Return where to start drawing a centered object inside a widget.
+ * @param top The top coordinate (or the left coordinate) of the widget.
+ * @param height The height (or width) of the widget.
+ * @param size The height (or width) of the object to draw.
+ * @return The coordinate where to start drawing the centered object.
+ */
+static inline int Center(int top, int height, uint size = FONT_HEIGHT_NORMAL)
+{
+ return top + (height - size) / 2;
+}
+
extern DrawPixelInfo *_cur_dpi;
TextColour GetContrastColour(uint8 background);
--
1.8.1.2

View File

@@ -1,302 +0,0 @@
From 9dc15df06c0badd6317b58267763e821a61ca588 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 29 Jun 2013 11:53:50 +0200
Subject: [PATCH 180/249] Draw strings vertically aligned on some windows.
---
src/airport_gui.cpp | 4 +++-
src/autoreplace_gui.cpp | 2 +-
src/build_vehicle_gui.cpp | 13 ++++---------
src/filters/filter_window_gui.cpp | 2 +-
src/fios_gui.cpp | 2 +-
src/group_details_gui.cpp | 11 +++++------
src/industry_gui.cpp | 2 +-
src/misc_gui.cpp | 5 +++--
src/network/network_chat_gui.cpp | 2 +-
src/network/network_content_gui.cpp | 13 +++++++------
src/settings_gui.cpp | 4 ++--
src/station_gui.cpp | 2 +-
src/statusbar_gui.cpp | 9 ++++++---
src/town_gui.cpp | 2 +-
src/vehicle_gui.cpp | 4 ++--
src/widgets/dropdown.cpp | 2 +-
16 files changed, 40 insertions(+), 39 deletions(-)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index ca40f35..a7476fc 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -335,7 +335,9 @@ public:
if (!as->IsAvailable()) {
GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->line_height - 2, PC_BLACK, FILLRECT_CHECKER);
}
- DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, as->name, ((int)i == _selected_airport_index) ? TC_WHITE : TC_BLACK);
+
+ DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, Center(y, this->line_height), as->name, ((int)i == _selected_airport_index) ? TC_WHITE : TC_BLACK);
+
y += this->line_height;
}
break;
diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp
index 5345ff4..94c44c6 100644
--- a/src/autoreplace_gui.cpp
+++ b/src/autoreplace_gui.cpp
@@ -362,7 +362,7 @@ public:
SetDParam(0, STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED);
}
- DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_BLACK_STRING, TC_FROMSTRING, SA_HOR_CENTER);
+ DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, Center(r.top, r.bottom - r.top), STR_BLACK_STRING, TC_FROMSTRING, SA_HOR_CENTER);
break;
}
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index adb117b..fd78d4d 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -886,7 +886,6 @@ void DrawEngineList(VehicleType type, int l, int r, int y, const GUIEngineList *
int sprite_width = sprite_left + sprite_right;
int sprite_x = rtl ? r - sprite_right - 1 : l + sprite_left + 1;
- int sprite_y_offset = sprite_y_offsets[type] + step_size / 2;
Dimension replace_icon = {0, 0};
int count_width = 0;
@@ -902,10 +901,6 @@ void DrawEngineList(VehicleType type, int l, int r, int y, const GUIEngineList *
int count_left = l;
int count_right = rtl ? text_left : r - WD_FRAMERECT_RIGHT - replace_icon.width - 8;
- int normal_text_y_offset = (step_size - FONT_HEIGHT_NORMAL) / 2;
- int small_text_y_offset = step_size - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1;
- int replace_icon_y_offset = (step_size - replace_icon.height) / 2 - 1;
-
for (; min < max; min++, y += step_size) {
const EngineID engine = (*eng_list)[min];
Engine *e = Engine::Get(engine);
@@ -929,13 +924,13 @@ void DrawEngineList(VehicleType type, int l, int r, int y, const GUIEngineList *
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, engine);
SetDParam(0, engine);
- DrawString(text_left, text_right, y + normal_text_y_offset, STR_ENGINE_NAME, engine == selected_id ? TC_WHITE : TC_BLACK);
- DrawVehicleEngine(l, r, sprite_x, y + sprite_y_offset, engine, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_company), EIT_PURCHASE);
+ DrawString(text_left, text_right, Center(y, step_size), STR_ENGINE_NAME, text_colour);
+ DrawVehicleEngine(l, r, sprite_x, Center(y, step_size, sprite_y_offsets[type]), engine, palette_crash ? PALETTE_CRASH : GetEnginePalette(engine, _local_company), EIT_PURCHASE);
if (show_count) {
SetDParam(0, num_engines);
- DrawString(count_left, count_right, y + small_text_y_offset, STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
- if (EngineHasReplacementForCompany(Company::Get(_local_company), engine, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, replace_icon_left, y + replace_icon_y_offset);
+ DrawString(count_left, count_right, Center(y, step_size, FONT_HEIGHT_SMALL), STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
+ if (EngineHasReplacementForCompany(Company::Get(_local_company), engine, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, replace_icon_left, Center(y, step_size, replace_icon.height));
}
}
}
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 4f15860..de595e3 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -1266,7 +1266,7 @@ public:
case WID_ID_INDUSTRY_LIST: {
int n = 0;
- int y = r.top + WD_FRAMERECT_TOP;
+ int y = Center(r.top, this->resize.step_height);
if (this->industries.Length() == 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_DIRECTORY_NONE);
break;
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 2e54b4f..05ab96d 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -778,11 +778,12 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
/* If we have a marked area, draw a background highlight. */
if (tb->marklength != 0) GfxFillRect(delta + tb->markxoffs, 0, delta + tb->markxoffs + tb->marklength - 1, bottom - top, PC_GREY);
- DrawString(delta, tb->pixels, 0, tb->buf, TC_YELLOW);
+ DrawString(delta, tb->pixels, Center(0, bottom - top), tb->buf, TC_YELLOW);
+
bool focussed = w->IsWidgetGloballyFocused(wid) || IsOSKOpenedFor(w, wid);
if (focussed && tb->caret) {
int caret_width = GetStringBoundingBox("_").width;
- DrawString(tb->caretxoffs + delta, tb->caretxoffs + delta + caret_width, 0, "_", TC_WHITE);
+ DrawString(tb->caretxoffs + delta, tb->caretxoffs + delta + caret_width, Center(0, bottom - top), "_", TC_WHITE);
}
_cur_dpi = old_dpi;
diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp
index 5fa311b..92cd39d 100644
--- a/src/network/network_chat_gui.cpp
+++ b/src/network/network_chat_gui.cpp
@@ -478,7 +478,7 @@ struct NetworkChatWindow : public Window {
if (this->dtype == DESTTYPE_CLIENT) {
SetDParamStr(0, NetworkClientInfo::GetByClientID((ClientID)this->dest)->client_name);
}
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, this->dest_string, TC_BLACK, SA_RIGHT);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), this->dest_string, TC_BLACK, SA_RIGHT);
}
virtual void OnClick(Point pt, int widget, int click_count)
diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp
index 643628a..3ed9dfd 100644
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -535,7 +535,7 @@ public:
{
switch (widget) {
case WID_NCL_FILTER_CAPT:
- DrawString(r.left, r.right, r.top, STR_CONTENT_FILTER_TITLE, TC_FROMSTRING, SA_RIGHT);
+ DrawString(r.left, r.right, Center(r.top, r.bottom - r.top), STR_CONTENT_FILTER_TITLE, TC_FROMSTRING, SA_RIGHT);
break;
case WID_NCL_DETAILS:
@@ -577,13 +577,13 @@ public:
/* Fill the matrix with the information */
- int sprite_y_offset = WD_MATRIX_TOP + (FONT_HEIGHT_NORMAL - 10) / 2;
+ Dimension sprite_dim = GetSpriteSize(SPR_BOX_EMPTY);
uint y = r.top;
int cnt = 0;
for (ConstContentIterator iter = this->content.Get(this->vscroll->GetPosition()); iter != this->content.End() && cnt < this->vscroll->GetCapacity(); iter++, cnt++) {
const ContentInfo *ci = *iter;
- if (ci == this->selected) GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 1, PC_GREY);
+ if (ci == this->selected) GfxFillRect(r.left + 1, y + WD_FRAMERECT_TOP, r.right - 1, y + this->resize.step_height - WD_FRAMERECT_BOTTOM, PC_GREY);
SpriteID sprite;
SpriteID pal = PAL_NONE;
@@ -595,12 +595,13 @@ public:
case ContentInfo::DOES_NOT_EXIST: sprite = SPR_BLOT; pal = PALETTE_TO_RED; break;
default: NOT_REACHED();
}
- DrawSprite(sprite, pal, nwi_checkbox->pos_x + (pal == PAL_NONE ? 2 : 3), y + sprite_y_offset + (pal == PAL_NONE ? 1 : 0));
+
+ DrawSprite(sprite, pal, Center(nwi_checkbox->pos_x + (pal == PAL_NONE ? 2 : 3), nwi_checkbox->current_x, sprite_dim.width), Center(y, this->resize.step_height, sprite_dim.height + (pal == PAL_NONE ? 0 : -2)));
StringID str = STR_CONTENT_TYPE_BASE_GRAPHICS + ci->type - CONTENT_TYPE_BASE_GRAPHICS;
- DrawString(nwi_type->pos_x, nwi_type->pos_x + nwi_type->current_x - 1, y + WD_MATRIX_TOP, str, TC_BLACK, SA_HOR_CENTER);
+ DrawString(nwi_type->pos_x, nwi_type->pos_x + nwi_type->current_x - 1, Center(y, this->resize.step_height), str, TC_BLACK, SA_HOR_CENTER);
- DrawString(nwi_name->pos_x + WD_FRAMERECT_LEFT, nwi_name->pos_x + nwi_name->current_x - WD_FRAMERECT_RIGHT, y + WD_MATRIX_TOP, ci->name, TC_BLACK);
+ DrawString(nwi_name->pos_x + WD_FRAMERECT_LEFT, nwi_name->pos_x + nwi_name->current_x - WD_FRAMERECT_RIGHT, Center(y,this->resize.step_height), ci->name, TC_BLACK);
y += this->resize.step_height;
}
}
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 838e5fa..5067550 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -1140,7 +1140,7 @@ uint SettingEntry::Draw(GameSettings *settings_ptr, int left, int right, int bas
case SEF_SUBTREE_KIND:
if (cur_row >= first_row) {
DrawSprite((this->d.sub.folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED), PAL_NONE, rtl ? x - 8 : x, y + (SETTING_HEIGHT - 11) / 2);
- DrawString(rtl ? left : x + 12, rtl ? x - 12 : right, y, this->d.sub.title);
+ DrawString(rtl ? left : x + 12, rtl ? x - 12 : right, Center(y, SETTING_HEIGHT), this->d.sub.title);
}
cur_row++;
if (!this->d.sub.folded) {
@@ -1232,7 +1232,7 @@ void SettingEntry::DrawSetting(GameSettings *settings_ptr, int left, int right,
editable && value != (sdb->flags & SGF_0ISDISABLED ? 0 : sdb->min), editable && (uint32)value != sdb->max);
}
this->SetValueDParams(1, value);
- DrawString(text_left, text_right, y, sdb->str, highlight ? TC_WHITE : TC_LIGHT_BLUE);
+ DrawString(text_left, text_right, Center(y, SETTING_HEIGHT), sdb->str, highlight ? TC_WHITE : TC_LIGHT_BLUE);
}
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index c011f7c..9080fa8 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -2132,7 +2132,7 @@ struct SelectStationWindow : Window {
{
if (widget != WID_JS_PANEL) return;
- uint y = r.top + WD_FRAMERECT_TOP;
+ uint y = Center(r.top, this->resize.step_height);
if (this->vscroll->GetPosition() == 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT : STR_JOIN_STATION_CREATE_SPLITTED_STATION);
y += this->resize.step_height;
diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp
index a6123e5..c06976f 100644
--- a/src/statusbar_gui.cpp
+++ b/src/statusbar_gui.cpp
@@ -67,7 +67,7 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &tmp_dpi;
- DrawString(pos, INT16_MAX, 0, buffer, TC_LIGHT_BLUE, SA_LEFT | SA_FORCE);
+ DrawString(pos, INT16_MAX, Center(0, bottom - top), buffer, TC_LIGHT_BLUE, SA_LEFT | SA_FORCE);
_cur_dpi = old_dpi;
return (_current_text_dir == TD_RTL) ? (pos < right - left) : (pos + width > 0);
@@ -182,13 +182,16 @@ struct StatusBarWindow : Window {
str = STR_STATUSBAR_COMPANY_NAME;
}
}
+ break;
}
- if (str != INVALID_STRING_ID) DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_FROMSTRING, SA_HOR_CENTER);
+ int center_top = Center(r.top + WD_FRAMERECT_TOP, r.bottom - r.top);
+ if (str != INVALID_STRING_ID) DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, center_top, str, TC_FROMSTRING, SA_HOR_CENTER);
if (widget == WID_S_MIDDLE && this->reminder_timeout > 0) {
Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS);
- DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + WD_FRAMERECT_TOP + (int)(FONT_HEIGHT_NORMAL - icon_size.height) / 2);
+ center_top = Center(r.top + WD_FRAMERECT_TOP, r.bottom - r.top, icon_size.height);
+ DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, center_top);
}
}
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index b00be1a..3960469 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -198,7 +198,7 @@ public:
case WID_TA_COMMAND_LIST: {
int numact;
uint buttons = GetMaskOfTownActions(&numact, _local_company, this->town);
- int y = r.top + WD_FRAMERECT_TOP;
+ int y = Center(r.top, this->resize.step_height);
int pos = this->vscroll->GetPosition();
if (--pos < 0) {
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index bf95b64..785b88c 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -430,7 +430,7 @@ typedef SmallVector<RefitOption, 32> SubtypeList; ///< List of refit subtypes as
*/
static void DrawVehicleRefitWindow(const SubtypeList list[NUM_CARGO], const int sel[2], uint pos, uint rows, uint delta, const Rect &r)
{
- uint y = r.top + WD_MATRIX_TOP;
+ uint y = Center(r.top, delta);
uint current = 0;
bool rtl = _current_text_dir == TD_RTL;
@@ -3036,7 +3036,7 @@ public:
int image = ((v->vehstatus & VS_STOPPED) != 0) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING;
int lowered = this->IsWidgetLowered(WID_VV_START_STOP) ? 1 : 0;
DrawSprite(image, PAL_NONE, image_left + lowered, r.top + WD_IMGBTN_TOP + lowered);
- DrawString(text_left + lowered, text_right + lowered, r.top + WD_FRAMERECT_TOP + lowered, str, TC_FROMSTRING, SA_HOR_CENTER);
+ DrawString(text_left + lowered, text_right + lowered, Center(r.top + lowered, r.bottom - r.top), str, TC_FROMSTRING, SA_HOR_CENTER);
}
virtual void OnClick(Point pt, int widget, int click_count)
diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp
index fa5753d..6603dd5 100644
--- a/src/widgets/dropdown.cpp
+++ b/src/widgets/dropdown.cpp
@@ -38,7 +38,7 @@ uint DropDownListStringItem::Width() const
void DropDownListStringItem::Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
{
- DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, this->String(), sel ? TC_WHITE : TC_BLACK);
+ DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, Center(top, bottom - top), this->String(), sel ? TC_WHITE : TC_BLACK);
}
/**
--
1.8.1.2

View File

@@ -1,44 +0,0 @@
From a8d3244dca1f0bf568fef9ffd5576d2b20e4b8f8 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 8 Jul 2013 22:49:02 +0200
Subject: [PATCH 181/249] Center group gui strings (and other minor changes).
---
src/group_gui.cpp | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index 2e52123..83bfefe 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -190,7 +190,7 @@ private:
{
/* Highlight the group if a vehicle is dragged over it */
if (g_id == this->group_over) {
- GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]);
+ GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP + WD_MATRIX_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]);
}
if (g_id == NEW_GROUP) return;
@@ -527,15 +527,15 @@ public:
{
switch (widget) {
case WID_GL_ALL_VEHICLES:
- DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, ALL_GROUP);
+ DrawGroupInfo(r.top, r.left, r.right, ALL_GROUP);
break;
case WID_GL_DEFAULT_VEHICLES:
- DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP);
+ DrawGroupInfo(r.top, r.left, r.right, DEFAULT_GROUP);
break;
case WID_GL_LIST_GROUP: {
- int y1 = r.top + WD_FRAMERECT_TOP;
+ int y1 = r.top;
int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length());
for (int i = this->group_sb->GetPosition(); i < max; ++i) {
const Group *g = this->groups[i];
--
1.8.1.2

View File

@@ -1,180 +0,0 @@
From fc3c780f654c65eade1c57409094e63055781c63 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Tue, 16 Jul 2013 21:50:42 +0200
Subject: [PATCH 182/249] Draw vehicles vertically aligned on vehicle list,
vehicle info panel, etc.
---
src/depot_gui.cpp | 25 ++++++++++++++-----------
src/newgrf_debug_gui.cpp | 4 ++--
src/vehicle_gui.cpp | 13 +++++++------
src/vehicle_gui.h | 2 +-
4 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp
index c71089b..35d44dd 100644
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -272,7 +272,7 @@ struct DepotWindow : Window {
void DrawVehicleInDepot(const Vehicle *v, int left, int right, int y) const
{
bool free_wagon = false;
- int sprite_y = y + (this->resize.step_height - GetVehicleHeight(v->type)) / 2;
+ int sprite_y = Center(y, this->resize.step_height, GetVehicleHeight(v->type));
bool rtl = _current_text_dir == TD_RTL;
int image_left = rtl ? left + this->count_width : left + this->header_width;
@@ -284,13 +284,13 @@ struct DepotWindow : Window {
free_wagon = u->IsFreeWagon();
uint x_space = free_wagon ? TRAININFO_DEFAULT_VEHICLE_WIDTH : 0;
- DrawTrainImage(u, image_left + (rtl ? 0 : x_space), image_right - (rtl ? x_space : 0), sprite_y - 1,
+ DrawTrainImage(u, image_left + (rtl ? 0 : x_space), image_right - (rtl ? x_space : 0), sprite_y,
this->sel, EIT_IN_DEPOT, free_wagon ? 0 : this->hscroll->GetPosition(), this->vehicle_over);
/* Length of consist in tiles with 1 fractional digit (rounded up) */
SetDParam(0, CeilDiv(u->gcache.cached_total_length * 10, TILE_SIZE));
SetDParam(1, 1);
- DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, y + (this->resize.step_height - FONT_HEIGHT_SMALL) / 2, STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter
+ DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, Center(y, this->resize.step_height, FONT_HEIGHT_SMALL), STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter
break;
}
@@ -299,33 +299,35 @@ struct DepotWindow : Window {
case VEH_AIRCRAFT: {
const Sprite *spr = GetSprite(v->GetImage(DIR_W, EIT_IN_DEPOT), ST_NORMAL);
DrawAircraftImage(v, image_left, image_right,
- y + max(UnScaleByZoom(spr->height, ZOOM_LVL_GUI) + UnScaleByZoom(spr->y_offs, ZOOM_LVL_GUI) - 14, 0), // tall sprites needs an y offset
+ Center(y, this->resize.step_height, UnScaleByZoom(spr->height, ZOOM_LVL_GUI) + UnScaleByZoom(spr->y_offs, ZOOM_LVL_GUI)), // tall sprites needs an y offset
this->sel, EIT_IN_DEPOT);
break;
}
default: NOT_REACHED();
}
- uint diff_x, diff_y;
+ uint diff_x, y_sprite, y_num;
if (v->IsGroundVehicle()) {
/* Arrange unitnumber and flag horizontally */
diff_x = this->flag_width + WD_FRAMERECT_LEFT;
- diff_y = (this->resize.step_height - this->flag_height) / 2 - 2;
+ y_sprite = Center(y, this->resize.step_height, this->flag_height);
+ y_num = Center(y, this->resize.step_height);
} else {
/* Arrange unitnumber and flag vertically */
diff_x = WD_FRAMERECT_LEFT;
- diff_y = FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
+ y_num = Center(y, this->resize.step_height, FONT_HEIGHT_NORMAL + this->flag_height + 2);
+ y_sprite = y_num + FONT_HEIGHT_NORMAL;
}
int text_left = rtl ? right - this->header_width - 1 : left + diff_x;
int text_right = rtl ? right - diff_x : left + this->header_width - 1;
if (free_wagon) {
- DrawString(text_left, text_right, y + 2, STR_DEPOT_NO_ENGINE);
+ DrawString(text_left, text_right, Center(y, this->resize.step_height), STR_DEPOT_NO_ENGINE);
} else {
- DrawSprite((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, rtl ? right - this->flag_width : left + WD_FRAMERECT_LEFT, y + diff_y);
+ DrawSprite((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, rtl ? right - this->flag_width : left + WD_FRAMERECT_LEFT, y_sprite);
SetDParam(0, v->unitnumber);
- DrawString(text_left, text_right, y + 2, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? STR_BLACK_COMMA : STR_RED_COMMA);
+ DrawString(text_left, text_right, y_num, (uint16)(v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? STR_BLACK_COMMA : STR_RED_COMMA);
}
}
@@ -342,7 +344,7 @@ struct DepotWindow : Window {
uint16 num = this->vscroll->GetPosition() * this->num_columns;
int maxval = min(this->vehicle_list.Length(), num + (rows_in_display * this->num_columns));
int y;
- for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows
+ for (y = r.top; num < maxval; y += this->resize.step_height) { // Draw the rows
for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) {
/* Draw all vehicles in the current row */
const Vehicle *v = this->vehicle_list[num];
@@ -623,6 +625,7 @@ struct DepotWindow : Window {
int base_width = this->count_width + this->header_width;
resize->height = max<uint>(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height);
+ resize->height = GetMinSizing(NWST_STEP, resize->height);
if (this->type == VEH_TRAIN) {
resize->width = 1;
size->width = base_width + 2 * 29; // about 2 parts
diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp
index cead627..be4e992 100644
--- a/src/newgrf_debug_gui.cpp
+++ b/src/newgrf_debug_gui.cpp
@@ -434,8 +434,8 @@ struct NewGRFInspectWindow : Window {
GrfSpecFeature f = GetFeatureNum(this->window_number);
int h = GetVehicleImageCellSize((VehicleType)(VEH_TRAIN + (f - GSF_TRAINS)), EIT_IN_DEPOT).height;
- int y = (r.top + r.bottom - h) / 2;
- DrawVehicleImage(v->First(), r.left + WD_BEVEL_LEFT, r.right - WD_BEVEL_RIGHT, y + 1, INVALID_VEHICLE, EIT_IN_DETAILS, skip);
+ int y = Center(r.top, r.bottom - r.top, h);
+ DrawVehicleImage(v->First(), r.left + WD_BEVEL_LEFT, r.right - WD_BEVEL_RIGHT, y + 1, h, INVALID_VEHICLE, EIT_IN_DETAILS, skip);
/* Highlight the articulated part (this is different to the whole-vehicle highlighting of DrawVehicleImage */
if (_current_text_dir == TD_RTL) {
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index 785b88c..8bff19d 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -825,7 +825,7 @@ struct RefitWindow : public Window {
case WID_VR_VEHICLE_PANEL_DISPLAY: {
Vehicle *v = Vehicle::Get(this->window_number);
DrawVehicleImage(v, this->sprite_left + WD_FRAMERECT_LEFT, this->sprite_right - WD_FRAMERECT_RIGHT,
- r.top + WD_FRAMERECT_TOP, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != NULL ? this->hscroll->GetPosition() : 0);
+ r.top, r.bottom - r.top, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != NULL ? this->hscroll->GetPosition() : 0);
/* Highlight selected vehicles. */
if (this->order != INVALID_VEH_ORDER_ID) break;
@@ -1503,8 +1503,9 @@ static int DrawSmallOrderList(const Group *g, int left, int right, int y)
* @param selection Selected vehicle to draw a frame around
* @param skip Number of pixels to skip at the front (for scrolling)
*/
-void DrawVehicleImage(const Vehicle *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip)
+void DrawVehicleImage(const Vehicle *v, int left, int right, int y, int height, VehicleID selection, EngineImageType image_type, int skip)
{
+ y = Center(y, height, GetVehicleHeight(v->type));
switch (v->type) {
case VEH_TRAIN: DrawTrainImage(Train::From(v), left, right, y, selection, image_type, skip); break;
case VEH_ROAD: DrawRoadVehImage(v, left, right, y, selection, image_type, skip); break;
@@ -1374,7 +1375,7 @@
SetDParam(0, v->GetDisplayProfitThisYear());
SetDParam(1, v->GetDisplayProfitLastYear());
- DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0);
+ DrawVehicleImage(v, image_left, image_right, y, line_height, selected_vehicle, EIT_IN_LIST, 0);
DrawString(text_left, text_right, y + line_height - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1, STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR);
if (v->name != NULL) {
@@ -2479,12 +2480,12 @@ struct VehicleDetailsWindow : Window {
/* Articulated road vehicles use a complete line. */
if (v->type == VEH_ROAD && v->HasArticulatedPart()) {
- DrawVehicleImage(v, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, INVALID_VEHICLE, EIT_IN_DETAILS, 0);
+ DrawVehicleImage(v, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top, r.bottom - r.top, INVALID_VEHICLE, EIT_IN_DETAILS, 0);
} else {
uint sprite_left = rtl ? text_right : r.left;
uint sprite_right = rtl ? r.right : text_left;
- DrawVehicleImage(v, sprite_left + WD_FRAMERECT_LEFT, sprite_right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, INVALID_VEHICLE, EIT_IN_DETAILS, 0);
+ DrawVehicleImage(v, sprite_left + WD_FRAMERECT_LEFT, sprite_right - WD_FRAMERECT_RIGHT, r.top, r.bottom - r.top, INVALID_VEHICLE, EIT_IN_DETAILS, 0);
}
DrawVehicleDetails(v, text_left + WD_FRAMERECT_LEFT, text_right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, 0, 0, this->tab);
break;
diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h
index e999945..0bb9549 100644
--- a/src/vehicle_gui.h
+++ b/src/vehicle_gui.h
@@ -101,6 +101,6 @@ void StartStopVehicle(const Vehicle *v, bool texteffect);
Vehicle *CheckClickOnVehicle(const struct ViewPort *vp, int x, int y);
-void DrawVehicleImage(const Vehicle *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip);
+void DrawVehicleImage(const Vehicle *v, int left, int right, int y, int height, VehicleID selection, EngineImageType image_type, int skip);
#endif /* VEHICLE_GUI_H */
--
1.8.1.2

View File

@@ -1,128 +0,0 @@
From 6fbe41762ecbe2afcc44382e57a32b15ca58507d Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Wed, 24 Jul 2013 22:20:06 +0000
Subject: [PATCH 183/249] Center images on buttons.
---
src/widget.cpp | 72 ++++++++++++----------------------------------------------
1 file changed, 14 insertions(+), 58 deletions(-)
diff --git a/src/widget.cpp b/src/widget.cpp
index 81a7760..3253cbb 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -222,7 +222,8 @@ static inline void DrawImageButtons(const Rect &r, WidgetType type, Colours colo
DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
if ((type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++; // Show different image when clicked for #WWT_IMGBTN_2.
- DrawSprite(img, PAL_NONE, r.left + WD_IMGBTN_LEFT + clicked, r.top + WD_IMGBTN_TOP + clicked);
+ Dimension d2 = GetSpriteSize(img);
+ DrawSprite(img, PAL_NONE, Center(r.left + clicked, r.right - r.left, d2.width), Center(r.top + clicked, r.bottom - r.top, d2.height));
}
/**
@@ -453,54 +454,6 @@ static inline void DrawFrame(const Rect &r, Colours colour, StringID str)
}
/**
- * Draw a shade box.
- * @param r Rectangle of the box.
- * @param colour Colour of the shade box.
- * @param clicked Box is lowered.
- */
-static inline void DrawShadeBox(const Rect &r, Colours colour, bool clicked)
-{
- DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite((clicked) ? SPR_WINDOW_SHADE : SPR_WINDOW_UNSHADE, PAL_NONE, r.left + WD_SHADEBOX_LEFT + clicked, r.top + WD_SHADEBOX_TOP + clicked);
-}
-
-/**
- * Draw a sticky box.
- * @param r Rectangle of the box.
- * @param colour Colour of the sticky box.
- * @param clicked Box is lowered.
- */
-static inline void DrawStickyBox(const Rect &r, Colours colour, bool clicked)
-{
- DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + WD_STICKYBOX_LEFT + clicked, r.top + WD_STICKYBOX_TOP + clicked);
-}
-
-/**
- * Draw a defsize box.
- * @param r Rectangle of the box.
- * @param colour Colour of the defsize box.
- * @param clicked Box is lowered.
- */
-static inline void DrawDefSizeBox(const Rect &r, Colours colour, bool clicked)
-{
- DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_WINDOW_DEFSIZE, PAL_NONE, r.left + WD_DEFSIZEBOX_LEFT + clicked, r.top + WD_DEFSIZEBOX_TOP + clicked);
-}
-
-/**
- * Draw a NewGRF debug box.
- * @param r Rectangle of the box.
- * @param colour Colour of the debug box.
- * @param clicked Box is lowered.
- */
-static inline void DrawDebugBox(const Rect &r, Colours colour, bool clicked)
-{
- DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_WINDOW_DEBUG, PAL_NONE, r.left + WD_DEBUGBOX_LEFT + clicked, r.top + WD_DEBUGBOX_TOP + clicked);
-}
-
-/**
* Draw a resize box.
* @param r Rectangle of the box.
* @param colour Colour of the resize box.
@@ -510,12 +463,13 @@ static inline void DrawDebugBox(const Rect &r, Colours colour, bool clicked)
static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bool clicked)
{
DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE);
+ Dimension d = GetSpriteSize(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT);
if (at_left) {
- DrawSprite(SPR_WINDOW_RESIZE_LEFT, PAL_NONE, r.left + WD_RESIZEBOX_RIGHT + clicked,
- r.bottom - WD_RESIZEBOX_BOTTOM - GetSpriteSize(SPR_WINDOW_RESIZE_LEFT).height + clicked);
+ DrawSprite(SPR_WINDOW_RESIZE_LEFT, PAL_NONE, r.left + WD_RESIZEBOX_LEFT + clicked,
+ r.bottom - WD_RESIZEBOX_BOTTOM - d.height + clicked);
} else {
- DrawSprite(SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.left + WD_RESIZEBOX_LEFT + clicked,
- r.bottom - WD_RESIZEBOX_BOTTOM - GetSpriteSize(SPR_WINDOW_RESIZE_RIGHT).height + clicked);
+ DrawSprite(SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.right - WD_RESIZEBOX_RIGHT - d.width + clicked,
+ r.bottom - WD_RESIZEBOX_BOTTOM - d.height + clicked);
}
}
@@ -2450,21 +2404,23 @@ void NWidgetLeaf::Draw(const Window *w)
case WWT_SHADEBOX:
assert(this->widget_data == 0);
- DrawShadeBox(r, this->colour, w->IsShaded());
+ DrawImageButtons(r, WWT_SHADEBOX, this->colour, w->IsShaded(), w->IsShaded() ? SPR_WINDOW_SHADE : SPR_WINDOW_UNSHADE);
break;
case WWT_DEBUGBOX:
- DrawDebugBox(r, this->colour, clicked);
+ DrawImageButtons(r, WWT_DEBUGBOX, this->colour, clicked, SPR_WINDOW_DEBUG);
break;
- case WWT_STICKYBOX:
+ case WWT_STICKYBOX: {
assert(this->widget_data == 0);
- DrawStickyBox(r, this->colour, !!(w->flags & WF_STICKY));
+ bool clicked = !!(w->flags & WF_STICKY);
+ DrawImageButtons(r, WWT_STICKYBOX, this->colour, clicked, clicked ? SPR_PIN_DOWN : SPR_PIN_UP);
break;
+ }
case WWT_DEFSIZEBOX:
assert(this->widget_data == 0);
- DrawDefSizeBox(r, this->colour, clicked);
+ DrawImageButtons(r, WWT_DEFSIZEBOX, this->colour, clicked, SPR_WINDOW_DEFSIZE);
break;
case WWT_RESIZEBOX:
--
1.8.1.2

View File

@@ -1,51 +0,0 @@
From 32056cc9932ad73e22dda9a4ea0dc6d2a69465e6 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 2 Aug 2013 19:22:04 +0000
Subject: [PATCH 184/249] Center company icon on league table.
---
src/graph_gui.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp
index 1077950..99cff0e 100644
--- a/src/graph_gui.cpp
+++ b/src/graph_gui.cpp
@@ -1128,6 +1128,7 @@ private:
uint ordinal_width; ///< The width of the ordinal number
uint text_width; ///< The width of the actual text
uint icon_width; ///< The width of the company icon
+ uint icon_y_offset; ///< The vertical offset for drawing the company icon.
int line_height; ///< Height of the text lines
/**
@@ -1174,8 +1175,7 @@ public:
{
if (widget != WID_CL_BACKGROUND) return;
- int icon_y_offset = 1 + (FONT_HEIGHT_NORMAL - this->line_height) / 2;
- uint y = r.top + WD_FRAMERECT_TOP - icon_y_offset;
+ uint y = r.top + WD_FRAMERECT_TOP;
bool rtl = _current_text_dir == TD_RTL;
uint ordinal_left = rtl ? r.right - WD_FRAMERECT_LEFT - this->ordinal_width : r.left + WD_FRAMERECT_LEFT;
@@ -1188,7 +1188,7 @@ public:
const Company *c = this->companies[i];
DrawString(ordinal_left, ordinal_right, y, i + STR_ORDINAL_NUMBER_1ST, i == 0 ? TC_WHITE : TC_YELLOW);
- DrawCompanyIcon(c->index, icon_left, y + icon_y_offset);
+ DrawCompanyIcon(c->index, icon_left, y + this->icon_y_offset);
SetDParam(0, c->index);
SetDParam(1, c->index);
@@ -1221,6 +1221,7 @@ public:
Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
this->icon_width = d.width + 2;
this->line_height = max<int>(d.height + 2, FONT_HEIGHT_NORMAL);
+ this->icon_y_offset = Center(1, this->line_height, d.height);
const Company *c;
FOR_ALL_COMPANIES(c) {
--
1.8.1.2

View File

@@ -1,973 +0,0 @@
From 9d64539b8739d940c2b3c74a07b8e1123b710726 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 29 Jun 2013 15:12:06 +0200
Subject: [PATCH 186/249] Add min sizing.
---
src/ai/ai_gui.cpp | 8 +--
src/airport_gui.cpp | 9 ++--
src/build_vehicle_gui.cpp | 10 ++--
src/company_gui.cpp | 3 +-
src/filters/filter_window_gui.cpp | 5 +-
src/fios_gui.cpp | 2 +-
src/genworld_gui.cpp | 7 +--
src/graph_gui.cpp | 1 +
src/group_details_gui.cpp | 10 ++--
src/group_gui.cpp | 21 +++-----
src/industry_gui.cpp | 4 +-
src/linkgraph/linkgraph_gui.cpp | 1 +
src/network/network_content_gui.cpp | 2 +-
src/network/network_gui.cpp | 18 +++----
src/newgrf_gui.cpp | 10 ++--
src/settings_gui.cpp | 2 +-
src/settings_type.h | 2 +
src/signs_gui.cpp | 1 +
src/station_gui.cpp | 15 +++---
src/table/misc_settings.ini | 19 +++++++
src/toolbar_gui.cpp | 2 +-
src/town_gui.cpp | 21 ++++----
src/vehicle_gui.cpp | 4 +-
src/widget.cpp | 101 ++++++++++++++++++++++++++++++++++--
src/widget_type.h | 41 +++++++++++++--
src/widgets/dropdown_type.h | 3 +-
26 files changed, 239 insertions(+), 83 deletions(-)
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index 8bcc414..62fed7d 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -107,7 +107,7 @@ struct AIListWindow : public Window {
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
if (widget == WID_AIL_LIST) {
- this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
resize->width = 1;
resize->height = this->line_height;
@@ -345,7 +345,7 @@ struct AISettingsWindow : public Window {
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
if (widget == WID_AIS_BACKGROUND) {
- this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
resize->width = 1;
resize->height = this->line_height;
@@ -761,7 +761,7 @@ struct AIConfigWindow : public Window {
break;
case WID_AIC_LIST:
- this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
size->height = 8 * this->line_height;
break;
}
@@ -1072,7 +1072,7 @@ struct AIDebugWindow : public Window {
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
if (widget == WID_AID_LOG_PANEL) {
- resize->height = FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL);
size->height = 14 * resize->height + this->top_offset + this->bottom_offset;
}
}
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index a7476fc..103b826 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -272,6 +272,7 @@ public:
d.width += padding.width;
d.height += padding.height;
*size = maxdim(*size, d);
+ size->height = GetMinSizing(NWST_STEP, size->height);
break;
}
@@ -283,7 +284,7 @@ public:
size->width = max(size->width, GetStringBoundingBox(as->name).width);
}
- this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
size->height = 5 * this->line_height;
break;
}
@@ -522,7 +541,7 @@
NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_AIRPORT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 0), SetPIP(2, 0, 2),
- NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_AIRPORT_CLASS_LABEL, STR_NULL), SetFill(1, 0),
+ NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetSizingType(NWST_STEP), SetDataTip(STR_STATION_BUILD_AIRPORT_CLASS_LABEL, STR_NULL), SetFill(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_AP_CLASS_DROPDOWN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_STATION_BUILD_AIRPORT_TOOLTIP),
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_AIRPORT_SPRITE), SetFill(1, 0),
NWidget(NWID_HORIZONTAL),
@@ -530,9 +549,9 @@
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_AP_SCROLLBAR),
EndContainer(),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_DECREASE), SetMinimalSize(12, 0), SetDataTip(AWV_DECREASE, STR_NULL),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_DECREASE), SetSizingType(NWST_STEP), SetMinimalSize(12, 0), SetDataTip(AWV_DECREASE, STR_NULL),
NWidget(WWT_LABEL, COLOUR_GREY, WID_AP_LAYOUT_NUM), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NULL),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_INCREASE), SetMinimalSize(12, 0), SetDataTip(AWV_INCREASE, STR_NULL),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_AP_LAYOUT_INCREASE), SetSizingType(NWST_STEP), SetMinimalSize(12, 0), SetDataTip(AWV_INCREASE, STR_NULL),
EndContainer(),
NWidget(WWT_EMPTY, COLOUR_DARK_GREEN, WID_AP_EXTRA_TEXT), SetFill(1, 0), SetMinimalSize(150, 0),
EndContainer(),
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index fd78d4d..1546393 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -44,7 +44,8 @@
*/
uint GetEngineListHeight(VehicleType type)
{
- return max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height);
+ uint size = max<uint>(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height);
+ return GetMinSizing(NWST_STEP, size);
}
static const NWidgetPart _nested_build_vehicle_widgets[] = {
@@ -59,12 +60,12 @@ static const NWidgetPart _nested_build_vehicle_widgets[] = {
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_HORIZONTAL),
NWidget(NWID_VERTICAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_SORT_ASSENDING_DESCENDING), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BV_SORT_ASSENDING_DESCENDING), SetSizingType(NWST_STEP), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0),
NWidget(NWID_SPACER), SetFill(1, 1),
EndContainer(),
NWidget(NWID_VERTICAL),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_SORT_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_SORT_DROPDOWN), SetSizingType(NWST_STEP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_BV_CARGO_FILTER_DROPDOWN), SetSizingType(NWST_STEP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
EndContainer(),
EndContainer(),
EndContainer(),
@@ -1316,6 +1317,7 @@ struct BuildVehicleWindow : Window {
Dimension d = GetStringBoundingBox(this->GetWidget<NWidgetCore>(widget)->widget_data);
d.width += padding.width + WD_SORTBUTTON_ARROW_WIDTH * 2; // Doubled since the string is centred and it also looks better.
d.height += padding.height;
+ d.height = GetMinSizing(NWST_STEP, d.height);
*size = maxdim(*size, d);
break;
}
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index 1cf38fc..060c796 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -35,6 +35,7 @@
#include "road_func.h"
#include "water.h"
#include "station_func.h"
+#include "widget_type.h"
#include "widgets/company_widget.h"
@@ -526,7 +527,7 @@ public:
uint Height(uint width) const
{
- return max(FONT_HEIGHT_NORMAL, 14);
+ return GetMinSizing(NWST_STEP, max(FONT_HEIGHT_NORMAL, 14));
}
bool Selectable() const
diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp
index 08d6415..629f8bb 100644
--- a/src/fios_gui.cpp
+++ b/src/fios_gui.cpp
@@ -473,7 +473,7 @@ public:
break;
case WID_SL_DRIVES_DIRECTORIES_LIST:
- resize->height = FONT_HEIGHT_NORMAL;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
size->height = resize->height * 10 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
break;
case WID_SL_SORT_BYNAME:
diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp
index f1b561e..1cc26bd 100644
--- a/src/genworld_gui.cpp
+++ b/src/genworld_gui.cpp
@@ -451,6 +451,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_MAPSIZE_Y_PULLDOWN:
SetDParamMaxValue(0, MAX_MAP_SIZE);
*size = GetStringBoundingBox(STR_JUST_INT);
+ size->width = size->width + GetMinSizing(NWST_BUTTON);
break;
case WID_GL_SNOW_LEVEL_TEXT:
@@ -508,7 +509,7 @@ struct GenerateLandscapeWindow : public Window {
}
}
size->width += padding.width;
- size->height = FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM;
+ size->height = GetMinSizing(NWST_BUTTON, FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM);
}
virtual void DrawWidget(const Rect &r, int widget) const
diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp
index 99cff0e..4e8e3ae 100644
--- a/src/graph_gui.cpp
+++ b/src/graph_gui.cpp
@@ -114,6 +114,7 @@ static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
+ panel->sizing_type = NWST_STEP;
panel->SetMinimalSize(246, line_height);
panel->SetFill(1, 0);
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP);
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index ee1a240..537ccac 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -66,7 +66,7 @@
/* right part */
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetSizingType(NWST_STEP), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
EndContainer(),
@@ -94,7 +94,7 @@ static const NWidgetPart _nested_group_widgets[] = {
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_VEHICLE), SetMinimalSize(248, 0), SetMatrixDataTip(1, 0, STR_NULL), SetResize(1, 1), SetFill(1, 0), SetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_VEHICLE_SCROLLBAR),
EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(1, 0), SetFill(1, 1), SetResize(1, 0), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 0), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetFill(0, 1),
SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP),
@@ -143,7 +143,7 @@ private:
this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype));
/* We consider the max average length of characters to be the one of "a" */
this->column_size[VGC_NAME].width = max(GetCharacterWidth(FS_NORMAL, 97) * (MAX_LENGTH_GROUP_NAME_CHARS - 4), this->column_size[VGC_NAME].width);
- this->tiny_step_height = this->column_size[VGC_NAME].height;
+ this->tiny_step_height = max(11U, this->column_size[VGC_NAME].height);
this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT);
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROTECT].height);
@@ -167,6 +167,7 @@ private:
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
this->tiny_step_height += WD_MATRIX_TOP;
+ this->tiny_step_height = GetMinSizing(NWST_STEP, this->tiny_step_height);
return WD_FRAMERECT_LEFT + 8 +
this->column_size[VGC_NAME].width + 2 +
@@ -364,14 +365,8 @@ public:
/* Minimum height is the height of the list widget minus all and default vehicles... */
size->height = 4 * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height) - 4 * this->tiny_step_height;
- /* ... minus the buttons at the bottom ... */
- uint max_icon_height = GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_CREATE_GROUP)->widget_data).height;
- max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_RENAME_GROUP)->widget_data).height);
- max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height);
- max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
-
/* Get a multiple of tiny_step_height of that amount */
- size->height = Ceil(size->height - max_icon_height, tiny_step_height);
+ size->height = Ceil(size->height, tiny_step_height);
break;
}
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index de595e3..360ce8a 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -298,7 +298,7 @@ public:
if (this->index[i] == INVALID_INDUSTRYTYPE) continue;
d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(this->index[i])->name));
}
- resize->height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
d.width += MATRIX_TEXT_OFFSET + padding.width;
d.height = 5 * resize->height;
*size = maxdim(*size, d);
@@ -1309,7 +1309,7 @@ public:
for (uint i = 0; i < this->industries.Length(); i++) {
d = maxdim(d, GetStringBoundingBox(this->GetIndustryString(this->industries[i])));
}
- resize->height = d.height;
+ resize->height = d.height = GetMinSizing(NWST_STEP, d.height);
d.height *= 5;
d.width += padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
d.height += padding.height + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp
index ae4cdee..9889ad8 100644
--- a/src/linkgraph/linkgraph_gui.cpp
+++ b/src/linkgraph/linkgraph_gui.cpp
@@ -344,6 +344,7 @@ NWidgetBase *MakeCargoesLegendLinkGraphGUI(int *biggest_index)
row = new NWidgetHorizontal(NC_EQUALSIZE);
}
NWidgetBackground * wid = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, i + WID_LGL_CARGO_FIRST);
+ wid->sizing_type = NWST_STEP;
wid->SetMinimalSize(25, FONT_HEIGHT_SMALL);
wid->SetFill(1, 1);
wid->SetResize(0, 0);
diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp
index 3ed9dfd..77b51bc 100644
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -524,7 +524,7 @@ public:
}
case WID_NCL_MATRIX:
- resize->height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
size->height = 10 * resize->height;
break;
}
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp
index 3165f4d..6d4c38d 100644
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -499,12 +499,12 @@ public:
break;
case WID_NG_MATRIX:
- resize->height = WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM);
size->height = 10 * resize->height;
break;
case WID_NG_LASTJOINED:
- size->height = WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM;
+ size->height = GetMinSizing(NWST_STEP, WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM);
break;
case WID_NG_LASTJOINED_SPACER:
@@ -931,7 +931,7 @@ static const NWidgetPart _nested_network_game_widgets[] = {
/* LEFT SIDE */
NWidget(NWID_VERTICAL), SetPIP(0, 7, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 7, 0),
- NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_CONNECTION), SetDataTip(STR_NETWORK_SERVER_LIST_ADVERTISED, STR_NULL),
+ NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_CONNECTION), SetSizingType(NWST_STEP), SetDataTip(STR_NETWORK_SERVER_LIST_ADVERTISED, STR_NULL),
NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NG_CONN_BTN),
SetDataTip(STR_BLACK_STRING, STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP),
NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0),
@@ -1080,8 +1080,8 @@ struct NetworkStartServerWindow : public Window {
switch (widget) {
case WID_NSS_CONNTYPE_BTN:
*size = maxdim(GetStringBoundingBox(_connection_types_dropdown[0]), GetStringBoundingBox(_connection_types_dropdown[1]));
- size->width += padding.width;
- size->height += padding.height;
+ size->width = GetMinSizing(NWST_BUTTON, size->width + padding.width);
+ size->height = GetMinSizing(NWST_BUTTON, size->height + padding.height);
break;
}
}
@@ -1264,15 +1264,15 @@
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10),
NWidget(NWID_VERTICAL), SetPIP(0, 1, 0),
NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_ADVERTISED, STR_NULL),
- NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP),
+ NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetSizingType(NWST_BUTTON), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP),
EndContainer(),
NWidget(NWID_VERTICAL), SetPIP(0, 1, 0),
NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_LANGUAGE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN, STR_NULL),
- NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_LANGUAGE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP),
+ NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_LANGUAGE_BTN), SetSizingType(NWST_BUTTON), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP),
EndContainer(),
NWidget(NWID_VERTICAL), SetPIP(0, 1, 0),
NWidget(NWID_SPACER), SetFill(1, 1),
- NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_SETPWD), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_SET_PASSWORD, STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_SETPWD), SetSizingType(NWST_BUTTON), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_SET_PASSWORD, STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP),
EndContainer(),
EndContainer(),
@@ -1375,7 +1375,7 @@ struct NetworkLobbyWindow : public Window {
break;
case WID_NL_MATRIX:
- resize->height = WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM);
size->height = 10 * resize->height;
break;
diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp
index 47cca02..aedb4fd 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -681,14 +681,14 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
case WID_NS_FILE_LIST:
{
Dimension d = maxdim(GetSpriteSize(SPR_SQUARE), GetSpriteSize(SPR_WARNING_SIGN));
- resize->height = max(d.height + 2U, FONT_HEIGHT_NORMAL + 2U);
- size->height = max(size->height, WD_FRAMERECT_TOP + 6 * resize->height + WD_FRAMERECT_BOTTOM);
+ resize->height = GetMinSizing(NWST_STEP, max(d.height + 2U, FONT_HEIGHT_NORMAL + 2U));
+ size->height = max(size->height, WD_FRAMERECT_TOP + 4 * resize->height + WD_FRAMERECT_BOTTOM);
break;
}
case WID_NS_AVAIL_LIST:
- resize->height = max(12, FONT_HEIGHT_NORMAL + 2);
- size->height = max(size->height, WD_FRAMERECT_TOP + 8 * resize->height + WD_FRAMERECT_BOTTOM);
+ resize->height = GetMinSizing(NWST_STEP, max(12, FONT_HEIGHT_NORMAL + 2));
+ size->height = max(size->height, WD_FRAMERECT_TOP + 4 * resize->height + WD_FRAMERECT_BOTTOM);
break;
case WID_NS_NEWGRF_INFO_TITLE: {
@@ -711,6 +711,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
}
}
d.width += padding.width;
+ d.height = GetMinSizing(NWST_BUTTON, d.height);
*size = maxdim(d, *size);
break;
}
@@ -721,6 +722,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
*size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT));
size->width += padding.width;
size->height += padding.height;
+ size->height = GetMinSizing(NWST_BUTTON, size->height);
break;
}
}
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 5067550..afdbb4a 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -1772,7 +1772,7 @@ struct GameSettingsWindow : Window {
{
switch (widget) {
case WID_GS_OPTIONSPANEL:
- resize->height = SETTING_HEIGHT = max(11, FONT_HEIGHT_NORMAL + 1);
+ resize->height = SETTING_HEIGHT = GetMinSizing(NWST_STEP, max(11, FONT_HEIGHT_NORMAL + 1));
resize->width = 1;
size->height = 5 * resize->height + SETTINGTREE_TOP_OFFSET + SETTINGTREE_BOTTOM_OFFSET;
diff --git a/src/settings_type.h b/src/settings_type.h
index f194550..aa0e2a4 100644
--- a/src/settings_type.h
+++ b/src/settings_type.h
@@ -77,6 +77,8 @@ struct GUISettings {
bool lost_vehicle_warn; ///< if a vehicle can't find its destination, show a warning
uint8 order_review_system; ///< perform order reviews on vehicles
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning
+ uint min_button; ///< min size of most button widgets
+ uint min_step; ///< min size of scrollbar/dropdown elements
bool show_finances; ///< show finances at end of year
bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
bool new_nonstop; ///< ttdpatch compatible nonstop handling
diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp
index aeac02e..2ec3677 100644
--- a/src/signs_gui.cpp
+++ b/src/signs_gui.cpp
@@ -267,6 +267,7 @@ struct SignListWindow : Window, SignList {
Dimension spr_dim = GetSpriteSize(SPR_COMPANY_ICON);
this->text_offset = WD_FRAMETEXT_LEFT + spr_dim.width + 2; // 2 pixels space between icon and the sign text.
resize->height = max<uint>(FONT_HEIGHT_NORMAL, spr_dim.height);
+ resize->height = GetMinSizing(NWST_STEP, resize->height);
Dimension d = {this->text_offset + WD_FRAMETEXT_RIGHT, WD_FRAMERECT_TOP + 5 * resize->height + WD_FRAMERECT_BOTTOM};
*size = maxdim(*size, d);
break;
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 9080fa8..28f9ea6 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -390,7 +390,7 @@ public:
}
case WID_STL_LIST:
- resize->height = FONT_HEIGHT_NORMAL;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
size->height = WD_FRAMERECT_TOP + 5 * resize->height + WD_FRAMERECT_BOTTOM;
break;
}
@@ -414,7 +414,8 @@ public:
case WID_STL_LIST: {
int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.Length());
- int y = r.top + WD_FRAMERECT_TOP;
+ uint line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
+ int y = Center(r.top + WD_FRAMERECT_TOP, line_height);
for (int i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner
const Station *st = this->stations[i];
assert(st->xy != INVALID_TILE);
@@ -427,9 +428,9 @@ public:
SetDParam(1, st->facilities);
int x = DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_LIST_STATION);
- StationsWndShowStationRating(st, r.left, r.right, x, FONT_HEIGHT_NORMAL + 2, y);
+ StationsWndShowStationRating(st, r.left, r.right, x, line_height + 2, y);
- y += FONT_HEIGHT_NORMAL;
+ y += line_height;
}
if (this->vscroll->GetCount() == 0) { // company has no stations
@@ -459,7 +460,7 @@ public:
break;
case WID_STL_LIST: {
- uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_STL_LIST, 0, FONT_HEIGHT_NORMAL);
+ uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_STL_LIST, 0, this->resize.step_height);
if (id_v >= this->stations.Length()) return; // click out of list bound
const Station *st = this->stations[id_v];
@@ -2121,8 +2122,8 @@ struct SelectStationWindow : Window {
d = maxdim(d, GetStringBoundingBox(T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_STATION_LIST_WAYPOINT : STR_STATION_LIST_STATION));
}
- resize->height = d.height;
- d.height *= 5;
+ resize->height = GetMinSizing(NWST_STEP, d.height);
+ d.height = 5 * resize->height;
d.width += WD_FRAMERECT_RIGHT + WD_FRAMERECT_LEFT;
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
*size = d;
diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini
index 1a2b5ef..0b02e69 100644
--- a/src/table/misc_settings.ini
+++ b/src/table/misc_settings.ini
@@ -220,6 +220,25 @@ var = _freetype.mono.aa
def = false
[SDTG_VAR]
+name = ""min_button_size""
+type = SLE_UINT
+var = _settings_client.gui.min_button
+def = 0
+min = 0
+max = 100
+cat = SC_EXPERT
+
+[SDTG_VAR]
+name = ""min_step_size""
+type = SLE_UINT
+var = _settings_client.gui.min_step
+def = 0
+min = 0
+max = 100
+cat = SC_EXPERT
+
+
+[SDTG_VAR]
name = ""sprite_cache_size_px""
type = SLE_UINT
var = _sprite_cache_size
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index 8834497..32992d9 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -134,7 +134,7 @@ public:
uint Height(uint width) const
{
- return max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL);
+ return GetMinSizing(NWST_STEP, max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL));
}
void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index 3960469..3c541e5 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -48,12 +48,12 @@ static const NWidgetPart _nested_town_authority_widgets[] = {
NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN),
NWidget(WWT_STICKYBOX, COLOUR_BROWN),
EndContainer(),
- NWidget(WWT_PANEL, COLOUR_BROWN, WID_TA_RATING_INFO), SetMinimalSize(317, 92), SetResize(1, 1), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_BROWN, WID_TA_RATING_INFO), SetMinimalSize(317, 92), SetResize(1, 1), SetFill(1, 1), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_BROWN, WID_TA_COMMAND_LIST), SetMinimalSize(305, 52), SetResize(1, 0), SetDataTip(0x0, STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP), SetScrollbar(WID_TA_SCROLLBAR), EndContainer(),
NWidget(NWID_VSCROLLBAR, COLOUR_BROWN, WID_TA_SCROLLBAR),
EndContainer(),
- NWidget(WWT_PANEL, COLOUR_BROWN, WID_TA_ACTION_INFO), SetMinimalSize(317, 52), SetResize(1, 0), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_BROWN, WID_TA_ACTION_INFO), SetMinimalSize(317, 52), SetResize(1, 1), SetFill(1, 1), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_TA_EXECUTE), SetMinimalSize(317, 12), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_LOCAL_AUTHORITY_DO_IT_BUTTON, STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP),
NWidget(WWT_RESIZEBOX, COLOUR_BROWN),
@@ -66,6 +66,7 @@ private:
Town *town; ///< Town being displayed.
int sel_index; ///< Currently selected town action, \c 0 to \c TACT_COUNT-1, \c -1 means no action selected.
Scrollbar *vscroll;
+ uint actions_step;
uint displayed_actions_on_previous_painting; ///< Actions that were available on the previous call to OnPaint()
/**
@@ -95,7 +96,8 @@ public:
this->town = Town::Get(window_number);
this->InitNested(window_number);
this->vscroll = this->GetScrollbar(WID_TA_SCROLLBAR);
- this->vscroll->SetCapacity((this->GetWidget<NWidgetBase>(WID_TA_COMMAND_LIST)->current_y - WD_FRAMERECT_TOP - WD_FRAMERECT_BOTTOM) / FONT_HEIGHT_NORMAL);
+ this->actions_step = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
+ this->vscroll->SetCapacity((this->GetWidget<NWidgetBase>(WID_TA_COMMAND_LIST)->current_y - WD_FRAMERECT_TOP - WD_FRAMERECT_BOTTOM) / this->actions_step);
}
virtual void OnPaint()
@@ -197,12 +199,12 @@
case WID_TA_COMMAND_LIST: {
int numact;
uint buttons = GetMaskOfTownActions(&numact, _local_company, this->town);
- int y = Center(r.top, this->resize.step_height);
+ int y = Center(r.top, this->actions_step);
int pos = this->vscroll->GetPosition();
if (--pos < 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_LOCAL_AUTHORITY_ACTIONS_TITLE);
- y += this->resize.step_height;
+ y += this->actions_step;
}
for (int i = 0; buttons; i++, buttons >>= 1) {
@@ -212,7 +214,7 @@ public:
if ((buttons & 1) && --pos < 0) {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y,
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i, this->sel_index == i ? TC_WHITE : TC_ORANGE);
- y += this->resize.step_height;
+ y += this->actions_step;
}
}
break;
@@ -239,7 +241,8 @@ public:
}
case WID_TA_COMMAND_LIST:
- size->height = WD_FRAMERECT_TOP + 5 * FONT_HEIGHT_NORMAL + WD_FRAMERECT_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
+ size->height = WD_FRAMERECT_TOP + 5 * resize->height + WD_FRAMERECT_BOTTOM;
size->width = GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTIONS_TITLE).width;
for (uint i = 0; i < TACT_COUNT; i++ ) {
size->width = max(size->width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width);
@@ -258,7 +261,7 @@ public:
{
switch (widget) {
case WID_TA_COMMAND_LIST: {
- int y = this->GetRowFromWidget(pt.y, WID_TA_COMMAND_LIST, 1, FONT_HEIGHT_NORMAL);
+ int y = this->GetRowFromWidget(pt.y, WID_TA_COMMAND_LIST, 1, this->actions_step);
if (!IsInsideMM(y, 0, 5)) return;
y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_company, this->town), y + this->vscroll->GetPosition() - 1);
@@ -828,7 +831,7 @@ public:
}
Dimension icon_size = GetSpriteSize(SPR_TOWN_RATING_GOOD);
d.width += icon_size.width + 2;
- d.height = max(d.height, icon_size.height);
+ d.height = GetMinSizing(NWST_STEP, max(d.height, icon_size.height));
resize->height = d.height;
d.height *= 5;
d.width += padding.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index 8bff19d..e13a131 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -760,7 +760,7 @@ struct RefitWindow : public Window {
{
switch (widget) {
case WID_VR_MATRIX:
- resize->height = WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM;
+ resize->height = GetMinSizing(NWST_STEP, WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM);
size->height = resize->height * 8;
break;
@@ -1524,7 +1524,7 @@ void DrawVehicleImage(const Vehicle *v, int left, int right, int y, int height,
uint GetVehicleListHeight(VehicleType type, uint divisor)
{
/* Name + vehicle + profit */
- uint base = GetVehicleHeight(type) + 2 * FONT_HEIGHT_SMALL;
+ uint base = GetMinSizing(NWST_STEP, GetVehicleHeight(type) + 2 * FONT_HEIGHT_SMALL);
/* Drawing of the 4 small orders + profit*/
if (type >= VEH_SHIP) base = max(base, 5U * FONT_HEIGHT_SMALL);
diff --git a/src/widget.cpp b/src/widget.cpp
index 3253cbb..8d14527 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -523,7 +523,7 @@ static inline void DrawButtonDropdown(const Rect &r, Colours colour, bool clicke
{
int text_offset = max(0, ((int)(r.bottom - r.top + 1) - FONT_HEIGHT_NORMAL) / 2); // Offset for rendering the text vertically centered
- int dd_width = NWidgetLeaf::dropdown_dimension.width;
+ int dd_width = GetMinSizing(NWST_STEP, NWidgetLeaf::dropdown_dimension.width);
if (_current_text_dir == TD_LTR) {
DrawFrameRect(r.left, r.top, r.right - dd_width, r.bottom, colour, clicked_button ? FR_LOWERED : FR_NONE);
@@ -746,6 +746,7 @@ NWidgetBase *NWidgetBase::GetWidgetOfType(WidgetType tp)
*/
NWidgetResizeBase::NWidgetResizeBase(WidgetType tp, uint fill_x, uint fill_y) : NWidgetBase(tp)
{
+ this->sizing_type = NWST_NONE;
this->fill_x = fill_x;
this->fill_y = fill_y;
}
@@ -757,8 +758,23 @@ NWidgetResizeBase::NWidgetResizeBase(WidgetType tp, uint fill_x, uint fill_y) :
*/
void NWidgetResizeBase::SetMinimalSize(uint min_x, uint min_y)
{
- this->min_x = min_x;
- this->min_y = min_y;
+ uint min_size = 0;
+ switch (this->sizing_type) {
+ case NWST_NONE:
+ case NWST_OVERRIDE:
+ min_size = 0;
+ break;
+ case NWST_BUTTON:
+ min_size = _settings_client.gui.min_button;
+ break;
+ case NWST_STEP:
+ min_size = _settings_client.gui.min_step;
+ break;
+ default: NOT_REACHED();
+ }
+
+ this->min_x = max(min_x, min_size);
+ this->min_y = max(min_y, min_size);
}
/**
@@ -810,6 +826,7 @@ void NWidgetResizeBase::AssignSizePosition(SizingType sizing, uint x, uint y, ui
*/
NWidgetCore::NWidgetCore(WidgetType tp, Colours colour, uint fill_x, uint fill_y, uint32 widget_data, StringID tool_tip) : NWidgetResizeBase(tp, fill_x, fill_y)
{
+ this->sizing_type = NWST_NONE;
this->colour = colour;
this->index = -1;
this->widget_data = widget_data;
@@ -1930,6 +1947,7 @@ void Scrollbar::SetCapacityFromWidget(Window *w, int widget, int padding)
NWidgetScrollbar::NWidgetScrollbar(WidgetType tp, Colours colour, int index) : NWidgetCore(tp, colour, 1, 1, 0x0, STR_NULL), Scrollbar(tp != NWID_HSCROLLBAR)
{
assert(tp == NWID_HSCROLLBAR || tp == NWID_VSCROLLBAR);
+ this->sizing_type = NWST_STEP;
this->SetIndex(index);
switch (this->type) {
@@ -2001,7 +2019,9 @@ void NWidgetScrollbar::Draw(const Window *w)
if (vertical_dimension.width == 0) {
vertical_dimension = maxdim(GetSpriteSize(SPR_ARROW_UP), GetSpriteSize(SPR_ARROW_DOWN));
vertical_dimension.width += extra.width;
+ vertical_dimension.width = GetMinSizing(NWST_STEP, vertical_dimension.width);
vertical_dimension.height += extra.height;
+ vertical_dimension.height = GetMinSizing(NWST_STEP, vertical_dimension.height);
}
return vertical_dimension;
}
@@ -2012,7 +2032,9 @@ void NWidgetScrollbar::Draw(const Window *w)
if (horizontal_dimension.width == 0) {
horizontal_dimension = maxdim(GetSpriteSize(SPR_ARROW_LEFT), GetSpriteSize(SPR_ARROW_RIGHT));
horizontal_dimension.width += extra.width;
+ horizontal_dimension.width = GetMinSizing(NWST_STEP, horizontal_dimension.width);
horizontal_dimension.height += extra.height;
+ horizontal_dimension.height = GetMinSizing(NWST_STEP, horizontal_dimension.height);
}
return horizontal_dimension;
}
@@ -2049,8 +2071,40 @@ Dimension NWidgetLeaf::dropdown_dimension = {0, 0};
*/
NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, int index, uint16 data, StringID tip) : NWidgetCore(tp, colour, 1, 1, data, tip)
{
+ assert(this->sizing_type < NWST_END);
assert(index >= 0 || tp == WWT_LABEL || tp == WWT_TEXT || tp == WWT_CAPTION || tp == WWT_RESIZEBOX || tp == WWT_SHADEBOX || tp == WWT_DEFSIZEBOX || tp == WWT_DEBUGBOX || tp == WWT_STICKYBOX || tp == WWT_CLOSEBOX);
if (index >= 0) this->SetIndex(index);
+
+ if (this->sizing_type == NWST_NONE) {
+ switch (tp) {
+ case WWT_PUSHBTN:
+ case WWT_IMGBTN:
+ case WWT_PUSHIMGBTN:
+ case WWT_IMGBTN_2:
+ case WWT_TEXTBTN:
+ case WWT_PUSHTXTBTN:
+ case WWT_TEXTBTN_2:
+ case WWT_PUSHARROWBTN:
+ case WWT_EDITBOX:
+ case WWT_CAPTION:
+ case WWT_STICKYBOX:
+ case WWT_SHADEBOX:
+ case WWT_DEBUGBOX:
+ case WWT_DEFSIZEBOX:
+ case WWT_RESIZEBOX:
+ case WWT_CLOSEBOX:
+ this->sizing_type = NWST_BUTTON;
+ break;
+ case NWID_PUSHBUTTON_DROPDOWN:
+ case NWID_BUTTON_DROPDOWN:
+ case WWT_DROPDOWN:
+ this->sizing_type = NWST_STEP;
+ break;
+ default:
+ this->sizing_type = NWST_OVERRIDE;
+ }
+ }
+
this->SetMinimalSize(0, 0);
this->SetResize(0, 0);
@@ -2462,11 +2516,12 @@ void NWidgetLeaf::Draw(const Window *w)
*/
bool NWidgetLeaf::ButtonHit(const Point &pt)
{
+ uint button_size = GetMinSizing(NWST_STEP, 12);
if (_current_text_dir == TD_LTR) {
- int button_width = this->pos_x + this->current_x - 12;
+ int button_width = this->pos_x + this->current_x - button_size;
return pt.x < button_width;
} else {
- int button_left = this->pos_x + 12;
+ int button_left = this->pos_x + button_size;
return pt.x >= button_left;
}
}
@@ -2559,6 +2614,16 @@ static int MakeNWidget(const NWidgetPart *parts, int count, NWidgetBase **dest,
break;
}
+ case WPT_SIZINGTYPE: {
+ NWidgetResizeBase *nwrb = dynamic_cast<NWidgetResizeBase *>(*dest);
+ if (nwrb != NULL) {
+ assert(parts->u.sizing_type < NWST_END);
+ nwrb->sizing_type = parts->u.sizing_type;
+ nwrb->SetMinimalSize(0, 0);
+ }
+ break;
+ }
+
case WPT_MINSIZE: {
NWidgetResizeBase *nwrb = dynamic_cast<NWidgetResizeBase *>(*dest);
if (nwrb != NULL) {
@@ -2815,6 +2880,7 @@ NWidgetBase *MakeCompanyButtonRows(int *biggest_index, int widget_first, int wid
}
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
+ panel->sizing_type = NWST_STEP;
panel->SetMinimalSize(sprite_size.width, sprite_size.height);
panel->SetFill(1, 1);
panel->SetResize(1, 0);
@@ -2835,3 +2901,28 @@ NWidgetBase *MakeCompanyButtonRows(int *biggest_index, int widget_first, int wid
if (hor != NULL) vert->Add(hor);
return vert;
}
+
+/**
+ * Return the minimal automatic size for a widget.
+ * @param type The automatic sizing type to use.
+ * @param min_1 Minimal passed value.
+ * @return At least the passed value, or the minimal size for the associated sizing type.
+ */
+uint GetMinSizing(NWidSizingType type, uint min_1)
+{
+ uint min_sizing;
+ switch (type) {
+ case NWST_NONE:
+ case NWST_OVERRIDE:
+ return min_1;
+ case NWST_BUTTON:
+ min_sizing = _settings_client.gui.min_button;
+ break;
+ case NWST_STEP:
+ min_sizing = _settings_client.gui.min_step;
+ break;
+ default: NOT_REACHED();
+ }
+
+ return max(min_sizing, min_1);
+}
diff --git a/src/widget_type.h b/src/widget_type.h
index 6d8b32b..1003096 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -40,6 +40,17 @@ enum ArrowWidgetValues {
AWV_RIGHT, ///< Force the arrow to the right
};
+/** Values for different minimal sizing of widgets. */
+enum NWidSizingType {
+ NWST_NONE, ///< No sizing type is yet defined.
+ ///< Most buttons and scrollbars are initialized with this value.
+ ///< Later, they are automatically set to NWST_BUTTON or NWST_STEP.
+ NWST_BUTTON, ///< Size will be set at least _settings_client.gui.min_button.
+ NWST_STEP, ///< Size will be set at least _settings_client.gui.min_step (scrollbars and dropdowns).
+ NWST_OVERRIDE, ///< Avoid widgets to use automatic minimal sizing.
+ NWST_END
+};
+
/**
* Window widget types, nested widget types, and nested widget part types.
*/
@@ -85,6 +96,7 @@ enum WidgetType {
/* Nested widget part types. */
WPT_RESIZE, ///< Widget part for specifying resizing.
+ WPT_SIZINGTYPE, ///< Widget part for specifying sizing mode.
WPT_MINSIZE, ///< Widget part for specifying minimal size.
WPT_MINTEXTLINES, ///< Widget part for specifying minimal number of lines of text.
WPT_FILL, ///< Widget part for specifying fill.
@@ -160,11 +172,12 @@ public:
virtual void Draw(const Window *w) = 0;
virtual void SetDirty(const Window *w) const;
- WidgetType type; ///< Type of the widget / nested widget.
- uint fill_x; ///< Horizontal fill stepsize (from initial size, \c 0 means not resizable).
- uint fill_y; ///< Vertical fill stepsize (from initial size, \c 0 means not resizable).
- uint resize_x; ///< Horizontal resize step (\c 0 means not resizable).
- uint resize_y; ///< Vertical resize step (\c 0 means not resizable).
+ WidgetType type; ///< Type of the widget / nested widget.
+ NWidSizingType sizing_type; ///< Type for deciding minimal sizes of the widget.
+ uint fill_x; ///< Horizontal fill stepsize (from initial size, \c 0 means not resizable).
+ uint fill_y; ///< Vertical fill stepsize (from initial size, \c 0 means not resizable).
+ uint resize_x; ///< Horizontal resize step (\c 0 means not resizable).
+ uint resize_y; ///< Vertical resize step (\c 0 means not resizable).
/* Size of the widget in the smallest window possible.
* Computed by #SetupSmallestSize() followed by #AssignSizePosition().
*/
@@ -918,6 +931,7 @@ struct NWidgetPart {
NWidgetPartTextLines text_lines; ///< Part with text line data.
NWidgetFunctionType *func_ptr; ///< Part with a function call.
NWidContainerFlags cont_flags; ///< Part with container flags.
+ NWidSizingType sizing_type; ///< Part with sizing type.
} u;
};
@@ -939,6 +953,23 @@ static inline NWidgetPart SetResize(int16 dx, int16 dy)
}
/**
+ * Widget part function for setting the automatic minimal size.
+ * @param type How to decide the minimal size of the widget.
+ * @ingroup NestedWidgetParts
+ */
+static inline NWidgetPart SetSizingType(NWidSizingType type)
+{
+ NWidgetPart part;
+
+ part.type = WPT_SIZINGTYPE;
+ part.u.sizing_type = type;
+
+ return part;
+}
+
+uint GetMinSizing(NWidSizingType type, uint min_1 = 0);
+
+/**
* Widget part function for setting the minimal size.
* @param x Horizontal minimal size.
* @param y Vertical minimal size.
diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h
index b65d455..4c33011 100644
--- a/src/widgets/dropdown_type.h
+++ b/src/widgets/dropdown_type.h
@@ -13,6 +13,7 @@
#define WIDGETS_DROPDOWN_TYPE_H
#include "../window_type.h"
+#include "../widget_type.h"
#include "../gfx_func.h"
#include "../core/smallvec_type.hpp"
#include "table/strings.h"
@@ -30,7 +31,7 @@ public:
virtual ~DropDownListItem() {}
virtual bool Selectable() const { return false; }
- virtual uint Height(uint width) const { return FONT_HEIGHT_NORMAL; }
+ virtual uint Height(uint width) const { return GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL); }
virtual uint Width() const { return 0; }
virtual void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const;
};
--
1.8.1.2

View File

@@ -1,105 +0,0 @@
From 747ad8e3e5bce77bc409fcc141ed37ab25b55104 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 21 Jul 2013 22:03:46 +0200
Subject: [PATCH 187/249] Add min sizing on smallmap window.
---
src/smallmap_gui.cpp | 20 +++++++++++---------
src/smallmap_gui.h | 3 ++-
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp
index 99097c5..06087a0 100644
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -1045,7 +1045,10 @@ void SmallMapWindow::SetupWidgetData()
this->GetWidget<NWidgetStacked>(WID_SM_SELECT_BUTTONS)->SetDisplayedPlane(plane);
}
-SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(FORCE_REFRESH_PERIOD)
+SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) :
+ Window(desc),
+ row_height(GetMinSizing(NWST_STEP, FONT_HEIGHT_SMALL)),
+ refresh(FORCE_REFRESH_PERIOD)
{
_smallmap_industry_highlight = INVALID_INDUSTRYTYPE;
this->overlay = new LinkGraphOverlay(this, WID_SM_MAP);
@@ -1155,9 +1158,8 @@ SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(des
bool rtl = _current_text_dir == TD_RTL;
uint y_org = r.top + WD_FRAMERECT_TOP;
uint x = rtl ? r.right - this->column_width - WD_FRAMERECT_RIGHT : r.left + WD_FRAMERECT_LEFT;
- uint y = y_org;
+ uint y = Center(y_org, this->row_height, FONT_HEIGHT_SMALL);
uint i = 0; // Row counter for industry legend.
- uint row_height = FONT_HEIGHT_SMALL;
uint text_left = rtl ? 0 : LEGEND_BLOB_WIDTH + WD_FRAMERECT_LEFT;
uint text_right = this->column_width - 1 - (rtl ? LEGEND_BLOB_WIDTH + WD_FRAMERECT_RIGHT : 0);
@@ -1184,7 +1186,7 @@ SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(des
/* Column break needed, continue at top, COLUMN_WIDTH pixels
* (one "row") to the right. */
x += rtl ? -(int)this->column_width : this->column_width;
- y = y_org;
+ y = Center(y_org, this->row_height, FONT_HEIGHT_SMALL);
i = 1;
}
@@ -1212,7 +1214,7 @@ SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(des
DrawString(x + text_left, x + text_right, y, string, TC_GREY);
} else {
DrawString(x + text_left, x + text_right, y, string, TC_BLACK);
- GfxFillRect(x + blob_left, y + 1, x + blob_right, y + row_height - 1, PC_BLACK); // Outer border of the legend colour
+ GfxFillRect(x + blob_left, y + 1, x + blob_right, y + FONT_HEIGHT_SMALL - 1, PC_BLACK); // Outer border of the legend colour
}
break;
}
@@ -1220,13 +1222,13 @@ SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(des
default:
if (this->map_type == SMT_CONTOUR) SetDParam(0, tbl->height * TILE_HEIGHT_STEP);
/* Anything that is not an industry or a company is using normal process */
- GfxFillRect(x + blob_left, y + 1, x + blob_right, y + row_height - 1, PC_BLACK);
+ GfxFillRect(x + blob_left, y + 1, x + blob_right, y + FONT_HEIGHT_SMALL - 1, PC_BLACK);
DrawString(x + text_left, x + text_right, y, tbl->legend);
break;
}
- GfxFillRect(x + blob_left + 1, y + 2, x + blob_right - 1, y + row_height - 2, legend_colour); // Legend colour
+ GfxFillRect(x + blob_left + 1, y + 2, x + blob_right - 1, y + FONT_HEIGHT_SMALL - 2, legend_colour); // Legend colour
- y += row_height;
+ y += this->row_height;
}
}
}
@@ -1319,7 +1321,7 @@ void SmallMapWindow::SetOverlayCargoMask()
int SmallMapWindow::GetPositionOnLegend(Point pt)
{
const NWidgetBase *wi = this->GetWidget<NWidgetBase>(WID_SM_LEGEND);
- uint line = (pt.y - wi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_SMALL;
+ uint line = (pt.y - wi->pos_y - WD_FRAMERECT_TOP) / this->row_height;
uint columns = this->GetNumberColumnsLegend(wi->current_x);
uint number_of_rows = this->GetNumberRowsLegend(columns);
if (line >= number_of_rows) return -1;
diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h
index 4b180f5..f62c516 100644
--- a/src/smallmap_gui.h
+++ b/src/smallmap_gui.h
@@ -71,6 +71,7 @@ protected:
uint min_number_of_columns; ///< Minimal number of columns in legends.
uint min_number_of_fixed_rows; ///< Minimal number of rows in the legends for the fixed layouts only (all except #SMT_INDUSTRY).
uint column_width; ///< Width of a column in the #WID_SM_LEGEND widget.
+ const uint row_height; ///< Heigth of each row in the #WID_SM_LEGEND widget.
int32 scroll_x; ///< Horizontal world coordinate of the base tile left of the top-left corner of the smallmap display.
int32 scroll_y; ///< Vertical world coordinate of the base tile left of the top-left corner of the smallmap display.
@@ -132,7 +133,7 @@ protected:
inline uint GetLegendHeight(uint num_columns) const
{
return WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM +
- this->GetNumberRowsLegend(num_columns) * FONT_HEIGHT_SMALL;
+ this->GetNumberRowsLegend(num_columns) * this->row_height;
}
uint GetNumberRowsLegend(uint columns) const;
--
1.8.1.2

View File

@@ -1,132 +0,0 @@
From 6a611be077b4f635285f08c1be4d20f4ba47ce13 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 2 Aug 2013 18:33:46 +0000
Subject: [PATCH 188/249] Add min sizings to some construction buttons.
---
src/dock_gui.cpp | 4 ++--
src/rail_gui.cpp | 16 ++++++++--------
src/road_gui.cpp | 20 ++++++++++----------
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 03c661d..89e9250 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -531,10 +531,10 @@ static const NWidgetPart _nested_build_docks_depot_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 3),
NWidget(NWID_HORIZONTAL_LTR),
NWidget(NWID_SPACER), SetMinimalSize(3, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_X), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_X), SetSizingType(NWST_BUTTON), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(2, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_Y), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BDD_Y), SetSizingType(NWST_BUTTON), SetMinimalSize(98, 66), SetDataTip(0x0, STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(3, 0),
EndContainer(),
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index cbd4400..08018eb 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -1364,9 +1364,9 @@ static const NWidgetPart _nested_station_builder_widgets[] = {
NWidget(WWT_LABEL, COLOUR_DARK_GREEN), SetMinimalSize(144, 11), SetDataTip(STR_STATION_BUILD_ORIENTATION, STR_NULL), SetPadding(1, 2, 0, 2),
NWidget(NWID_HORIZONTAL),
NWidget(NWID_SPACER), SetMinimalSize(7, 0), SetFill(1, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_X), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(2, 0), SetFill(1, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAS_PLATFORM_DIR_Y), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 60), SetFill(0, 0), SetDataTip(0x0, STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP), EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(7, 0), SetFill(1, 0),
EndContainer(),
NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BRAS_SHOW_NEWST_TYPE), SetMinimalSize(144, 11), SetDataTip(STR_ORANGE_STRING, STR_NULL), SetPadding(1, 2, 4, 2),
@@ -1638,8 +1638,8 @@ static const NWidgetPart _nested_signal_builder_widgets[] = {
NWidget(WWT_LABEL, COLOUR_DARK_GREEN, WID_BS_DRAG_SIGNALS_DENSITY_LABEL), SetDataTip(STR_ORANGE_INT, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP), SetFill(1, 1),
NWidget(NWID_HORIZONTAL), SetPIP(2, 0, 2),
NWidget(NWID_SPACER), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_INCREASE), SetMinimalSize(9, 12), SetDataTip(AWV_INCREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_DECREASE), SetSizingType(NWST_STEP), SetMinimalSize(9, 12), SetDataTip(AWV_DECREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_BS_DRAG_SIGNALS_DENSITY_INCREASE), SetSizingType(NWST_STEP), SetMinimalSize(9, 12), SetDataTip(AWV_INCREASE, STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP),
NWidget(NWID_SPACER), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
@@ -1706,18 +1706,18 @@ static const NWidgetPart _nested_build_depot_widgets[] = {
NWidget(NWID_HORIZONTAL_LTR),
NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
NWidget(NWID_VERTICAL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(2, 0),
NWidget(NWID_VERTICAL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_NE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BRAD_DEPOT_SE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index e8d9409..58ac2da 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -897,18 +897,18 @@ static const NWidgetPart _nested_build_road_depot_widgets[] = {
NWidget(NWID_HORIZONTAL_LTR),
NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
NWidget(NWID_VERTICAL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_NW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_NW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_SW), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_SW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(2, 0),
NWidget(NWID_VERTICAL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_NE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_NE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_SE), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROD_DEPOT_SE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), SetDataTip(0x0, STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(3, 0), SetFill(1, 0),
@@ -1043,17 +1043,17 @@ static const NWidgetPart _nested_rv_station_picker_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 3),
NWidget(NWID_HORIZONTAL), SetPIP(0, 2, 0),
NWidget(NWID_SPACER), SetFill(1, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetMinimalSize(66, 50), EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetMinimalSize(66, 50), EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_NE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_X), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
NWidget(NWID_SPACER), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
NWidget(NWID_HORIZONTAL), SetPIP(0, 2, 0),
NWidget(NWID_SPACER), SetFill(1, 0),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetMinimalSize(66, 50), EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetMinimalSize(66, 50), EndContainer(),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SW), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_SE), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_BROS_STATION_Y), SetSizingType(NWST_BUTTON), SetMinimalSize(66, 50), EndContainer(),
NWidget(NWID_SPACER), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 1),
--
1.8.1.2

View File

@@ -1,524 +0,0 @@
From 02339f2b7217551c1e7a3a6fe1688192016df10a Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 27 Jul 2013 22:03:06 +0000
Subject: [PATCH 189/249] More sizing and centering.
---
src/ai/ai_gui.cpp | 27 ++++++++++++++-------------
src/cheat_gui.cpp | 16 +++++++++++-----
src/industry_gui.cpp | 39 +++++++++++++++++++++------------------
src/intro_gui.cpp | 2 +-
src/newgrf_debug_gui.cpp | 6 +++---
src/newgrf_gui.cpp | 1 +
src/news_gui.cpp | 12 ++++++------
src/osk_gui.cpp | 5 +++--
src/settings_gui.cpp | 10 ++++++----
src/signs_gui.cpp | 2 +-
src/station_gui.cpp | 2 +-
src/town_gui.cpp | 2 +-
src/transparency_gui.cpp | 2 +-
13 files changed, 70 insertions(+), 56 deletions(-)
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index 62fed7d..1fec5ff 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -120,16 +120,16 @@ struct AIListWindow : public Window {
switch (widget) {
case WID_AIL_LIST: {
/* Draw a list of all available AIs. */
- int y = this->GetWidget<NWidgetBase>(WID_AIL_LIST)->pos_y;
+ int y = Center(r.top, this->line_height);
/* First AI in the list is hardcoded to random */
if (this->vscroll->IsVisible(0)) {
- DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE);
+ DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE);
y += this->line_height;
}
ScriptInfoList::const_iterator it = this->info_list->begin();
for (int i = 1; it != this->info_list->end(); i++, it++) {
if (this->vscroll->IsVisible(i)) {
- DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
+ DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE);
y += this->line_height;
}
}
@@ -367,7 +367,6 @@ struct AISettingsWindow : public Window {
uint text_left = r.left + (rtl ? WD_FRAMERECT_LEFT : SETTING_BUTTON_WIDTH + 8);
uint text_right = r.right - (rtl ? SETTING_BUTTON_WIDTH + 8 : WD_FRAMERECT_RIGHT);
-
int y = r.top;
int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2;
for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) {
@@ -411,7 +410,7 @@ struct AISettingsWindow : public Window {
}
}
- DrawString(text_left, text_right, y + WD_MATRIX_TOP, str, colour);
+ DrawString(text_left, text_right, Center(y, this->line_height), str, colour);
y += this->line_height;
}
}
@@ -679,7 +678,7 @@ static const NWidgetPart _nested_ai_config_widgets[] = {
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 9),
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT, STR_NULL), SetPadding(0, 5, 4, 5),
- NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
+ NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetSizingType(NWST_STEP), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
EndContainer(),
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP),
@@ -756,8 +755,8 @@ struct AIConfigWindow : public Window {
{
switch (widget) {
case WID_AIC_GAMELIST:
- this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
- size->height = 1 * this->line_height;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
+ size->height = this->line_height;
break;
case WID_AIC_LIST:
@@ -799,14 +798,14 @@ struct AIConfigWindow : public Window {
text = STR_JUST_RAW_STRING;
}
- DrawString(r.left + 10, r.right - 10, r.top + WD_MATRIX_TOP, text,
+ DrawString(r.left + 10, r.right - 10, Center(r.top, this->line_height), text,
(this->selected_slot == OWNER_DEITY) ? TC_WHITE : (IsEditable(OWNER_DEITY) ? TC_ORANGE : TC_SILVER));
break;
}
case WID_AIC_LIST: {
- int y = r.top;
+ int y = Center(r.top, this->line_height);
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < MAX_COMPANIES; i++) {
StringID text;
@@ -818,7 +817,7 @@ struct AIConfigWindow : public Window {
} else {
text = STR_AI_CONFIG_RANDOM_AI;
}
- DrawString(r.left + 10, r.right - 10, y + WD_MATRIX_TOP, text,
+ DrawString(r.left + 10, r.right - 10, y, text,
(this->selected_slot == i) ? TC_WHITE : (IsEditable((CompanyID)i) ? TC_ORANGE : TC_SILVER));
y += this->line_height;
}
@@ -1088,6 +1087,8 @@ struct AIDebugWindow : public Window {
bool dirty = false;
+ Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
+ uint offset_y = Center(0, GetMinSizing(NWST_STEP, d.height + WD_MATRIX_TOP + WD_MATRIX_BOTTOM + 1), d.height);
/* Paint the company icons */
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
NWidgetCore *button = this->GetWidget<NWidgetCore>(i + WID_AID_COMPANY_BUTTON_START);
@@ -1108,7 +1109,7 @@ struct AIDebugWindow : public Window {
if (!valid) continue;
byte offset = (i == ai_debug_company) ? 1 : 0;
- DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget<NWidgetBase>(WID_AID_COMPANY_BUTTON_START + i)->pos_y + 2 + offset);
+ DrawCompanyIcon(i, Center(button->pos_x + offset, button->current_x, d.width), button->pos_y + offset + offset_y);
}
/* Set button colour for Game Script. */
@@ -1187,7 +1188,7 @@ struct AIDebugWindow : public Window {
ScriptLog::LogData *log = this->GetLogPointer();
if (log == NULL) return;
- int y = this->top_offset;
+ int y = Center(this->top_offset, this->resize.step_height);
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < log->used; i++) {
int pos = (i + log->pos + 1 - log->used + log->count) % log->count;
if (log->lines[pos] == NULL) break;
diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp
index 9eb405d..01ea1a4 100644
--- a/src/cheat_gui.cpp
+++ b/src/cheat_gui.cpp
@@ -172,9 +172,11 @@ static const NWidgetPart _nested_cheat_widgets[] = {
struct CheatWindow : Window {
int clicked;
int header_height;
+ int line_height;
CheatWindow(WindowDesc *desc) : Window(desc)
{
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL);
this->InitNested();
}
@@ -190,11 +192,12 @@ struct CheatWindow : Window {
uint button_left = rtl ? r.right - 20 - SETTING_BUTTON_WIDTH : r.left + 20;
uint text_left = r.left + (rtl ? WD_FRAMERECT_LEFT : 30 + SETTING_BUTTON_WIDTH);
uint text_right = r.right - (rtl ? 30 + SETTING_BUTTON_WIDTH : WD_FRAMERECT_RIGHT);
+ uint box_height = GetSpriteSize(SPR_BOX_EMPTY).height;
for (int i = 0; i != lengthof(_cheats_ui); i++) {
const CheatEntry *ce = &_cheats_ui[i];
- DrawSprite((*ce->been_used) ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, box_left, y + 2);
+ DrawSprite((*ce->been_used) ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, box_left, Center(y, SETTING_BUTTON_HEIGHT, box_height));
switch (ce->type) {
case SLE_BOOL: {
@@ -233,7 +236,7 @@ struct CheatWindow : Window {
DrawString(text_left, text_right, y + 1, ce->str);
- y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
+ y += this->line_height;
}
}
@@ -275,15 +278,18 @@ struct CheatWindow : Window {
}
}
- size->width = width + 50 /* stuff on the left */ + 10 /* extra spacing on right */;
+ size->width = width + 30 + SETTING_BUTTON_WIDTH /* stuff on the left */ + 10 /* extra spacing on right */;
this->header_height = GetStringHeight(STR_CHEATS_WARNING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT) + WD_PAR_VSEP_WIDE;
- size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + (FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL) * lengthof(_cheats_ui);
+ size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lengthof(_cheats_ui);
}
virtual void OnClick(Point pt, int widget, int click_count)
{
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL);
- uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / (FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL);
+
+ if ((pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) % this->line_height > SETTING_BUTTON_HEIGHT) return;
+
+ uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height;
uint x = pt.x - wid->pos_x;
bool rtl = _current_text_dir == TD_RTL;
if (rtl) x = wid->current_x - x;
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 360ce8a..5c88ca9 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -208,9 +208,6 @@ class BuildIndustryWindow : public Window {
bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever)
Scrollbar *vscroll;
- /** The offset for the text in the matrix. */
- static const int MATRIX_TEXT_OFFSET = 17;
-
void SetupArrays()
{
this->count = 0;
@@ -299,7 +296,7 @@ public:
d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(this->index[i])->name));
}
resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
- d.width += MATRIX_TEXT_OFFSET + padding.width;
+ d.width += FONT_HEIGHT_NORMAL * 5 / 4 + padding.width;
d.height = 5 * resize->height;
*size = maxdim(*size, d);
break;
@@ -383,20 +380,22 @@ public:
switch (widget) {
case WID_DPI_MATRIX_WIDGET: {
uint text_left, text_right, icon_left, icon_right;
+ uint square_size = FONT_HEIGHT_NORMAL - 2;
+ uint text_offset = FONT_HEIGHT_NORMAL * 5 / 4;
if (_current_text_dir == TD_RTL) {
icon_right = r.right - WD_MATRIX_RIGHT;
- icon_left = icon_right - 10;
- text_right = icon_right - BuildIndustryWindow::MATRIX_TEXT_OFFSET;
+ icon_left = icon_right - square_size;
+ text_right = icon_right - text_offset;
text_left = r.left + WD_MATRIX_LEFT;
} else {
icon_left = r.left + WD_MATRIX_LEFT;
- icon_right = icon_left + 10;
- text_left = icon_left + BuildIndustryWindow::MATRIX_TEXT_OFFSET;
+ icon_right = icon_left + square_size;
+ text_left = icon_left + text_offset;
text_right = r.right - WD_MATRIX_RIGHT;
}
- for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++) {
- int y = r.top + WD_MATRIX_TOP + i * this->resize.step_height;
+ int y = Center(r.top, this->resize.step_height);
+ for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++, y += this->resize.step_height) {
bool selected = this->selected_index == i + this->vscroll->GetPosition();
if (this->index[i + this->vscroll->GetPosition()] == INVALID_INDUSTRYTYPE) {
@@ -407,8 +406,8 @@ public:
/* Draw the name of the industry in white is selected, otherwise, in orange */
DrawString(text_left, text_right, y, indsp->name, selected ? TC_WHITE : TC_ORANGE);
- GfxFillRect(icon_left, y + 1, icon_right, y + 7, selected ? PC_WHITE : PC_BLACK);
- GfxFillRect(icon_left + 1, y + 2, icon_right - 1, y + 6, indsp->map_colour);
+ GfxFillRect(icon_left, y + 1, icon_right, y + square_size, selected ? PC_WHITE : PC_BLACK);
+ GfxFillRect(icon_left + 1, y + 2, icon_right - 1, y + square_size - 1, indsp->map_colour);
}
break;
}
@@ -760,7 +759,7 @@ public:
if (first) {
if (has_accept) y += WD_PAR_VSEP_WIDE;
DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE);
- y += FONT_HEIGHT_NORMAL;
+ y += this->editable == EA_RATE ? GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) : FONT_HEIGHT_NORMAL;
if (this->editable == EA_RATE) this->production_offset_y = y;
first = false;
}
@@ -775,8 +774,10 @@ public:
if (this->editable == EA_RATE) {
DrawArrowButtons(left + WD_FRAMETEXT_LEFT, y, COLOUR_YELLOW, (this->clicked_line == IL_RATE1 + j) ? this->clicked_button : 0,
i->production_rate[j] > 0, i->production_rate[j] < 255);
+ y += GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
+ } else {
+ y += FONT_HEIGHT_NORMAL;
}
- y += FONT_HEIGHT_NORMAL;
}
/* Display production multiplier if editable */
@@ -788,7 +789,7 @@ public:
DrawString(x, right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_VIEW_PRODUCTION_LEVEL);
DrawArrowButtons(left + WD_FRAMETEXT_LEFT, y, COLOUR_YELLOW, (this->clicked_line == IL_MULTIPLIER) ? this->clicked_button : 0,
i->prod_level > PRODLEVEL_MINIMUM, i->prod_level < PRODLEVEL_MAXIMUM);
- y += FONT_HEIGHT_NORMAL;
+ y += GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
}
/* Get the extra message for the GUI */
@@ -836,12 +837,14 @@ public:
case EA_NONE: break;
case EA_MULTIPLIER:
- if (IsInsideBS(pt.y, this->production_offset_y, FONT_HEIGHT_NORMAL)) line = IL_MULTIPLIER;
+ if (IsInsideBS(pt.y, this->production_offset_y, SETTING_BUTTON_HEIGHT)) line = IL_MULTIPLIER;
break;
case EA_RATE:
if (pt.y >= this->production_offset_y) {
- int row = (pt.y - this->production_offset_y) / FONT_HEIGHT_NORMAL;
+ if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > SETTING_BUTTON_HEIGHT) break;;
+
+ int row = (pt.y - this->production_offset_y) / GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
if (i->produced_cargo[j] == CT_INVALID) continue;
row--;
@@ -1059,7 +1062,7 @@ static const NWidgetPart _nested_industry_directory_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
+ NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetSizingType(NWST_STEP), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_DROPDOWN_CRITERIA), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
NWidget(WWT_PANEL, COLOUR_BROWN), SetResize(1, 0), EndContainer(),
EndContainer(),
diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp
index 5d13058..3d07096 100644
--- a/src/intro_gui.cpp
+++ b/src/intro_gui.cpp
@@ -145,7 +145,7 @@ struct SelectGameWindow : public Window {
};
static const NWidgetPart _nested_select_game_widgets[] = {
- NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_INTRO_CAPTION, STR_NULL),
+ NWidget(WWT_CAPTION, COLOUR_BROWN), SetSizingType(NWST_BUTTON), SetDataTip(STR_INTRO_CAPTION, STR_NULL),
NWidget(WWT_PANEL, COLOUR_BROWN),
NWidget(NWID_SPACER), SetMinimalSize(0, 8),
diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp
index be4e992..2f14e6c 100644
--- a/src/newgrf_debug_gui.cpp
+++ b/src/newgrf_debug_gui.cpp
@@ -840,7 +840,7 @@ struct SpriteAlignerWindow : Window {
{
if (widget != WID_SA_LIST) return;
- resize->height = max(11, FONT_HEIGHT_NORMAL + 1);
+ resize->height = GetMinSizing(NWST_STEP, max(11, FONT_HEIGHT_NORMAL + 1));
resize->width = 1;
/* Resize to about 200 pixels (for the preview) */
@@ -877,10 +877,10 @@ struct SpriteAlignerWindow : Window {
SmallVector<SpriteID, 256> &list = _newgrf_debug_sprite_picker.sprites;
int max = min<int>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), list.Length());
- int y = r.top + WD_FRAMERECT_TOP;
+ int y = Center(r.top + WD_FRAMERECT_TOP, step_size, FONT_HEIGHT_NORMAL);
for (int i = this->vscroll->GetPosition(); i < max; i++) {
SetDParam(0, list[i]);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_BLACK_COMMA, TC_FROMSTRING, SA_CENTER | SA_FORCE);
y += step_size;
}
break;
diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp
index aedb4fd..a46aa79 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -1943,6 +1943,7 @@ void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFC
/** Widgets for the progress window. */
static const NWidgetPart _nested_scan_progress_widgets[] = {
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NEWGRF_SCAN_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
+ SetSizingType(NWST_BUTTON),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_HORIZONTAL), SetPIP(20, 0, 20),
NWidget(NWID_VERTICAL), SetPIP(11, 8, 11),
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 5639001..97d4f79 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -78,7 +78,7 @@ static TileIndex GetReferenceTile(NewsReferenceType reftype, uint32 ref)
static const NWidgetPart _nested_normal_news_widgets[] = {
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
- NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
+ NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetSizingType(NWST_BUTTON), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
NWidget(NWID_SPACER), SetFill(1, 0),
NWidget(NWID_VERTICAL),
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_DATE_LONG_SMALL, STR_NULL),
@@ -101,7 +101,7 @@ static const NWidgetPart _nested_vehicle_news_widgets[] = {
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
NWidget(NWID_VERTICAL),
- NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
+ NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetSizingType(NWST_BUTTON), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_VEH_TITLE), SetFill(1, 1), SetMinimalSize(419, 55), SetDataTip(STR_EMPTY, STR_NULL),
@@ -128,7 +128,7 @@ static const NWidgetPart _nested_company_news_widgets[] = {
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
NWidget(NWID_VERTICAL),
- NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
+ NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetSizingType(NWST_BUTTON), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_TITLE), SetFill(1, 1), SetMinimalSize(410, 20), SetDataTip(STR_EMPTY, STR_NULL),
@@ -158,7 +158,7 @@ static WindowDesc _company_news_desc(
static const NWidgetPart _nested_thin_news_widgets[] = {
NWidget(WWT_PANEL, COLOUR_WHITE, WID_N_PANEL),
NWidget(NWID_HORIZONTAL), SetPadding(1, 1, 0, 1),
- NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
+ NWidget(WWT_TEXT, COLOUR_WHITE, WID_N_CLOSEBOX), SetSizingType(NWST_STEP), SetDataTip(STR_SILVER_CROSS, STR_NULL), SetPadding(0, 0, 0, 1),
NWidget(NWID_SPACER), SetFill(1, 0),
NWidget(NWID_VERTICAL),
NWidget(WWT_LABEL, COLOUR_WHITE, WID_N_DATE), SetDataTip(STR_DATE_LONG_SMALL, STR_NULL),
@@ -1007,7 +1007,7 @@ struct MessageHistoryWindow : Window {
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
if (widget == WID_MH_BACKGROUND) {
- this->line_height = FONT_HEIGHT_NORMAL + 2;
+ this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + 2);
resize->height = this->line_height;
/* Months are off-by-one, so it's actually 8. Not using
@@ -1038,7 +1038,7 @@ struct MessageHistoryWindow : Window {
}
/* Fill the widget with news items. */
- int y = r.top + this->top_spacing;
+ int y = Center(r.top + this->top_spacing, this->line_height, FONT_HEIGHT_NORMAL);
bool rtl = _current_text_dir == TD_RTL;
uint date_left = rtl ? r.right - WD_FRAMERECT_RIGHT - this->date_width : r.left + WD_FRAMERECT_LEFT;
uint date_right = rtl ? r.right - WD_FRAMERECT_RIGHT : r.left + WD_FRAMERECT_LEFT + this->date_width;
diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp
index 2516c4d..f172c1c 100644
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -227,7 +227,8 @@ static const int INTER_KEY_SPACE = 2; // Number of pixels between two keys.
*/
static void AddKey(NWidgetHorizontal *hor, int height, int num_half, WidgetType widtype, int widnum, uint16 widdata, int *biggest_index)
{
- int key_width = HALF_KEY_WIDTH + (INTER_KEY_SPACE + HALF_KEY_WIDTH) * (num_half - 1);
+ int min_half_key = max<int>(GetMinSizing(NWST_BUTTON) / 2, HALF_KEY_WIDTH);
+ int key_width = min_half_key + (INTER_KEY_SPACE + min_half_key) * (num_half - 1);
if (widtype == NWID_SPACER) {
if (!hor->IsEmpty()) key_width += INTER_KEY_SPACE;
@@ -327,7 +328,7 @@ static NWidgetBase *MakeSpacebarKeys(int *biggest_index)
static const NWidgetPart _nested_osk_widgets[] = {
- NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_WHITE_STRING, STR_NULL),
+ NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetSizingType(NWST_BUTTON), SetDataTip(STR_WHITE_STRING, STR_NULL),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 12), SetPadding(2, 2, 2, 2),
EndContainer(),
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index afdbb4a..74b97bc 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -2290,11 +2290,13 @@ void ShowGameSettings()
void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right)
{
int colour = _colour_gradient[button_colour][2];
+ int half_button = SETTING_BUTTON_WIDTH / 2;
- DrawFrameRect(x, y, x + SETTING_BUTTON_WIDTH / 2 - 1, y + SETTING_BUTTON_HEIGHT - 1, button_colour, (state == 1) ? FR_LOWERED : FR_NONE);
- DrawFrameRect(x + SETTING_BUTTON_WIDTH / 2, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1, button_colour, (state == 2) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_ARROW_LEFT, PAL_NONE, x + WD_IMGBTN_LEFT, y + WD_IMGBTN_TOP);
- DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, x + WD_IMGBTN_LEFT + SETTING_BUTTON_WIDTH / 2, y + WD_IMGBTN_TOP);
+ DrawFrameRect(x, y, x + half_button - 1, y + SETTING_BUTTON_HEIGHT - 1, button_colour, (state == 1) ? FR_LOWERED : FR_NONE);
+ DrawFrameRect(x + half_button, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1, button_colour, (state == 2) ? FR_LOWERED : FR_NONE);
+ Dimension d = GetSpriteSize(SPR_ARROW_LEFT);
+ DrawSprite(SPR_ARROW_LEFT, PAL_NONE, Center(x, half_button, d.width), Center(y, SETTING_BUTTON_HEIGHT, d.height));
+ DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, Center(x + half_button, half_button, d.width), Center(y, SETTING_BUTTON_HEIGHT, d.height));
/* Grey out the buttons that aren't clickable */
bool rtl = _current_text_dir == TD_RTL;
diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp
index 2ec3677..e572f51 100644
--- a/src/signs_gui.cpp
+++ b/src/signs_gui.cpp
@@ -195,7 +195,7 @@ struct SignListWindow : Window, SignList {
{
switch (widget) {
case WID_SIL_LIST: {
- uint y = r.top + WD_FRAMERECT_TOP; // Offset from top of widget.
+ uint y = Center(r.top + WD_FRAMERECT_TOP, this->resize.step_height); // Offset from top of widget.
/* No signs? */
if (this->vscroll->GetCount() == 0) {
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, STR_STATION_LIST_NONE);
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 28f9ea6..7a57229 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -572,7 +572,7 @@ static const NWidgetPart _nested_company_stations_widgets[] = {
NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_SORTBY), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_SORTBY), SetSizingType(NWST_STEP), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_STL_SORTDROPBTN), SetMinimalSize(163, 12), SetDataTip(STR_SORT_BY_NAME, STR_TOOLTIP_SORT_CRITERIA), // widget_data gets overwritten.
NWidget(WWT_PANEL, COLOUR_GREY), SetDataTip(0x0, STR_NULL), SetResize(1, 0), SetFill(1, 1), EndContainer(),
EndContainer(),
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index 3c541e5..dbc9345 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -618,7 +618,7 @@ static const NWidgetPart _nested_town_directory_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
- NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_TD_SORT_ORDER), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
+ NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_TD_SORT_ORDER), SetSizingType(NWST_STEP), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_TD_SORT_CRITERIA), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA),
NWidget(WWT_PANEL, COLOUR_BROWN), SetResize(1, 0), EndContainer(),
EndContainer(),
diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp
index 9e00552..50778fc 100644
--- a/src/transparency_gui.cpp
+++ b/src/transparency_gui.cpp
@@ -142,7 +142,7 @@ static const NWidgetPart _nested_transparency_widgets[] = {
NWidget(WWT_PANEL, COLOUR_DARK_GREEN), SetFill(1, 1), EndContainer(),
EndContainer(),
/* Panel with 'invisibility' buttons. */
- NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_TT_BUTTONS), SetMinimalSize(219, 13), SetDataTip(0x0, STR_TRANSPARENT_INVISIBLE_TOOLTIP),
+ NWidget(WWT_PANEL, COLOUR_DARK_GREEN, WID_TT_BUTTONS), SetSizingType(NWST_STEP), SetMinimalSize(219, 13), SetDataTip(0x0, STR_TRANSPARENT_INVISIBLE_TOOLTIP),
EndContainer(),
};
--
1.8.1.2

View File

@@ -1,261 +0,0 @@
From 8b2df1217b9a3f16bfc189d1c01b897e879696c9 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 9 Aug 2013 09:33:23 +0000
Subject: [PATCH 190/249] Sizing and centering of owner face window.
---
src/company_gui.cpp | 202 +++++++++++++++++++++++++++-------------------------
1 file changed, 106 insertions(+), 96 deletions(-)
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index 060c796..3be6dec 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -921,102 +921,108 @@ static const NWidgetPart _nested_select_company_manager_face_widgets[] = {
EndContainer(),
EndContainer(),
EndContainer(),
- NWidget(NWID_VERTICAL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
- NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
- NWidget(NWID_VERTICAL),
- NWidget(NWID_SPACER), SetFill(0, 1),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
- NWidget(NWID_SPACER), SetFill(0, 1),
- EndContainer(),
- EndContainer(),
- NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
- NWidget(NWID_VERTICAL),
- NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
- EndContainer(),
- NWidget(NWID_SPACER), SetMinimalSize(0, 2),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
- EndContainer(),
- NWidget(NWID_SPACER), SetMinimalSize(0, 4),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
- EndContainer(),
- NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
- EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
+
+ NWidget(NWID_HORIZONTAL),
+ NWidget(NWID_SPACER), SetFill(1, 0),
+ NWidget(NWID_VERTICAL),
+ NWidget(NWID_SPACER), SetFill(0, 1),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
+ NWidget(NWID_SPACER), SetMinimalSize(0, 2),
+ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
+ NWidget(NWID_VERTICAL),
+ NWidget(NWID_SPACER), SetFill(0, 1),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
+ NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
- NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
+ NWidget(NWID_VERTICAL),
+ NWidget(NWID_SPACER), SetMinimalSize(0, 2),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_SPACER), SetMinimalSize(0, 2),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
+ EndContainer(),
+ NWidget(NWID_SPACER), SetMinimalSize(0, 4),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
+ NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
+ EndContainer(),
+ NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
- NWidget(NWID_SPACER), SetFill(0, 1),
EndContainer(),
EndContainer(),
+ NWidget(NWID_SPACER), SetFill(1, 0),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
@@ -1066,7 +1072,7 @@ class SelectCompanyManagerFaceWindow : public Window
/* Draw the value/bool in white (0xC). If the button clicked adds 1px to x and y text coordinates (IsWindowWidgetLowered()). */
DrawString(nwi_widget->pos_x + nwi_widget->IsLowered(), nwi_widget->pos_x + nwi_widget->current_x - 1 - nwi_widget->IsLowered(),
- nwi_widget->pos_y + 1 + nwi_widget->IsLowered(), str, TC_WHITE, SA_HOR_CENTER);
+ Center(nwi_widget->pos_y + nwi_widget->IsLowered(), nwi_widget->current_y), str, TC_WHITE, SA_HOR_CENTER);
}
}
@@ -1116,6 +1122,10 @@ public:
Dimension yesno_dim = maxdim(GetStringBoundingBox(STR_FACE_YES), GetStringBoundingBox(STR_FACE_NO));
yesno_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
yesno_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
+
+ yesno_dim.width = GetMinSizing(NWST_STEP, yesno_dim.width);
+ yesno_dim.height = GetMinSizing(NWST_STEP, yesno_dim.height);
+
/* Size of the number button + arrows. */
Dimension number_dim = {0, 0};
for (int val = 1; val <= 12; val++) {
@@ -1252,12 +1262,12 @@ public:
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
case WID_SCMF_TIE_EARRING_TEXT: {
StringID str = PART_TEXTS_IS_FEMALE[(widget - WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT) * 2 + this->is_female];
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_GOLD, SA_RIGHT);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), str, TC_GOLD, SA_RIGHT);
break;
}
case WID_SCMF_LIPS_MOUSTACHE_TEXT:
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, (this->is_moust_male) ? STR_FACE_MOUSTACHE : STR_FACE_LIPS, TC_GOLD, SA_RIGHT);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), (this->is_moust_male) ? STR_FACE_MOUSTACHE : STR_FACE_LIPS, TC_GOLD, SA_RIGHT);
break;
case WID_SCMF_HAS_GLASSES_TEXT:
@@ -1269,7 +1279,7 @@ public:
case WID_SCMF_CHIN_TEXT:
case WID_SCMF_JACKET_TEXT:
case WID_SCMF_COLLAR_TEXT:
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT], TC_GOLD, SA_RIGHT);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT], TC_GOLD, SA_RIGHT);
break;
--
1.8.1.2

View File

@@ -1,49 +0,0 @@
From 20ee01e02e30d889b5d36054dc86c14443d6376e Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 11 Aug 2013 12:27:04 +0000
Subject: [PATCH 191/249] Sizing and centering of vehicle image on refit
window.
---
src/vehicle_gui.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index e13a131..2e8c995 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -765,7 +765,7 @@ struct RefitWindow : public Window {
break;
case WID_VR_VEHICLE_PANEL_DISPLAY:
- size->height = GetVehicleHeight(Vehicle::Get(this->window_number)->type);
+ size->height = max(GetMinSizing(NWST_STEP), GetVehicleHeight(Vehicle::Get(this->window_number)->type));
break;
case WID_VR_INFO:
@@ -825,11 +825,12 @@ struct RefitWindow : public Window {
case WID_VR_VEHICLE_PANEL_DISPLAY: {
Vehicle *v = Vehicle::Get(this->window_number);
DrawVehicleImage(v, this->sprite_left + WD_FRAMERECT_LEFT, this->sprite_right - WD_FRAMERECT_RIGHT,
- r.top, r.bottom - r.top, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != NULL ? this->hscroll->GetPosition() : 0);
+ r.top, r.bottom - r.top + 1, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != NULL ? this->hscroll->GetPosition() : 0);
/* Highlight selected vehicles. */
if (this->order != INVALID_VEH_ORDER_ID) break;
int x = 0;
+ int y_offset_frame = Center(0, r.bottom - r.top + 1, 14);
switch (v->type) {
case VEH_TRAIN: {
VehicleSet vehicles_to_refit;
@@ -862,7 +863,7 @@ struct RefitWindow : public Window {
}
if (left != right) {
- DrawFrameRect(left, r.top + WD_FRAMERECT_TOP, right, r.top + WD_FRAMERECT_TOP + 13, COLOUR_WHITE, FR_BORDERONLY);
+ DrawFrameRect(left, r.top + y_offset_frame, right, r.top + y_offset_frame + 13, COLOUR_WHITE, FR_BORDERONLY);
}
left = INT32_MIN;
--
1.8.1.2

View File

@@ -1,72 +0,0 @@
From 9a2fe87d754e34b524b187d428109efddded0cbe Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 10 Aug 2013 15:23:33 +0000
Subject: [PATCH 195/249] Center sprites on station picker for road stations
and rail stations.
---
src/rail_gui.cpp | 15 +++++++++------
src/road_gui.cpp | 6 +++++-
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index a2067c5..004b47f 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -1088,8 +1088,9 @@ public:
if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &tmp_dpi;
- if (!DrawStationTile(32, 28, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) {
- StationPickerDrawSprite(32, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2);
+ int x = Center(TILE_PIXELS, r.right - r.left, 2 * TILE_PIXELS);
+ if (!DrawStationTile(x, 28, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) {
+ StationPickerDrawSprite(x, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2);
}
_cur_dpi = old_dpi;
}
@@ -1100,8 +1101,9 @@ public:
if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &tmp_dpi;
- if (!DrawStationTile(32, 28, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) {
- StationPickerDrawSprite(32, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 3);
+ int x = Center(TILE_PIXELS, r.right - r.left, 2 * TILE_PIXELS);
+ if (!DrawStationTile(x, 28, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) {
+ StationPickerDrawSprite(x, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 3);
}
_cur_dpi = old_dpi;
}
@@ -1136,8 +1138,9 @@ public:
if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) {
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &tmp_dpi;
- if (!DrawStationTile(32, 28, _cur_railtype, _railstation.orientation, _railstation.station_class, type)) {
- StationPickerDrawSprite(32, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _railstation.orientation);
+ int x = Center(TILE_PIXELS, r.right - r.left, 2 * TILE_PIXELS);
+ if (!DrawStationTile(x, 28, _cur_railtype, _railstation.orientation, _railstation.station_class, type)) {
+ StationPickerDrawSprite(x, 28, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _railstation.orientation);
}
_cur_dpi = old_dpi;
}
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index 03925fc..f35a2c2 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -1005,8 +1005,12 @@ struct BuildRoadStationWindow : public PickerWindowBase {
{
if (!IsInsideMM(widget, WID_BROS_STATION_NE, WID_BROS_STATION_Y + 1)) return;
+ int x = Center(r.left + TILE_PIXELS, r.right - r.left, 2 * TILE_PIXELS);
+ /* Height of bus/truck sprite in OpenGFX is TILE_PIXELS + 11. */
+ int y = Center(r.top + WD_FRAMERECT_TOP - WD_MATRIX_BOTTOM + IsWidgetLowered(widget) + 11, r.bottom - r.top, TILE_PIXELS + 11);
+
StationType st = (this->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK;
- StationPickerDrawSprite(r.left + TILE_PIXELS, r.bottom - TILE_PIXELS, st, INVALID_RAILTYPE, widget < WID_BROS_STATION_X ? ROADTYPE_ROAD : _cur_roadtype, widget - WID_BROS_STATION_NE);
+ StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, widget < WID_BROS_STATION_X ? ROADTYPE_ROAD : _cur_roadtype, widget - WID_BROS_STATION_NE);
}
virtual void OnClick(Point pt, int widget, int click_count)
--
1.8.1.2

View File

@@ -1,26 +0,0 @@
From 0d255c000ba8913e3e8c6c48922d09071f5ba3e6 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 10 Aug 2013 15:19:00 +0000
Subject: [PATCH 196/249] Center sprites on bridge picker window.
---
src/bridge_gui.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp
index 61c477a..78e7ff8 100644
--- a/src/bridge_gui.cpp
+++ b/src/bridge_gui.cpp
@@ -231,7 +231,8 @@ public:
SetDParam(1, b->speed);
SetDParam(0, b->material);
- DrawSprite(b->sprite, b->pal, r.left + WD_MATRIX_LEFT, y + this->resize.step_height - 1 - GetSpriteSize(b->sprite).height);
+ uint y_sprite = Center(y, this->resize.step_height, GetSpriteSize(b->sprite).height);
+ DrawSprite(b->sprite, b->pal, r.left + WD_MATRIX_LEFT, y_sprite);
DrawStringMultiLine(r.left + this->bridgetext_offset, r.right, y + 2, y + this->resize.step_height,
_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO);
y += this->resize.step_height;
--
1.8.1.2

View File

@@ -1,34 +0,0 @@
From c967a3b02c96e35f1354bde0ed7b129b821d2e5e Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Thu, 26 Sep 2013 11:50:35 +0000
Subject: [PATCH 197/249] Center vehicle status icon.
---
src/vehicle_gui.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index 2e8c995..80198f0 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -3031,13 +3031,14 @@ public:
/* Draw the flag plus orders. */
bool rtl = (_current_text_dir == TD_RTL);
- uint text_offset = max(GetSpriteSize(SPR_FLAG_VEH_STOPPED).width, GetSpriteSize(SPR_FLAG_VEH_RUNNING).width) + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT;
+ int image = ((v->vehstatus & VS_STOPPED) != 0) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING;
+ Dimension d = GetSpriteSize(image);
+ uint text_offset = d.width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT;
int text_left = r.left + (rtl ? (uint)WD_FRAMERECT_LEFT : text_offset);
int text_right = r.right - (rtl ? text_offset : (uint)WD_FRAMERECT_RIGHT);
int image_left = (rtl ? text_right + 1 : r.left) + WD_IMGBTN_LEFT;
- int image = ((v->vehstatus & VS_STOPPED) != 0) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING;
int lowered = this->IsWidgetLowered(WID_VV_START_STOP) ? 1 : 0;
- DrawSprite(image, PAL_NONE, image_left + lowered, r.top + WD_IMGBTN_TOP + lowered);
+ DrawSprite(image, PAL_NONE, image_left + lowered, Center(r.top + WD_IMGBTN_TOP + lowered, r.bottom - r.top, d.height));
DrawString(text_left + lowered, text_right + lowered, Center(r.top + lowered, r.bottom - r.top), str, TC_FROMSTRING, SA_HOR_CENTER);
}
--
1.8.1.2

View File

@@ -1,51 +0,0 @@
From 58bb44dae5f1165333369b2015fbf4005052efcb Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 6 Oct 2013 14:52:43 +0000
Subject: [PATCH 198/249] Center cargo icons on station GUI.
---
src/station_gui.cpp | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 7a57229..19d0f37 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -654,17 +654,19 @@ static const NWidgetPart _nested_station_view_widgets[] = {
* @param y y coordinate
* @param width the width of the view
*/
-static void DrawCargoIcons(CargoID i, uint waiting, int left, int right, int y)
+static void DrawCargoIcons(CargoID i, uint waiting, int left, int right, int top, int bottom)
{
- uint num = min((waiting + 5) / 10, (right - left) / 10); // maximum is width / 10 icons so it won't overflow
- if (num == 0) return;
-
SpriteID sprite = CargoSpec::Get(i)->GetCargoIcon();
+ Dimension d = GetSpriteSize(sprite);
+
+ uint num = min((waiting + 5) / d.width, (right - left) / d.width); // maximum is width / 10 icons so it won't overflow
+ if (num == 0) return;
- int x = _current_text_dir == TD_RTL ? left : right - num * 10;
+ int x = _current_text_dir == TD_RTL ? left : right - num * d.width;
+ int y = Center(top, bottom - top, d.height);
do {
DrawSprite(sprite, PAL_NONE, x, y);
- x += 10;
+ x += d.width;
} while (--num);
}
@@ -1590,7 +1592,7 @@ struct StationViewWindow : public Window {
if (this->groupings[column] == GR_CARGO) {
str = STR_STATION_VIEW_WAITING_CARGO;
- DrawCargoIcons(cd->GetCargo(), cd->GetCount(), r.left + WD_FRAMERECT_LEFT + this->expand_shrink_width, r.right - WD_FRAMERECT_RIGHT - this->expand_shrink_width, y);
+ DrawCargoIcons(cd->GetCargo(), cd->GetCount(), r.left + WD_FRAMERECT_LEFT + this->expand_shrink_width, r.right - WD_FRAMERECT_RIGHT - this->expand_shrink_width, y, y + FONT_HEIGHT_NORMAL);
} else {
if (!auto_distributed) grouping = GR_SOURCE;
StationID station = cd->GetStation();
--
1.8.1.2

View File

@@ -1,116 +0,0 @@
From 6251bbea8a9dab7e4dfa94e9d661edea0a259fd1 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 2 Aug 2013 18:36:00 +0000
Subject: [PATCH 199/249] Add a specific min sizing for onscreen keyboard.
---
src/osk_gui.cpp | 16 ++++++++--------
src/widget.cpp | 3 +++
src/widget_type.h | 1 +
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp
index f172c1c..52d0d2d 100644
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -103,7 +103,7 @@ struct OskWindow : public Window {
widget -= WID_OSK_LETTERS;
DrawCharCentered(_keyboard[this->shift][widget],
- r.left + 8,
+ (r.left + r.right) / 2,
r.top + 3,
TC_BLACK);
}
@@ -227,7 +227,7 @@ static const int INTER_KEY_SPACE = 2; // Number of pixels between two keys.
*/
static void AddKey(NWidgetHorizontal *hor, int height, int num_half, WidgetType widtype, int widnum, uint16 widdata, int *biggest_index)
{
- int min_half_key = max<int>(GetMinSizing(NWST_BUTTON) / 2, HALF_KEY_WIDTH);
+ int min_half_key = max<int>(GetMinSizing(NWST_BUTTON), HALF_KEY_WIDTH);
int key_width = min_half_key + (INTER_KEY_SPACE + min_half_key) * (num_half - 1);
if (widtype == NWID_SPACER) {
@@ -251,7 +251,7 @@ static void AddKey(NWidgetHorizontal *hor, int height, int num_half, WidgetType
static NWidgetBase *MakeTopKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontal();
- int key_height = FONT_HEIGHT_NORMAL + 2;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 2);
AddKey(hor, key_height, 6 * 2, WWT_TEXTBTN, WID_OSK_CANCEL, STR_BUTTON_CANCEL, biggest_index);
AddKey(hor, key_height, 6 * 2, WWT_TEXTBTN, WID_OSK_OK, STR_BUTTON_OK, biggest_index);
@@ -263,7 +263,7 @@ static NWidgetBase *MakeTopKeys(int *biggest_index)
static NWidgetBase *MakeNumberKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontalLTR();
- int key_height = FONT_HEIGHT_NORMAL + 6;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 6);
for (int widnum = WID_OSK_NUMBERS_FIRST; widnum <= WID_OSK_NUMBERS_LAST; widnum++) {
AddKey(hor, key_height, 2, WWT_PUSHBTN, widnum, 0x0, biggest_index);
@@ -275,7 +275,7 @@ static NWidgetBase *MakeNumberKeys(int *biggest_index)
static NWidgetBase *MakeQwertyKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontalLTR();
- int key_height = FONT_HEIGHT_NORMAL + 6;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 6);
AddKey(hor, key_height, 3, WWT_PUSHIMGBTN, WID_OSK_SPECIAL, SPR_OSK_SPECIAL, biggest_index);
for (int widnum = WID_OSK_QWERTY_FIRST; widnum <= WID_OSK_QWERTY_LAST; widnum++) {
@@ -289,7 +289,7 @@ static NWidgetBase *MakeQwertyKeys(int *biggest_index)
static NWidgetBase *MakeAsdfgKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontalLTR();
- int key_height = FONT_HEIGHT_NORMAL + 6;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 6);
AddKey(hor, key_height, 4, WWT_IMGBTN, WID_OSK_CAPS, SPR_OSK_CAPS, biggest_index);
for (int widnum = WID_OSK_ASDFG_FIRST; widnum <= WID_OSK_ASDFG_LAST; widnum++) {
@@ -302,7 +302,7 @@ static NWidgetBase *MakeAsdfgKeys(int *biggest_index)
static NWidgetBase *MakeZxcvbKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontalLTR();
- int key_height = FONT_HEIGHT_NORMAL + 6;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 6);
AddKey(hor, key_height, 3, WWT_IMGBTN, WID_OSK_SHIFT, SPR_OSK_SHIFT, biggest_index);
for (int widnum = WID_OSK_ZXCVB_FIRST; widnum <= WID_OSK_ZXCVB_LAST; widnum++) {
@@ -316,7 +316,7 @@ static NWidgetBase *MakeZxcvbKeys(int *biggest_index)
static NWidgetBase *MakeSpacebarKeys(int *biggest_index)
{
NWidgetHorizontal *hor = new NWidgetHorizontal();
- int key_height = FONT_HEIGHT_NORMAL + 6;
+ int key_height = GetMinSizing(NWST_KEYBOARD, FONT_HEIGHT_NORMAL + 6);
AddKey(hor, key_height, 8, NWID_SPACER, 0, 0, biggest_index);
AddKey(hor, key_height, 13, WWT_PUSHTXTBTN, WID_OSK_SPACE, STR_EMPTY, biggest_index);
diff --git a/src/widget.cpp b/src/widget.cpp
index 8d14527..74b0112 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -2921,6 +2921,9 @@ uint GetMinSizing(NWidSizingType type, uint min_1)
case NWST_STEP:
min_sizing = _settings_client.gui.min_step;
break;
+ case NWST_KEYBOARD:
+ min_sizing = 2 * _settings_client.gui.min_button;
+ break;
default: NOT_REACHED();
}
diff --git a/src/widget_type.h b/src/widget_type.h
index 1003096..f2e015c 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -47,6 +47,7 @@ enum NWidSizingType {
///< Later, they are automatically set to NWST_BUTTON or NWST_STEP.
NWST_BUTTON, ///< Size will be set at least _settings_client.gui.min_button.
NWST_STEP, ///< Size will be set at least _settings_client.gui.min_step (scrollbars and dropdowns).
+ NWST_KEYBOARD, ///< Size for keyboard keys.
NWST_OVERRIDE, ///< Avoid widgets to use automatic minimal sizing.
NWST_END
};
--
1.8.1.2

View File

@@ -1,93 +0,0 @@
From dece237b88597d34baafbcbf9b7587e87e16a4c4 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 9 Aug 2013 08:34:39 +0000
Subject: [PATCH 200/249] Add a min sizing for width of command errors, news
and query windows.
---
src/error_gui.cpp | 1 +
src/misc_gui.cpp | 1 +
src/news_gui.cpp | 1 +
src/widget.cpp | 3 +++
src/widget_type.h | 15 ++++++++-------
5 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/error_gui.cpp b/src/error_gui.cpp
index b498cff..ceec8f5 100644
--- a/src/error_gui.cpp
+++ b/src/error_gui.cpp
@@ -183,6 +183,7 @@ public:
CopyInDParam(0, this->decode_params, lengthof(this->decode_params));
if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_size, this->textref_stack);
+ size->width = GetMinSizing(NWST_WINDOW_LENGTH, size->width);
int text_width = max(0, (int)size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT);
this->height_summary = GetStringHeight(this->summary_msg, text_width);
this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, text_width);
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 05ab96d..f65dcdd 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -1093,6 +1093,7 @@ struct QueryWindow : public Window {
{
if (widget != WID_Q_TEXT) return;
+ size->width = GetMinSizing(NWST_WINDOW_LENGTH, size->width);
Dimension d = GetStringMultiLineBoundingBox(this->message, *size);
d.width += WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT;
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index 97d4f79..ba4b557 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -315,6 +315,7 @@ struct NewsWindow : Window {
StringID str = STR_NULL;
switch (widget) {
case WID_N_MESSAGE:
+ size->width = GetMinSizing(NWST_WINDOW_LENGTH, size->width);
CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
str = this->ni->string_id;
break;
diff --git a/src/widget.cpp b/src/widget.cpp
index 74b0112..068a945 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -2924,6 +2924,9 @@ uint GetMinSizing(NWidSizingType type, uint min_1)
case NWST_KEYBOARD:
min_sizing = 2 * _settings_client.gui.min_button;
break;
+ case NWST_WINDOW_LENGTH:
+ min_sizing = 8 * _settings_client.gui.min_button;
+ break;
default: NOT_REACHED();
}
diff --git a/src/widget_type.h b/src/widget_type.h
index f2e015c..6d95a2c 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -42,13 +42,14 @@ enum ArrowWidgetValues {
/** Values for different minimal sizing of widgets. */
enum NWidSizingType {
- NWST_NONE, ///< No sizing type is yet defined.
- ///< Most buttons and scrollbars are initialized with this value.
- ///< Later, they are automatically set to NWST_BUTTON or NWST_STEP.
- NWST_BUTTON, ///< Size will be set at least _settings_client.gui.min_button.
- NWST_STEP, ///< Size will be set at least _settings_client.gui.min_step (scrollbars and dropdowns).
- NWST_KEYBOARD, ///< Size for keyboard keys.
- NWST_OVERRIDE, ///< Avoid widgets to use automatic minimal sizing.
+ NWST_NONE, ///< No sizing type is yet defined.
+ ///< Most buttons and scrollbars are initialized with this value.
+ ///< Later, they are automatically set to NWST_BUTTON or NWST_STEP.
+ NWST_BUTTON, ///< Size will be set at least _settings_client.gui.min_button.
+ NWST_STEP, ///< Size will be set at least _settings_client.gui.min_step (scrollbars and dropdowns).
+ NWST_KEYBOARD, ///< Size for keyboard keys.
+ NWST_WINDOW_LENGTH, ///< Width for command errors, message windows and statusbar middle part.
+ NWST_OVERRIDE, ///< Avoid widgets to use automatic minimal sizing.
NWST_END
};
--
1.8.1.2

View File

@@ -1,76 +0,0 @@
From 6b010716fe9c2f867ec5d0895dc638985751bc1d Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 9 Aug 2013 09:32:52 +0000
Subject: [PATCH 201/249] Add a min sizing for viewports.
---
src/news_gui.cpp | 4 ++--
src/viewport_gui.cpp | 2 +-
src/widget.cpp | 3 +++
src/widget_type.h | 1 +
4 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/news_gui.cpp b/src/news_gui.cpp
index ba4b557..9760ac8 100644
--- a/src/news_gui.cpp
+++ b/src/news_gui.cpp
@@ -166,7 +166,7 @@ static const NWidgetPart _nested_thin_news_widgets[] = {
EndContainer(),
EndContainer(),
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MESSAGE), SetMinimalSize(428, 48), SetFill(1, 0), SetPadding(0, 5, 0, 5),
- NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetMinimalSize(426, 70), SetPadding(1, 2, 2, 2),
+ NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetSizingType(NWST_VIEWPORT), SetMinimalSize(426, 70), SetPadding(1, 2, 2, 2),
EndContainer(),
};
@@ -188,7 +188,7 @@ static const NWidgetPart _nested_small_news_widgets[] = {
/* Main part */
NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_N_HEADLINE),
NWidget(WWT_INSET, COLOUR_LIGHT_BLUE, WID_N_INSET), SetPadding(2, 2, 2, 2),
- NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetPadding(1, 1, 1, 1), SetMinimalSize(274, 47), SetFill(1, 0),
+ NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_N_VIEWPORT), SetSizingType(NWST_VIEWPORT), SetPadding(1, 1, 1, 1), SetMinimalSize(274, 47), SetFill(1, 0),
EndContainer(),
NWidget(WWT_EMPTY, COLOUR_WHITE, WID_N_MESSAGE), SetMinimalSize(275, 20), SetFill(1, 0), SetPadding(0, 5, 0, 5),
EndContainer(),
diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp
index ab8125f..7e9b3b3 100644
--- a/src/viewport_gui.cpp
+++ b/src/viewport_gui.cpp
@@ -32,7 +32,7 @@ static const NWidgetPart _nested_extra_view_port_widgets[] = {
NWidget(WWT_STICKYBOX, COLOUR_GREY),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
- NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_EV_VIEWPORT), SetPadding(2, 2, 2, 2), SetResize(1, 1), SetFill(1, 1),
+ NWidget(NWID_VIEWPORT, INVALID_COLOUR, WID_EV_VIEWPORT), SetSizingType(NWST_VIEWPORT), SetPadding(2, 2, 2, 2), SetResize(1, 1), SetFill(1, 1),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_EV_ZOOM_IN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN),
diff --git a/src/widget.cpp b/src/widget.cpp
index 068a945..f48b033 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -770,6 +770,9 @@ void NWidgetResizeBase::SetMinimalSize(uint min_x, uint min_y)
case NWST_STEP:
min_size = _settings_client.gui.min_step;
break;
+ case NWST_VIEWPORT:
+ min_size = 3 * _settings_client.gui.min_button;
+ break;
default: NOT_REACHED();
}
diff --git a/src/widget_type.h b/src/widget_type.h
index 6d95a2c..43ec2e4 100644
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -49,6 +49,7 @@ enum NWidSizingType {
NWST_STEP, ///< Size will be set at least _settings_client.gui.min_step (scrollbars and dropdowns).
NWST_KEYBOARD, ///< Size for keyboard keys.
NWST_WINDOW_LENGTH, ///< Width for command errors, message windows and statusbar middle part.
+ NWST_VIEWPORT, ///< Sizing type for viewports.
NWST_OVERRIDE, ///< Avoid widgets to use automatic minimal sizing.
NWST_END
};
--
1.8.1.2

View File

@@ -1,264 +0,0 @@
From f167fb10f164ff720774cbb51f3ce5edb0f664f5 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 27 Jul 2013 22:04:33 +0000
Subject: [PATCH 202/249] Add a setting for automatically set min sizing
values.
---
src/cheat_gui.cpp | 9 +++---
src/gfx.cpp | 2 ++
src/industry_gui.cpp | 2 +-
src/lang/english.txt | 2 ++
src/misc_gui.cpp | 4 ++-
src/settings_gui.h | 4 +--
src/settings_type.h | 1 +
src/table/misc_settings.ini | 5 ++++
src/window.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++
src/window_func.h | 1 +
10 files changed, 94 insertions(+), 8 deletions(-)
diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp
index 01ea1a4..db61024 100644
--- a/src/cheat_gui.cpp
+++ b/src/cheat_gui.cpp
@@ -287,7 +287,7 @@ struct CheatWindow : Window {
{
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL);
- if ((pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) % this->line_height > SETTING_BUTTON_HEIGHT) return;
+ if ((pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) % this->line_height > (uint)SETTING_BUTTON_HEIGHT) return;
uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height;
uint x = pt.x - wid->pos_x;
@@ -300,7 +300,7 @@ struct CheatWindow : Window {
int value = (int32)ReadValue(ce->variable, ce->type);
int oldvalue = value;
- if (btn == CHT_CHANGE_DATE && x >= 20 + SETTING_BUTTON_WIDTH) {
+ if (btn == CHT_CHANGE_DATE && x >= (20 + (uint)SETTING_BUTTON_WIDTH)) {
/* Click at the date text directly. */
SetDParam(0, value);
ShowQueryString(STR_JUST_INT, STR_CHEAT_CHANGE_DATE_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED);
@@ -320,10 +320,11 @@ struct CheatWindow : Window {
default:
/* Take whatever the function returns */
- value = ce->proc(value + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
+ bool clicked_right = x >= 20 + (uint)(SETTING_BUTTON_WIDTH / 2);
+ value = ce->proc(value + (clicked_right ? 1 : -1), clicked_right ? 1 : -1);
/* The first cheat (money), doesn't return a different value. */
- if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) != rtl ? 1 : 0);
+ if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + (clicked_right != rtl ? 1 : 0);
break;
}
diff --git a/src/gfx.cpp b/src/gfx.cpp
index eabb49c..5c2cdc2 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -1230,6 +1230,8 @@ void ScreenSizeChanged()
/* screen size changed and the old bitmap is invalid now, so we don't want to undraw it */
_cursor.visible = false;
+
+ CheckWindowMinSizings();
}
void UndrawMouseCursor()
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 5c88ca9..8619a17 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -842,7 +842,7 @@ public:
case EA_RATE:
if (pt.y >= this->production_offset_y) {
- if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > SETTING_BUTTON_HEIGHT) break;;
+ if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > (uint)SETTING_BUTTON_HEIGHT) break;;
int row = (pt.y - this->production_offset_y) / GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
diff --git a/src/lang/english.txt b/src/lang/english.txt
index d67f2de..155b73e 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -976,6 +976,8 @@ STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} corr
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed
+STR_ERROR_RESET_WINDOWS :{WHITE}All windows have been reseted...
+STR_ERROR_AUTOMATIC_SIZING :{WHITE}Sizes of buttons and fonts have changed
# Custom currency window
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index f65dcdd..dbbde57 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -623,6 +623,8 @@ static WindowDesc _tool_tips_desc(
_nested_tooltips_widgets, lengthof(_nested_tooltips_widgets)
);
+uint _tooltip_width = 194;
+
/** Window for displaying a tooltip. */
struct TooltipsWindow : public Window
{
@@ -671,7 +673,7 @@ struct TooltipsWindow : public Window
/* There is only one widget. */
for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]);
- size->width = min(GetStringBoundingBox(this->string_id).width, 194);
+ size->width = min(GetStringBoundingBox(this->string_id).width, _tooltip_width);
size->height = GetStringHeight(this->string_id, size->width);
/* Increase slightly to have some space around the box. */
diff --git a/src/settings_gui.h b/src/settings_gui.h
index 2ca418b..bb2a1ec 100644
--- a/src/settings_gui.h
+++ b/src/settings_gui.h
@@ -14,8 +14,8 @@
#include "gfx_type.h"
-static const int SETTING_BUTTON_WIDTH = 20; ///< Width of setting buttons
-static const int SETTING_BUTTON_HEIGHT = 10; ///< Height of setting buttons
+extern int SETTING_BUTTON_WIDTH; ///< Width of setting buttons
+extern int SETTING_BUTTON_HEIGHT; ///< Height of setting buttons
void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right);
void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable);
diff --git a/src/settings_type.h b/src/settings_type.h
index aa0e2a4..93b9cfb 100644
--- a/src/settings_type.h
+++ b/src/settings_type.h
@@ -79,6 +79,7 @@ struct GUISettings {
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning
uint min_button; ///< min size of most button widgets
uint min_step; ///< min size of scrollbar/dropdown elements
+ bool manage_min_sizing; ///< automatically set min_button and min_step
bool show_finances; ///< show finances at end of year
bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
bool new_nonstop; ///< ttdpatch compatible nonstop handling
diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini
index 0b02e69..fd0207c 100644
--- a/src/table/misc_settings.ini
+++ b/src/table/misc_settings.ini
@@ -228,6 +228,11 @@ min = 0
max = 100
cat = SC_EXPERT
+[SDTG_BOOL]
+name = ""manage_min_sizing""
+var = _settings_client.gui.manage_min_sizing
+def = false
+
[SDTG_VAR]
name = ""min_step_size""
type = SLE_UINT
diff --git a/src/window.cpp b/src/window.cpp
index 903a56f..60153bc 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -36,6 +36,14 @@
#include "error.h"
#include "game/game.hpp"
#include "video/video_driver.hpp"
+#include "settings_gui.h"
+#include "fontcache.h"
+#include "error.h"
+#include "station_base.h"
+#include "waypoint_base.h"
+#include "command_func.h"
+
+#include "table/strings.h"
/** Values for _settings_client.gui.auto_scrolling */
enum ViewportAutoscrolling {
@@ -1787,6 +1795,70 @@ Window *FindWindowFromPt(int x, int y)
return NULL;
}
+int SETTING_BUTTON_WIDTH = 20;
+int SETTING_BUTTON_HEIGHT = 10;
+
+/**
+ * Set button size of settings. If automatic sizing is also enabled, it also sets
+ * the sizing of buttons, scrollbars and font size (recommend restart).
+ * @todo Check if it can be moved to another file, so we do not need to include error, string and fontcache headers.
+ * @todo Fix magic numbers 16/18/20/30/32
+ */
+void CheckWindowMinSizings()
+{
+ if (_settings_client.gui.manage_min_sizing) {
+ /* Fill the min sizing values for the current resolution. */
+ uint swap_x = 32; // in longest border, let main toolbar to have 30 buttons.
+ uint swap_y = 16; // if short border, let main toolbar have 16/18/20 buttons..)
+ if (_cur_resolution.width < _cur_resolution.height) Swap(swap_x, swap_y);
+ _settings_client.gui.min_button = min(_cur_resolution.width / swap_x, _cur_resolution.height / swap_y);
+ _settings_client.gui.min_step = _settings_client.gui.min_button * 3 / 4;
+ }
+
+ SETTING_BUTTON_HEIGHT = max<int>(GetMinSizing(NWST_STEP) - 10, 10);
+ SETTING_BUTTON_WIDTH = 2 * SETTING_BUTTON_HEIGHT;
+
+ extern uint _tooltip_width;
+ _tooltip_width = max<uint>(194, 10 * _settings_client.gui.min_button);
+
+ if (!_settings_client.gui.manage_min_sizing) return;
+
+ _freetype.large.size = _settings_client.gui.min_button;
+ _freetype.medium.size = max(_settings_client.gui.min_step * 2 / 3, 10U);
+ _freetype.mono.size = _freetype.medium.size;
+ _freetype.small.size = max(_freetype.medium.size * 2 / 3, 8U);
+
+ InitFreeType(true);
+ CheckForMissingGlyphs();
+
+ if (_z_front_window == NULL) return;
+
+ DeleteAllNonVitalWindows();
+
+ switch (_game_mode) {
+ default: break;
+ case GM_MENU:
+ DeleteWindowById(WC_SELECT_GAME, 0);
+ extern void ShowSelectGameWindow();
+ ShowSelectGameWindow();
+ break;
+
+ case GM_NORMAL:
+ case GM_EDITOR: {
+ Station *st;
+ FOR_ALL_STATIONS(st) { st->UpdateVirtCoord(); }
+ Waypoint *wp;
+ FOR_ALL_WAYPOINTS(wp) { wp->UpdateVirtCoord(); }
+
+ HideVitalWindows();
+ ShowVitalWindows();
+ break;
+ }
+ }
+
+ ShowErrorMessage(STR_ERROR_RESET_WINDOWS, STR_ERROR_AUTOMATIC_SIZING, WL_WARNING);
+}
+
/**
* (re)initialize the windowing system
*/
diff --git a/src/window_func.h b/src/window_func.h
index 453b889..a0fff7c 100644
--- a/src/window_func.h
+++ b/src/window_func.h
@@ -29,6 +29,7 @@ int PositionNetworkChatWindow(Window *w);
int GetMainViewTop();
int GetMainViewBottom();
+void CheckWindowMinSizings();
void InitWindowSystem();
void UnInitWindowSystem();
void ResetWindowSystem();
--
1.8.1.2

View File

@@ -1,24 +0,0 @@
From 2cff7802a81ee36edfb4aea23a0ebb64ece46c76 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 2 Aug 2013 18:37:51 +0000
Subject: [PATCH 203/249] Amend some widgets properties for high resolution
screens.
---
src/statusbar_gui.cpp | 2 +-
src/vehicle_gui.cpp | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp
index c06976f..ed56f4b 100644
--- a/src/statusbar_gui.cpp
+++ b/src/statusbar_gui.cpp
@@ -246,7 +246,7 @@ struct StatusBarWindow : Window {
static const NWidgetPart _nested_main_status_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_GREY, WID_S_LEFT), SetMinimalSize(140, 12), EndContainer(),
- NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_MIDDLE), SetMinimalSize(40, 12), SetDataTip(0x0, STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS), SetResize(1, 0),
+ NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_MIDDLE), SetMinimalSize(360, 12), SetDataTip(0x0, STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS), SetResize(1, 0),
NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_RIGHT), SetMinimalSize(140, 12),
EndContainer(),
};

View File

@@ -1,48 +0,0 @@
From c62d0c89f0c0f2630024c196e75edfcbba7c66cf Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Thu, 26 Sep 2013 11:50:14 +0000
Subject: [PATCH 204/249] Sizing and centering editbox icon.
---
src/misc_gui.cpp | 4 ++--
src/widget.cpp | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index dbbde57..09985d5 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -746,7 +746,7 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
bool rtl = _current_text_dir == TD_RTL;
Dimension sprite_size = GetSpriteSize(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT);
- int clearbtn_width = sprite_size.width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT;
+ int clearbtn_width = GetMinSizing(NWST_BUTTON, sprite_size.width + WD_IMGBTN_LEFT + WD_IMGBTN_RIGHT);
int clearbtn_left = wi->pos_x + (rtl ? 0 : wi->current_x - clearbtn_width);
int clearbtn_right = wi->pos_x + (rtl ? clearbtn_width : wi->current_x) - 1;
@@ -757,7 +757,7 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
int bottom = wi->pos_y + wi->current_y - 1;
DrawFrameRect(clearbtn_left, top, clearbtn_right, bottom, wi->colour, wi->IsLowered() ? FR_LOWERED : FR_NONE);
- DrawSprite(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, clearbtn_left + WD_IMGBTN_LEFT + (wi->IsLowered() ? 1 : 0), (top + bottom - sprite_size.height) / 2 + (wi->IsLowered() ? 1 : 0));
+ DrawSprite(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, Center(clearbtn_left + wi->IsLowered(), clearbtn_width, sprite_size.width), Center(top + wi->IsLowered(), bottom - top, sprite_size.height));
if (this->text.bytes == 1) GfxFillRect(clearbtn_left + 1, top + 1, clearbtn_right - 1, bottom - 1, _colour_gradient[wi->colour & 0xF][2], FILLRECT_CHECKER);
DrawFrameRect(left, top, right, bottom, wi->colour, FR_LOWERED | FR_DARKENED);
diff --git a/src/widget.cpp b/src/widget.cpp
index f48b033..b085be3 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -2134,7 +2134,7 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, int index, uint16 data,
case WWT_EDITBOX: {
Dimension sprite_size = GetSpriteSize(_current_text_dir == TD_RTL ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT);
- this->SetMinimalSize(30 + sprite_size.width, sprite_size.height);
+ this->SetMinimalSize(30 + GetMinSizing(NWST_BUTTON, sprite_size.width), sprite_size.height);
this->SetFill(0, 0);
break;
}
--
1.8.1.2

View File

@@ -1,44 +0,0 @@
From 5c75b2d4eb2a5353bf322054bc2897ee89642b89 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 21 Oct 2013 20:34:05 +0000
Subject: [PATCH 205/249] Sizing and centering on create scenario window.
---
src/genworld_gui.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp
index 1cc26bd..ee65bef 100644
--- a/src/genworld_gui.cpp
+++ b/src/genworld_gui.cpp
@@ -936,7 +936,9 @@ struct CreateScenarioWindow : public Window
}
*size = GetStringBoundingBox(str);
size->width += padding.width;
+ size->width = GetMinSizing(NWST_BUTTON, size->width);
size->height += padding.height;
+ size->height = GetMinSizing(NWST_BUTTON, size->height);
}
virtual void OnClick(Point pt, int widget, int click_count)
@@ -1055,11 +1057,16 @@ static const NWidgetPart _nested_create_scenario_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
/* Landscape style selection. */
NWidget(NWID_HORIZONTAL), SetPIP(10, 3, 10),
+ NWidget(NWID_SPACER), SetFill(1, 1),
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TEMPERATE), SetDataTip(SPR_SELECT_TEMPERATE, STR_INTRO_TOOLTIP_TEMPERATE),
+ NWidget(NWID_SPACER), SetFill(1, 1),
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_ARCTIC), SetDataTip(SPR_SELECT_SUB_ARCTIC, STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE),
+ NWidget(NWID_SPACER), SetFill(1, 1),
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TROPICAL), SetDataTip(SPR_SELECT_SUB_TROPICAL, STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE),
+ NWidget(NWID_SPACER), SetFill(1, 1),
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_CS_TOYLAND), SetDataTip(SPR_SELECT_TOYLAND, STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE),
- EndContainer(),
+ NWidget(NWID_SPACER), SetFill(1, 1),
+ EndContainer(),
NWidget(NWID_HORIZONTAL), SetPIP(10, 8, 10),
/* Green generation type buttons: 'Flat land' and 'Random land'. */
NWidget(NWID_VERTICAL), SetPIP(10, 6, 10),
--
1.8.1.2

View File

@@ -1,56 +0,0 @@
From 3de38eb550cdb720ac4bc8a648cc19070c0c89f8 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 27 Sep 2013 20:38:34 +0000
Subject: [PATCH 206/249] Some amends about sizings.
---
src/network/network_gui.cpp | 2 +-
src/settings_gui.cpp | 5 +++--
src/widget.cpp | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp
index 6d4c38d..4f41dbb 100644
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -494,7 +494,7 @@ public:
switch (widget) {
case WID_NG_CONN_BTN:
*size = maxdim(GetStringBoundingBox(_lan_internet_types_dropdown[0]), GetStringBoundingBox(_lan_internet_types_dropdown[1]));
- size->width += padding.width;
+ size->width += padding.width + GetMinSizing(NWST_STEP, 11U);
size->height += padding.height;
break;
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 74b97bc..45eeb79 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -1139,8 +1139,9 @@ uint SettingEntry::Draw(GameSettings *settings_ptr, int left, int right, int bas
break;
case SEF_SUBTREE_KIND:
if (cur_row >= first_row) {
- DrawSprite((this->d.sub.folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED), PAL_NONE, rtl ? x - 8 : x, y + (SETTING_HEIGHT - 11) / 2);
- DrawString(rtl ? left : x + 12, rtl ? x - 12 : right, Center(y, SETTING_HEIGHT), this->d.sub.title);
+ Dimension d = GetSpriteSize(SPR_CIRCLE_UNFOLDED);
+ DrawSprite((this->d.sub.folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED), PAL_NONE, rtl ? x - d.width : x, Center(y, SETTING_HEIGHT, d.height));
+ DrawString(rtl ? left : x + d.width + 2, rtl ? x - (d.width + 2) : right, Center(y, SETTING_HEIGHT), this->d.sub.title);
}
cur_row++;
if (!this->d.sub.folded) {
diff --git a/src/widget.cpp b/src/widget.cpp
index b085be3..76dc50d 100644
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -2346,7 +2346,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w, bool init_array)
padding = &extra;
if (this->index >= 0) w->SetStringParameters(this->index);
Dimension d2 = GetStringBoundingBox(this->widget_data);
- d2.width += extra.width;
+ d2.width += extra.width + GetMinSizing(NWST_STEP, 11U);
d2.height += extra.height;
size = maxdim(size, d2);
break;
--
1.8.1.2

View File

@@ -1,379 +0,0 @@
From 6930ad0acb5fb1bc20881fb803c894b2d93b8403 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Thu, 26 Sep 2013 10:56:20 +0000
Subject: [PATCH 209/249] Add scrollbars to tracklist window and set min
sizing.
---
src/music_gui.cpp | 134 ++++++++++++++++++++++-----------
src/script/api/game/game_window.hpp.sq | 2 +
src/script/api/script_window.hpp | 8 +-
src/widgets/music_widget.h | 22 +++---
4 files changed, 107 insertions(+), 59 deletions(-)
diff --git a/src/music_gui.cpp b/src/music_gui.cpp
index 896624c..26910e9 100644
--- a/src/music_gui.cpp
+++ b/src/music_gui.cpp
@@ -290,13 +290,32 @@ static void SelectPlaylist(byte list)
}
struct MusicTrackSelectionWindow : public Window {
+ Scrollbar *left_sb;
+ Scrollbar *right_sb;
+
+ /** Count the number of tracks of current tracklist. */
+ uint GetNumberOfTracksOfTracklist() const
+ {
+ uint i = 0;
+ for (; _playlists[_settings_client.music.playlist][i] > 0; i++) {}
+ return i;
+ }
+
MusicTrackSelectionWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
{
- this->InitNested(number);
+
+ this->CreateNestedTree();
+ this->left_sb = this->GetScrollbar(WID_MTS_LEFT_SCROLLBAR);
+ this->right_sb = this->GetScrollbar(WID_MTS_RIGHT_SCROLLBAR);
+
this->LowerWidget(WID_MTS_LIST_LEFT);
this->LowerWidget(WID_MTS_LIST_RIGHT);
this->SetWidgetDisabledState(WID_MTS_CLEAR, _settings_client.music.playlist <= 3);
this->LowerWidget(WID_MTS_ALL + _settings_client.music.playlist);
+ this->FinishInitNested(number);
+
+ this->left_sb->SetCount(NUM_SONGS_AVAILABLE);
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
}
virtual void SetStringParameters(int widget) const
@@ -320,6 +339,7 @@ struct MusicTrackSelectionWindow : public Window {
this->SetWidgetLoweredState(WID_MTS_ALL + i, i == _settings_client.music.playlist);
}
this->SetWidgetDisabledState(WID_MTS_CLEAR, _settings_client.music.playlist <= 3);
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
this->SetDirty();
}
@@ -339,7 +359,8 @@ struct MusicTrackSelectionWindow : public Window {
break;
}
- case WID_MTS_LIST_LEFT: case WID_MTS_LIST_RIGHT: {
+ case WID_MTS_LIST_LEFT:
+ case WID_MTS_LIST_RIGHT: {
Dimension d = {0, 0};
for (uint i = 0; i < NUM_SONGS_AVAILABLE; i++) {
@@ -349,12 +370,11 @@ struct MusicTrackSelectionWindow : public Window {
SetDParam(0, GetTrackNumber(i));
SetDParam(1, 2);
SetDParamStr(2, GetSongName(i));
- Dimension d2 = GetStringBoundingBox(STR_PLAYLIST_TRACK_NAME);
- d.width = max(d.width, d2.width);
- d.height += d2.height;
+ d = maxdim(d, GetStringBoundingBox(STR_PLAYLIST_TRACK_NAME));
}
- d.width += padding.width;
- d.height += padding.height;
+ resize->height = GetMinSizing(NWST_STEP, d.height);
+ d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
+ d.height = 10 * resize->height + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
*size = maxdim(*size, d);
break;
}
@@ -368,15 +388,17 @@ struct MusicTrackSelectionWindow : public Window {
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, PC_BLACK);
int y = r.top + WD_FRAMERECT_TOP;
- for (uint i = 0; i < NUM_SONGS_AVAILABLE; i++) {
+ uint vscroll_max = min(this->left_sb->GetPosition() + this->left_sb->GetCapacity(), NUM_SONGS_AVAILABLE);
+
+ for (uint i = this->left_sb->GetPosition(); i < vscroll_max; i++) {
const char *song_name = GetSongName(i);
if (StrEmpty(song_name)) continue;
SetDParam(0, GetTrackNumber(i));
SetDParam(1, 2);
SetDParamStr(2, song_name);
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_PLAYLIST_TRACK_NAME);
- y += FONT_HEIGHT_SMALL;
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(y, this->resize.step_height, FONT_HEIGHT_SMALL), STR_PLAYLIST_TRACK_NAME);
+ y += this->resize.step_height;
}
break;
}
@@ -385,13 +407,15 @@ struct MusicTrackSelectionWindow : public Window {
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, PC_BLACK);
int y = r.top + WD_FRAMERECT_TOP;
- for (const byte *p = _playlists[_settings_client.music.playlist]; *p != 0; p++) {
- uint i = *p - 1;
- SetDParam(0, GetTrackNumber(i));
+ uint vscroll_max = min(this->right_sb->GetPosition() + this->right_sb->GetCapacity(), this->GetNumberOfTracksOfTracklist());
+
+ for (uint i = this->right_sb->GetPosition(); i < vscroll_max; i++) {
+ uint j = _playlists[_settings_client.music.playlist][i] - 1;
+ SetDParam(0, GetTrackNumber(j));
SetDParam(1, 2);
- SetDParamStr(2, GetSongName(i));
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_PLAYLIST_TRACK_NAME);
- y += FONT_HEIGHT_SMALL;
+ SetDParamStr(2, GetSongName(j));
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(y, this->resize.step_height, FONT_HEIGHT_SMALL), STR_PLAYLIST_TRACK_NAME);
+ y += this->resize.step_height;
}
break;
}
@@ -402,22 +426,22 @@ struct MusicTrackSelectionWindow : public Window {
{
switch (widget) {
case WID_MTS_LIST_LEFT: { // add to playlist
- int y = this->GetRowFromWidget(pt.y, widget, 0, FONT_HEIGHT_SMALL);
-
if (_settings_client.music.playlist < 4) return;
- if (!IsInsideMM(y, 0, BaseMusic::GetUsedSet()->num_available)) return;
+ int id_m = this->left_sb->GetScrolledRowFromWidget(pt.y, this, WID_MTS_LIST_LEFT, WD_FRAMERECT_TOP, this->resize.step_height);
+ if (!IsInsideMM(id_m, 0, BaseMusic::GetUsedSet()->num_available)) return;
byte *p = _playlists[_settings_client.music.playlist];
for (uint i = 0; i != NUM_SONGS_PLAYLIST - 1; i++) {
if (p[i] == 0) {
/* Find the actual song number */
for (uint j = 0; j < NUM_SONGS_AVAILABLE; j++) {
- if (GetTrackNumber(j) == y + 1) {
+ if (GetTrackNumber(j) == id_m + 1) {
p[i] = j + 1;
break;
}
}
p[i + 1] = 0;
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
this->SetDirty();
SelectSongToPlay();
break;
@@ -427,16 +451,16 @@ struct MusicTrackSelectionWindow : public Window {
}
case WID_MTS_LIST_RIGHT: { // remove from playlist
- int y = this->GetRowFromWidget(pt.y, widget, 0, FONT_HEIGHT_SMALL);
-
if (_settings_client.music.playlist < 4) return;
- if (!IsInsideMM(y, 0, NUM_SONGS_PLAYLIST)) return;
+ int id_m = this->right_sb->GetScrolledRowFromWidget(pt.y, this, WID_MTS_LIST_RIGHT, WD_FRAMERECT_TOP, this->resize.step_height);
+ if (!IsInsideMM(id_m, 0, NUM_SONGS_PLAYLIST)) return;
byte *p = _playlists[_settings_client.music.playlist];
- for (uint i = y; i != NUM_SONGS_PLAYLIST - 1; i++) {
+ for (uint i = id_m; i != NUM_SONGS_PLAYLIST - 1; i++) {
p[i] = p[i + 1];
}
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
this->SetDirty();
SelectSongToPlay();
break;
@@ -444,55 +468,74 @@ struct MusicTrackSelectionWindow : public Window {
case WID_MTS_CLEAR: // clear
for (uint i = 0; _playlists[_settings_client.music.playlist][i] != 0; i++) _playlists[_settings_client.music.playlist][i] = 0;
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
this->SetDirty();
StopMusic();
SelectSongToPlay();
break;
- case WID_MTS_ALL: case WID_MTS_OLD: case WID_MTS_NEW:
- case WID_MTS_EZY: case WID_MTS_CUSTOM1: case WID_MTS_CUSTOM2: // set playlist
+ case WID_MTS_ALL:
+ case WID_MTS_OLD:
+ case WID_MTS_NEW:
+ case WID_MTS_EZY:
+ case WID_MTS_CUSTOM1:
+ case WID_MTS_CUSTOM2: // set playlist
SelectPlaylist(widget - WID_MTS_ALL);
+ this->right_sb->SetCount(GetNumberOfTracksOfTracklist());
+ this->SetDirty();
StopMusic();
SelectSongToPlay();
break;
}
}
+
+ virtual void OnResize()
+ {
+ this->left_sb->SetCapacityFromWidget(this, WID_MTS_LIST_LEFT);
+ this->right_sb->SetCapacityFromWidget(this, WID_MTS_LIST_RIGHT);
+ }
};
static const NWidgetPart _nested_music_track_selection_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_PLAYLIST_MUSIC_PROGRAM_SELECTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
+ NWidget(WWT_DEFSIZEBOX, COLOUR_GREY),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_HORIZONTAL), SetPIP(2, 4, 2),
/* Left panel. */
NWidget(NWID_VERTICAL),
NWidget(WWT_LABEL, COLOUR_GREY), SetDataTip(STR_PLAYLIST_TRACK_INDEX, STR_NULL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_MTS_LIST_LEFT), SetMinimalSize(180, 194), SetDataTip(0x0, STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK), EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_MATRIX, COLOUR_GREY, WID_MTS_LIST_LEFT), SetMinimalSize(180, 100), SetMatrixDataTip(1, 0, STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK),
+ SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_MTS_LEFT_SCROLLBAR),
+ NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_MTS_LEFT_SCROLLBAR),
+ EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
EndContainer(),
- /* Middle buttons. */
- NWidget(NWID_VERTICAL),
- NWidget(NWID_SPACER), SetMinimalSize(60, 30), // Space above the first button from the title bar.
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_ALL), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_ALL, STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_OLD), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_OLD_STYLE, STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_NEW), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_NEW_STYLE, STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_EZY), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_EZY_STREET, STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_CUSTOM1), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_CUSTOM_1, STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_CUSTOM2), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_CUSTOM_2, STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED),
- NWidget(NWID_SPACER), SetMinimalSize(0, 16), // Space above 'clear' button
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_MTS_CLEAR), SetFill(1, 0), SetDataTip(STR_PLAYLIST_CLEAR, STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1),
- NWidget(NWID_SPACER), SetFill(0, 1),
- EndContainer(),
/* Right panel. */
NWidget(NWID_VERTICAL),
NWidget(WWT_LABEL, COLOUR_GREY, WID_MTS_PLAYLIST), SetDataTip(STR_PLAYLIST_PROGRAM, STR_NULL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_MTS_LIST_RIGHT), SetMinimalSize(180, 194), SetDataTip(0x0, STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK), EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_MATRIX, COLOUR_GREY, WID_MTS_LIST_RIGHT), SetMinimalSize(180, 100), SetMatrixDataTip(1, 0, STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK),
+ SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_MTS_RIGHT_SCROLLBAR),
+ NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_MTS_RIGHT_SCROLLBAR),
+ EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
EndContainer(),
EndContainer(),
EndContainer(),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_ALL), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_ALL, STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_OLD), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_OLD_STYLE, STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_NEW), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_NEW_STYLE, STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_EZY), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_EZY_STREET, STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_CUSTOM1), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_CUSTOM_1, STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_MTS_CUSTOM2), SetFill(1, 0), SetDataTip(STR_MUSIC_PLAYLIST_CUSTOM_2, STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_MTS_CLEAR), SetFill(1, 0), SetDataTip(STR_PLAYLIST_CLEAR, STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1),
+ NWidget(WWT_RESIZEBOX, COLOUR_GREY),
+ EndContainer(),
};
static WindowDesc _music_track_selection_desc(
@@ -570,7 +613,7 @@ struct MusicWindow : public Window {
SetDParam(1, 2);
str = STR_MUSIC_TRACK_DIGIT;
}
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top, FONT_HEIGHT_SMALL), str);
break;
}
@@ -581,7 +624,7 @@ struct MusicWindow : public Window {
str = STR_MUSIC_TITLE_NAME;
SetDParamStr(0, GetSongName(_music_wnd_cursong - 1));
}
- DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, str, TC_FROMSTRING, SA_HOR_CENTER);
+ DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top, FONT_HEIGHT_SMALL), str, TC_FROMSTRING, SA_HOR_CENTER);
break;
}
@@ -672,7 +715,6 @@ struct MusicWindow : public Window {
SelectPlaylist(widget - WID_M_ALL);
StopMusic();
SelectSongToPlay();
- this->SetDirty();
break;
}
}
@@ -737,11 +779,11 @@ static const NWidgetPart _nested_music_window_widgets[] = {
EndContainer(),
NWidget(NWID_VERTICAL), SetPadding(0, 0, 3, 3),
NWidget(WWT_LABEL, COLOUR_GREY, WID_M_TRACK), SetFill(0, 0), SetDataTip(STR_MUSIC_TRACK, STR_NULL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_M_TRACK_NR), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_M_TRACK_NR), SetFill(0, 1), EndContainer(),
EndContainer(),
NWidget(NWID_VERTICAL), SetPadding(0, 3, 3, 0),
NWidget(WWT_LABEL, COLOUR_GREY, WID_M_TRACK_TITLE), SetFill(1, 0), SetDataTip(STR_MUSIC_XTITLE, STR_NULL),
- NWidget(WWT_PANEL, COLOUR_GREY, WID_M_TRACK_NAME), SetFill(1, 0), EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_M_TRACK_NAME), SetFill(1, 1), EndContainer(),
EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(NWID_SPACER), SetFill(0, 1),
diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq
index 117d9c3..7a711b9 100644
--- a/src/script/api/game/game_window.hpp.sq
+++ b/src/script/api/game/game_window.hpp.sq
@@ -673,8 +673,10 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_VSCROLLBAR, "WID_TF_VSCROLLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TF_HSCROLLBAR, "WID_TF_HSCROLLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_LIST_LEFT, "WID_MTS_LIST_LEFT");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_LEFT_SCROLLBAR, "WID_MTS_LEFT_SCROLLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_PLAYLIST, "WID_MTS_PLAYLIST");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_LIST_RIGHT, "WID_MTS_LIST_RIGHT");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_RIGHT_SCROLLBAR, "WID_MTS_RIGHT_SCROLLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_ALL, "WID_MTS_ALL");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_OLD, "WID_MTS_OLD");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MTS_NEW, "WID_MTS_NEW");
diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp
index 47ffaab..dce9a97 100644
--- a/src/script/api/script_window.hpp
+++ b/src/script/api/script_window.hpp
@@ -1677,9 +1677,11 @@ public:
/* automatically generated from ../../widgets/music_widget.h */
/** Widgets of the #MusicTrackSelectionWindow class. */
enum MusicTrackSelectionWidgets {
- WID_MTS_LIST_LEFT = ::WID_MTS_LIST_LEFT, ///< Left button.
- WID_MTS_PLAYLIST = ::WID_MTS_PLAYLIST, ///< Playlist.
- WID_MTS_LIST_RIGHT = ::WID_MTS_LIST_RIGHT, ///< Right button.
+ WID_MTS_LIST_LEFT = ::WID_MTS_LIST_LEFT, ///< Left list.
+ WID_MTS_LEFT_SCROLLBAR = ::WID_MTS_LEFT_SCROLLBAR, ///< Scrollbar of left list.
+ WID_MTS_PLAYLIST = ::WID_MTS_PLAYLIST, ///< Playlist name.
+ WID_MTS_LIST_RIGHT = ::WID_MTS_LIST_RIGHT, ///< Right list.
+ WID_MTS_RIGHT_SCROLLBAR = ::WID_MTS_RIGHT_SCROLLBAR, ///< Scrollbar of right list.
WID_MTS_ALL = ::WID_MTS_ALL, ///< All button.
WID_MTS_OLD = ::WID_MTS_OLD, ///< Old button.
WID_MTS_NEW = ::WID_MTS_NEW, ///< New button.
diff --git a/src/widgets/music_widget.h b/src/widgets/music_widget.h
index 3a99bc6..ebd7ea0 100644
--- a/src/widgets/music_widget.h
+++ b/src/widgets/music_widget.h
@@ -14,16 +14,18 @@
/** Widgets of the #MusicTrackSelectionWindow class. */
enum MusicTrackSelectionWidgets {
- WID_MTS_LIST_LEFT, ///< Left button.
- WID_MTS_PLAYLIST, ///< Playlist.
- WID_MTS_LIST_RIGHT, ///< Right button.
- WID_MTS_ALL, ///< All button.
- WID_MTS_OLD, ///< Old button.
- WID_MTS_NEW, ///< New button.
- WID_MTS_EZY, ///< Ezy button.
- WID_MTS_CUSTOM1, ///< Custom1 button.
- WID_MTS_CUSTOM2, ///< Custom2 button.
- WID_MTS_CLEAR, ///< Clear button.
+ WID_MTS_LIST_LEFT, ///< Left list.
+ WID_MTS_LEFT_SCROLLBAR, ///< Scrollbar of left list.
+ WID_MTS_PLAYLIST, ///< Playlist name.
+ WID_MTS_LIST_RIGHT, ///< Right list.
+ WID_MTS_RIGHT_SCROLLBAR, ///< Scrollbar of right list.
+ WID_MTS_ALL, ///< All button.
+ WID_MTS_OLD, ///< Old button.
+ WID_MTS_NEW, ///< New button.
+ WID_MTS_EZY, ///< Ezy button.
+ WID_MTS_CUSTOM1, ///< Custom1 button.
+ WID_MTS_CUSTOM2, ///< Custom2 button.
+ WID_MTS_CLEAR, ///< Clear button.
};
/** Widgets of the #MusicWindow class. */
--
1.8.1.2

View File

@@ -1,39 +0,0 @@
From 8346d064a4f744de4d7600109278b094b586014a Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 24 Jun 2013 17:35:48 +0200
Subject: [PATCH 210/249] Allow calling init presizing mode from outside
viewport.cpp.
---
src/tilehighlight_func.h | 1 +
src/viewport.cpp | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/tilehighlight_func.h b/src/tilehighlight_func.h
index 3edef50..af44c4d 100644
--- a/src/tilehighlight_func.h
+++ b/src/tilehighlight_func.h
@@ -25,6 +25,7 @@ void ResetObjectToPlace();
void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method);
void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process);
+void VpStartPreSizing();
void VpSetPresizeRange(TileIndex from, TileIndex to);
void VpSetPlaceSizingLimit(int limit);
diff --git a/src/viewport.cpp b/src/viewport.cpp
index a5ed41c..df686ab 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -2350,7 +2350,7 @@ void VpSetPresizeRange(TileIndex from, TileIndex to)
if (distance > 1) ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance, TCC_HOVER);
}
-static void VpStartPreSizing()
+void VpStartPreSizing()
{
_thd.selend.x = -1;
_special_mouse_mode = WSM_PRESIZE;
--
1.8.1.2

View File

@@ -1,81 +0,0 @@
From d80cad8f13164deed44a14119ab7f565a0ce846f Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Tue, 18 Jun 2013 08:34:56 +0200
Subject: [PATCH 211/249] Add new viewport methods.
---
src/viewport.cpp | 14 ++++++++++++--
src/viewport_type.h | 4 ++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/viewport.cpp b/src/viewport.cpp
index df686ab..07f02af 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -2313,7 +2313,9 @@ void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDrag
}
HighLightStyle others = _thd.place_mode & ~(HT_DRAG_MASK | HT_DIR_MASK);
- if ((_thd.place_mode & HT_DRAG_MASK) == HT_RECT) {
+ if (method == VPM_SINGLE_TILE) {
+ /* Nothing to do. */
+ } else if ((_thd.place_mode & HT_DRAG_MASK) == HT_RECT) {
_thd.place_mode = HT_SPECIAL | others;
_thd.next_drawstyle = HT_RECT | others;
} else if (_thd.place_mode & (HT_RAIL | HT_LINE)) {
@@ -2792,6 +2794,11 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
int limit = 0;
switch (method) {
+ case VPM_SINGLE_TILE:
+ _thd.selstart.x = x;
+ _thd.selstart.y = y;
+ break;
+
case VPM_X_OR_Y: // drag in X or Y direction
if (abs(sy - y) < abs(sx - x)) {
y = sy;
@@ -2950,7 +2957,9 @@ EventState VpHandlePlaceSizingDrag()
* keep the selected tool, but reset it to the original mode. */
_special_mouse_mode = WSM_NONE;
HighLightStyle others = _thd.place_mode & ~(HT_DRAG_MASK | HT_DIR_MASK);
- if ((_thd.next_drawstyle & HT_DRAG_MASK) == HT_RECT) {
+ if (_thd.select_method == VPM_SINGLE_TILE) {
+ goto place_mouseup;
+ } else if ((_thd.next_drawstyle & HT_DRAG_MASK) == HT_RECT) {
_thd.place_mode = HT_RECT | others;
} else if (_thd.select_method & VPM_SIGNALDIRS) {
_thd.place_mode = HT_RECT | others;
@@ -2961,6 +2970,7 @@ EventState VpHandlePlaceSizingDrag()
}
SetTileSelectSize(1, 1);
+place_mouseup:
w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y));
return ES_HANDLED;
diff --git a/src/viewport_type.h b/src/viewport_type.h
index 800c8b4..3566c41 100644
--- a/src/viewport_type.h
+++ b/src/viewport_type.h
@@ -84,6 +84,7 @@ enum ViewportPlaceMethod {
VPM_FIX_VERTICAL = 6, ///< drag only in vertical direction
VPM_X_LIMITED = 7, ///< Drag only in X axis with limited size
VPM_Y_LIMITED = 8, ///< Drag only in Y axis with limited size
+ VPM_SINGLE_TILE = 9, ///< Drag around the screen, selecting only the end tile
VPM_RAILDIRS = 0x40, ///< all rail directions
VPM_SIGNALDIRS = 0x80, ///< similar to VMP_RAILDIRS, but with different cursor
};
@@ -120,6 +121,9 @@ enum ViewportDragDropSelectionProcess {
DDSP_BUILD_TRUCKSTOP, ///< Road stop placement (trucks)
DDSP_REMOVE_BUSSTOP, ///< Road stop removal (buses)
DDSP_REMOVE_TRUCKSTOP, ///< Road stop removal (trucks)
+
+ /* Single tile dragging */
+ DDSP_SINGLE_TILE, ///< Single tile actions (build industry, town, etc.)
};
#endif /* VIEWPORT_TYPE_H */
--
1.8.1.2

View File

@@ -1,524 +0,0 @@
From f84e2e304fb25277dd998a905480c2dbe4d6fa45 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 24 Jun 2013 17:34:25 +0200
Subject: [PATCH 212/249] Do actions when releasing the mouse, instead of when
clicking:
Build town, industry, airport, dock, lock,
buoy, aqueduct, depots, change bridge rail/road specs.
---
src/airport_gui.cpp | 18 +++++++++----
src/dock_gui.cpp | 75 +++++++++++++++++++++++++++++++++++++--------------
src/industry_gui.cpp | 17 ++++++++++--
src/rail_gui.cpp | 71 ++++++++++++++++++++++++++++++------------------
src/road_gui.cpp | 47 ++++++++++++++++----------------
src/terraform_gui.cpp | 23 +++++++++++-----
src/town_gui.cpp | 13 ++++++++-
7 files changed, 180 insertions(+), 84 deletions(-)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index 103b826..77a71d4 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -99,13 +99,13 @@ struct BuildAirToolbarWindow : Window {
}
}
-
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
switch (this->last_user_action) {
- case WID_AT_AIRPORT:
- PlaceAirport(tile);
+ case WID_AT_AIRPORT: {
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
break;
+ }
case WID_AT_DEMOLISH:
PlaceProc_DemolishArea(tile);
@@ -122,8 +122,16 @@ struct BuildAirToolbarWindow : Window {
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
{
- if (pt.x != -1 && select_proc == DDSP_DEMOLISH_AREA) {
- GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
+ if (pt.x == -1) return;
+ switch (select_proc) {
+ case DDSP_BUILD_STATION:
+ assert(start_tile == end_tile);
+ PlaceAirport(end_tile);
+ break;
+ case DDSP_DEMOLISH_AREA:
+ GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
+ break;
+ default: NOT_REACHED();
}
}
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index ca06589..86f03fc 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -26,6 +26,7 @@
#include "company_base.h"
#include "hotkeys.h"
#include "gui.h"
+#include "bridge_map.h"
#include "widgets/dock_widget.h"
@@ -172,33 +173,21 @@ struct BuildDocksToolbarWindow : Window {
break;
case WID_DT_LOCK: // Build lock button
- DoCommandP(tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
+ /* Reuse DDSP_REMOVE_TRUCKSTOP. */
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_REMOVE_TRUCKSTOP);
break;
case WID_DT_DEMOLISH: // Demolish aka dynamite button
PlaceProc_DemolishArea(tile);
break;
- case WID_DT_DEPOT: // Build depot button
- DoCommandP(tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
- break;
-
- case WID_DT_STATION: { // Build station button
- uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
-
- /* tile is always the land tile, so need to evaluate _thd.pos */
- CommandContainer cmdcont = { tile, _ctrl_pressed, p2, CMD_BUILD_DOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_DOCK_HERE), CcBuildDocks, "" };
-
- /* Determine the watery part of the dock. */
- DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
- TileIndex tile_to = (dir != INVALID_DIAGDIR ? TileAddByDiagDir(tile, ReverseDiagDir(dir)) : tile);
-
- ShowSelectStationIfNeeded(cmdcont, TileArea(tile, tile_to));
+ case WID_DT_STATION: // Build station button
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
break;
- }
+ case WID_DT_DEPOT: // Build depot button
case WID_DT_BUOY: // Build buoy button
- DoCommandP(tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
break;
case WID_DT_RIVER: // Build river button (in scenario editor)
@@ -206,7 +195,7 @@ struct BuildDocksToolbarWindow : Window {
break;
case WID_DT_BUILD_AQUEDUCT: // Build aqueduct button
- DoCommandP(tile, GetOtherAqueductEnd(tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_BRIDGE);
break;
default: NOT_REACHED();
@@ -215,7 +204,16 @@ struct BuildDocksToolbarWindow : Window {
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
{
- VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ switch (last_clicked_widget) {
+ case WID_DT_BUILD_AQUEDUCT:
+ case WID_DT_LOCK:
+ case WID_DT_STATION:
+ this->OnPlacePresize(pt, TileVirtXY(pt.x, pt.y));
+ break;
+ default:
+ VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ break;
+ }
}
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
@@ -231,6 +229,42 @@ struct BuildDocksToolbarWindow : Window {
case DDSP_CREATE_RIVER:
DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcBuildCanal);
break;
+ case DDSP_BUILD_STATION: {
+ uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
+
+ /* Tile is always the land tile, so need to evaluate _thd.pos. */
+ CommandContainer cmdcont = { start_tile, _ctrl_pressed, p2, CMD_BUILD_DOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_DOCK_HERE), CcBuildDocks, "" };
+
+ //SetObjectToPlace(SPR_CURSOR_DOCK, PAL_NONE, HT_SPECIAL, this->window_class, this->window_number);
+ ShowSelectStationIfNeeded(cmdcont, TileArea(start_tile, end_tile));
+ VpStartPreSizing();
+ break;
+ }
+
+ case DDSP_BUILD_BRIDGE:
+ DoCommandP(start_tile, GetOtherAqueductEnd(start_tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
+ VpStartPreSizing();
+ break;
+
+ case DDSP_REMOVE_TRUCKSTOP: { // Reusing for locks.
+ TileIndex middle_tile = start_tile;
+ if (start_tile != end_tile) middle_tile = TileAddByDiagDir(start_tile, DiagdirBetweenTiles(start_tile, end_tile));
+ DoCommandP(middle_tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
+ VpStartPreSizing();
+ break;
+ }
+
+ case DDSP_SINGLE_TILE:
+ assert(start_tile == end_tile);
+ switch (last_clicked_widget) {
+ case WID_DT_BUOY:
+ DoCommandP(end_tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
+ break;
+ case WID_DT_DEPOT: // Build depot button
+ DoCommandP(end_tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
+ break;
+ default: NOT_REACHED();
+ }
default: break;
}
@@ -249,6 +283,7 @@ struct BuildDocksToolbarWindow : Window {
virtual void OnPlacePresize(Point pt, TileIndex tile_from)
{
+ if (!IsValidTile(tile_from)) return;
TileIndex tile_to = tile_from;
if (this->last_clicked_widget == WID_DT_BUILD_AQUEDUCT) {
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 02e2b86..8c8245b 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -546,6 +546,19 @@ public:
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
+ }
+
+ virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
+ {
+ VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ }
+
+ virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
+ {
+ if (pt.x == -1) return;
+ assert(end_tile == start_tile);
+
bool success = true;
/* We do not need to protect ourselves against "Random Many Industries" in this mode */
const IndustrySpec *indsp = GetIndustrySpec(this->selected_type);
@@ -563,14 +576,14 @@ public:
_generating_world = true;
_ignore_restrictions = true;
- DoCommandP(tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed,
+ DoCommandP(end_tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed,
CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY), &CcBuildIndustry);
cur_company.Restore();
_ignore_restrictions = false;
_generating_world = false;
} else {
- success = DoCommandP(tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed, CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
+ success = DoCommandP(end_tile, (InteractiveRandomRange(indsp->num_table) << 8) | this->selected_type, seed, CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY));
}
/* If an industry has been built, just reset the cursor and the system */
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 004b47f..6b03f7e 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -252,22 +252,6 @@ static void GenericPlaceSignals(TileIndex tile)
}
}
-/**
- * Start placing a rail bridge.
- * @param tile Position of the first tile of the bridge.
- * @param w Rail toolbar window.
- */
-static void PlaceRail_Bridge(TileIndex tile, Window *w)
-{
- if (IsBridgeTile(tile)) {
- TileIndex other_tile = GetOtherTunnelBridgeEnd(tile);
- Point pt = {0, 0};
- w->OnPlaceMouseUp(VPM_X_OR_Y, DDSP_BUILD_BRIDGE, pt, other_tile, tile);
- } else {
- VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
- }
-}
-
/** Command callback for building a tunnel */
void CcBuildRailTunnel(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
{
@@ -632,9 +616,7 @@ struct BuildRailToolbarWindow : Window {
break;
case WID_RAT_BUILD_DEPOT:
- DoCommandP(tile, _cur_railtype, _build_depot_direction,
- CMD_BUILD_TRAIN_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT),
- CcRailDepot);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
break;
case WID_RAT_BUILD_WAYPOINT:
@@ -650,11 +632,11 @@ struct BuildRailToolbarWindow : Window {
break;
case WID_RAT_BUILD_BRIDGE:
- PlaceRail_Bridge(tile, this);
+ VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
break;
case WID_RAT_BUILD_TUNNEL:
- DoCommandP(tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRailTunnel);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_BRIDGE);
break;
case WID_RAT_CONVERT_RAIL:
@@ -670,6 +652,14 @@ struct BuildRailToolbarWindow : Window {
/* no dragging if you have pressed the convert button */
if (FindWindowById(WC_BUILD_SIGNAL, 0) != NULL && _convert_signal_button && this->IsWidgetLowered(WID_RAT_BUILD_SIGNALS)) return;
+ switch (this->last_user_action) {
+ case WID_RAT_BUILD_TUNNEL:
+ this->OnPlacePresize(pt, TileVirtXY(pt.x, pt.y));
+ return;
+ default:
+ break;
+ }
+
VpSelectTilesWithMethod(pt.x, pt.y, select_method);
}
@@ -678,9 +668,21 @@ struct BuildRailToolbarWindow : Window {
if (pt.x != -1) {
switch (select_proc) {
default: NOT_REACHED();
+ case DDSP_PLACE_AUTOROAD:
+ assert(this->last_user_action == WID_RAT_BUILD_BRIDGE);
case DDSP_BUILD_BRIDGE:
- if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
- ShowBuildBridgeWindow(start_tile, end_tile, TRANSPORT_RAIL, _cur_railtype);
+ switch (this->last_user_action) {
+ case WID_RAT_BUILD_TUNNEL:
+ if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
+ else VpStartPreSizing();
+ DoCommandP(end_tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRailTunnel);
+ break;
+ case WID_RAT_BUILD_BRIDGE:
+ if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
+ ShowBuildBridgeWindow(start_tile, end_tile, TRANSPORT_RAIL, _cur_railtype);
+ break;
+ default: NOT_REACHED();
+ }
break;
case DDSP_PLACE_RAIL:
@@ -722,6 +724,14 @@ struct BuildRailToolbarWindow : Window {
}
}
break;
+
+ case DDSP_SINGLE_TILE:
+ assert(end_tile == start_tile);
+ assert(last_user_action == WID_RAT_BUILD_DEPOT);
+ DoCommandP(end_tile, _cur_railtype, _build_depot_direction,
+ CMD_BUILD_TRAIN_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT),
+ CcRailDepot);
+ break;
}
}
}
@@ -740,10 +750,19 @@ struct BuildRailToolbarWindow : Window {
DeleteWindowByClass(WC_BUILD_BRIDGE);
}
- virtual void OnPlacePresize(Point pt, TileIndex tile)
+ virtual void OnPlacePresize(Point pt, TileIndex tile_from)
{
- DoCommand(tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, DC_AUTO, CMD_BUILD_TUNNEL);
- VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile);
+ TileIndex tile_to = tile_from;
+
+ if (this->last_user_action == WID_RAT_BUILD_BRIDGE) {
+ tile_to = IsBridgeTile(tile_from) ? GetOtherBridgeEnd(tile_from) : TileVirtXY(pt.x, pt.y);
+ } else {
+ assert(this->last_user_action == WID_RAT_BUILD_TUNNEL);
+ DoCommand(tile_from, _cur_railtype | (TRANSPORT_RAIL << 8), 0, DC_AUTO, CMD_BUILD_TUNNEL);
+ tile_to = _build_tunnel_endtile == 0 ? tile_from : _build_tunnel_endtile;
+ }
+
+ VpSetPresizeRange(tile_from, tile_to);
}
virtual EventState OnCTRLStateChange()
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index f35a2c2..d79477d 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -67,21 +67,6 @@ void CcPlaySound1D(const CommandCost &result, TileIndex tile, uint32 p1, uint32
}
/**
- * Callback to start placing a bridge.
- * @param tile Start tile of the bridge.
- */
-static void PlaceRoad_Bridge(TileIndex tile, Window *w)
-{
- if (IsBridgeTile(tile)) {
- TileIndex other_tile = GetOtherTunnelBridgeEnd(tile);
- Point pt = {0, 0};
- w->OnPlaceMouseUp(VPM_X_OR_Y, DDSP_BUILD_BRIDGE, pt, other_tile, tile);
- } else {
- VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
- }
-}
-
-/**
* Callback executed after a build road tunnel command has been called.
*
* @param result Whether the build succeeded.
@@ -508,8 +493,7 @@ struct BuildRoadToolbarWindow : Window {
break;
case WID_ROT_DEPOT:
- DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0,
- CMD_BUILD_ROAD_DEPOT | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot), CcRoadDepot);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
break;
case WID_ROT_BUS_STATION:
@@ -521,12 +505,11 @@ struct BuildRoadToolbarWindow : Window {
break;
case WID_ROT_BUILD_BRIDGE:
- PlaceRoad_Bridge(tile, this);
+ VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
break;
case WID_ROT_BUILD_TUNNEL:
- DoCommandP(tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0,
- CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRoadTunnel);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_BRIDGE);
break;
default: NOT_REACHED();
@@ -583,7 +566,6 @@ struct BuildRoadToolbarWindow : Window {
/* Set dir = Y */
_place_road_flag |= RF_DIR_Y;
}
-
break;
default:
@@ -599,8 +581,19 @@ struct BuildRoadToolbarWindow : Window {
switch (select_proc) {
default: NOT_REACHED();
case DDSP_BUILD_BRIDGE:
- if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
- ShowBuildBridgeWindow(start_tile, end_tile, TRANSPORT_ROAD, RoadTypeToRoadTypes(_cur_roadtype));
+ switch (last_started_action) {
+ case WID_ROT_BUILD_TUNNEL:
+ if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
+ else VpStartPreSizing();
+ DoCommandP(end_tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0,
+ CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRoadTunnel);
+ break;
+ case WID_ROT_BUILD_BRIDGE:
+ if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
+ ShowBuildBridgeWindow(start_tile, end_tile, TRANSPORT_ROAD, RoadTypeToRoadTypes(_cur_roadtype));
+ break;
+ default: NOT_REACHED();
+ }
break;
case DDSP_DEMOLISH_AREA:
@@ -641,6 +634,14 @@ struct BuildRoadToolbarWindow : Window {
DoCommandP(ta.tile, ta.w | ta.h << 8, ROADSTOP_TRUCK, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_TRUCK]), CcPlaySound1D);
break;
}
+
+ case DDSP_SINGLE_TILE:
+ /* Build depot. */
+ assert(start_tile == end_tile);
+ assert(last_started_action == WID_ROT_DEPOT);
+ DoCommandP(start_tile, _cur_roadtype << 2 | _road_depot_orientation, 0,
+ CMD_BUILD_ROAD_DEPOT | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot), CcRoadDepot);
+ break;
}
}
}
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index 2524b29..95ad6da 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -239,15 +239,9 @@ struct TerraformToolbarWindow : Window {
break;
case WID_TT_BUY_LAND: // Buy land button
- DoCommandP(tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E);
- break;
-
case WID_TT_PLACE_SIGN: // Place sign button
- PlaceProc_Sign(tile);
- break;
-
case WID_TT_PLACE_OBJECT: // Place object button
- PlaceProc_Object(tile);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
break;
default: NOT_REACHED();
@@ -270,6 +264,21 @@ struct TerraformToolbarWindow : Window {
case DDSP_LEVEL_AREA:
GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
break;
+
+ case DDSP_SINGLE_TILE:
+ assert(start_tile == end_tile);
+ switch (this->last_user_action) {
+ case WID_TT_BUY_LAND:
+ DoCommandP(end_tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E);
+ break;
+ case WID_TT_PLACE_SIGN:
+ PlaceProc_Sign(end_tile);
+ break;
+ case WID_TT_PLACE_OBJECT:
+ PlaceProc_Object(end_tile);
+ break;
+ default: NOT_REACHED();
+ }
}
}
}
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index 944b8d7..841c70e 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -1175,7 +1175,18 @@ public:
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
- this->ExecuteFoundTownCommand(tile, false, STR_ERROR_CAN_T_FOUND_TOWN_HERE, CcFoundTown);
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_SINGLE_TILE);
+ }
+
+ virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
+ {
+ VpSelectTilesWithMethod(pt.x, pt.y, select_method);
+ }
+
+ virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
+ {
+ assert(start_tile == end_tile);
+ this->ExecuteFoundTownCommand(end_tile, false, STR_ERROR_CAN_T_FOUND_TOWN_HERE, CcFoundTown);
}
virtual void OnPlaceObjectAbort()
--
1.8.1.2

View File

@@ -1,57 +0,0 @@
From 56281b9136b6cd5c6890baf86e369f75550647bc Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Tue, 16 Jul 2013 22:31:44 +0200
Subject: [PATCH 213/249] Place station when releasing the mouse.
---
src/rail_gui.cpp | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 6b03f7e..7c4b86b 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -189,15 +189,7 @@ static void PlaceRail_Station(TileIndex tile)
VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_STATION);
VpSetPlaceSizingLimit(_settings_game.station.station_spread);
} else {
- uint32 p1 = _cur_railtype | _railstation.orientation << 4 | _settings_client.gui.station_numtracks << 8 | _settings_client.gui.station_platlength << 16 | _ctrl_pressed << 24;
- uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16;
-
- int w = _settings_client.gui.station_numtracks;
- int h = _settings_client.gui.station_platlength;
- if (!_railstation.orientation) Swap(w, h);
-
- CommandContainer cmdcont = { tile, p1, p2, CMD_BUILD_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION), CcStation, "" };
- ShowSelectStationIfNeeded(cmdcont, TileArea(tile, w, h));
+ VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
}
}
@@ -701,8 +693,22 @@ struct BuildRailToolbarWindow : Window {
DoCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound10);
break;
- case DDSP_REMOVE_STATION:
case DDSP_BUILD_STATION:
+ if (!_remove_button_clicked && !_settings_client.gui.station_dragdrop) {
+ uint32 p1 = _cur_railtype | _railstation.orientation << 4 | _settings_client.gui.station_numtracks << 8 | _settings_client.gui.station_platlength << 16 | _ctrl_pressed << 24;
+ uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16;
+
+ int w = _settings_client.gui.station_numtracks;
+ int h = _settings_client.gui.station_platlength;
+ if (!_railstation.orientation) Swap(w, h);
+
+ CommandContainer cmdcont = { end_tile, p1, p2, CMD_BUILD_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION), CcStation, "" };
+ ShowSelectStationIfNeeded(cmdcont, TileArea(end_tile, w, h));
+ break;
+ }
+ /* Fall through. */
+
+ case DDSP_REMOVE_STATION:
if (this->IsWidgetLowered(WID_RAT_BUILD_STATION)) {
/* Station */
if (_remove_button_clicked) {
--
1.8.1.2

View File

@@ -1,36 +0,0 @@
From a31e52ce77a53313ade55af5a1674cd3fa4c05a8 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Tue, 18 Jun 2013 16:32:04 +0200
Subject: [PATCH 214/249] Add functions for cycling inside an enum.
---
src/core/enum_type.hpp | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/core/enum_type.hpp b/src/core/enum_type.hpp
index 35a0cb2..b5a12c4 100644
--- a/src/core/enum_type.hpp
+++ b/src/core/enum_type.hpp
@@ -28,6 +28,19 @@
}
+/** Some enums need to have cycling through values */
+#define DECLARE_CYCLE(type, min_val, max_val) \
+ inline type CycleUp(type e) \
+ { \
+ assert(!((int)e < min_val || (int)e > max_val)); \
+ return e == max_val ? (type)min_val : (type)((int)e + 1); \
+ } \
+ inline type CycleDown(type e) \
+ { \
+ assert(!((int)e < min_val || (int)e > max_val)); \
+ return e == min_val ? (type)max_val : (type)((int)e - 1); \
+ }
+
/** Operators to allow to work with enum as with type safe bit set in C++ */
# define DECLARE_ENUM_AS_BIT_SET(mask_t) \
--
1.8.1.2

View File

@@ -1,115 +0,0 @@
From 5974ad304471edf7ec34ebc014f171412120a8ed Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 29 Jun 2013 19:17:27 +0200
Subject: [PATCH 215/249] Toolbar types.
---
projects/openttd_vs100.vcxproj | 1 +
projects/openttd_vs100.vcxproj.filters | 3 +++
projects/openttd_vs80.vcproj | 4 ++++
projects/openttd_vs90.vcproj | 4 ++++
source.list | 1 +
src/toolbar_type.h | 23 +++++++++++++++++++++++
6 files changed, 36 insertions(+)
create mode 100644 src/toolbar_type.h
diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj
index 354731a..b980c83 100644
--- a/projects/openttd_vs100.vcxproj
+++ b/projects/openttd_vs100.vcxproj
@@ -634,6 +634,7 @@
<ClInclude Include="..\src\tilehighlight_type.h" />
<ClInclude Include="..\src\tilematrix_type.hpp" />
<ClInclude Include="..\src\timetable.h" />
+ <ClInclude Include="..\src\toolbar_type.h" />
<ClInclude Include="..\src\toolbar_gui.h" />
<ClInclude Include="..\src\town.h" />
<ClInclude Include="..\src\town_type.h" />
diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters
index e7bb03a..a30700e 100644
--- a/projects/openttd_vs100.vcxproj.filters
+++ b/projects/openttd_vs100.vcxproj.filters
@@ -1131,6 +1131,9 @@
<ClInclude Include="..\src\timetable.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\src\toolbar_type.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="..\src\toolbar_gui.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj
index a194b39..ee68720 100644
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -1811,6 +1811,10 @@
>
</File>
<File
+ RelativePath=".\..\src\toolbar_type.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\toolbar_gui.h"
>
</File>
diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj
index bc765a2..4fb7047 100644
--- a/projects/openttd_vs90.vcproj
+++ b/projects/openttd_vs90.vcproj
@@ -1808,6 +1808,10 @@
>
</File>
<File
+ RelativePath=".\..\src\toolbar_type.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\toolbar_gui.h"
>
</File>
diff --git a/source.list b/source.list
index 6f74b0b..fa68f60 100644
--- a/source.list
+++ b/source.list
@@ -367,6 +367,7 @@ tilehighlight_func.h
tilehighlight_type.h
tilematrix_type.hpp
timetable.h
+toolbar_type.h
toolbar_gui.h
town.h
town_type.h
diff --git a/src/toolbar_type.h b/src/toolbar_type.h
new file mode 100644
index 0000000..cfde179
--- /dev/null
+++ b/src/toolbar_type.h
@@ -0,0 +1,23 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file toolbar_type.h Types related to toolbars. */
+
+#ifndef TOOLBAR_TYPE_H
+#define TOOLBAR_TYPE_H
+
+/** Types of touchscreen modes. */
+enum TouchscreenMode {
+ TSC_NONE = 0,
+ TSC_SIMPLE,
+};
+DECLARE_CYCLE(TouchscreenMode, TSC_NONE, TSC_SIMPLE)
+typedef SimpleTinyEnumT<TouchscreenMode, byte> TouchscreenModeByte;
+
+#endif /* TOOLBAR_TYPE_H */
--
1.8.1.2

View File

@@ -1,380 +0,0 @@
From 512f1cd75f7af8d2ca769fc4aba330efdae7db73 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 24 Jun 2013 17:59:37 +0200
Subject: [PATCH 217/249] Add a window for touchscreen devices.
---
src/gfx.cpp | 8 +-
src/gfx_func.h | 2 +
src/lang/english.txt | 12 +++
src/script/api/game/game_window.hpp.sq | 6 ++
src/script/api/script_window.hpp | 15 ++++
src/script/api/template/template_window.hpp.sq | 2 +
src/settings.cpp | 2 +-
src/toolbar_gui.cpp | 107 +++++++++++++++++++++++++
src/toolbar_gui.h | 2 +
src/video/sdl_v.cpp | 7 +-
src/widgets/toolbar_widget.h | 9 +++
src/window.cpp | 1 +
src/window_type.h | 6 ++
13 files changed, 172 insertions(+), 7 deletions(-)
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 5c2cdc2..5b647f9 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -31,11 +31,14 @@ bool _fullscreen;
CursorVars _cursor;
bool _ctrl_pressed; ///< Is Ctrl pressed?
bool _shift_pressed; ///< Is Shift pressed?
+bool _move_pressed;
+
byte _fast_forward;
bool _left_button_down; ///< Is left mouse button pressed?
bool _left_button_clicked; ///< Is left mouse button clicked?
bool _right_button_down; ///< Is right mouse button pressed?
bool _right_button_clicked; ///< Is right mouse button clicked?
+
DrawPixelInfo _screen;
bool _screen_disable_anim = false; ///< Disable palette animation (important for 32bpp-anim blitter during giant screenshot)
bool _exit_game;
@@ -1249,10 +1252,7 @@ void UndrawMouseCursor()
void DrawMouseCursor()
{
-#if defined(WINCE)
- /* Don't ever draw the mouse for WinCE, as we work with a stylus */
- return;
-#endif
+ if (_settings_client.gui.touchscreen_mode != 0) return;
/* Don't draw the mouse cursor if the screen is not ready */
if (_screen.dst_ptr == NULL) return;
diff --git a/src/gfx_func.h b/src/gfx_func.h
index 4750b3c..4a87089 100644
--- a/src/gfx_func.h
+++ b/src/gfx_func.h
@@ -55,6 +55,8 @@ extern bool _fullscreen;
extern CursorVars _cursor;
extern bool _ctrl_pressed; ///< Is Ctrl pressed?
extern bool _shift_pressed; ///< Is Shift pressed?
+extern bool _move_pressed;
+
extern byte _fast_forward;
extern bool _left_button_down;
diff --git a/src/lang/english.txt b/src/lang/english.txt
index b8bdf72..9ca1c3e 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2446,6 +2446,18 @@ STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Raise a
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Level an area of land to the height of the first selected corner. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Purchase land for future use. Shift toggles building/showing cost estimate
+# Tablet toolbar
+STR_TABLET_X :{BLACK}X
+STR_TABLET_TOGGLE_TRANSPARENCY_TOOLTIP :{BLACK}Toggle transparency
+STR_TABLET_CLOSE :{BLACK}Supr
+STR_TABLET_CLOSE_TOOLTIP :{BLACK}Close all opened windows (except pinned ones)
+STR_TABLET_SHIFT :{BLACK}Shift
+STR_TABLET_SHIFT_TOOLTIP :{BLACK}Press it for getting an estimated cost of executing an action
+STR_TABLET_CTRL :{BLACK}Ctrl
+STR_TABLET_CTRL_TOOLTIP :{BLACK}Use it for actions that use the "CTRL" key
+STR_TABLET_MOVE :{BLACK}Move
+STR_TABLET_MOVE_TOOLTIP :{BLACK}Press it to move around viewports. No action will be executed on viewports while this is active
+
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Select object to build. Shift toggles building/showing cost estimate
diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq
index 7a711b9..f06fae3 100644
--- a/src/script/api/game/game_window.hpp.sq
+++ b/src/script/api/game/game_window.hpp.sq
@@ -40,6 +40,7 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MAIN_WINDOW, "WC_MAIN_WINDOW");
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_MAIN_TOOLBAR, "WC_MAIN_TOOLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_STATUS_BAR, "WC_STATUS_BAR");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WC_TABLET_BAR, "WC_TABLET_BAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_TOOLBAR, "WC_BUILD_TOOLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SCEN_BUILD_TOOLBAR, "WC_SCEN_BUILD_TOOLBAR");
SQGSWindow.DefSQConst(engine, ScriptWindow::WC_BUILD_TREES, "WC_BUILD_TREES");
@@ -1246,6 +1247,11 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_MUSIC_SOUND, "WID_TE_MUSIC_SOUND");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_HELP, "WID_TE_HELP");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TE_SWITCH_BAR, "WID_TE_SWITCH_BAR");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_X, "WID_TT_X");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_DELETE, "WID_TT_DELETE");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_SHIFT, "WID_TT_SHIFT");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_CTRL, "WID_TT_CTRL");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_MOVE, "WID_TT_MOVE");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_ORDER, "WID_TD_SORT_ORDER");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_CRITERIA, "WID_TD_SORT_CRITERIA");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_FILTER, "WID_TD_FILTER");
diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp
index dce9a97..a5c0684 100644
--- a/src/script/api/script_window.hpp
+++ b/src/script/api/script_window.hpp
@@ -143,6 +143,12 @@ public:
WC_STATUS_BAR = ::WC_STATUS_BAR,
/**
+ * Tablet bar; %Window numbers:
+ * - 0 = #StatusbarWidgets
+ */
+ WC_TABLET_BAR = ::WC_TABLET_BAR,
+
+ /**
* Build toolbar; %Window numbers:
* - #TRANSPORT_RAIL = #RailToolbarWidgets
* - #TRANSPORT_AIR = #AirportToolbarWidgets
@@ -2496,6 +2502,15 @@ public:
WID_TE_SWITCH_BAR = ::WID_TE_SWITCH_BAR, ///< Only available when toolbar has been split to switch between different subsets.
};
+ /** Widgets of the TabletToolbar class. */
+ enum ToolbarTabletWidgets {
+ WID_TT_X = ::WID_TT_X, ///< Press X (toggle transparency).
+ WID_TT_DELETE = ::WID_TT_DELETE, ///< Press DELETE.
+ WID_TT_SHIFT = ::WID_TT_SHIFT, ///< Press SHIFT.
+ WID_TT_CTRL = ::WID_TT_CTRL, ///< Press CTRL.
+ WID_TT_MOVE = ::WID_TT_MOVE, ///< Click for moving around viewports.
+ };
+
/* automatically generated from ../../widgets/town_widget.h */
/** Widgets of the #TownDirectoryWindow class. */
enum TownDirectoryWidgets {
diff --git a/src/script/api/template/template_window.hpp.sq b/src/script/api/template/template_window.hpp.sq
index dc99b5d..27aac38 100644
--- a/src/script/api/template/template_window.hpp.sq
+++ b/src/script/api/template/template_window.hpp.sq
@@ -229,6 +229,8 @@ namespace SQConvert {
template <> inline int Return<ScriptWindow::ToolbarNormalWidgets>(HSQUIRRELVM vm, ScriptWindow::ToolbarNormalWidgets res) { sq_pushinteger(vm, (int32)res); return 1; }
template <> inline ScriptWindow::ToolbarEditorWidgets GetParam(ForceType<ScriptWindow::ToolbarEditorWidgets>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ToolbarEditorWidgets)tmp; }
template <> inline int Return<ScriptWindow::ToolbarEditorWidgets>(HSQUIRRELVM vm, ScriptWindow::ToolbarEditorWidgets res) { sq_pushinteger(vm, (int32)res); return 1; }
+ template <> inline ScriptWindow::ToolbarTabletWidgets GetParam(ForceType<ScriptWindow::ToolbarTabletWidgets>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ToolbarTabletWidgets)tmp; }
+ template <> inline int Return<ScriptWindow::ToolbarTabletWidgets>(HSQUIRRELVM vm, ScriptWindow::ToolbarTabletWidgets res) { sq_pushinteger(vm, (int32)res); return 1; }
template <> inline ScriptWindow::TownDirectoryWidgets GetParam(ForceType<ScriptWindow::TownDirectoryWidgets>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownDirectoryWidgets)tmp; }
template <> inline int Return<ScriptWindow::TownDirectoryWidgets>(HSQUIRRELVM vm, ScriptWindow::TownDirectoryWidgets res) { sq_pushinteger(vm, (int32)res); return 1; }
template <> inline ScriptWindow::TownAuthorityWidgets GetParam(ForceType<ScriptWindow::TownAuthorityWidgets>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::TownAuthorityWidgets)tmp; }
diff --git a/src/settings.cpp b/src/settings.cpp
index fd6992d..7057d67 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1092,7 +1092,7 @@ static bool ZoomMinMaxChanged(int32 p1)
static bool TouchscreenModeChanged(int32 p1)
{
- //ResetTabletWindow();
+ ResetTabletWindow();
return true;
}
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index 32992d9..93b5a80 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -2218,6 +2218,111 @@ static WindowDesc _toolb_scen_desc(
&ScenarioEditorToolbarWindow::hotkeys
);
+
+/** Tablet toolbar. */
+struct TabletToolbar : Window {
+
+ TabletToolbar(WindowDesc *desc) : Window(desc)
+ {
+ this->InitNested(0);
+ this->flags |= WF_STICKY;
+ ResetObjectToPlace();
+ this->OnInvalidateData(1 << 2); // Disable widgets.
+ if (_current_text_dir == TD_RTL) { this->left = _screen.width - this->width; }
+ }
+
+ ~TabletToolbar() {
+ _shift_pressed = false;
+ _move_pressed = false;
+
+ if (_ctrl_pressed) {
+ _ctrl_pressed = false;
+ HandleCtrlChanged();
+ }
+ }
+
+ virtual void OnClick(Point pt, int widget, int click_count)
+ {
+ switch (widget) {
+ case WID_TT_X:
+ extern void ResetRestoreAllTransparency();
+ ResetRestoreAllTransparency();
+ break;
+ case WID_TT_DELETE:
+ DeleteNonVitalWindows();
+ break;
+ case WID_TT_SHIFT:
+ _shift_pressed = !_shift_pressed;
+ this->ToggleWidgetLoweredState(WID_TT_SHIFT);
+ this->SetWidgetDirty(WID_TT_SHIFT);
+ break;
+ case WID_TT_CTRL:
+ _ctrl_pressed = !_ctrl_pressed;
+ this->ToggleWidgetLoweredState(WID_TT_CTRL);
+ HandleCtrlChanged();
+ this->SetWidgetDirty(WID_TT_CTRL);
+ break;
+ case WID_TT_MOVE:
+ _move_pressed = !_move_pressed;
+ this->ToggleWidgetLoweredState(WID_TT_MOVE);
+ this->SetWidgetDirty(WID_TT_MOVE);
+ break;
+ default:
+ NOT_REACHED();
+ }
+ }
+
+ /**
+ * Some data on this window has become invalid.
+ * @param data Information about the changed data.
+ * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
+ * @note bit 2 -> Update tile selection.
+ * bit 3 -> Set window dirty.
+ */
+ virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
+ {
+ /* Selection has changed. */
+ if (HasBit(data, 2)) { UpdateTileSelection(); }
+
+ /* This window is dirty. */
+ if (HasBit(data, 3)) { this->SetDirty(); }
+ }
+};
+
+static const NWidgetPart _nested_tablet_simple_widgets[] = {
+ NWidget(NWID_VERTICAL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TT_X), SetDataTip(STR_TABLET_X, STR_TABLET_TOGGLE_TRANSPARENCY_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TT_DELETE), SetDataTip(STR_TABLET_CLOSE, STR_TABLET_CLOSE_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_SHIFT), SetDataTip(STR_TABLET_SHIFT, STR_TABLET_SHIFT_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_CTRL), SetDataTip(STR_TABLET_CTRL, STR_TABLET_CTRL_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_MOVE), SetDataTip(STR_TABLET_MOVE, STR_TABLET_MOVE_TOOLTIP),
+ EndContainer(),
+};
+
+static WindowDesc _toolbar_tablet_simple_desc(
+ WDP_AUTO, NULL, 0, 0,
+ WC_TABLET_BAR, WC_NONE,
+ WDF_NO_FOCUS,
+ _nested_tablet_simple_widgets, lengthof(_nested_tablet_simple_widgets)
+);
+
+void ResetTabletWindow()
+{
+ if (_game_mode == GM_MENU) return;
+
+ DeleteWindowByClass(WC_TABLET_BAR);
+
+ switch (_settings_client.gui.touchscreen_mode) {
+ case TSC_NONE:
+ break;
+ case TSC_SIMPLE:
+ new TabletToolbar(&_toolbar_tablet_simple_desc);
+ break;
+ default: NOT_REACHED();
+
+ }
+}
+
/** Allocate the toolbar. */
void AllocateToolbar()
{
@@ -2229,4 +2334,6 @@ void AllocateToolbar()
} else {
new MainToolbarWindow(&_toolb_normal_desc);
}
+
+ ResetTabletWindow();
}
diff --git a/src/toolbar_gui.h b/src/toolbar_gui.h
index d3eba5b..acfe0ed 100644
--- a/src/toolbar_gui.h
+++ b/src/toolbar_gui.h
@@ -16,4 +16,6 @@ void AllocateToolbar();
void ToggleBoundingBoxes();
void ToggleDirtyBlocks();
+void ResetTabletWindow();
+
#endif /* TOOLBAR_GUI_H */
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index ba0b076..c961ad4 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -23,6 +23,7 @@
#include "../core/random_func.hpp"
#include "../core/math_func.hpp"
#include "../fileio_func.h"
+#include "../settings_type.h"
#include "sdl_v.h"
#include <SDL.h>
@@ -751,8 +752,10 @@ void VideoDriver_SDL::MainLoop()
bool old_ctrl_pressed = _ctrl_pressed;
- _ctrl_pressed = !!(mod & KMOD_CTRL);
- _shift_pressed = !!(mod & KMOD_SHIFT);
+ if (_settings_client.gui.touchscreen_mode == TSC_NONE) {
+ _ctrl_pressed = !!(mod & KMOD_CTRL);
+ _shift_pressed = !!(mod & KMOD_SHIFT);
+ }
/* determine which directional keys are down */
_dirkeys =
diff --git a/src/widgets/toolbar_widget.h b/src/widgets/toolbar_widget.h
index 6ede3ad..c7bac73 100644
--- a/src/widgets/toolbar_widget.h
+++ b/src/widgets/toolbar_widget.h
@@ -75,4 +75,13 @@ enum ToolbarEditorWidgets {
WID_TE_SWITCH_BAR = WID_TN_SWITCH_BAR, ///< Only available when toolbar has been split to switch between different subsets.
};
+/** Widgets of the TabletToolbar class. */
+enum ToolbarTabletWidgets {
+ WID_TT_X, ///< Press X (toggle transparency).
+ WID_TT_DELETE, ///< Press DELETE.
+ WID_TT_SHIFT, ///< Press SHIFT.
+ WID_TT_CTRL, ///< Press CTRL.
+ WID_TT_MOVE, ///< Click for moving around viewports.
+};
+
#endif /* WIDGETS_TOOLBAR_WIDGET_H */
diff --git a/src/window.cpp b/src/window.cpp
index 60153bc..9b4f416 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1292,6 +1292,7 @@ static uint GetWindowZPriority(const Window *w)
++z_priority;
case WC_NEWS_WINDOW:
+ case WC_TABLET_BAR:
++z_priority;
default:
diff --git a/src/window_type.h b/src/window_type.h
index e350ff6..0e4544b 100644
--- a/src/window_type.h
+++ b/src/window_type.h
@@ -59,6 +59,12 @@ enum WindowClass {
WC_STATUS_BAR,
/**
+ * Tablet bar; %Window numbers:
+ * - 0 = #StatusbarWidgets
+ */
+ WC_TABLET_BAR,
+
+ /**
* Build toolbar; %Window numbers:
* - #TRANSPORT_RAIL = #RailToolbarWidgets
* - #TRANSPORT_AIR = #AirportToolbarWidgets
--
1.8.1.2

View File

@@ -1,87 +0,0 @@
From 72663a2c57f50dcd41eebe90c60a46e4f3ffb2b4 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 24 Jun 2013 18:07:55 +0200
Subject: [PATCH 218/249] Changes on viewport related files to deal with
touchscreen options.
---
src/viewport.cpp | 3 ++-
src/window.cpp | 18 +++++++++++-------
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 07f02af..81a9dca 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -2000,6 +2000,8 @@ static void PlaceObject()
bool HandleViewportClicked(const ViewPort *vp, int x, int y)
{
+ if (_move_pressed) return false;
+
const Vehicle *v = CheckClickOnVehicle(vp, x, y);
if (_thd.place_mode & HT_VEHICLE) {
@@ -2972,7 +2974,6 @@ EventState VpHandlePlaceSizingDrag()
place_mouseup:
w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y));
-
return ES_HANDLED;
}
diff --git a/src/window.cpp b/src/window.cpp
index 9b4f416..ec3c647 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2439,7 +2439,9 @@ static EventState HandleViewportScroll()
* outside of the window and should not left-mouse scroll anymore. */
if (_last_scroll_window == NULL) _last_scroll_window = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
- if (_last_scroll_window == NULL || !(_right_button_down || scrollwheel_scrolling || (_settings_client.gui.left_mouse_btn_scrolling && _left_button_down))) {
+
+ if (_last_scroll_window == NULL || !(_right_button_down || scrollwheel_scrolling ||
+ (_left_button_down && (_move_pressed || _settings_client.gui.left_mouse_btn_scrolling)))) {
_cursor.fix_at = false;
_scrolling_viewport = false;
_last_scroll_window = NULL;
@@ -2829,6 +2831,12 @@ static void MouseLoop(MouseClick click, int mousewheel)
* But there is no company related window open anyway, so _current_company is not used. */
assert(HasModalProgress() || IsLocalCompany());
+ int x = _cursor.pos.x;
+ int y = _cursor.pos.y;
+ Window *w = FindWindowFromPt(x, y);
+ if (w == NULL) return;
+ ViewPort *vp = IsPtInWindowViewport(w, x, y);
+
HandlePlacePresize();
UpdateTileSelection();
@@ -2843,13 +2851,9 @@ static void MouseLoop(MouseClick click, int mousewheel)
bool scrollwheel_scrolling = _settings_client.gui.scrollwheel_scrolling == 1 && (_cursor.v_wheel != 0 || _cursor.h_wheel != 0);
if (click == MC_NONE && mousewheel == 0 && !scrollwheel_scrolling) return;
- int x = _cursor.pos.x;
- int y = _cursor.pos.y;
- Window *w = FindWindowFromPt(x, y);
if (w == NULL) return;
- if (click != MC_HOVER && !MaybeBringWindowToFront(w)) return;
- ViewPort *vp = IsPtInWindowViewport(w, x, y);
+ if (click != MC_NONE && click != MC_HOVER && !MaybeBringWindowToFront(w)) return;
/* Don't allow any action in a viewport if either in menu or when having a modal progress window */
if (vp != NULL && (_game_mode == GM_MENU || HasModalProgress())) return;
@@ -2870,7 +2874,7 @@ static void MouseLoop(MouseClick click, int mousewheel)
DEBUG(misc, 2, "Cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
if (!HandleViewportClicked(vp, x, y) &&
!(w->flags & WF_DISABLE_VP_SCROLL) &&
- _settings_client.gui.left_mouse_btn_scrolling) {
+ (_settings_client.gui.left_mouse_btn_scrolling || _move_pressed)) {
_scrolling_viewport = true;
_cursor.fix_at = false;
}
--
1.8.1.2

View File

@@ -1,49 +0,0 @@
From 5722b99c4b0366e4c91ff94eb3febd7ff80c249b Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 18 Oct 2013 18:52:01 +0000
Subject: [PATCH 219/249] Set construction child windows to screen borders.
---
src/window.cpp | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/window.cpp b/src/window.cpp
index ec3c647..71a8977 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1686,14 +1686,19 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16 sm_width, int
int16 default_width = max(desc->GetDefaultWidth(), sm_width);
int16 default_height = max(desc->GetDefaultHeight(), sm_height);
- if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ &&
+ if (desc->parent_cls != WC_NONE &&
(w = FindWindowById(desc->parent_cls, window_number)) != NULL &&
w->left < _screen.width - 20 && w->left > -60 && w->top < _screen.height - 20) {
- pt.x = w->left + ((desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) ? 0 : 10);
- if (pt.x > _screen.width + 10 - default_width) {
- pt.x = (_screen.width + 10 - default_width) - 20;
+ if (_settings_client.gui.touchscreen_mode != TSC_NONE) {
+ pt.x = _current_text_dir == TD_RTL ? 0 : (_screen.width - default_width);
+ } else {
+ pt.x = w->left + ((desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) ? 0 : 10);
+ if (pt.x > _screen.width + 10 - default_width) {
+ pt.x = (_screen.width + 10 - default_width) - 20;
+ }
}
+
pt.y = w->top + ((desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) ? w->height : 10);
return pt;
}
@@ -1719,6 +1724,8 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16 sm_width, int
NOT_REACHED();
}
+ // try to put it to
+
return pt;
}
--
1.8.1.2

View File

@@ -1,120 +0,0 @@
From 69eec94d6f79ffc1fc2a3bdb11f50d7c42172135 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 24 Jun 2013 20:32:29 +0200
Subject: [PATCH 220/249] Amend gui's to work with touchscreen controls.
---
src/airport_gui.cpp | 3 +++
src/industry_gui.cpp | 4 ++++
src/terraform_gui.cpp | 2 ++
src/town_gui.cpp | 4 ++++
src/tree_gui.cpp | 8 ++++++++
5 files changed, 21 insertions(+)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index 77a71d4..61c9f2d 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -77,6 +77,7 @@ struct BuildAirToolbarWindow : Window {
~BuildAirToolbarWindow()
{
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
}
@@ -141,6 +142,8 @@ struct BuildAirToolbarWindow : Window {
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
DeleteWindowById(WC_SELECT_STATION, 0);
+
+ ResetObjectToPlace();
}
static HotkeyList hotkeys;
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 8c8245b..3ddb3c5 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -281,6 +281,10 @@ public:
this->SetButtons();
}
+ ~BuildIndustryWindow() {
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
+ }
+
virtual void OnInit()
{
this->SetupArrays();
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index 95ad6da..c2d697a 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -158,6 +158,7 @@ struct TerraformToolbarWindow : Window {
~TerraformToolbarWindow()
{
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
}
virtual void OnInit()
@@ -287,6 +288,7 @@ struct TerraformToolbarWindow : Window {
{
DeleteWindowById(WC_BUILD_OBJECT, 0);
this->RaiseButtons();
+ ResetObjectToPlace();
}
static HotkeyList hotkeys;
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index 841c70e..d1f9847 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -1072,6 +1072,10 @@ public:
this->UpdateButtons(true);
}
+ ~FoundTownWindow() {
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
+ }
+
void RandomTownName()
{
this->townnamevalid = GenerateTownName(&this->townnameparts);
diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp
index 784f454..34c3862 100644
--- a/src/tree_gui.cpp
+++ b/src/tree_gui.cpp
@@ -18,6 +18,7 @@
#include "command_func.h"
#include "sound_func.h"
#include "tree_map.h"
+#include "window_func.h"
#include "widgets/tree_widget.h"
@@ -58,6 +59,11 @@ public:
ResetObjectToPlace();
}
+ ~BuildTreesWindow()
+ {
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
+ }
+
/**
* Calculate the maximum size of all tree sprites
* @return Dimension of the largest tree sprite
@@ -166,6 +172,8 @@ public:
virtual void OnPlaceObjectAbort()
{
this->RaiseButtons();
+
+ ResetObjectToPlace();
}
};
--
1.8.1.2

View File

@@ -1,45 +0,0 @@
From 80ed52400f9660c715e4293d439bb6479239dba9 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 15 Jun 2013 21:43:22 +0200
Subject: [PATCH 221/249] Add a hotkey for toggling touchscreen/mouse control.
---
src/main_gui.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/main_gui.cpp b/src/main_gui.cpp
index 350439c..59cc6f1 100644
--- a/src/main_gui.cpp
+++ b/src/main_gui.cpp
@@ -225,6 +225,7 @@ enum {
GHK_TOGGLE_INVISIBILITY = GHK_TOGGLE_TRANSPARENCY + 9,
GHK_TRANSPARENCY_TOOLBAR = GHK_TOGGLE_INVISIBILITY + 8,
GHK_TRANSPARANCY,
+ GHK_TOUCHSCREEN,
GHK_CHAT,
GHK_CHAT_ALL,
GHK_CHAT_COMPANY,
@@ -385,6 +386,11 @@ struct MainWindow : Window
ResetRestoreAllTransparency();
break;
+ case GHK_TOUCHSCREEN:
+ _settings_client.gui.touchscreen_mode = CycleUp(_settings_client.gui.touchscreen_mode); // cycle through
+ ResetTabletWindow();
+ break;
+
#ifdef ENABLE_NETWORK
case GHK_CHAT: // smart chat; send to team if any, otherwise to all
if (_networking) {
@@ -503,6 +509,8 @@ static Hotkey global_hotkeys[] = {
Hotkey('8' | WKC_CTRL | WKC_SHIFT, "invisibility_catenary", GHK_TOGGLE_INVISIBILITY + 7),
Hotkey('X' | WKC_CTRL, "transparency_toolbar", GHK_TRANSPARENCY_TOOLBAR),
Hotkey('X', "toggle_transparency", GHK_TRANSPARANCY),
+ Hotkey('N', "toggle_touchscreen_control", GHK_TOUCHSCREEN),
+
#ifdef ENABLE_NETWORK
Hotkey(_ghk_chat_keys, "chat", GHK_CHAT),
Hotkey(_ghk_chat_all_keys, "chat_all", GHK_CHAT_ALL),
--
1.8.1.2

View File

@@ -1,24 +0,0 @@
From 5c8d6ef18e85a2ac89b53dc18f2a787bb7a6d3ec Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Thu, 26 Sep 2013 12:11:59 +0000
Subject: [PATCH 222/249] amend vehicle gui
---
src/vehicle_gui.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index f2748a8..a5e1b0f 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -2057,6 +2057,7 @@ public:
virtual void OnResize()
{
this->vscroll->SetCapacityFromWidget(this, WID_VL_LIST);
+ this->GetWidget<NWidgetCore>(WID_VL_LIST)->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
/**
--
1.8.1.2

View File

@@ -1,123 +0,0 @@
From 3d4004852e44550d3d194ae4e73108e5bf7ff57d Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 28 Sep 2013 15:00:43 +0000
Subject: [PATCH 226/249] Settings in three columns for tablets.
---
src/settings_gui.cpp | 89 ++++++++++++++++++++++++++--------------------------
1 file changed, 45 insertions(+), 44 deletions(-)
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index d269348..4b180bb 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -570,16 +570,6 @@ static const NWidgetPart _nested_game_options_widgets[] = {
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_AUTOSAVE_FRAME, STR_NULL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_AUTOSAVE_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP), SetFill(1, 0),
EndContainer(),
- NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_RESOLUTION, STR_NULL),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_RESOLUTION_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_RESOLUTION_TOOLTIP), SetFill(1, 0), SetPadding(0, 0, 3, 0),
- NWidget(NWID_HORIZONTAL),
- NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_FULLSCREEN, STR_NULL),
- NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP),
- EndContainer(),
- EndContainer(),
- EndContainer(),
-
- NWidget(NWID_VERTICAL), SetPIP(0, 6, 0),
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_TOWN_NAMES_FRAME, STR_NULL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_TOWNNAME_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP), SetFill(1, 0),
EndContainer(),
@@ -591,44 +581,55 @@ static const NWidgetPart _nested_game_options_widgets[] = {
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1),
EndContainer(),
- EndContainer(),
- NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_GRF, STR_NULL), SetPadding(0, 10, 0, 10),
- NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP),
- NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
- EndContainer(),
- NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
+ NWidget(NWID_VERTICAL), SetPIP(0, 6, 0),
+ NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_RESOLUTION, STR_NULL),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_RESOLUTION_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_RESOLUTION_TOOLTIP), SetFill(1, 0), SetPadding(0, 0, 3, 0),
+ NWidget(NWID_HORIZONTAL),
+ NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_FULLSCREEN, STR_NULL),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_FULLSCREEN_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP),
+ EndContainer(),
+ EndContainer(),
+ NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_GRF, STR_NULL),
+ NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_GRF_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_GRF_TOOLTIP),
+ NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
+ EndContainer(),
+ NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
+ EndContainer(),
+ EndContainer(),
EndContainer(),
- EndContainer(),
- NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPadding(0, 10, 0, 10),
- NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP),
- NWidget(NWID_SPACER), SetFill(1, 0),
- EndContainer(),
- NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
- EndContainer(),
- EndContainer(),
+ NWidget(NWID_VERTICAL), SetPIP(0, 6, 0),
+ NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPadding(0, 10, 0, 10),
+ NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP),
+ NWidget(NWID_SPACER), SetFill(1, 0),
+ EndContainer(),
+ NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
+ EndContainer(),
+ EndContainer(),
- NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), SetPadding(0, 10, 0, 10),
- NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
- NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP),
- NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
- EndContainer(),
- NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
+ NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), SetPadding(0, 10, 0, 10),
+ NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
+ NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP),
+ NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
+ EndContainer(),
+ NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
+ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
+ EndContainer(),
+ EndContainer(),
EndContainer(),
EndContainer(),
EndContainer(),
--
1.8.1.2

View File

@@ -1,66 +0,0 @@
From 738750120f21c397e32391ed04e69648dc064738 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 28 Jul 2013 11:44:10 +0000
Subject: [PATCH 227/249] When clicking the console and when in touchscreen
modes, open a query string window.
---
src/console_gui.cpp | 19 +++++++++++++++++++
src/lang/english.txt | 4 ++++
2 files changed, 23 insertions(+)
diff --git a/src/console_gui.cpp b/src/console_gui.cpp
index c3dcdaa..031a490 100644
--- a/src/console_gui.cpp
+++ b/src/console_gui.cpp
@@ -22,6 +22,7 @@
#include "console_func.h"
#include "rev.h"
#include "video/video_driver.hpp"
+#include "textbuf_gui.h"
#include "widgets/console_widget.h"
@@ -227,6 +228,24 @@ struct IConsoleWindow : Window
}
}
+ virtual void OnClick(Point pt, int widget, int click_count)
+ {
+ if (_settings_client.gui.touchscreen_mode == 0) return;
+
+ ShowQueryString(STR_EMPTY, STR_CONSOLE_QUERY_STRING, ICON_CMDLN_SIZE,
+ this, CS_ALPHANUMERAL, QSF_NONE);
+ }
+
+ virtual void OnQueryTextFinished(char *str)
+ {
+ _focused_window = this;
+
+ if (str == NULL) return;
+
+ _iconsole_cmdline.Assign(str);
+ this->OnKeyPress(0, WKC_RETURN);
+ }
+
virtual void OnHundredthTick()
{
if (IConsoleLine::Truncate() &&
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 9ca1c3e..be69bbb 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2664,6 +2664,10 @@ STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Lighthouse
STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Company headquarters
STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned land
+# Console
+
+STR_CONSOLE_QUERY_STRING :Enter a console command
+
# About OpenTTD window
STR_ABOUT_OPENTTD :{WHITE}About OpenTTD
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
--
1.8.1.2

View File

@@ -1,45 +0,0 @@
From 6551255ec29d75700426d5e9fbae2ef4a510c61d Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 28 Jul 2013 14:21:56 +0000
Subject: [PATCH 228/249] Add a console command to open cheat window.
---
src/console_cmds.cpp | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index 1a4ea92..11cf46b 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -423,6 +423,20 @@ DEF_CONSOLE_CMD(ConListFiles)
return true;
}
+/* Open the cheat window. */
+DEF_CONSOLE_CMD(ConOpenCheats)
+{
+ if (argc == 0) {
+ IConsoleHelp("Open the cheat window. Usage: 'open_cheats'");
+ return true;
+ }
+
+ extern void ShowCheatWindow();
+ ShowCheatWindow();
+
+ return true;
+}
+
/* Change the dir via console */
DEF_CONSOLE_CMD(ConChangeDirectory)
{
@@ -1926,6 +1940,7 @@ void IConsoleStdLibRegister()
IConsoleCmdRegister("save", ConSave);
IConsoleCmdRegister("saveconfig", ConSaveConfig);
IConsoleCmdRegister("ls", ConListFiles);
+ IConsoleCmdRegister("open_cheats", ConOpenCheats);
IConsoleCmdRegister("cd", ConChangeDirectory);
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
IConsoleCmdRegister("clear", ConClearBuffer);
--
1.8.1.2

View File

@@ -1,290 +0,0 @@
From 77e5ea97fc6e8a7192077eb6474d8597f888c7ad Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 13 Oct 2013 13:53:11 +0000
Subject: [PATCH 230/249] Base functions for a confirm action mode.
---
src/command.cpp | 74 ++++++++++++++++++++++++++++++++++++++++
src/command_func.h | 6 ++++
src/lang/english.txt | 3 ++
src/script/api/script_window.hpp | 1 +
src/table/settings.ini | 2 +-
src/toolbar_gui.cpp | 39 +++++++++++++++++++--
src/toolbar_type.h | 3 +-
src/widgets/toolbar_widget.h | 1 +
8 files changed, 125 insertions(+), 4 deletions(-)
diff --git a/src/command.cpp b/src/command.cpp
index 1414076..53aeac1 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -26,6 +26,7 @@
#include "signal_func.h"
#include "core/backup_type.hpp"
#include "object_base.h"
+#include "string_func.h"
#include "table/strings.h"
@@ -531,6 +532,79 @@ bool DoCommandP(const CommandContainer *container, bool my_cmd)
return DoCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, my_cmd);
}
+/* Stored data for a command that is waiting for user confirmation. */
+bool _is_queued_command;
+bool _my_cmd;
+CommandContainer _queued_command;
+
+/**
+ * Store a command that needs user confirmation.
+ * If current mode doesn't need confirmation, execute it immediately via DoCommandP.
+ * @param tile The tile to perform a command on (see #CommandProc)
+ * @param p1 Additional data for the command (see #CommandProc)
+ * @param p2 Additional data for the command (see #CommandProc)
+ * @param cmd The command to execute (a CMD_* value)
+ * @param callback A callback function to call after the command is finished
+ * @param text The text to pass
+ * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
+ * @return \c true if the command succeeded or is stored, else \c false.
+ */
+bool TouchCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd)
+{
+ if (_settings_client.gui.touchscreen_mode == TSC_CONFIRM && !_shift_pressed) {
+ _queued_command.tile = tile;
+ _queued_command.p1 = p1;
+ _queued_command.p2 = p2;
+ _queued_command.cmd = cmd;
+ _queued_command.callback = callback;
+ if (text != NULL) ttd_strlcpy(_queued_command.text, text, 32 * MAX_CHAR_LENGTH);
+ _my_cmd = my_cmd;
+ _is_queued_command = true;
+ extern void UpdateTouchscreenBar();
+ UpdateTouchscreenBar();
+ return true;
+ } else {
+ return DoCommandP(tile, p1, p2, cmd, callback, text, my_cmd);
+ }
+}
+
+/**
+ * Shortcut for the long TouchCommandP when having a container with the data.
+ * Store a command that needs user confirmation.
+ * If current mode doesn't need confirmation, execute it immediately via DoCommandP.
+ * @param container the container with information.
+ * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
+ * @return true if the command succeeded or when it is stored, else false
+ */
+bool TouchCommandP(const CommandContainer *container, bool my_cmd)
+{
+ return TouchCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, my_cmd);
+}
+
+/** Return whether there is a command stored waiting for confirmation. */
+bool IsQueuedTouchCommand()
+{
+ return _is_queued_command;
+}
+
+/** Execute a stored command. Keep it when asking for estimated cost. */
+bool DoQueuedTouchCommand()
+{
+ bool result = DoCommandP(&_queued_command, _my_cmd);
+ if (!_shift_pressed && result) EraseQueuedTouchCommand();
+ return result;
+}
+
+/** Erase a stored command and update viewport and touchscreen bar. */
+void EraseQueuedTouchCommand()
+{
+ if (!IsQueuedTouchCommand()) return;
+ _is_queued_command = false;
+ extern void UpdateTouchscreenBar();
+ UpdateTouchscreenBar();
+ //reset selection of tiles
+}
+
/*!
* Toplevel network safe docommand function for the current company. Must not be called recursively.
* The callback is called when the command succeeded or failed. The parameters
diff --git a/src/command_func.h b/src/command_func.h
index c4cc51e..ab9fb05 100644
--- a/src/command_func.h
+++ b/src/command_func.h
@@ -40,6 +40,12 @@ CommandCost DoCommand(const CommandContainer *container, DoCommandFlag flags);
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, bool my_cmd = true);
bool DoCommandP(const CommandContainer *container, bool my_cmd = true);
+bool TouchCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, bool my_cmd = true);
+bool TouchCommandP(const CommandContainer *container, bool my_cmd = true);
+bool IsQueuedTouchCommand();
+bool DoQueuedTouchCommand();
+void EraseQueuedTouchCommand();
+
CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only);
#ifdef ENABLE_NETWORK
diff --git a/src/lang/english.txt b/src/lang/english.txt
index be69bbb..49de7b3 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -1187,6 +1187,7 @@ STR_CONFIG_SETTING_TOUCHSCREEN_MODE :Control mode fo
STR_CONFIG_SETTING_TOUCHSCREEN_MODE_HELPTEXT :If playing with a mouse, choose no adaptation. Other modes are for touchscreen devices. Associated hotkey: N
STR_CONFIG_SETTING_TOUCHSCREEN_NONE :no adaptation
STR_CONFIG_SETTING_TOUCHSCREEN_SIMPLE :simple
+STR_CONFIG_SETTING_TOUCHSCREEN_CONFIRM :confirm
STR_CONFIG_SETTING_SHOWFINANCES :Show finances window at the end of the year: {STRING2}
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :If enabled, the finances window pops up at the end of each year to allow easy inspection of the financial status of the company
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :New orders are 'non-stop' by default: {STRING2}
@@ -2457,6 +2458,8 @@ STR_TABLET_CTRL :{BLACK}Ctrl
STR_TABLET_CTRL_TOOLTIP :{BLACK}Use it for actions that use the "CTRL" key
STR_TABLET_MOVE :{BLACK}Move
STR_TABLET_MOVE_TOOLTIP :{BLACK}Press it to move around viewports. No action will be executed on viewports while this is active
+STR_TABLET_CONFIRM :{BLACK}Do
+STR_TABLET_CONFIRM_TOOLTIP :{BLACK}Press it to confirm an action
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Object Selection
diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp
index a5c0684..af43ce5 100644
--- a/src/script/api/script_window.hpp
+++ b/src/script/api/script_window.hpp
@@ -2509,6 +2509,7 @@ public:
WID_TT_SHIFT = ::WID_TT_SHIFT, ///< Press SHIFT.
WID_TT_CTRL = ::WID_TT_CTRL, ///< Press CTRL.
WID_TT_MOVE = ::WID_TT_MOVE, ///< Click for moving around viewports.
+ WID_TT_CONFIRM = ::WID_TT_CONFIRM, ///< Confirm action.
};
/* automatically generated from ../../widgets/town_widget.h */
diff --git a/src/table/settings.ini b/src/table/settings.ini
index 781f2b2..6514108 100644
--- a/src/table/settings.ini
+++ b/src/table/settings.ini
@@ -2515,7 +2515,7 @@ type = SLE_UINT8
guiflags = SGF_MULTISTRING
def = 0
min = 0
-max = 1
+max = 2
interval = 1
str = STR_CONFIG_SETTING_TOUCHSCREEN_MODE
strval = STR_CONFIG_SETTING_TOUCHSCREEN_NONE
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index 93b5a80..7ef8511 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -2267,6 +2267,9 @@ struct TabletToolbar : Window {
this->ToggleWidgetLoweredState(WID_TT_MOVE);
this->SetWidgetDirty(WID_TT_MOVE);
break;
+ case WID_TT_CONFIRM:
+ DoQueuedTouchCommand();
+ break;
default:
NOT_REACHED();
}
@@ -2285,7 +2288,10 @@ struct TabletToolbar : Window {
if (HasBit(data, 2)) { UpdateTileSelection(); }
/* This window is dirty. */
- if (HasBit(data, 3)) { this->SetDirty(); }
+ if (HasBit(data, 3)) {
+ SetWidgetDisabledState(WID_TT_CONFIRM, !IsQueuedTouchCommand());
+ this->SetWidgetDirty(WID_TT_CONFIRM);
+ }
}
};
@@ -2299,6 +2305,17 @@ static const NWidgetPart _nested_tablet_simple_widgets[] = {
EndContainer(),
};
+static const NWidgetPart _nested_tablet_confirm_widgets[] = {
+ NWidget(NWID_VERTICAL),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TT_X), SetDataTip(STR_TABLET_X, STR_TABLET_TOGGLE_TRANSPARENCY_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TT_DELETE), SetDataTip(STR_TABLET_CLOSE, STR_TABLET_CLOSE_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_SHIFT), SetDataTip(STR_TABLET_SHIFT, STR_TABLET_SHIFT_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_CTRL), SetDataTip(STR_TABLET_CTRL, STR_TABLET_CTRL_TOOLTIP),
+ NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_TT_MOVE), SetDataTip(STR_TABLET_MOVE, STR_TABLET_MOVE_TOOLTIP),
+ NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_TT_CONFIRM), SetDataTip(STR_TABLET_CONFIRM, STR_TABLET_CONFIRM_TOOLTIP),
+ EndContainer(),
+};
+
static WindowDesc _toolbar_tablet_simple_desc(
WDP_AUTO, NULL, 0, 0,
WC_TABLET_BAR, WC_NONE,
@@ -2306,11 +2323,19 @@ static WindowDesc _toolbar_tablet_simple_desc(
_nested_tablet_simple_widgets, lengthof(_nested_tablet_simple_widgets)
);
+static WindowDesc _toolbar_tablet_confirm_desc(
+ WDP_AUTO, NULL, 0, 0,
+ WC_TABLET_BAR, WC_NONE,
+ WDF_NO_FOCUS,
+ _nested_tablet_confirm_widgets, lengthof(_nested_tablet_confirm_widgets)
+);
+
void ResetTabletWindow()
{
if (_game_mode == GM_MENU) return;
DeleteWindowByClass(WC_TABLET_BAR);
+ EraseQueuedTouchCommand();
switch (_settings_client.gui.touchscreen_mode) {
case TSC_NONE:
@@ -2318,9 +2343,14 @@ void ResetTabletWindow()
case TSC_SIMPLE:
new TabletToolbar(&_toolbar_tablet_simple_desc);
break;
+ case TSC_CONFIRM:
+ new TabletToolbar(&_toolbar_tablet_confirm_desc);
+ InvalidateWindowData(WC_TABLET_BAR, 0, 1 << 3);
+ break;
default: NOT_REACHED();
-
}
+
+ MarkWholeScreenDirty();
}
/** Allocate the toolbar. */
@@ -2337,3 +2367,8 @@ void AllocateToolbar()
ResetTabletWindow();
}
+
+void UpdateTouchscreenBar()
+{
+ InvalidateWindowData(WC_TABLET_BAR, 0, 1 << 3);
+}
diff --git a/src/toolbar_type.h b/src/toolbar_type.h
index cfde179..682cf2f 100644
--- a/src/toolbar_type.h
+++ b/src/toolbar_type.h
@@ -16,8 +16,9 @@
enum TouchscreenMode {
TSC_NONE = 0,
TSC_SIMPLE,
+ TSC_CONFIRM,
};
-DECLARE_CYCLE(TouchscreenMode, TSC_NONE, TSC_SIMPLE)
+DECLARE_CYCLE(TouchscreenMode, TSC_NONE, TSC_CONFIRM)
typedef SimpleTinyEnumT<TouchscreenMode, byte> TouchscreenModeByte;
#endif /* TOOLBAR_TYPE_H */
diff --git a/src/widgets/toolbar_widget.h b/src/widgets/toolbar_widget.h
index c7bac73..4399b5d 100644
--- a/src/widgets/toolbar_widget.h
+++ b/src/widgets/toolbar_widget.h
@@ -82,6 +82,7 @@ enum ToolbarTabletWidgets {
WID_TT_SHIFT, ///< Press SHIFT.
WID_TT_CTRL, ///< Press CTRL.
WID_TT_MOVE, ///< Click for moving around viewports.
+ WID_TT_CONFIRM, ///< Confirm action.
};
#endif /* WIDGETS_TOOLBAR_WIDGET_H */
--
1.8.1.2

View File

@@ -1,62 +0,0 @@
From 824f296d4c9faa9e6a50806270241e90f2a69c8a Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 17:55:30 +0000
Subject: [PATCH 231/249] Set selection tiles dirty when erasing a queued
command.
---
src/command.cpp | 4 +++-
src/tilehighlight_func.h | 1 +
src/viewport.cpp | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/command.cpp b/src/command.cpp
index 53aeac1..02720ce 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -27,6 +27,7 @@
#include "core/backup_type.hpp"
#include "object_base.h"
#include "string_func.h"
+#include "tilehighlight_func.h"
#include "table/strings.h"
@@ -602,7 +603,8 @@ void EraseQueuedTouchCommand()
_is_queued_command = false;
extern void UpdateTouchscreenBar();
UpdateTouchscreenBar();
- //reset selection of tiles
+ SetSelectionTilesDirty();
+ _thd.Reset();
}
/*!
diff --git a/src/tilehighlight_func.h b/src/tilehighlight_func.h
index af44c4d..ac15672 100644
--- a/src/tilehighlight_func.h
+++ b/src/tilehighlight_func.h
@@ -30,6 +30,7 @@ void VpSetPresizeRange(TileIndex from, TileIndex to);
void VpSetPlaceSizingLimit(int limit);
void UpdateTileSelection();
+void SetSelectionTilesDirty();
extern TileHighlightData _thd;
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 81a9dca..95aecf3 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1766,7 +1766,7 @@ void MarkTileDirtyByTile(TileIndex tile)
*
* @ingroup dirty
*/
-static void SetSelectionTilesDirty()
+void SetSelectionTilesDirty()
{
int x_size = _thd.size.x;
int y_size = _thd.size.y;
--
1.8.1.2

View File

@@ -1,34 +0,0 @@
From a6bea6f5e2c2629593dc232b960685e0dc491196 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 17:58:51 +0000
Subject: [PATCH 232/249] Set dirty selection tiles when bridge is too long to
build.
---
src/bridge_gui.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp
index 78e7ff8..9ce304f 100644
--- a/src/bridge_gui.cpp
+++ b/src/bridge_gui.cpp
@@ -24,6 +24,7 @@
#include "cmd_helper.h"
#include "tunnelbridge_map.h"
#include "road_gui.h"
+#include "tilehighlight_func.h"
#include "widgets/bridge_widget.h"
@@ -429,6 +430,8 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl);
} else {
delete bl;
+ SetSelectionTilesDirty();
+ _thd.Reset();
ShowErrorMessage(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE, errmsg, WL_INFO, TileX(end) * TILE_SIZE, TileY(end) * TILE_SIZE);
}
}
--
1.8.1.2

View File

@@ -1,60 +0,0 @@
From 46160c673718e5a287e46470ce450df24634ebb2 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Fri, 25 Oct 2013 17:26:13 +0000
Subject: [PATCH 233/249] Adaptation of viewport for confirm mode.
---
src/script/api/game/game_window.hpp.sq | 1 +
src/window.cpp | 16 +++++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq
index f06fae3..6d87c22 100644
--- a/src/script/api/game/game_window.hpp.sq
+++ b/src/script/api/game/game_window.hpp.sq
@@ -1252,6 +1252,7 @@ void SQGSWindow_Register(Squirrel *engine)
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_SHIFT, "WID_TT_SHIFT");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_CTRL, "WID_TT_CTRL");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_MOVE, "WID_TT_MOVE");
+ SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TT_CONFIRM, "WID_TT_CONFIRM");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_ORDER, "WID_TD_SORT_ORDER");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_SORT_CRITERIA, "WID_TD_SORT_CRITERIA");
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_TD_FILTER, "WID_TD_FILTER");
diff --git a/src/window.cpp b/src/window.cpp
index 71a8977..b783125 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2843,9 +2843,18 @@ static void MouseLoop(MouseClick click, int mousewheel)
Window *w = FindWindowFromPt(x, y);
if (w == NULL) return;
ViewPort *vp = IsPtInWindowViewport(w, x, y);
+ bool confirm = (_settings_client.gui.touchscreen_mode == TSC_CONFIRM);
- HandlePlacePresize();
- UpdateTileSelection();
+ /* Don't allow any action in a viewport if either in menu or when having a modal progress window */
+ if (vp != NULL && (_game_mode == GM_MENU || HasModalProgress())) return;
+
+ /* On confirm mode do not update tile selection unless we are clicking on a viewport. */
+ if (!confirm || (vp != NULL && _left_button_down && !_move_pressed)) {
+ HandlePlacePresize();
+ UpdateTileSelection();
+ } else {
+ //if presize, show tooltip if needed
+ }
if (VpHandlePlaceSizingDrag() == ES_HANDLED) return;
if (HandleMouseDragDrop() == ES_HANDLED) return;
@@ -2862,9 +2871,6 @@ static void MouseLoop(MouseClick click, int mousewheel)
if (click != MC_NONE && click != MC_HOVER && !MaybeBringWindowToFront(w)) return;
- /* Don't allow any action in a viewport if either in menu or when having a modal progress window */
- if (vp != NULL && (_game_mode == GM_MENU || HasModalProgress())) return;
-
if (mousewheel != 0) {
/* Send mousewheel event to window */
w->OnMouseWheel(mousewheel);
--
1.8.1.2

View File

@@ -1,322 +0,0 @@
From 6fc82e66b6f24cc97de9f7f923c48dd9dcdd08ff Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sun, 13 Oct 2013 13:46:59 +0000
Subject: [PATCH 234/249] Select the actions that will need confirmation.
---
src/bridge_gui.cpp | 2 +-
src/company_gui.cpp | 2 +-
src/dock_gui.cpp | 12 ++++++------
src/object_gui.cpp | 2 +-
src/rail_gui.cpp | 20 ++++++++++----------
src/road_gui.cpp | 10 +++++-----
src/station_gui.cpp | 2 +-
src/terraform_gui.cpp | 14 +++++++-------
src/tree_gui.cpp | 2 +-
9 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp
index 9ce304f..6834359 100644
--- a/src/bridge_gui.cpp
+++ b/src/bridge_gui.cpp
@@ -383,7 +383,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
default: break; // water ways and air routes don't have bridge types
}
if (_ctrl_pressed && CheckBridgeAvailability(last_bridge_type, bridge_len).Succeeded()) {
- DoCommandP(end, start, type | last_bridge_type, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
+ TouchCommandP(end, start, type | last_bridge_type, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
return;
}
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index 3be6dec..498d3df 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -2366,7 +2366,7 @@ struct CompanyWindow : Window
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
- if (DoCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS))) {
+ if (TouchCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS))) {
ResetObjectToPlace();
this->RaiseButtons();
}
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 86f03fc..460ae57 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -224,10 +224,10 @@ struct BuildDocksToolbarWindow : Window {
GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
break;
case DDSP_CREATE_WATER:
- DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && _ctrl_pressed) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcBuildCanal);
+ TouchCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && _ctrl_pressed) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcBuildCanal);
break;
case DDSP_CREATE_RIVER:
- DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcBuildCanal);
+ TouchCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcBuildCanal);
break;
case DDSP_BUILD_STATION: {
uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
@@ -242,14 +242,14 @@ struct BuildDocksToolbarWindow : Window {
}
case DDSP_BUILD_BRIDGE:
- DoCommandP(start_tile, GetOtherAqueductEnd(start_tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
+ TouchCommandP(start_tile, GetOtherAqueductEnd(start_tile), TRANSPORT_WATER << 15, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE), CcBuildBridge);
VpStartPreSizing();
break;
case DDSP_REMOVE_TRUCKSTOP: { // Reusing for locks.
TileIndex middle_tile = start_tile;
if (start_tile != end_tile) middle_tile = TileAddByDiagDir(start_tile, DiagdirBetweenTiles(start_tile, end_tile));
- DoCommandP(middle_tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
+ TouchCommandP(middle_tile, 0, 0, CMD_BUILD_LOCK | CMD_MSG(STR_ERROR_CAN_T_BUILD_LOCKS), CcBuildDocks);
VpStartPreSizing();
break;
}
@@ -258,10 +258,10 @@ struct BuildDocksToolbarWindow : Window {
assert(start_tile == end_tile);
switch (last_clicked_widget) {
case WID_DT_BUOY:
- DoCommandP(end_tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
+ TouchCommandP(end_tile, 0, 0, CMD_BUILD_BUOY | CMD_MSG(STR_ERROR_CAN_T_POSITION_BUOY_HERE), CcBuildDocks);
break;
case WID_DT_DEPOT: // Build depot button
- DoCommandP(end_tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
+ TouchCommandP(end_tile, _ship_depot_direction, 0, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_SHIP_DEPOT), CcBuildDocks);
break;
default: NOT_REACHED();
}
diff --git a/src/object_gui.cpp b/src/object_gui.cpp
index 3bd3798..6675ec2 100644
--- a/src/object_gui.cpp
+++ b/src/object_gui.cpp
@@ -499,5 +499,5 @@ void InitializeObjectGui()
*/
void PlaceProc_Object(TileIndex tile)
{
- DoCommandP(tile, ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index)->Index(), _selected_object_view, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_OBJECT), CcTerraform);
+ TouchCommandP(tile, ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index)->Index(), _selected_object_view, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_OBJECT), CcTerraform);
}
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 7c4b86b..d537646 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -91,7 +91,7 @@ void CcPlaySound1E(const CommandCost &result, TileIndex tile, uint32 p1, uint32
static void GenericPlaceRail(TileIndex tile, int cmd)
{
- DoCommandP(tile, _cur_railtype, cmd,
+ TouchCommandP(tile, _cur_railtype, cmd,
_remove_button_clicked ?
CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK) :
CMD_BUILD_SINGLE_RAIL | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK),
@@ -213,7 +213,7 @@ static void GenericPlaceSignals(TileIndex tile)
Track track = FindFirstTrack(trackbits);
if (_remove_button_clicked) {
- DoCommandP(tile, track, 0, CMD_REMOVE_SIGNALS | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM), CcPlaySound1E);
+ TouchCommandP(tile, track, 0, CMD_REMOVE_SIGNALS | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM), CcPlaySound1E);
} else {
const Window *w = FindWindowById(WC_BUILD_SIGNAL, 0);
@@ -238,7 +238,7 @@ static void GenericPlaceSignals(TileIndex tile)
SB(p1, 9, 6, cycle_bounds[_settings_client.gui.cycle_signal_types]);
}
- DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS |
+ TouchCommandP(tile, p1, 0, CMD_BUILD_SIGNALS |
CMD_MSG((w != NULL && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE),
CcPlaySound1E);
}
@@ -325,7 +325,7 @@ static void BuildRailClick_Remove(Window *w)
static void DoRailroadTrack(int mode)
{
- DoCommandP(TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y), _cur_railtype | (mode << 4),
+ TouchCommandP(TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y), _cur_railtype | (mode << 4),
_remove_button_clicked ?
CMD_REMOVE_RAILROAD_TRACK | CMD_MSG(STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK) :
CMD_BUILD_RAILROAD_TRACK | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK),
@@ -380,7 +380,7 @@ static void HandleAutoSignalPlacement()
/* _settings_client.gui.drag_signals_density is given as a parameter such that each user
* in a network game can specify his/her own signal density */
- DoCommandP(TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y), p2,
+ TouchCommandP(TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y), p2,
_remove_button_clicked ?
CMD_REMOVE_SIGNAL_TRACK | CMD_MSG(STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM) :
CMD_BUILD_SIGNAL_TRACK | CMD_MSG(STR_ERROR_CAN_T_BUILD_SIGNALS_HERE),
@@ -667,7 +667,7 @@ struct BuildRailToolbarWindow : Window {
case WID_RAT_BUILD_TUNNEL:
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
else VpStartPreSizing();
- DoCommandP(end_tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRailTunnel);
+ TouchCommandP(end_tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRailTunnel);
break;
case WID_RAT_BUILD_BRIDGE:
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
@@ -690,7 +690,7 @@ struct BuildRailToolbarWindow : Window {
break;
case DDSP_CONVERT_RAIL:
- DoCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound10);
+ TouchCommandP(end_tile, start_tile, _cur_railtype | (_ctrl_pressed ? 0x10 : 0), CMD_CONVERT_RAIL | CMD_MSG(STR_ERROR_CAN_T_CONVERT_RAIL), CcPlaySound10);
break;
case DDSP_BUILD_STATION:
@@ -712,14 +712,14 @@ struct BuildRailToolbarWindow : Window {
if (this->IsWidgetLowered(WID_RAT_BUILD_STATION)) {
/* Station */
if (_remove_button_clicked) {
- DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_REMOVE_PART_OF_STATION), CcPlaySound1E);
+ TouchCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_REMOVE_PART_OF_STATION), CcPlaySound1E);
} else {
HandleStationPlacement(start_tile, end_tile);
}
} else {
/* Waypoint */
if (_remove_button_clicked) {
- DoCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT), CcPlaySound1E);
+ TouchCommandP(end_tile, start_tile, _ctrl_pressed ? 0 : 1, CMD_REMOVE_FROM_RAIL_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT), CcPlaySound1E);
} else {
TileArea ta(start_tile, end_tile);
uint32 p1 = _cur_railtype | (select_method == VPM_FIX_X ? AXIS_X : AXIS_Y) << 4 | ta.w << 8 | ta.h << 16 | _ctrl_pressed << 24;
@@ -734,7 +734,7 @@ struct BuildRailToolbarWindow : Window {
case DDSP_SINGLE_TILE:
assert(end_tile == start_tile);
assert(last_user_action == WID_RAT_BUILD_DEPOT);
- DoCommandP(end_tile, _cur_railtype, _build_depot_direction,
+ TouchCommandP(end_tile, _cur_railtype, _build_depot_direction,
CMD_BUILD_TRAIN_DEPOT | CMD_MSG(STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT),
CcRailDepot);
break;
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index d79477d..ef6c6d3 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -585,7 +585,7 @@ struct BuildRoadToolbarWindow : Window {
case WID_ROT_BUILD_TUNNEL:
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
else VpStartPreSizing();
- DoCommandP(end_tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0,
+ TouchCommandP(end_tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0,
CMD_BUILD_TUNNEL | CMD_MSG(STR_ERROR_CAN_T_BUILD_TUNNEL_HERE), CcBuildRoadTunnel);
break;
case WID_ROT_BUILD_BRIDGE:
@@ -609,7 +609,7 @@ struct BuildRoadToolbarWindow : Window {
* not the 3rd bit set) */
_place_road_flag = (RoadFlags)((_place_road_flag & RF_DIR_Y) ? (_place_road_flag & 0x07) : (_place_road_flag >> 3));
- DoCommandP(start_tile, end_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5),
+ TouchCommandP(start_tile, end_tile, _place_road_flag | (_cur_roadtype << 3) | (_one_way_button_clicked << 5),
_remove_button_clicked ?
CMD_REMOVE_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
CMD_BUILD_LONG_ROAD | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road), CcPlaySound1D);
@@ -625,13 +625,13 @@ struct BuildRoadToolbarWindow : Window {
case DDSP_REMOVE_BUSSTOP: {
TileArea ta(start_tile, end_tile);
- DoCommandP(ta.tile, ta.w | ta.h << 8, ROADSTOP_BUS, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_BUS]), CcPlaySound1D);
+ TouchCommandP(ta.tile, ta.w | ta.h << 8, ROADSTOP_BUS, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_BUS]), CcPlaySound1D);
break;
}
case DDSP_REMOVE_TRUCKSTOP: {
TileArea ta(start_tile, end_tile);
- DoCommandP(ta.tile, ta.w | ta.h << 8, ROADSTOP_TRUCK, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_TRUCK]), CcPlaySound1D);
+ TouchCommandP(ta.tile, ta.w | ta.h << 8, ROADSTOP_TRUCK, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[ROADSTOP_TRUCK]), CcPlaySound1D);
break;
}
@@ -639,7 +639,7 @@ struct BuildRoadToolbarWindow : Window {
/* Build depot. */
assert(start_tile == end_tile);
assert(last_started_action == WID_ROT_DEPOT);
- DoCommandP(start_tile, _cur_roadtype << 2 | _road_depot_orientation, 0,
+ TouchCommandP(start_tile, _cur_roadtype << 2 | _road_depot_orientation, 0,
CMD_BUILD_ROAD_DEPOT | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot), CcRoadDepot);
break;
}
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index 9ea7daf..c0a0135 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -2267,7 +2267,7 @@ void ShowSelectBaseStationIfNeeded(const CommandContainer &cmd, TileArea ta)
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
new SelectStationWindow<T>(&_select_station_desc, cmd, ta);
} else {
- DoCommandP(&cmd);
+ TouchCommandP(&cmd);
}
}
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index c2d697a..922071c 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -111,16 +111,16 @@ bool GUIPlaceProcDragXY(ViewportDragDropSelectionProcess proc, TileIndex start_t
switch (proc) {
case DDSP_DEMOLISH_AREA:
- DoCommandP(end_tile, start_tile, _ctrl_pressed ? 1 : 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10);
+ TouchCommandP(end_tile, start_tile, _ctrl_pressed ? 1 : 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10);
break;
case DDSP_RAISE_AND_LEVEL_AREA:
- DoCommandP(end_tile, start_tile, LM_RAISE << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_RAISE_LAND_HERE), CcTerraform);
+ TouchCommandP(end_tile, start_tile, LM_RAISE << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_RAISE_LAND_HERE), CcTerraform);
break;
case DDSP_LOWER_AND_LEVEL_AREA:
- DoCommandP(end_tile, start_tile, LM_LOWER << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LOWER_LAND_HERE), CcTerraform);
+ TouchCommandP(end_tile, start_tile, LM_LOWER << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LOWER_LAND_HERE), CcTerraform);
break;
case DDSP_LEVEL_AREA:
- DoCommandP(end_tile, start_tile, LM_LEVEL << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LEVEL_LAND_HERE), CcTerraform);
+ TouchCommandP(end_tile, start_tile, LM_LEVEL << 1 | (_ctrl_pressed ? 1 : 0), CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LEVEL_LAND_HERE), CcTerraform);
break;
case DDSP_CREATE_ROCKS:
GenerateRockyArea(end_tile, start_tile);
@@ -270,7 +270,7 @@ struct TerraformToolbarWindow : Window {
assert(start_tile == end_tile);
switch (this->last_user_action) {
case WID_TT_BUY_LAND:
- DoCommandP(end_tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E);
+ TouchCommandP(end_tile, OBJECT_OWNED_LAND, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_PURCHASE_THIS_LAND), CcPlaySound1E);
break;
case WID_TT_PLACE_SIGN:
PlaceProc_Sign(end_tile);
@@ -402,7 +402,7 @@ static void CommonRaiseLowerBigLand(TileIndex tile, int mode)
StringID msg =
mode ? STR_ERROR_CAN_T_RAISE_LAND_HERE : STR_ERROR_CAN_T_LOWER_LAND_HERE;
- DoCommandP(tile, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND | CMD_MSG(msg), CcTerraform);
+ TouchCommandP(tile, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND | CMD_MSG(msg), CcTerraform);
} else {
assert(_terraform_size != 0);
TileArea ta(tile, _terraform_size, _terraform_size);
@@ -429,7 +429,7 @@ static void CommonRaiseLowerBigLand(TileIndex tile, int mode)
TILE_AREA_LOOP(tile2, ta) {
if (TileHeight(tile2) == h) {
- DoCommandP(tile2, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND);
+ TouchCommandP(tile2, SLOPE_N, (uint32)mode, CMD_TERRAFORM_LAND);
}
}
}
diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp
index 34c3862..bcd3281 100644
--- a/src/tree_gui.cpp
+++ b/src/tree_gui.cpp
@@ -155,7 +155,7 @@ public:
virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile)
{
if (pt.x != -1 && select_proc == DDSP_PLANT_TREES) {
- DoCommandP(end_tile, this->tree_to_plant, start_tile,
+ TouchCommandP(end_tile, this->tree_to_plant, start_tile,
CMD_PLANT_TREE | CMD_MSG(STR_ERROR_CAN_T_PLANT_TREE_HERE));
}
}
--
1.8.1.2

View File

@@ -1,147 +0,0 @@
From e7e2c3f1392ae1d9be5e3cc96fa31d4cb894a1ea Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 17:49:14 +0000
Subject: [PATCH 235/249] Reset queued command when closing windows that can
queue them.
---
src/airport_gui.cpp | 4 +++-
src/dock_gui.cpp | 3 +++
src/rail_gui.cpp | 2 ++
src/road_gui.cpp | 3 +++
src/terraform_gui.cpp | 1 +
src/tree_gui.cpp | 1 +
6 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index 61c9f2d..c927ef4 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -28,6 +28,7 @@
#include "hotkeys.h"
#include "vehicle_func.h"
#include "gui.h"
+#include "command_func.h"
#include "widgets/airport_widget.h"
@@ -142,7 +143,7 @@ struct BuildAirToolbarWindow : Window {
DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR);
DeleteWindowById(WC_SELECT_STATION, 0);
-
+ EraseQueuedTouchCommand();
ResetObjectToPlace();
}
@@ -243,6 +244,7 @@ public:
virtual ~BuildAirportWindow()
{
+ EraseQueuedTouchCommand();
DeleteWindowById(WC_SELECT_STATION, 0);
}
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 460ae57..934ff9e 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -103,6 +103,7 @@ struct BuildDocksToolbarWindow : Window {
~BuildDocksToolbarWindow()
{
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
}
@@ -279,6 +280,7 @@ struct BuildDocksToolbarWindow : Window {
DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER);
DeleteWindowById(WC_SELECT_STATION, 0);
DeleteWindowByClass(WC_BUILD_BRIDGE);
+ EraseQueuedTouchCommand();
}
virtual void OnPlacePresize(Point pt, TileIndex tile_from)
@@ -558,6 +560,7 @@ public:
this->LowerWidget(_ship_depot_direction + WID_BDD_X);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
UpdateDocksDirection();
+ EraseQueuedTouchCommand();
this->SetDirty();
break;
}
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index d537646..ce9d105 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -405,6 +405,7 @@ struct BuildRailToolbarWindow : Window {
~BuildRailToolbarWindow()
{
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
}
@@ -754,6 +755,7 @@ struct BuildRailToolbarWindow : Window {
DeleteWindowById(WC_BUILD_WAYPOINT, TRANSPORT_RAIL);
DeleteWindowById(WC_SELECT_STATION, 0);
DeleteWindowByClass(WC_BUILD_BRIDGE);
+ EraseQueuedTouchCommand();
}
virtual void OnPlacePresize(Point pt, TileIndex tile_from)
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index ef6c6d3..1b7ea07 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -309,6 +309,7 @@ struct BuildRoadToolbarWindow : Window {
~BuildRoadToolbarWindow()
{
+ if (_thd.GetCallbackWnd() == this) this->OnPlaceObjectAbort();
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
}
@@ -531,6 +532,7 @@ struct BuildRoadToolbarWindow : Window {
DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_ROAD);
DeleteWindowById(WC_SELECT_STATION, 0);
DeleteWindowByClass(WC_BUILD_BRIDGE);
+ EraseQueuedTouchCommand();
}
virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt)
@@ -1029,6 +1031,7 @@ struct BuildRoadStationWindow : public PickerWindowBase {
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
this->SetDirty();
DeleteWindowById(WC_SELECT_STATION, 0);
+ EraseQueuedTouchCommand();
break;
case WID_BROS_LT_OFF:
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index 922071c..c6b3dff 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -288,6 +288,7 @@ struct TerraformToolbarWindow : Window {
{
DeleteWindowById(WC_BUILD_OBJECT, 0);
this->RaiseButtons();
+ EraseQueuedTouchCommand();
ResetObjectToPlace();
}
diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp
index bcd3281..eac8584 100644
--- a/src/tree_gui.cpp
+++ b/src/tree_gui.cpp
@@ -174,6 +174,7 @@ public:
this->RaiseButtons();
ResetObjectToPlace();
+ EraseQueuedTouchCommand();
}
};
--
1.8.1.2

View File

@@ -1,24 +0,0 @@
From a9f29e52e61812d9272e1d6de192e075da82da28 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 17:49:32 +0000
Subject: [PATCH 236/249] Reset queued command when changing CTRL state.
---
src/toolbar_gui.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp
index 7ef8511..f38cffe 100644
--- a/src/toolbar_gui.cpp
+++ b/src/toolbar_gui.cpp
@@ -2261,6 +2261,7 @@ struct TabletToolbar : Window {
this->ToggleWidgetLoweredState(WID_TT_CTRL);
HandleCtrlChanged();
this->SetWidgetDirty(WID_TT_CTRL);
+ EraseQueuedTouchCommand();
break;
case WID_TT_MOVE:
_move_pressed = !_move_pressed;
--
1.8.1.2

View File

@@ -1,82 +0,0 @@
From 6e8c23fd95493265aa393bb9e4fd7ddb5078ac9f Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 18:10:26 +0000
Subject: [PATCH 237/249] Erase queued command also when depot
direction/airport type/station type changes.
---
src/airport_gui.cpp | 2 ++
src/dock_gui.cpp | 1 +
src/rail_gui.cpp | 3 +++
src/road_gui.cpp | 2 ++
4 files changed, 8 insertions(+)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index c927ef4..fa9d1b7 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -423,6 +423,8 @@ public:
void UpdateSelectSize()
{
+ EraseQueuedTouchCommand();
+
if (_selected_airport_index == -1) {
SetTileSelectSize(1, 1);
this->DisableWidget(WID_AP_LAYOUT_DECREASE);
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 934ff9e..701a597 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -474,6 +474,7 @@ public:
_settings_client.gui.station_show_coverage = (widget != BDSW_LT_OFF);
this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
+ EraseQueuedTouchCommand();
this->SetDirty();
break;
}
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index ce9d105..a0fa459 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -1365,6 +1365,8 @@ public:
break;
}
}
+
+ EraseQueuedTouchCommand();
}
virtual void OnTick()
@@ -1723,6 +1725,7 @@ struct BuildRailDepotWindow : public PickerWindowBase {
_build_depot_direction = (DiagDirection)(widget - WID_BRAD_DEPOT_NE);
this->LowerWidget(_build_depot_direction + WID_BRAD_DEPOT_NE);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
+ EraseQueuedTouchCommand();
this->SetDirty();
break;
}
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index 1b7ea07..455eef1 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -894,6 +894,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase {
_road_depot_orientation = (DiagDirection)(widget - WID_BROD_DEPOT_NE);
this->LowerWidget(_road_depot_orientation + WID_BROD_DEPOT_NE);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
+ EraseQueuedTouchCommand();
this->SetDirty();
break;
@@ -1040,6 +1041,7 @@ struct BuildRoadStationWindow : public PickerWindowBase {
_settings_client.gui.station_show_coverage = (widget != WID_BROS_LT_OFF);
this->LowerWidget(_settings_client.gui.station_show_coverage + WID_BROS_LT_OFF);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
+ EraseQueuedTouchCommand();
this->SetDirty();
break;
--
1.8.1.2

View File

@@ -1,90 +0,0 @@
From 7e4ef45b2c7703047ac2ba97ff5fc93cdc38fed5 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Mon, 14 Oct 2013 19:24:30 +0000
Subject: [PATCH 238/249] Erase queued commands when another command is about
to be queued.
---
src/airport_gui.cpp | 1 +
src/dock_gui.cpp | 1 +
src/rail_gui.cpp | 1 +
src/road_gui.cpp | 1 +
src/terraform_gui.cpp | 1 +
src/tree_gui.cpp | 1 +
6 files changed, 6 insertions(+)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index fa9d1b7..4f1335b 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -103,6 +103,7 @@ struct BuildAirToolbarWindow : Window {
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
switch (this->last_user_action) {
case WID_AT_AIRPORT: {
VpStartPlaceSizing(tile, VPM_SINGLE_TILE, DDSP_BUILD_STATION);
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 701a597..2962a09 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -168,6 +168,7 @@ struct BuildDocksToolbarWindow : Window {
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
switch (this->last_clicked_widget) {
case WID_DT_CANAL: // Build canal button
VpStartPlaceSizing(tile, (_game_mode == GM_EDITOR) ? VPM_X_AND_Y : VPM_X_OR_Y, DDSP_CREATE_WATER);
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index a0fa459..4e6a5d4 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -583,6 +583,7 @@ struct BuildRailToolbarWindow : Window {
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
switch (this->last_user_action) {
case WID_RAT_BUILD_NS:
VpStartPlaceSizing(tile, VPM_FIX_VERTICAL | VPM_RAILDIRS, DDSP_PLACE_RAIL);
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index 455eef1..1dc2eb7 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -467,6 +467,7 @@ struct BuildRoadToolbarWindow : Window {
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
_remove_button_clicked = this->IsWidgetLowered(WID_ROT_REMOVE);
_one_way_button_clicked = this->IsWidgetLowered(WID_ROT_ONE_WAY);
switch (this->last_started_action) {
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index c6b3dff..f8d7e0b 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -653,6 +653,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
switch (this->last_user_action) {
case WID_ETT_DEMOLISH: // Demolish aka dynamite button
PlaceProc_DemolishArea(tile);
diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp
index eac8584..f57d67a 100644
--- a/src/tree_gui.cpp
+++ b/src/tree_gui.cpp
@@ -144,6 +144,7 @@ public:
virtual void OnPlaceObject(Point pt, TileIndex tile)
{
+ EraseQueuedTouchCommand();
VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_PLANT_TREES);
}
--
1.8.1.2

View File

@@ -1,81 +0,0 @@
From 5f5f740ab93005b641e6062a9c255117e363c17b Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 19 Oct 2013 11:40:00 +0000
Subject: [PATCH 239/249] Align construction windows with main toolbar.
---
src/dock_gui.cpp | 2 +-
src/industry_gui.cpp | 2 +-
src/road_gui.cpp | 2 +-
src/terraform_gui.cpp | 2 +-
src/town_gui.cpp | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 2962a09..3ffded2 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -402,7 +402,7 @@ static const NWidgetPart _nested_build_docks_scen_toolbar_widgets[] = {
/** Window definition for the build docks in scenario editor window. */
static WindowDesc _build_docks_scen_toolbar_desc(
- WDP_AUTO, "toolbar_water_scen", 0, 0,
+ WDP_ALIGN_TOOLBAR, "toolbar_water_scen", 0, 0,
WC_SCEN_BUILD_TOOLBAR, WC_NONE,
WDF_CONSTRUCTION,
_nested_build_docks_scen_toolbar_widgets, lengthof(_nested_build_docks_scen_toolbar_widgets)
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 3ddb3c5..b886119 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -191,7 +191,7 @@ static const NWidgetPart _nested_build_industry_widgets[] = {
/** Window definition of the dynamic place industries gui */
static WindowDesc _build_industry_desc(
- WDP_AUTO, "build_industry", 170, 212,
+ WDP_ALIGN_TOOLBAR, "build_industry", 170, 212,
WC_BUILD_INDUSTRY, WC_NONE,
WDF_CONSTRUCTION,
_nested_build_industry_widgets, lengthof(_nested_build_industry_widgets)
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index 1dc2eb7..353f76b 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -833,7 +833,7 @@ static const NWidgetPart _nested_build_road_scen_widgets[] = {
};
static WindowDesc _build_road_scen_desc(
- WDP_AUTO, "toolbar_road_scen", 0, 0,
+ WDP_ALIGN_TOOLBAR, "toolbar_road_scen", 0, 0,
WC_SCEN_BUILD_TOOLBAR, WC_NONE,
WDF_CONSTRUCTION,
_nested_build_road_scen_widgets, lengthof(_nested_build_road_scen_widgets),
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index f8d7e0b..8cfee69 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -746,7 +746,7 @@ static Hotkey terraform_editor_hotkeys[] = {
HotkeyList ScenarioEditorLandscapeGenerationWindow::hotkeys("terraform_editor", terraform_editor_hotkeys, TerraformToolbarEditorGlobalHotkeys);
static WindowDesc _scen_edit_land_gen_desc(
- WDP_AUTO, "toolbar_landscape_scen", 0, 0,
+ WDP_ALIGN_TOOLBAR, "toolbar_landscape_scen", 0, 0,
WC_SCEN_LAND_GEN, WC_NONE,
WDF_CONSTRUCTION,
_nested_scen_edit_land_gen_widgets, lengthof(_nested_scen_edit_land_gen_widgets),
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index d1f9847..ad51d39 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -1212,7 +1212,7 @@ public:
};
static WindowDesc _found_town_desc(
- WDP_AUTO, "build_town", 160, 162,
+ WDP_ALIGN_TOOLBAR, "build_town", 160, 162,
WC_FOUND_TOWN, WC_NONE,
WDF_CONSTRUCTION,
_nested_found_town_widgets, lengthof(_nested_found_town_widgets)
--
1.8.1.2

View File

@@ -1,32 +0,0 @@
From af53477a11a5960aa352e7ac394eb19bb418d8c9 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 19 Oct 2013 11:47:55 +0000
Subject: [PATCH 240/249] When in touchscreen modes, windows aligned with main
toolbar are aligned to the left/right edge of the screen.
---
src/window.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/window.cpp b/src/window.cpp
index b783125..6d9c087 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1657,7 +1657,13 @@ Point GetToolbarAlignedWindowPosition(int window_width)
{
const Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0);
assert(w != NULL);
- Point pt = { _current_text_dir == TD_RTL ? w->left : (w->left + w->width) - window_width, w->top + w->height };
+ Point pt;
+ pt.y = w->top + w->height;
+ if (_settings_client.gui.touchscreen_mode != TSC_NONE) {
+ pt.x = _current_text_dir == TD_RTL ? 0 : (_screen.width - window_width);
+ } else {
+ pt.x = _current_text_dir == TD_RTL ? w->left : (w->left + w->width) - window_width;
+ }
return pt;
}
--
1.8.1.2

View File

@@ -1,59 +0,0 @@
From 33d0fb1efffe097449201b5adc001706ffd565e9 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 19 Oct 2013 13:35:17 +0000
Subject: [PATCH 241/249] Add a function for deleting windows linked to main
toolbar.
---
src/window.cpp | 22 ++++++++++++++++++++++
src/window_func.h | 1 +
2 files changed, 23 insertions(+)
diff --git a/src/window.cpp b/src/window.cpp
index 6d9c087..795c82e 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -3346,6 +3346,28 @@ restart_search:
FOR_ALL_WINDOWS_FROM_BACK(w) w->SetDirty();
}
+/**
+ * Delete all windows that are linked to the main toolbar.
+ * Once done with that, refresh other windows too.
+ */
+void DeleteToolbarLinkedWindows()
+{
+ Window *w;
+
+restart_search:
+ /* When we find the window to delete, we need to restart the search
+ * as deleting this window could cascade in deleting (many) others
+ * anywhere in the z-array */
+ FOR_ALL_WINDOWS_FROM_BACK(w) {
+ if (w->window_desc->default_pos == WDP_ALIGN_TOOLBAR) {
+ delete w;
+ goto restart_search;
+ }
+ }
+
+ FOR_ALL_WINDOWS_FROM_BACK(w) w->SetDirty();
+}
+
/** Delete all always on-top windows to get an empty screen */
void HideVitalWindows()
{
diff --git a/src/window_func.h b/src/window_func.h
index a0fff7c..335ab9e 100644
--- a/src/window_func.h
+++ b/src/window_func.h
@@ -42,6 +42,7 @@ void InvalidateWindowClassesData(WindowClass cls, int data = 0, bool gui_scope =
void DeleteNonVitalWindows();
void DeleteAllNonVitalWindows();
void DeleteConstructionWindows();
+void DeleteToolbarLinkedWindows();
void HideVitalWindows();
void ShowVitalWindows();
--
1.8.1.2

View File

@@ -1,130 +0,0 @@
From 3d4a72d84722bdd5235d5318158e0555ce58b2f2 Mon Sep 17 00:00:00 2001
From: Juanjo <juanjo.ng.83@gmail.com>
Date: Sat, 19 Oct 2013 19:23:15 +0000
Subject: [PATCH 242/249] Before opening linked to main toolbar windows, delete
linked windows.
---
src/airport_gui.cpp | 2 +-
src/dock_gui.cpp | 3 ++-
src/industry_gui.cpp | 2 +-
src/rail_gui.cpp | 2 +-
src/road_gui.cpp | 3 ++-
src/terraform_gui.cpp | 2 ++
src/town_gui.cpp | 1 +
7 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp
index 4f1335b..09f4a95 100644
--- a/src/airport_gui.cpp
+++ b/src/airport_gui.cpp
@@ -203,7 +203,7 @@ Window *ShowBuildAirToolbar()
{
if (!Company::IsValidID(_local_company)) return NULL;
- DeleteWindowByClass(WC_BUILD_TOOLBAR);
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<BuildAirToolbarWindow>(&_air_toolbar_desc, TRANSPORT_AIR);
}
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 3ffded2..499861f 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -376,7 +376,7 @@ Window *ShowBuildDocksToolbar()
{
if (!Company::IsValidID(_local_company)) return NULL;
- DeleteWindowByClass(WC_BUILD_TOOLBAR);
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
}
@@ -415,6 +415,7 @@ static WindowDesc _build_docks_scen_toolbar_desc(
*/
Window *ShowBuildDocksScenToolbar()
{
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_scen_toolbar_desc, TRANSPORT_WATER);
}
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index b886119..1253f71 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -647,7 +647,7 @@ public:
void ShowBuildIndustryWindow()
{
if (_game_mode != GM_EDITOR && !Company::IsValidID(_local_company)) return;
- if (BringWindowToFrontById(WC_BUILD_INDUSTRY, 0)) return;
+ DeleteToolbarLinkedWindows();
new BuildIndustryWindow();
}
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 4e6a5d4..2cb9a54 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -882,7 +882,7 @@ Window *ShowBuildRailToolbar(RailType railtype)
if (!Company::IsValidID(_local_company)) return NULL;
if (!ValParamRailtype(railtype)) return NULL;
- DeleteWindowByClass(WC_BUILD_TOOLBAR);
+ DeleteToolbarLinkedWindows();
_cur_railtype = railtype;
_remove_button_clicked = false;
return new BuildRailToolbarWindow(&_build_rail_desc, railtype);
diff --git a/src/road_gui.cpp b/src/road_gui.cpp
index 353f76b..63c4e85 100644
--- a/src/road_gui.cpp
+++ b/src/road_gui.cpp
@@ -801,7 +801,7 @@ Window *ShowBuildRoadToolbar(RoadType roadtype)
if (!Company::IsValidID(_local_company)) return NULL;
_cur_roadtype = roadtype;
- DeleteWindowByClass(WC_BUILD_TOOLBAR);
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<BuildRoadToolbarWindow>(roadtype == ROADTYPE_ROAD ? &_build_road_desc : &_build_tramway_desc, TRANSPORT_ROAD);
}
@@ -846,6 +846,7 @@ static WindowDesc _build_road_scen_desc(
*/
Window *ShowBuildRoadScenToolbar()
{
+ DeleteToolbarLinkedWindows();
_cur_roadtype = ROADTYPE_ROAD;
return AllocateWindowDescFront<BuildRoadToolbarWindow>(&_build_road_scen_desc, TRANSPORT_ROAD);
}
diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp
index 8cfee69..2fb78ce 100644
--- a/src/terraform_gui.cpp
+++ b/src/terraform_gui.cpp
@@ -370,6 +370,7 @@ Window *ShowTerraformToolbar(Window *link)
if (!Company::IsValidID(_local_company)) return NULL;
if (link == NULL) {
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<TerraformToolbarWindow>(&_terraform_desc, 0);
}
@@ -759,5 +760,6 @@ static WindowDesc _scen_edit_land_gen_desc(
*/
Window *ShowEditorTerraformToolbar()
{
+ DeleteToolbarLinkedWindows();
return AllocateWindowDescFront<ScenarioEditorLandscapeGenerationWindow>(&_scen_edit_land_gen_desc, 0);
}
diff --git a/src/town_gui.cpp b/src/town_gui.cpp
index ad51d39..10967d3 100644
--- a/src/town_gui.cpp
+++ b/src/town_gui.cpp
@@ -1221,5 +1221,6 @@ static WindowDesc _found_town_desc(
void ShowFoundTownWindow()
{
if (_game_mode != GM_EDITOR && !Company::IsValidID(_local_company)) return;
+ DeleteToolbarLinkedWindows();
AllocateWindowDescFront<FoundTownWindow>(&_found_town_desc, 0);
}
--
1.8.1.2

View File

@@ -18,7 +18,7 @@ AppVersionName="1.4.0.27"
# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir -
# these files are put inside .apk package by build system
# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS
AppDataDownloadUrl="!!Data files - 20 Mb|http://sourceforge.net/projects/libsdl-android/files/OpenTTD/openttd-1.4.0-beta5.zip/download^!MIDI music support (18 Mb)|timidity.zip|http://sourceforge.net/projects/libsdl-android/files/timidity.zip^!!Config file|:.openttd/openttd.cfg:openttd-1.4.0.27.cfg^!!Internationalization files|http://sourceforge.net/projects/libsdl-android/files/icudt52l.zip/download"
AppDataDownloadUrl="!!Data files - 20 Mb|http://sourceforge.net/projects/libsdl-android/files/OpenTTD/openttd-data-1.4.0-beta5.zip/download^!MIDI music support (18 Mb)|timidity.zip|http://sourceforge.net/projects/libsdl-android/files/timidity.zip^!!Config file|:.openttd/openttd.cfg:openttd-1.4.0.27.cfg^!!Internationalization files|http://sourceforge.net/projects/libsdl-android/files/icudt52l.zip/download"
# Reset SDL config when updating application to the new version (y) / (n)
ResetSdlConfigForThisVersion=y

View File

@@ -1,10 +1,9 @@
[misc]
resolution = 854,480
small_font =
medium_font =
large_font =
mono_font =
small_font = fonts/Roboto-Bold.ttf
medium_font = fonts/Roboto-Bold.ttf
large_font = fonts/DroidSerif-Bold.ttf
mono_font = fonts/DroidSansMono.ttf
small_size = 10
medium_size = 12
large_size = 16
@@ -13,13 +12,9 @@ small_aa = true
medium_aa = true
large_aa = true
mono_aa = true
last_newgrf_count = 1
language = english.lng
[newgrf]
opengfx+biggui.grf =
min_button_size = 30
min_step_size = 30
[gui]
left_mouse_btn_scrolling = true
osk_activation = double

View File

@@ -1,13 +0,0 @@
#!/bin/sh
rm cargodist-patches.log
PATCHES="*.patch"
if [ -n "$1" ]; then PATCHES="`echo $PATCHES | xargs -n1 echo | sort -r -t' '`" ; fi
for f in $PATCHES; do
[ $f = openttd-trunk-android.patch ] && continue
echo $f | tee -a cargodist-patches.log
patch -p1 -d openttd-*-armeabi-v7a $1 < $f 2>&1 | tee -a cargodist-patches.log
grep FAILED cargodist-patches.log && exit 1
done

View File

@@ -1,397 +0,0 @@
--- findversion.sh 2014-02-25 11:17:27.000000000 +0200
+++ findversion.sh 2014-03-13 22:51:42.431059430 +0200
@@ -134,6 +134,7 @@
REV_NR=""
fi
+MODIFIED="0" # This prevents Andorid build from connecting to a public servers
if [ "$MODIFIED" -eq "2" ]; then
REV="${REV}M"
fi
--- src/debug.cpp 2014-02-25 11:17:24.000000000 +0200
+++ src/debug.cpp 2014-03-13 22:51:41.679014683 +0200
@@ -16,6 +16,9 @@
#include "string_func.h"
#include "fileio_func.h"
#include "settings_type.h"
+#ifdef __ANDROID__
+#include <android/log.h>
+#endif
#include <time.h>
@@ -107,6 +110,9 @@
*/
static void debug_print(const char *dbg, const char *buf)
{
+#ifdef __ANDROID__
+ __android_log_print(ANDROID_LOG_INFO, "OpenTTD", "[%s] %s", dbg, buf);
+#endif
#if defined(ENABLE_NETWORK)
if (_debug_socket != INVALID_SOCKET) {
char buf2[1024 + 32];
--- src/fontdetection.cpp 2014-02-25 11:17:24.000000000 +0200
+++ src/fontdetection.cpp 2014-03-14 15:18:47.947366408 +0200
@@ -639,6 +639,7 @@
if (fs != NULL) {
int best_weight = -1;
const char *best_font = NULL;
+ int best_missing_glypths = 65536;
for (int i = 0; i < fs->nfont; i++) {
FcPattern *font = fs->fonts[i];
@@ -664,12 +665,13 @@
callback->SetFontNames(settings, (const char*)file);
- bool missing = callback->FindMissingGlyphs(NULL);
- DEBUG(freetype, 1, "Font \"%s\" misses%s glyphs", file, missing ? "" : " no");
+ int missing = callback->FindMissingGlyphs(NULL);
+ DEBUG(freetype, 1, "Font \"%s\" misses %d glyphs for lang %s", file, missing, lang);
- if (!missing) {
+ if (missing < best_missing_glypths) {
best_weight = value;
best_font = (const char *)file;
+ best_missing_glypths = missing;
}
}
@@ -677,6 +679,7 @@
ret = true;
callback->SetFontNames(settings, best_font);
InitFreeType(callback->Monospace());
+ DEBUG(freetype, 1, "Selected font %s for lang %s", best_font, lang);
}
/* Clean up the list of filenames. */
--- src/music/libtimidity.cpp 2014-02-25 11:17:00.000000000 +0200
+++ src/music/libtimidity.cpp 2014-03-13 22:51:41.711016587 +0200
@@ -13,6 +13,7 @@
#include "../openttd.h"
#include "../sound_type.h"
#include "../debug.h"
+#include "../core/math_func.hpp"
#include "libtimidity.h"
#include <fcntl.h>
#include <sys/types.h>
@@ -22,6 +23,7 @@
#include <sys/stat.h>
#include <errno.h>
#include <timidity.h>
+#include <SDL.h>
#if defined(PSP)
#include <pspaudiolib.h>
#endif /* PSP */
@@ -51,6 +53,24 @@
}
}
#endif /* PSP */
+#ifdef __ANDROID__
+/* Android does not have Midi chip, we have to route the libtimidity output through SDL audio output */
+void Android_MidiMixMusic(Sint16 *stream, int len)
+{
+ if (_midi.status == MIDI_PLAYING) {
+ Sint16 buf[16384];
+ while( len > 0 )
+ {
+ int minlen = min(sizeof(buf), len);
+ mid_song_read_wave(_midi.song, stream, min(sizeof(buf), len*2));
+ for( Uint16 i = 0; i < minlen; i++ )
+ stream[i] += buf[i];
+ stream += minlen;
+ len -= minlen;
+ }
+ }
+}
+#endif /* __ANDROID__ */
/** Factory for the libtimidity driver. */
static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity;
--- src/network/core/os_abstraction.h 2014-02-25 11:17:18.000000000 +0200
+++ src/network/core/os_abstraction.h 2014-03-13 22:51:42.427059192 +0200
@@ -161,7 +161,7 @@
# include <net/if.h>
/* According to glibc/NEWS, <ifaddrs.h> appeared in glibc-2.3. */
# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \
- && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
+ && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) && !defined(__ANDROID__)
/* If for any reason ifaddrs.h does not exist on your system, comment out
* the following two lines and an alternative way will be used to fetch
* the list of IPs from the system. */
--- src/os/unix/crashlog_unix.cpp 2014-02-25 11:17:03.000000000 +0200
+++ src/os/unix/crashlog_unix.cpp 2014-03-13 22:51:42.427059192 +0200
@@ -141,7 +141,11 @@
};
/** The signals we want our crash handler to handle. */
+#ifdef __ANDROID__
+static const int _signals_to_handle[] = { }; // Default Android signal handler will give us stack trace
+#else
static const int _signals_to_handle[] = { SIGSEGV, SIGABRT, SIGFPE, SIGBUS, SIGILL };
+#endif
/**
* Entry point for the crash handler.
--- src/os/unix/unix.cpp 2014-02-25 11:17:03.000000000 +0200
+++ src/os/unix/unix.cpp 2014-03-13 22:51:42.427059192 +0200
@@ -25,7 +25,7 @@
#ifdef __APPLE__
#include <sys/mount.h>
-#elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)
+#elif ((defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)) && !defined(__ANDROID__)
#define HAS_STATVFS
#endif
@@ -254,6 +254,11 @@
void cocoaReleaseAutoreleasePool();
#endif
+#ifdef __ANDROID__
+#define main SDL_main
+extern "C" int CDECL main(int, char *[]);
+#endif
+
int CDECL main(int argc, char *argv[])
{
int ret;
--- src/osk_gui.cpp 2014-02-25 11:17:24.000000000 +0200
+++ src/osk_gui.cpp 2014-03-13 22:51:42.431059430 +0200
@@ -22,6 +22,9 @@
#include "table/sprites.h"
#include "table/strings.h"
+#ifdef __ANDROID__
+#include <SDL_screenkeyboard.h>
+#endif
char _keyboard_opt[2][OSK_KEYBOARD_ENTRIES * 4 + 1];
static WChar _keyboard[2][OSK_KEYBOARD_ENTRIES];
@@ -413,6 +416,16 @@
GetKeyboardLayout();
new OskWindow(&_osk_desc, parent, button);
+#ifdef __ANDROID__
+ char text[256];
+ SDL_ANDROID_GetScreenKeyboardTextInput(text, sizeof(text) - 1); /* Invoke Android built-in screen keyboard */
+ OskWindow *osk = dynamic_cast<OskWindow *>(FindWindowById(WC_OSK, 0));
+ osk->qs->text.Assign(text);
+ free(osk->orig_str_buf);
+ osk->orig_str_buf = strdup(osk->qs->text.buf);
+
+ osk->SetDirty();
+#endif
}
/**
--- src/script/api/script_date.cpp 2014-02-25 11:17:12.000000000 +0200
+++ src/script/api/script_date.cpp 2014-03-13 22:51:42.431059430 +0200
@@ -9,8 +9,8 @@
/** @file script_date.cpp Implementation of ScriptDate. */
+#include "../../stdafx.h" /* Have to be included before time.h, if we want UINT32_MAX macro defined on Android */
#include <time.h>
-#include "../../stdafx.h"
#include "script_date.hpp"
#include "../../date_func.h"
--- src/settings_gui.cpp 2014-02-25 11:17:23.000000000 +0200
+++ src/settings_gui.cpp 2014-03-13 23:01:22.521550369 +0200
@@ -323,17 +323,17 @@
switch (widget) {
case WID_GO_BASE_GRF_DESCRIPTION:
SetDParamStr(0, BaseGraphics::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode()));
- DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
+ DrawString(r.left, r.right, r.top, STR_BLACK_RAW_STRING);
break;
case WID_GO_BASE_SFX_DESCRIPTION:
SetDParamStr(0, BaseSounds::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode()));
- DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
+ DrawString(r.left, r.right, r.top, STR_BLACK_RAW_STRING);
break;
case WID_GO_BASE_MUSIC_DESCRIPTION:
SetDParamStr(0, BaseMusic::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode()));
- DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
+ DrawString(r.left, r.right, r.top, STR_BLACK_RAW_STRING);
break;
}
}
@@ -344,7 +344,7 @@
case WID_GO_BASE_GRF_DESCRIPTION:
/* Find the biggest description for the default size. */
for (int i = 0; i < BaseGraphics::GetNumSets(); i++) {
- SetDParamStr(0, BaseGraphics::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
+ SetDParamStr(0, "123");
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
}
break;
@@ -363,7 +363,7 @@
case WID_GO_BASE_SFX_DESCRIPTION:
/* Find the biggest description for the default size. */
for (int i = 0; i < BaseSounds::GetNumSets(); i++) {
- SetDParamStr(0, BaseSounds::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
+ SetDParamStr(0, "123");
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
}
break;
@@ -371,7 +371,7 @@
case WID_GO_BASE_MUSIC_DESCRIPTION:
/* Find the biggest description for the default size. */
for (int i = 0; i < BaseMusic::GetNumSets(); i++) {
- SetDParamStr(0, BaseMusic::GetSet(i)->GetDescription(GetCurrentLanguageIsoCode()));
+ SetDParamStr(0, "123");
size->height = max(size->height, (uint)GetStringHeight(STR_BLACK_RAW_STRING, size->width));
}
break;
--- src/sound/sdl_s.cpp 2014-02-25 11:16:59.000000000 +0200
+++ src/sound/sdl_s.cpp 2014-03-13 22:51:42.431059430 +0200
@@ -21,6 +21,10 @@
/** Factory for the SDL sound driver. */
static FSoundDriver_SDL iFSoundDriver_SDL;
+#ifdef __ANDROID__
+extern void Android_MidiMixMusic(Sint16 *stream, int len);
+#endif
+
/**
* Callback that fills the sound buffer.
* @param userdata Ignored.
@@ -30,6 +34,9 @@
static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len)
{
MxMixSamples(stream, len / 4);
+#if defined(__ANDROID__) && defined(LIBTIMIDITY)
+ Android_MidiMixMusic((Sint16 *)stream, len / 2);
+#endif
}
const char *SoundDriver_SDL::Start(const char * const *parm)
--- src/strings.cpp 2014-02-25 11:17:24.000000000 +0200
+++ src/strings.cpp 2014-03-13 23:44:07.197919943 +0200
@@ -2005,7 +2005,7 @@
* @return If glyphs are missing, return \c true, else return \c false.
* @post If \c true is returned and str is not NULL, *str points to a string that is found to contain at least one missing glyph.
*/
-bool MissingGlyphSearcher::FindMissingGlyphs(const char **str)
+int MissingGlyphSearcher::FindMissingGlyphs(const char **str)
{
InitFreeType(this->Monospace());
const Sprite *question_mark[FS_END];
@@ -2015,6 +2015,7 @@
}
this->Reset();
+ int missing = 0;
for (const char *text = this->NextString(); text != NULL; text = this->NextString()) {
FontSize size = this->DefaultSize();
if (str != NULL) *str = text;
@@ -2025,11 +2026,11 @@
size = FS_LARGE;
} else if (!IsInsideMM(c, SCC_SPRITE_START, SCC_SPRITE_END) && IsPrintable(c) && !IsTextDirectionChar(c) && c != '?' && GetGlyph(size, c) == question_mark[size]) {
/* The character is printable, but not in the normal font. This is the case we were testing for. */
- return true;
+ missing++;
}
}
}
- return false;
+ return missing;
}
/** Helper for searching through the language pack. */
--- src/strings_func.h 2014-02-25 11:17:24.000000000 +0200
+++ src/strings_func.h 2014-03-13 23:44:13.558298069 +0200
@@ -235,7 +235,7 @@
*/
virtual void SetFontNames(struct FreeTypeSettings *settings, const char *font_name) = 0;
- bool FindMissingGlyphs(const char **str);
+ int FindMissingGlyphs(const char **str);
};
void CheckForMissingGlyphs(bool base_font = true, MissingGlyphSearcher *search = NULL);
--- src/video/sdl_v.cpp 2014-02-25 11:16:44.000000000 +0200
+++ src/video/sdl_v.cpp 2014-03-13 22:51:42.431059430 +0200
@@ -25,6 +25,9 @@
#include "../fileio_func.h"
#include "sdl_v.h"
#include <SDL.h>
+#ifdef __ANDROID__
+#include <SDL_screenkeyboard.h>
+#endif
static FVideoDriver_SDL iFVideoDriver_SDL;
@@ -349,6 +352,15 @@
* surface, for example). */
_requested_hwpalette = want_hwpalette;
+#ifdef __ANDROID__
+ SDL_Rect r;
+ r.h = SDL_ListModes(NULL, 0)[0]->h / 10;
+ r.w = r.h;
+ r.x = SDL_ListModes(NULL, 0)[0]->w - r.w;
+ r.y = SDL_ListModes(NULL, 0)[0]->h - r.h;
+ SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &r);
+#endif
+
/* DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK */
newscreen = SDL_CALL SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | (want_hwpalette ? SDL_HWPALETTE : 0) | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
if (newscreen == NULL) {
@@ -521,6 +533,8 @@
if (sym->scancode == 49) key = WKC_BACKSPACE;
#elif defined(__sgi__)
if (sym->scancode == 22) key = WKC_BACKQUOTE;
+#elif defined(__ANDROID__)
+ if (sym->scancode == SDLK_BACKQUOTE) key = WKC_BACKQUOTE;
#else
if (sym->scancode == 49) key = WKC_BACKQUOTE;
#endif
@@ -597,7 +611,7 @@
}
HandleMouseEvents();
break;
-
+#ifndef __ANDROID__
case SDL_ACTIVEEVENT:
if (!(ev.active.state & SDL_APPMOUSEFOCUS)) break;
@@ -608,7 +622,7 @@
_cursor.in_window = false;
}
break;
-
+#endif /* not __ANDROID__ */
case SDL_QUIT:
HandleExitGameRequest();
break;
@@ -623,13 +637,14 @@
HandleKeypress(keycode, character);
}
break;
-
+#ifndef __ANDROID__
case SDL_VIDEORESIZE: {
int w = max(ev.resize.w, 64);
int h = max(ev.resize.h, 64);
CreateMainSurface(w, h);
break;
}
+#endif /* not __ANDROID__ */
case SDL_VIDEOEXPOSE: {
/* Force a redraw of the entire screen. Note
* that SDL 1.2 seems to do this automatically
@@ -661,6 +676,9 @@
SetupKeyboard();
_draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL;
+#ifdef __ANDROID__
+ _draw_threaded = false;
+#endif
return NULL;
}

View File

@@ -1,2 +0,0 @@
#!/bin/sh
diff -u -r openttd-*-orig openttd-*-armeabi-v7a | filterdiff --strip=1 > openttd-trunk-android.patch