# HG changeset patch # User zuu # Date 2013-06-09 12:21:44 # Node ID 9b5e242a7ad77019f59a551e4d0822b32464572e # Parent 0b11d054e50d60f210480cc553894ccd7f7de430 (svn r25343) -Add: method to count the number of lines required to draw a string with line warping diff --git a/src/gfx.cpp b/src/gfx.cpp --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -883,6 +883,23 @@ int GetStringHeight(StringID str, int ma } /** + * Calculates number of lines of string. The string is changed to a multiline string if needed. + * @param str string to check + * @param maxw maximum string width + * @return number of lines of string when it is drawn + */ +int GetStringLineCount(StringID str, int maxw) +{ + char buffer[DRAW_STRING_BUFFER]; + + GetString(buffer, str, lastof(buffer)); + + uint32 tmp = FormatStringLinebreaks(buffer, lastof(buffer), maxw); + + return 1 + GB(tmp, 0, 16); +} + +/** * Calculate string bounding box for multi-line strings. * @param str String to check. * @param suggestion Suggested bounding box. diff --git a/src/gfx_func.h b/src/gfx_func.h --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -124,6 +124,7 @@ Dimension GetStringBoundingBox(const cha Dimension GetStringBoundingBox(StringID strid); uint32 FormatStringLinebreaks(char *str, const char *last, int maxw, FontSize start_fontsize = FS_NORMAL); int GetStringHeight(StringID str, int maxw); +int GetStringLineCount(StringID str, int maxw); Dimension GetStringMultiLineBoundingBox(StringID str, const Dimension &suggestion); Dimension GetStringMultiLineBoundingBox(const char *str, const Dimension &suggestion); void LoadStringWidthTable(bool monospace = false);