(svn r18170) -Codechange: make the station view RTL aware

This commit is contained in:
rubidium 2009-11-18 20:22:39 +00:00
parent db65d675eb
commit cee67acfba
1 changed files with 18 additions and 7 deletions

View File

@ -741,17 +741,19 @@ SpriteID GetCargoSprite(CargoID i)
*
* @param i type of cargo
* @param waiting number of waiting units
* @param x x on-screen coordinate where to start with drawing icons
* @param left left most coordinate to draw on
* @param right right most coordinate to draw on
* @param y y coordinate
* @param width the width of the view
*/
static void DrawCargoIcons(CargoID i, uint waiting, int x, int y, uint width)
static void DrawCargoIcons(CargoID i, uint waiting, int left, int right, int y)
{
uint num = min((waiting + 5) / 10, width / 10); // maximum is width / 10 icons so it won't overflow
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 = GetCargoSprite(i);
int x = _dynlang.text_dir == TD_RTL ? right - num * 10 : left;
do {
DrawSprite(sprite, PAL_NONE, x, y);
x += 10;
@ -778,6 +780,7 @@ typedef std::list<CargoData> CargoDataList;
struct StationViewWindow : public Window {
uint32 cargo; ///< Bitmask of cargo types to expand
uint16 cargo_rows[NUM_CARGO]; ///< Header row for each cargo type
uint expand_shrink_width; ///< The width allocated to the expand/shrink 'button'
/** Height of the #SVW_ACCEPTLIST widget for different views. */
enum AcceptListHeight {
@ -811,6 +814,7 @@ struct StationViewWindow : public Window {
case SVW_WAITING:
resize->height = FONT_HEIGHT_NORMAL;
size->height = WD_FRAMERECT_TOP + 5 * resize->height + WD_FRAMERECT_BOTTOM;
this->expand_shrink_width = max(GetStringBoundingBox("-").width, GetStringBoundingBox("+").width) + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
break;
case SVW_ACCEPTLIST:
@ -937,20 +941,27 @@ struct StationViewWindow : public Window {
y += FONT_HEIGHT_NORMAL;
}
bool rtl = _dynlang.text_dir == TD_RTL;
int text_left = rtl ? r.left + this->expand_shrink_width : r.left + WD_FRAMERECT_LEFT;
int text_right = rtl ? r.right - WD_FRAMERECT_LEFT : r.right - this->expand_shrink_width;
int shrink_left = rtl ? r.left + WD_FRAMERECT_LEFT : r.right - this->expand_shrink_width + WD_FRAMERECT_LEFT;
int shrink_right = rtl ? r.left + this->expand_shrink_width - WD_FRAMERECT_RIGHT : r.right - WD_FRAMERECT_RIGHT;
int maxrows = this->vscroll.GetCapacity();
for (CargoDataList::const_iterator it = cargolist.begin(); it != cargolist.end() && pos > -maxrows; ++it) {
if (--pos < 0) {
const CargoData *cd = &(*it);
if (cd->source == INVALID_STATION) {
/* Heading */
DrawCargoIcons(cd->cargo, cd->count, r.left + WD_FRAMERECT_LEFT, y, r.right - r.left - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT);
DrawCargoIcons(cd->cargo, cd->count, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y);
SetDParam(0, cd->cargo);
SetDParam(1, cd->count);
if (HasBit(transfers, cd->cargo)) {
/* This cargo has transfers waiting so show the expand or shrink 'button' */
const char *sym = HasBit(this->cargo, cd->cargo) ? "-" : "+";
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - 10, y, STR_STATION_VIEW_WAITING_CARGO, TC_FROMSTRING, SA_RIGHT);
DrawString(r.right - 8, r.right, y, sym, TC_YELLOW);
DrawString(text_left, text_right, y, STR_STATION_VIEW_WAITING_CARGO, TC_FROMSTRING, SA_RIGHT);
DrawString(shrink_left, shrink_right, y, sym, TC_YELLOW, SA_RIGHT);
} else {
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_VIEW_WAITING_CARGO, TC_FROMSTRING, SA_RIGHT);
}
@ -1023,7 +1034,7 @@ struct StationViewWindow : public Window {
SetDParam(0, cs->name);
SetDParam(2, ToPercent8(ge->rating));
SetDParam(1, STR_CARGO_RATING_APPALLING + (ge->rating >> 5));
DrawString(r.left + WD_FRAMERECT_LEFT + 6, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_VIEW_CARGO_RATING);
DrawString(r.left + WD_FRAMERECT_LEFT + 6, r.right - WD_FRAMERECT_RIGHT - 6, y, STR_STATION_VIEW_CARGO_RATING);
y += FONT_HEIGHT_NORMAL;
}
}