From: Jens G. <fi...@us...> - 2013-03-09 22:05:09
|
gemrb: Infinity Engine emulator The branch master has been updated via 04dfb6de1bf9f63175adfaf26c4199d054634b6f (commit) Summary of changes: gemrb/core/Font.cpp | 42 +++++++++++++++++++++++++++--------------- gemrb/core/Font.h | 1 + 2 files changed, 28 insertions(+), 15 deletions(-) from a5e122249eaa033e8b0bd0eb054a13ca622e680f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=04dfb6de1bf9f63175adfaf26c4199d054634b6f commit 04dfb6de1bf9f63175adfaf26c4199d054634b6f Author: Jens Granseuer <je...@gm...> Date: Sat Mar 9 22:04:20 2013 +0100 hack around the stone fonts in bg1 having very high space characters Which throws vertical alignment off in buttons and labels when strings contain spaces. diff --git a/gemrb/core/Font.cpp b/gemrb/core/Font.cpp index 14c225f..ef16a25 100644 --- a/gemrb/core/Font.cpp +++ b/gemrb/core/Font.cpp @@ -137,17 +137,13 @@ void Font::PrintFromLine(int startrow, Region rgn, const unsigned char* string, SetupString( tmp, rgn.w, NoColor, initials, enablecap ); if (startrow) enablecap=false; - int ystep = 0; + int ystep; if (Alignment & IE_FONT_SINGLE_LINE) { - for (size_t i = 0; i < len; i++) { - int height = GetCharSprite(tmp[i])->Height; - if (ystep < height) - ystep = height; - } + ystep = CalcStringHeight(tmp, len, NoColor); + if (!ystep) ystep = maxHeight; } else { ystep = maxHeight; } - if (!ystep) ystep = maxHeight; int x = psx, y = ystep; int w = CalcStringWidth( tmp, NoColor ); if (Alignment & IE_FONT_ALIGN_CENTER) { @@ -333,18 +329,13 @@ void Font::Print(Region cliprgn, Region rgn, const unsigned char* string, } SetupString( tmp, rgn.w, NoColor, initials, capital ); - int ystep = 0; + int ystep; if (Alignment & IE_FONT_SINGLE_LINE) { - - for (size_t i = 0; i < len; i++) { - int height = GetCharSprite(tmp[i])->Height; - if (ystep < height) - ystep = height; - } + ystep = CalcStringHeight(tmp, len, NoColor); + if (!ystep) ystep = maxHeight; } else { ystep = maxHeight; } - if (!ystep) ystep = maxHeight; int x = psx, y = ystep; Video* video = core->GetVideoDriver(); @@ -491,6 +482,27 @@ int Font::CalcStringWidth(const ieWord* string, bool NoColor) const return ( int ) ret; } +int Font::CalcStringHeight(const ieWord* string, unsigned int len, bool NoColor) const +{ + int h, max = 0; + for (unsigned int i = 0; i < len; i++) { + if (( string[i] ) == '[' && !NoColor) { + i++; // cannot be ']' when it is '[' + while(i<len && (string[i]) != ']') { + i++; + } + } else { + h = GetCharSprite(string[i])->Height; + //the space check is here to hack around overly high frames + //in some bg1 fonts that throw vertical alignment off + if (h > max && string[i] != ' ') { + max = h; + } + } + } + return max; +} + void Font::SetupString(ieWord* string, unsigned int width, bool NoColor, Font *initials, bool enablecap) const { size_t len = dbStrLen(string); diff --git a/gemrb/core/Font.h b/gemrb/core/Font.h index 343acc6..82873b4 100644 --- a/gemrb/core/Font.h +++ b/gemrb/core/Font.h @@ -116,6 +116,7 @@ protected: private: int PrintInitial(int x, int y, const Region &rgn, ieWord currChar) const; int CalcStringWidth(const ieWord* string, bool NoColor = false) const; + int CalcStringHeight(const ieWord* string, unsigned int len, bool NoColor) const; int dbStrLen(const ieWord* string) const; }; ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |