From 97c658fea1b12f07356943ad8e454e8fb95d5baf Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sun, 10 Feb 2013 18:33:27 +0000 Subject: Update for new nsfont_split expectations. Untested, but code similar to framebuffer. Looks /really/ slow. It only needs to measure the text when it finds a space, not for every character. --- beos/font.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'beos') diff --git a/beos/font.cpp b/beos/font.cpp index a7b1a0c96..7d04c6857 100644 --- a/beos/font.cpp +++ b/beos/font.cpp @@ -157,17 +157,24 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle, /** * Find where to split a string to make it fit a width. * - * \param fstyle style for this text - * \param string UTF-8 string to measure - * \param length length of string - * \param x width available - * \param char_offset updated to offset in string of actual_x, [0..length] - * \param actual_x updated to x coordinate of character closest to x + * \param fstyle style for this text + * \param string UTF-8 string to measure + * \param length length of string, in bytes + * \param x width available + * \param char_offset updated to offset in string of actual_x, [1..length] + * \param actual_x updated to x coordinate of character closest to x * \return true on success, false on error and error reported * - * On exit, [char_offset == 0 || - * string[char_offset] == ' ' || - * char_offset == length] + * On exit, char_offset indicates first character after split point. + * + * Note: char_offset of 0 should never be returned. + * + * Returns: + * char_offset giving split point closest to x, where actual_x <= x + * else + * char_offset giving split point closest to x, where actual_x > x + * + * Returning char_offset == length means no split possible */ bool nsfont_split(const plot_font_style_t *fstyle, @@ -189,13 +196,13 @@ bool nsfont_split(const plot_font_style_t *fstyle, int i; int last_space = 0; font.GetEscapements(string, len, escapements); - // slow but it should work + // very slow but it should work for (i = 0; string[index] && i < len; i++) { if (string[index] == ' ') { last_x = current; last_space = index; } - if (x < current) { + if (x < current && last_space != 0) { *actual_x = (int)last_x; *char_offset = last_space; return true; -- cgit v1.2.3