Changeset - r13661:87a673bb6aeb
[Not reviewed]
master
0 1 0
rubidium - 15 years ago 2009-11-20 14:03:17
rubidium@openttd.org
(svn r18196) -Codechange: make the performance rating details window big font and RTL aware
1 file changed with 70 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/graph_gui.cpp
Show inline comments
 
@@ -1100,6 +1100,57 @@ struct PerformanceRatingDetailWindow : W
 
		this->timeout = DAY_TICKS * 5;
 
	}
 

	
 
	uint score_info_left;
 
	uint score_info_right;
 
	uint bar_left;
 
	uint bar_right;
 
	uint bar_width;
 
	uint bar_height;
 
	uint score_detail_left;
 
	uint score_detail_right;
 

	
 
	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *resize)
 
	{
 
		switch (widget) {
 
			case PRW_SCORE_FIRST:
 
				this->bar_height = FONT_HEIGHT_NORMAL + 4;
 
				size->height = this->bar_height + 2 * WD_MATRIX_TOP;
 

	
 
				uint score_info_width = 0;
 
				for (uint i = SCORE_BEGIN; i < SCORE_END; i++) {
 
					score_info_width = max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width);
 
				}
 
				SetDParam(0, 1000);
 
				score_info_width += GetStringBoundingBox(STR_BLACK_COMMA).width + WD_FRAMERECT_LEFT;
 

	
 
				SetDParam(0, 100);
 
				this->bar_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_PERCENT).width + 20; // Wide bars!
 

	
 
				/* At this number we are roughly at the max; it can become wider,
 
				 * but then you need at 1000 times more money. At that time you're
 
				 * not that interested anymore in the last few digits anyway. */
 
				uint max = 999999999; // nine 9s
 
				SetDParam(0, max);
 
				SetDParam(1, max);
 
				uint score_detail_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY).width;
 

	
 
				size->width = 7 + score_info_width + 5 + this->bar_width + 5 + score_detail_width + 7;
 
				uint left  = 7;
 
				uint right = size->width - 7;
 

	
 
				bool rtl = _dynlang.text_dir == TD_RTL;
 
				this->score_info_left  = rtl ? right - score_info_width : left;
 
				this->score_info_right = rtl ? right : left + score_info_width;
 

	
 
				this->score_detail_left  = rtl ? left : right - score_detail_width;
 
				this->score_detail_right = rtl ? left + score_detail_width : right;
 

	
 
				this->bar_left  = left + (rtl ? score_detail_width : score_info_width) + 5;
 
				this->bar_right = this->bar_left + this->bar_width;
 
				break;
 
		}
 
	}
 

	
 
	virtual void OnPaint()
 
	{
 
		/* Draw standard stuff */
 
@@ -1139,22 +1190,31 @@ struct PerformanceRatingDetailWindow : W
 
			needed = SCORE_MAX;
 
		}
 

	
 
		DrawString(7, 107, r.top + 6, STR_PERFORMANCE_DETAIL_VEHICLES + score_type);
 
		uint bar_top  = r.top + WD_MATRIX_TOP;
 
		uint text_top = bar_top + 2;
 

	
 
		DrawString(this->score_info_left, this->score_info_right, text_top, STR_PERFORMANCE_DETAIL_VEHICLES + score_type);
 

	
 
		/* Draw the score */
 
		SetDParam(0, score);
 
		DrawString(7, 107, r.top + 6, STR_BLACK_INT, TC_FROMSTRING, SA_RIGHT);
 
		DrawString(this->score_info_left, this->score_info_right, text_top, STR_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT);
 

	
 
		/* Calculate the %-bar */
 
		byte x = Clamp(val, 0, needed) * 50 / needed;
 
		uint x = Clamp(val, 0, needed) * this->bar_width / needed;
 
		bool rtl = _dynlang.text_dir == TD_RTL;
 
		if (rtl) {
 
			x = this->bar_right - x;
 
		} else {
 
			x = this->bar_left + x;
 
		}
 

	
 
		/* Draw the bar */
 
		if (x !=  0) GfxFillRect(112,     r.top + 4, 112 + x,  r.top + 16, colour_done);
 
		if (x != 50) GfxFillRect(112 + x, r.top + 4, 112 + 50, r.top + 16, colour_notdone);
 
		if (x != this->bar_left)  GfxFillRect(this->bar_left, bar_top, x, bar_top + this->bar_height, rtl ? colour_notdone : colour_done);
 
		if (x != this->bar_right) GfxFillRect(x, bar_top, this->bar_right, bar_top + this->bar_height, rtl ? colour_done : colour_notdone);
 

	
 
		/* Draw it */
 
		SetDParam(0, Clamp(val, 0, needed) * 100 / needed);
 
		DrawString(112, 162, r.top + 6, STR_PERFORMANCE_DETAIL_PERCENT, TC_FROMSTRING, SA_CENTER);
 
		DrawString(this->bar_left, this->bar_right, text_top, STR_PERFORMANCE_DETAIL_PERCENT, TC_FROMSTRING, SA_CENTER);
 

	
 
		/* SCORE_LOAN is inversed */
 
		if (score_type == SCORE_LOAN) val = needed - val;
 
@@ -1169,10 +1229,10 @@ struct PerformanceRatingDetailWindow : W
 
			case SCORE_MAX_INCOME:
 
			case SCORE_MONEY:
 
			case SCORE_LOAN:
 
				DrawString(167, this->width, r.top + 6, STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY);
 
				DrawString(this->score_detail_left, this->score_detail_right, text_top, STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY);
 
				break;
 
			default:
 
				DrawString(167, this->width, r.top + 6, STR_PERFORMANCE_DETAIL_AMOUNT_INT);
 
				DrawString(this->score_detail_left, this->score_detail_right, text_top, STR_PERFORMANCE_DETAIL_AMOUNT_INT);
 
		}
 
	}
 

	
 
@@ -1256,11 +1316,10 @@ static NWidgetBase *MakePerformanceDetai
 

	
 
	assert_compile(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN);
 

	
 
	NWidgetVertical *vert = new NWidgetVertical();
 
	NWidgetVertical *vert = new NWidgetVertical(NC_EQUALSIZE);
 
	for (int widnum = PRW_SCORE_FIRST; widnum <= PRW_SCORE_LAST; widnum++) {
 
		NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum);
 
		panel->SetMinimalSize(299, 20);
 
		panel->SetFill(false, false);
 
		panel->SetFill(true, true);
 
		panel->SetDataTip(0x0, performance_tips[widnum - PRW_SCORE_FIRST]);
 
		vert->Add(panel);
 
	}
0 comments (0 inline, 0 general)