diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-02-10 18:33:27 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-02-10 18:33:27 +0000 |
commit | 97c658fea1b12f07356943ad8e454e8fb95d5baf (patch) | |
tree | e2b116af28834e2bb18a9a5be20425b9b7c29211 | |
parent | e7e5211eb930e7b5517838fe895250fc934f029e (diff) | |
download | netsurf-97c658fea1b12f07356943ad8e454e8fb95d5baf.tar.gz netsurf-97c658fea1b12f07356943ad8e454e8fb95d5baf.tar.bz2 |
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.
-rw-r--r-- | beos/font.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
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; |