(svn r18166) -Codechange: make the livery colour window RTL aware

This commit is contained in:
rubidium 2009-11-18 12:45:20 +00:00
parent 8e24df4d45
commit 32859c193c

View File

@ -528,8 +528,9 @@ public:
void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const
{ {
DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + this->result, left + 16, top + 7); bool rtl = _dynlang.text_dir == TD_RTL;
DrawString(left + 32, right - 2, top + max(0, 13 - FONT_HEIGHT_NORMAL), this->String(), sel ? TC_WHITE : TC_BLACK); DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + this->result, rtl ? right - 16 : left + 16, top + 7);
DrawString(rtl ? left + 2 : left + 32, rtl ? right - 32 : right - 2, top + max(0, 13 - FONT_HEIGHT_NORMAL), this->String(), sel ? TC_WHITE : TC_BLACK);
} }
}; };
@ -552,7 +553,7 @@ enum SelectCompanyLiveryWindowWidgets {
/** Company livery colour scheme window. */ /** Company livery colour scheme window. */
struct SelectCompanyLiveryWindow : public Window { struct SelectCompanyLiveryWindow : public Window {
private: private:
static const int TEXT_INDENT = 15; ///< Number of pixels to indent the text in each column in the #SCLW_WIDGET_MATRIX to make room for the (coloured) rectangles. static const uint TEXT_INDENT = 15; ///< Number of pixels to indent the text in each column in the #SCLW_WIDGET_MATRIX to make room for the (coloured) rectangles.
uint32 sel; uint32 sel;
LiveryClass livery_class; LiveryClass livery_class;
@ -661,6 +662,8 @@ public:
{ {
if (widget != SCLW_WIDGET_MATRIX) return; if (widget != SCLW_WIDGET_MATRIX) return;
bool rtl = _dynlang.text_dir == TD_RTL;
/* Horizontal coordinates of scheme name column. */ /* Horizontal coordinates of scheme name column. */
const NWidgetBase *nwi = this->GetWidget<NWidgetBase>(SCLW_WIDGET_SPACER_DROPDOWN); const NWidgetBase *nwi = this->GetWidget<NWidgetBase>(SCLW_WIDGET_SPACER_DROPDOWN);
int sch_left = nwi->pos_x; int sch_left = nwi->pos_x;
@ -674,6 +677,9 @@ public:
int sec_left = nwi->pos_x; int sec_left = nwi->pos_x;
int sec_right = sec_left + nwi->current_x - 1; int sec_right = sec_left + nwi->current_x - 1;
int text_left = (rtl ? (uint)WD_FRAMERECT_LEFT : TEXT_INDENT);
int text_right = (rtl ? TEXT_INDENT : (uint)WD_FRAMERECT_RIGHT);
int y = r.top + 3; int y = r.top + 3;
const Company *c = Company::Get((CompanyID)this->window_number); const Company *c = Company::Get((CompanyID)this->window_number);
for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) {
@ -682,18 +688,18 @@ public:
/* Optional check box + scheme name. */ /* Optional check box + scheme name. */
if (scheme != LS_DEFAULT) { if (scheme != LS_DEFAULT) {
DrawSprite(c->livery[scheme].in_use ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, sch_left + WD_FRAMERECT_LEFT, y); DrawSprite(c->livery[scheme].in_use ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, (rtl ? sch_right - TEXT_INDENT + WD_FRAMERECT_RIGHT : sch_left) + WD_FRAMERECT_LEFT, y);
} }
DrawString(sch_left + TEXT_INDENT, sch_right - WD_FRAMERECT_RIGHT, y, STR_LIVERY_DEFAULT + scheme, sel ? TC_WHITE : TC_BLACK); DrawString(sch_left + text_left, sch_right - text_right, y, STR_LIVERY_DEFAULT + scheme, sel ? TC_WHITE : TC_BLACK);
/* Text below the first dropdown. */ /* Text below the first dropdown. */
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour1), pri_left + WD_FRAMERECT_LEFT, y); DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour1), (rtl ? pri_right - TEXT_INDENT + WD_FRAMERECT_RIGHT : pri_left) + WD_FRAMERECT_LEFT, y);
DrawString(pri_left + TEXT_INDENT, pri_right - WD_FRAMERECT_RIGHT, y, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour1, sel ? TC_WHITE : TC_GOLD); DrawString(pri_left + text_left, pri_right - text_right, y, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour1, sel ? TC_WHITE : TC_GOLD);
/* Text below the second dropdown. */ /* Text below the second dropdown. */
if (sec_right > sec_left) { // Second dropdown has non-zero size. if (sec_right > sec_left) { // Second dropdown has non-zero size.
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour2), sec_left + WD_FRAMERECT_LEFT, y); DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour2), (rtl ? sec_right - TEXT_INDENT + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y);
DrawString(sec_left + TEXT_INDENT, sec_right - WD_FRAMERECT_RIGHT, y, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour2, sel ? TC_WHITE : TC_GOLD); DrawString(sec_left + text_left, sec_right - text_right, y, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour2, sel ? TC_WHITE : TC_GOLD);
} }
y += 4 + FONT_HEIGHT_NORMAL; y += 4 + FONT_HEIGHT_NORMAL;
@ -735,7 +741,8 @@ public:
break; break;
case SCLW_WIDGET_MATRIX: { case SCLW_WIDGET_MATRIX: {
LiveryScheme j = (LiveryScheme)((pt.y - this->GetWidget<NWidgetBase>(SCLW_WIDGET_MATRIX)->pos_y) / (4 + FONT_HEIGHT_NORMAL)); const NWidgetBase *wid = this->GetWidget<NWidgetBase>(SCLW_WIDGET_MATRIX);
LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / (4 + FONT_HEIGHT_NORMAL));
for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) { for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) {
if (_livery_class[scheme] != this->livery_class) j++; if (_livery_class[scheme] != this->livery_class) j++;
@ -744,7 +751,7 @@ public:
if (j >= LS_END) return; if (j >= LS_END) return;
/* If clicking on the left edge, toggle using the livery */ /* If clicking on the left edge, toggle using the livery */
if (pt.x < 10) { if (_dynlang.text_dir == TD_RTL ? pt.x - wid->pos_x > wid->current_x - TEXT_INDENT : pt.x - wid->pos_x < TEXT_INDENT) {
DoCommandP(0, j | (2 << 8), !Company::Get((CompanyID)this->window_number)->livery[j].in_use, CMD_SET_COMPANY_COLOUR); DoCommandP(0, j | (2 << 8), !Company::Get((CompanyID)this->window_number)->livery[j].in_use, CMD_SET_COMPANY_COLOUR);
} }