summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-02-10 18:33:27 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2013-02-10 18:33:27 +0000
commit97c658fea1b12f07356943ad8e454e8fb95d5baf (patch)
treee2b116af28834e2bb18a9a5be20425b9b7c29211
parente7e5211eb930e7b5517838fe895250fc934f029e (diff)
downloadnetsurf-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.cpp29
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;