From 4987d97810a74dc1b070e44fd15a6943fb7dfaab Mon Sep 17 00:00:00 2001 From: rubidium Date: Thu, 19 Nov 2009 11:10:32 +0000 Subject: (svn r18180) -Codechange: make the news history window RTL aware --- src/news_gui.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 5e98a0f6a..d675ec40b 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -862,12 +862,14 @@ void ShowLastNewsMessage() /** * Draw an unformatted news message truncated to a maximum length. If * length exceeds maximum length it will be postfixed by '...' - * @param x,y position of the string + * @param left the left most location for the string + * @param right the right most location for the string + * @param y position of the string * @param colour the colour the string will be shown in * @param *ni NewsItem being printed * @param maxw maximum width of string in pixels */ -static void DrawNewsString(int x, int y, TextColour colour, const NewsItem *ni, uint maxw) +static void DrawNewsString(uint left, uint right, int y, TextColour colour, const NewsItem *ni) { char buffer[512], buffer2[512]; StringID str; @@ -899,7 +901,7 @@ static void DrawNewsString(int x, int y, TextColour colour, const NewsItem *ni, *dest = '\0'; /* Truncate and show string; postfixed by '...' if neccessary */ - DrawString(x, x + maxw, y, buffer2, colour); + DrawString(left, right, y, buffer2, colour); } /** Widget numbers of the message history window. */ @@ -931,7 +933,7 @@ struct MessageHistoryWindow : Window { this->line_height = FONT_HEIGHT_NORMAL + 2; resize->height = this->line_height; - SetDParam(0, ConvertYMDToDate(2024, 7, 28)); + SetDParam(0, ConvertYMDToDate(ORIGINAL_MAX_YEAR, 12, 30)); this->date_width = GetStringBoundingBox(STR_SHORT_DATE).width; size->height = 4 * resize->height + this->top_spacing + this->bottom_spacing; // At least 4 lines are visible. @@ -958,13 +960,16 @@ struct MessageHistoryWindow : Window { /* Fill the widget with news items. */ int y = r.top + this->top_spacing; - const int date_left = r.left + WD_FRAMETEXT_LEFT; // Left edge of dates - const int news_left = date_left + this->date_width + 5; // Left edge of news items + bool rtl = _dynlang.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; + uint news_left = rtl ? r.left + WD_FRAMERECT_LEFT : r.left + WD_FRAMERECT_LEFT + this->date_width + WD_FRAMERECT_RIGHT; + uint news_right = rtl ? r.right - WD_FRAMERECT_RIGHT - this->date_width - WD_FRAMERECT_RIGHT : r.right - WD_FRAMERECT_RIGHT; for (int n = this->vscroll.GetCapacity(); n > 0; n--) { SetDParam(0, ni->date); - DrawString(date_left, news_left, y, STR_SHORT_DATE); + DrawString(date_left, date_right, y, STR_SHORT_DATE); - DrawNewsString(news_left, y, TC_WHITE, ni, r.right - WD_FRAMETEXT_RIGHT - news_left); + DrawNewsString(news_left, news_right, y, TC_WHITE, ni); y += this->line_height; ni = ni->prev; -- cgit v1.2.3-70-g09d2