From 653a005d1996f735ba0f25e910530793cb7a6729 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 26 Jun 2013 19:35:40 +0000 Subject: [PATCH] (svn r25478) -Fix: Clip glyphs using the actual sprite dimensions instead of the text advancement. --- src/gfx.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index da8215fec5..54a8512218 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -463,7 +463,7 @@ static int DrawLayoutLine(ParagraphLayout::Line *line, int y, int left, int righ DrawPixelInfo *dpi = _cur_dpi; int dpi_left = dpi->left; - int dpi_right = dpi->left + dpi->width; + int dpi_right = dpi->left + dpi->width - 1; bool draw_shadow = fc->GetDrawGlyphShadow() && colour != TC_BLACK; @@ -478,12 +478,12 @@ static int DrawLayoutLine(ParagraphLayout::Line *line, int y, int left, int righ int top = run->getPositions()[i * 2 + 1] + y; /* Truncated away. */ - if (begin_x < min_x || end_x > max_x) continue; - - /* Not within the bounds to draw. */ - if (begin_x >= dpi_right || end_x <= dpi_left) continue; + if (truncation && (begin_x < min_x || end_x > max_x)) continue; const Sprite *sprite = fc->GetGlyph(glyph); + /* Check clipping (the "+ 1" is for the shadow). */ + if (begin_x + sprite->x_offs > dpi_right || begin_x + sprite->x_offs + sprite->width /* - 1 + 1 */ < dpi_left) continue; + if (draw_shadow && (glyph & SPRITE_GLYPH) == 0) { SetColourRemap(TC_BLACK); GfxMainBlitter(sprite, begin_x + 1, top + 1, BM_COLOUR_REMAP);