Changeset - r20523:5dafe87c5a9a
[Not reviewed]
master
0 1 0
rubidium - 11 years ago 2013-07-01 15:26:27
rubidium@openttd.org
(svn r25547) -Fix [FS#5626]: ICU returns the width of the visual run as if the trailing space was added (in case a newline was added). This caused the width to be more than the requested width, but it would still be drawn correctly
1 file changed with 5 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/gfx.cpp
Show inline comments
 
@@ -370,11 +370,12 @@ static void SetColourRemap(TextColour co
 
 *                  case a right-to-left language is chosen this is inverted so it
 
 *                  will be drawn in the right direction.
 
 * @param underline Whether to underline what has been drawn or not.
 
 * @param truncation Whether to perform string truncation or not.
 
 *
 
 * @return In case of left or center alignment the right most pixel we have drawn to.
 
 *         In case of right alignment the left most pixel we have drawn to.
 
 */
 
static int DrawLayoutLine(ParagraphLayout::Line *line, int y, int left, int right, StringAlignment align, bool underline)
 
static int DrawLayoutLine(ParagraphLayout::Line *line, int y, int left, int right, StringAlignment align, bool underline, bool truncation)
 
{
 
	if (line->countRuns() == 0) return 0;
 

	
 
@@ -399,7 +400,7 @@ static int DrawLayoutLine(ParagraphLayou
 
	int min_x = left;  // The minimum x position to draw normal glyphs on.
 
	int max_x = right; // The maximum x position to draw normal glyphs on.
 

	
 
	bool truncation = max_w < w;     // Whether we need to do truncation.
 
	truncation &= max_w < w;         // Whether we need to do truncation.
 
	int dot_width = 0;               // Cache for the width of the dot.
 
	const Sprite *dot_sprite = NULL; // Cache for the sprite of the dot.
 

	
 
@@ -526,7 +527,7 @@ int DrawString(int left, int right, int 
 
	Layouter layout(str, INT32_MAX, colour, fontsize);
 
	if (layout.Length() == 0) return 0;
 

	
 
	return DrawLayoutLine(*layout.Begin(), top, left, right, align, underline);
 
	return DrawLayoutLine(*layout.Begin(), top, left, right, align, underline, true);
 
}
 

	
 
/**
 
@@ -668,7 +669,7 @@ int DrawStringMultiLine(int left, int ri
 
			last_line = y + line_height;
 
			if (first_line > y) first_line = y;
 

	
 
			DrawLayoutLine(line, y, left, right, align, underline);
 
			DrawLayoutLine(line, y, left, right, align, underline, false);
 
		}
 
		y += line_height;
 
	}
0 comments (0 inline, 0 general)