Changeset - r11440:3b5200f9cbfd
[Not reviewed]
master
0 9 0
rubidium - 15 years ago 2009-03-22 09:34:06
rubidium@openttd.org
(svn r15803) -Codechange: use the new text drawing API for multicenter
-Fix (r15800): off-by-one w.r.t. offsets
9 files changed with 40 insertions and 69 deletions:
0 comments (0 inline, 0 general)
src/cheat_gui.cpp
Show inline comments
 
@@ -144,7 +144,7 @@ struct CheatWindow : Window {
 
	virtual void OnPaint()
 
	{
 
		this->DrawWidgets();
 
		DrawStringMultiCenter(200, 25, STR_CHEATS_WARNING, width - 50);
 
		DrawStringMultiLine(20, this->width - 40, 15, 45, STR_CHEATS_WARNING, SA_CENTER);
 

	
 
		for (int i = 0, x = 0, y = 45; i != lengthof(_cheats_ui); i++) {
 
			const CheatEntry *ce = &_cheats_ui[i];
src/company_gui.cpp
Show inline comments
 
@@ -1312,7 +1312,7 @@ struct CompanyWindow : Window
 

	
 
		/* "xxx (Manager)" */
 
		SetDParam(0, c->index);
 
		DrawStringMultiCenter(48, 141, STR_7037_PRESIDENT, MAX_LENGTH_PRESIDENT_NAME_PIXELS);
 
		DrawStringMultiLine(48 - MAX_LENGTH_PRESIDENT_NAME_PIXELS / 2, 48 + MAX_LENGTH_PRESIDENT_NAME_PIXELS / 2, 135, 157, STR_7037_PRESIDENT, SA_CENTER);
 

	
 
		/* "Inaugurated:" */
 
		SetDParam(0, c->inaugurated_year);
 
@@ -1489,7 +1489,7 @@ struct BuyCompanyWindow : Window {
 

	
 
		SetDParam(0, c->index);
 
		SetDParam(1, c->bankrupt_value);
 
		DrawStringMultiCenter(214, 65, STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT, 238);
 
		DrawStringMultiLine(95, 333, 26, 116, STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT, SA_CENTER);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
src/engine_gui.cpp
Show inline comments
 
@@ -80,7 +80,7 @@ struct EnginePreviewWindow : Window {
 

	
 
		EngineID engine = this->window_number;
 
		SetDParam(0, GetEngineCategoryName(engine));
 
		DrawStringMultiLine(this->widget[EPW_BACKGROUND].left + 2, this->widget[EPW_BACKGROUND].right - 2, 14, 74, STR_8101_WE_HAVE_JUST_DESIGNED_A, SA_CENTER);
 
		DrawStringMultiLine(this->widget[EPW_BACKGROUND].left + 2, this->widget[EPW_BACKGROUND].right - 2, 18, 80, STR_8101_WE_HAVE_JUST_DESIGNED_A, SA_CENTER);
 

	
 
		SetDParam(0, engine);
 
		DrawString(this->widget[EPW_BACKGROUND].left + 2, this->widget[EPW_BACKGROUND].right - 2, 80, STR_ENGINE_NAME, TC_BLACK, SA_CENTER);
 
@@ -89,7 +89,7 @@ struct EnginePreviewWindow : Window {
 

	
 
		int width = this->width;
 
		dei->engine_proc(width >> 1, 100, engine, 0);
 
		dei->info_proc(engine, this->widget[EPW_BACKGROUND].left + 26, this->widget[EPW_BACKGROUND].right - 26, 100, 160);
 
		dei->info_proc(engine, this->widget[EPW_BACKGROUND].left + 26, this->widget[EPW_BACKGROUND].right - 26, 100, 170);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
 
@@ -211,16 +211,16 @@ void DrawNewsNewVehicleAvail(Window *w, 
 
	const DrawEngineInfo *dei = &_draw_engine_list[GetEngine(engine)->type];
 

	
 
	SetDParam(0, GetEngineCategoryName(engine));
 
	DrawStringMultiLine(1, w->width - 2, 0, 40, STR_NEW_VEHICLE_NOW_AVAILABLE, SA_CENTER);
 
	DrawStringMultiLine(1, w->width - 2, 0, 56, STR_NEW_VEHICLE_NOW_AVAILABLE, SA_CENTER);
 

	
 
	GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
 

	
 
	SetDParam(0, engine);
 
	DrawStringMultiLine(1, w->width - 2, 40, 74, STR_NEW_VEHICLE_TYPE, SA_CENTER);
 
	DrawStringMultiLine(1, w->width - 2, 56, 88, STR_NEW_VEHICLE_TYPE, SA_CENTER);
 

	
 
	dei->engine_proc(w->width >> 1, 88, engine, 0);
 
	GfxFillRect(25, 56, w->width - 56, 112, PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOUR);
 
	dei->info_proc(engine, 26, w->width - 26, 100, 160);
 
	dei->info_proc(engine, 26, w->width - 26, 100, 170);
 
}
 

	
 

	
src/gfx.cpp
Show inline comments
 
@@ -637,7 +637,7 @@ int DrawStringMultiLine(int left, int ri
 
		total_height = (num + 1) * mt;
 
	}
 

	
 
	int y = (align == SA_CENTER) ? (bottom + top - num * mt) / 2 : top;
 
	int y = (align == SA_CENTER) ? (bottom + top - total_height + 1) / 2 : top;
 
	const char *src = buffer;
 

	
 
	for (;;) {
 
@@ -652,7 +652,7 @@ int DrawStringMultiLine(int left, int ri
 
				y += mt;
 
				if (--num < 0) {
 
					_cur_fontsize = FS_NORMAL;
 
					return y + mt;
 
					return y;
 
				}
 
				break;
 
			} else if (c == SCC_SETX) {
 
@@ -664,16 +664,6 @@ int DrawStringMultiLine(int left, int ri
 
	}
 
}
 

	
 
/** Draw a given string with the centre around the given (x,y) coordinates
 
 * @param x Centre the string around this pixel width
 
 * @param y Centre the string around this pixel height
 
 * @param str String to draw
 
 * @param maxw Maximum width the string can have before it is wrapped */
 
void DrawStringMultiCenter(int x, int y, StringID str, int maxw)
 
{
 
	DrawStringMultiLine(x - maxw / 2, x + maxw / 2, y - 1024, y + 1024, str, SA_CENTER);
 
}
 

	
 
/** Return the string dimension in pixels. The height and width are returned
 
 * in a single Dimension value. TINYFONT, BIGFONT modifiers are only
 
 * supported as the first character of the string. The returned dimensions
src/gfx_func.h
Show inline comments
 
@@ -108,7 +108,6 @@ Dimension GetStringBoundingBox(const cha
 
uint32 FormatStringLinebreaks(char *str, int maxw);
 
int GetStringHeight(StringID str, int maxw);
 
void LoadStringWidthTable();
 
void DrawStringMultiCenter(int x, int y, StringID str, int maxw);
 

	
 
/**
 
 * Let the dirty blocks repainting by the video driver.
src/highscore_gui.cpp
Show inline comments
 
@@ -102,11 +102,11 @@ struct EndGameWindow : EndGameHighScoreB
 
			SetDParam(0, c->index);
 
			SetDParam(1, c->index);
 
			SetDParam(2, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
 
			DrawStringMultiCenter(x + (640 / 2), y + 107, STR_021C_OF_ACHIEVES_STATUS, 640);
 
			DrawStringMultiLine(x, x + 640, y + 140, y + 206, STR_021C_OF_ACHIEVES_STATUS, SA_CENTER);
 
		} else {
 
			SetDParam(0, c->index);
 
			SetDParam(1, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
 
			DrawStringMultiCenter(x + (640 / 2), y + 157, STR_021B_ACHIEVES_STATUS, 640);
 
			DrawStringMultiLine(x, x + 640, y + 90, y + 210, STR_021B_ACHIEVES_STATUS, SA_CENTER);
 
		}
 
	}
 
};
 
@@ -144,7 +144,7 @@ struct HighScoreWindow : EndGameHighScor
 

	
 
		SetDParam(0, ORIGINAL_END_YEAR);
 
		SetDParam(1, this->window_number + STR_6801_EASY);
 
		DrawStringMultiCenter(x + (640 / 2), y + 62, !_networking ? STR_0211_TOP_COMPANIES_WHO_REACHED : STR_TOP_COMPANIES_NETWORK_GAME, 500);
 
		DrawStringMultiLine(x + 70, x + 570, y, y + 140, !_networking ? STR_0211_TOP_COMPANIES_WHO_REACHED : STR_TOP_COMPANIES_NETWORK_GAME, SA_CENTER);
 

	
 
		/* Draw Highscore peepz */
 
		for (uint8 i = 0; i < lengthof(_highscore_table[0]); i++) {
src/misc_gui.cpp
Show inline comments
 
@@ -89,11 +89,9 @@ public:
 
			y += i == 0 ? 16 : 12;
 
		}
 

	
 
		y += 6;
 

	
 
		if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) {
 
			SetDParamStr(0, this->landinfo_data[LAND_INFO_MULTICENTER_LINE]);
 
			DrawStringMultiCenter(150, y, STR_JUST_RAW_STRING, this->width - 4);
 
			DrawStringMultiLine(this->widget[LIW_BACKGROUND].left + 2, this->widget[LIW_BACKGROUND].right - 2, y, y + 22, STR_JUST_RAW_STRING, SA_CENTER);
 
		}
 
	}
 

	
 
@@ -436,7 +434,7 @@ private:
 
	StringID message_2;
 
	bool show_company_manager_face;
 

	
 
	int y[2];
 
	int y[4];
 

	
 
public:
 
	ErrmsgWindow(Point pt, int width, int height, StringID msg1, StringID msg2, const Widget *widget, bool show_company_manager_face) :
 
@@ -454,22 +452,23 @@ public:
 

	
 
		assert(msg2 != INVALID_STRING_ID);
 

	
 
		int h2 = 3 + GetStringHeight(msg2, width - 2); // msg2 is printed first
 
		int h1 = (msg1 == INVALID_STRING_ID) ? 0 : 3 + GetStringHeight(msg1, width - 2);
 
		int h2 = GetStringHeight(msg2, width - 2); // msg2 is printed first
 
		int h1 = (msg1 == INVALID_STRING_ID) ? 0 : GetStringHeight(msg1, width - 2);
 

	
 
		SwitchToNormalRefStack();
 

	
 
		int h = 15 + h1 + h2;
 
		int h = 20 + h1 + h2;
 
		height = max<int>(height, h);
 

	
 
		if (msg1 == INVALID_STRING_ID) {
 
			/* only 1 line will be printed */
 
			y[1] = (height - 15) / 2 + 15 - 5;
 
			y[2] = 14 + 1;
 
			y[3] = height - 1;
 
		} else {
 
			int over = (height - h) / 4;
 

	
 
			y[1] = 15 + h2 / 2 + 1 - 5 + over;
 
			y[0] = height - 3 - h1 / 2 - 5 - over;
 
			int over = (height - 16 - h1 - h2) / 2;
 
			y[1] = height - 1;
 
			y[0] = y[1] - h1 - over;
 
			y[2] = 14 + 1;
 
			y[3] = y[2] + h2 + over;
 
		}
 

	
 
		this->FindWindowPlacementAndResize(width, height);
 
@@ -492,8 +491,8 @@ public:
 
			DrawCompanyManagerFace(c->face, c->colour, 2, 16);
 
		}
 

	
 
		DrawStringMultiCenter(this->width - 120, y[1], this->message_2, this->width - 2);
 
		if (this->message_1 != INVALID_STRING_ID) DrawStringMultiCenter(this->width - 120, y[0], this->message_1, this->width - 2);
 
		DrawStringMultiLine(1, this->width - 1, y[2], y[3] , this->message_2, SA_CENTER);
 
		if (this->message_1 != INVALID_STRING_ID) DrawStringMultiLine(1, this->width - 1, y[0], y[1], this->message_1, SA_CENTER);
 

	
 
		/* Switch back to the normal text ref. stack for NewGRF texts */
 
		SwitchToNormalRefStack();
 
@@ -664,7 +663,7 @@ struct TooltipsWindow : public Window
 
		for (uint arg = 0; arg < this->paramcount; arg++) {
 
			SetDParam(arg, this->params[arg]);
 
		}
 
		DrawStringMultiCenter((this->width >> 1), (this->height >> 1) - 5, this->string_id, this->width - 2);
 
		DrawStringMultiLine(1, this->width - 1, 0, this->height, this->string_id, SA_CENTER);
 
	}
 

	
 
	virtual void OnMouseLoop()
 
@@ -1279,7 +1278,7 @@ struct QueryWindow : public Window {
 
		this->DrawWidgets();
 
		CopyInDParam(0, this->params, lengthof(this->params));
 

	
 
		DrawStringMultiCenter(this->width / 2, (this->height / 2) - 10, this->message, this->width - 2);
 
		DrawStringMultiLine(1, this->width - 1, 14, 62, this->message, SA_CENTER);
 
	}
 

	
 
	virtual void OnClick(Point pt, int widget)
src/network/network_content_gui.cpp
Show inline comments
 
@@ -136,7 +136,7 @@ public:
 
			SetDParamStr(0, this->name);
 
			SetDParam(1, this->downloaded_files);
 
			SetDParam(2, this->total_files);
 
			DrawStringMultiCenter(this->width / 2, 50, STR_CONTENT_DOWNLOAD_FILE, this->width);
 
			DrawStringMultiLine(this->widget[NCDSWW_BACKGROUND].left + 2, this->widget[NCDSWW_BACKGROUND].right - 2, 43, 67, STR_CONTENT_DOWNLOAD_FILE, SA_CENTER);
 
		} else {
 
			DrawString(this->widget[NCDSWW_BACKGROUND].left + 2, this->widget[NCDSWW_BACKGROUND].right - 2, 50, STR_CONTENT_DOWNLOAD_INITIALISE, TC_GREY, SA_CENTER);
 
		}
 
@@ -435,7 +435,7 @@ public:
 
		if (this->selected == NULL) return;
 

	
 
		/* And fill the rest of the details when there's information to place there */
 
		DrawStringMultiCenter((this->widget[NCLWW_DETAILS].left + this->widget[NCLWW_DETAILS].right) / 2, this->widget[NCLWW_DETAILS].top + 32, STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED + this->selected->state, this->widget[NCLWW_DETAILS].right - this->widget[NCLWW_DETAILS].left - 10);
 
		DrawStringMultiLine(this->widget[NCLWW_DETAILS].left + 5, this->widget[NCLWW_DETAILS].right - 5, this->widget[NCLWW_DETAILS].top + 25, this->widget[NCLWW_DETAILS].top + 50, STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED + this->selected->state, SA_CENTER);
 

	
 
		/* Also show the total download size, so keep some space from the bottom */
 
		const uint max_y = this->widget[NCLWW_DETAILS].bottom - 15;
src/news_gui.cpp
Show inline comments
 
@@ -53,7 +53,7 @@ static void DrawNewsBankrupcy(Window *w,
 
	GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOUR);
 

	
 
	SetDParamStr(0, cni->president_name);
 
	DrawStringMultiCenter(49, 148, STR_JUST_RAW_STRING, 94);
 
	DrawStringMultiLine(49 - MAX_LENGTH_PRESIDENT_NAME_PIXELS / 2, 49 + MAX_LENGTH_PRESIDENT_NAME_PIXELS / 2, 141, 169, STR_JUST_RAW_STRING, SA_CENTER);
 

	
 
	switch (ni->subtype) {
 
		case NS_COMPANY_TROUBLE:
 
@@ -61,11 +61,7 @@ static void DrawNewsBankrupcy(Window *w,
 

	
 
			SetDParam(0, ni->params[2]);
 

	
 
			DrawStringMultiCenter(
 
				((w->width - 101) >> 1) + 98,
 
				90,
 
				STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED,
 
				w->width - 101);
 
			DrawStringMultiLine(100, w->width - 2, 20, 169, STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED, SA_CENTER);
 
			break;
 

	
 
		case NS_COMPANY_MERGER:
 
@@ -73,32 +69,20 @@ static void DrawNewsBankrupcy(Window *w,
 
			SetDParam(0, ni->params[2]);
 
			SetDParam(1, ni->params[3]);
 
			SetDParam(2, ni->params[4]);
 
			DrawStringMultiCenter(
 
				((w->width - 101) >> 1) + 98,
 
				90,
 
				ni->params[4] == 0 ? STR_707F_HAS_BEEN_TAKEN_OVER_BY : STR_705A_HAS_BEEN_SOLD_TO_FOR,
 
				w->width - 101);
 
			DrawStringMultiLine(100, w->width - 2, 20, 169, ni->params[4] == 0 ? STR_707F_HAS_BEEN_TAKEN_OVER_BY : STR_705A_HAS_BEEN_SOLD_TO_FOR, SA_CENTER);
 
			break;
 

	
 
		case NS_COMPANY_BANKRUPT:
 
			DrawString(0, w->width, 1, STR_705C_BANKRUPT, TC_FROMSTRING, SA_CENTER);
 
			SetDParam(0, ni->params[2]);
 
			DrawStringMultiCenter(
 
				((w->width - 101) >> 1) + 98,
 
				90,
 
				STR_705D_HAS_BEEN_CLOSED_DOWN_BY,
 
				w->width - 101);
 
			DrawStringMultiLine(100, w->width - 2, 20, 169, STR_705D_HAS_BEEN_CLOSED_DOWN_BY, SA_CENTER);
 
			break;
 

	
 
		case NS_COMPANY_NEW:
 
			DrawString(0, w->width, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, TC_FROMSTRING, SA_CENTER);
 
			SetDParam(0, ni->params[2]);
 
			SetDParam(1, ni->params[3]);
 
			DrawStringMultiCenter(
 
				((w->width - 101) >> 1) + 98,
 
				90,
 
				STR_705F_STARTS_CONSTRUCTION_NEAR,
 
				w->width - 101);
 
			DrawStringMultiLine(100, w->width - 2, 20, 169, STR_705F_STARTS_CONSTRUCTION_NEAR, SA_CENTER);
 
			break;
 

	
 
		default:
 
@@ -220,8 +204,7 @@ struct NewsWindow : Window {
 

	
 
				if (!(this->ni->flags & NF_VIEWPORT)) {
 
					CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
 
					DrawStringMultiCenter(215, display_mode == NM_NORMAL ? 76 : 56,
 
						this->ni->string_id, this->width - 4);
 
					DrawStringMultiLine(2, this->width - 2, 20, this->height, this->ni->string_id, SA_CENTER);
 
				} else {
 
					/* Back up transparency options to draw news view */
 
					TransparencyOptionBits to_backup = _transparency_opt;
 
@@ -237,7 +220,7 @@ struct NewsWindow : Window {
 
					);
 

	
 
					CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
 
					DrawStringMultiCenter(this->width / 2, 20, this->ni->string_id, this->width - 4);
 
					DrawStringMultiLine(2, this->width - 2, 0, 58, this->ni->string_id, SA_CENTER);
 
				}
 
				break;
 
			}
 
@@ -246,11 +229,11 @@ struct NewsWindow : Window {
 
				this->DrawWidgets();
 
				if (!(this->ni->flags & NF_VIEWPORT)) {
 
					CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
 
					DrawStringMultiCenter(140, 38, this->ni->string_id, 276);
 
					DrawStringMultiLine(2, 278, 38, this->ni->string_id, SA_CENTER);
 
				} else {
 
					this->DrawViewport();
 
					CopyInDParam(0, this->ni->params, lengthof(this->ni->params));
 
					DrawStringMultiCenter(this->width / 2, this->height - 16, this->ni->string_id, this->width - 4);
 
					DrawStringMultiLine(2, this->width - 2, 64, this->height, this->ni->string_id, SA_CENTER);
 
				}
 
				break;
 
		}
0 comments (0 inline, 0 general)