Changeset - r25298:c9da7a666403
[Not reviewed]
master
0 2 0
PeterN - 3 years ago 2021-04-28 21:32:43
peter1138@openttd.org
Fix: Incorrect vertical alignment of icon and text in DropDownListIconItem. (#9133)

This happens if the bounding dimensions are changed so that each item is the same size, as happens on the railtype/roadtype dropdown lists, as the vertical offset was calculated before this dimension is changed.
2 files changed with 3 insertions and 10 deletions:
0 comments (0 inline, 0 general)
src/widgets/dropdown.cpp
Show inline comments
 
@@ -72,13 +72,7 @@ StringID DropDownListCharStringItem::Str
 
DropDownListIconItem::DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked) : DropDownListParamStringItem(string, result, masked), sprite(sprite), pal(pal)
 
{
 
	this->dim = GetSpriteSize(sprite);
 
	if (this->dim.height < (uint)FONT_HEIGHT_NORMAL) {
 
		this->sprite_y = (FONT_HEIGHT_NORMAL - dim.height) / 2;
 
		this->text_y = 0;
 
	} else {
 
		this->sprite_y = 0;
 
		this->text_y = (dim.height - FONT_HEIGHT_NORMAL) / 2;
 
	}
 
	this->sprite_y = dim.height;
 
}
 

	
 
uint DropDownListIconItem::Height(uint width) const
 
@@ -94,8 +88,8 @@ uint DropDownListIconItem::Width() const
 
void DropDownListIconItem::Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const
 
{
 
	bool rtl = _current_text_dir == TD_RTL;
 
	DrawSprite(this->sprite, this->pal, rtl ? right - this->dim.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + this->sprite_y);
 
	DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : (this->dim.width + WD_FRAMERECT_LEFT)), right - WD_FRAMERECT_RIGHT - (rtl ? (this->dim.width + WD_FRAMERECT_RIGHT) : 0), top + this->text_y, this->String(), sel ? TC_WHITE : TC_BLACK);
 
	DrawSprite(this->sprite, this->pal, rtl ? right - this->dim.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, CenterBounds(top, bottom, this->sprite_y));
 
	DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : (this->dim.width + WD_FRAMERECT_LEFT)), right - WD_FRAMERECT_RIGHT - (rtl ? (this->dim.width + WD_FRAMERECT_RIGHT) : 0), CenterBounds(top, bottom, FONT_HEIGHT_NORMAL), this->String(), sel ? TC_WHITE : TC_BLACK);
 
}
 

	
 
void DropDownListIconItem::SetDimension(Dimension d)
src/widgets/dropdown_type.h
Show inline comments
 
@@ -84,7 +84,6 @@ class DropDownListIconItem : public Drop
 
	PaletteID pal;
 
	Dimension dim;
 
	uint sprite_y;
 
	uint text_y;
 
public:
 
	DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked);
 

	
0 comments (0 inline, 0 general)