From 09e7ea656688d717fe9ba1a8c306e83de4d928b0 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 16 May 2014 18:04:36 +0100 Subject: Simplfy and clarify splitting function. Should be funtionally identical. --- amiga/font.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'amiga') diff --git a/amiga/font.c b/amiga/font.c index 148d860c4..2b7883d05 100755 --- a/amiga/font.c +++ b/amiga/font.c @@ -289,30 +289,33 @@ bool nsfont_split(const plot_font_style_t *fstyle, int x, size_t *char_offset, int *actual_x) { ULONG co; - uint16 *utf16 = NULL,*outf16 = NULL; - uint16 *utf16next = NULL; + uint16 *utf16_str = NULL; + const uint16 *utf16 = NULL; + const uint16 *utf16next = NULL; FIXED kern = 0; - int utf16charlen = 0; struct OutlineFont *ofont, *ufont = NULL; uint32 tx=0; int utf8_pos = 0; int32 tempx = 0; ULONG emwidth = (ULONG)NSA_FONT_EMWIDTH(fstyle->size); - if(utf8_to_enc((char *)string,"UTF-16",length,(char **)&utf16) != NSERROR_OK) return false; - outf16 = utf16; - if(!(ofont = ami_open_outline_font(fstyle, 0))) return false; + /* Get utf16 conversion of string for glyph measuring routines */ + if (utf8_to_enc(string, "UTF-16", length, (char **)&utf16_str) != + NSERROR_OK) + return false; + + utf16 = utf16_str; + if (!(ofont = ami_open_outline_font(fstyle, 0))) + return false; *char_offset = 0; *actual_x = 0; while (utf8_pos < length) { if ((*utf16 < 0xD800) || (0xDBFF < *utf16)) - utf16charlen = 1; + utf16next = utf16 + 1; else - utf16charlen = 2; - - utf16next = &utf16[utf16charlen]; + utf16next = utf16 + 2; tempx = ami_font_width_glyph(ofont, utf16, utf16next, emwidth); @@ -330,21 +333,13 @@ bool nsfont_split(const plot_font_style_t *fstyle, /* Got a space */ *actual_x = tx; *char_offset = utf8_pos; - - if (x < tx) { - /* Beyond available width, - * so don't look further */ - free(outf16); - return true; - } } tx += tempx; - if ((x < tx) && (*char_offset != 0)) { /* Reached available width, and a space was found; * split there. */ - free(outf16); + free(utf16_str); return true; } @@ -352,7 +347,7 @@ bool nsfont_split(const plot_font_style_t *fstyle, utf8_pos = utf8_next(string, length, utf8_pos); } - free(outf16); + free(utf16_str); /* No spaces to split at, or everything fits */ assert(*char_offset == 0 || x >= tx); @@ -640,7 +635,7 @@ int32 ami_font_plot_glyph(struct OutlineFont *ofont, struct RastPort *rp, } int32 ami_font_width_glyph(struct OutlineFont *ofont, - uint16 *char1, uint16 *char2, uint32 emwidth) + const uint16 *char1, const uint16 *char2, uint32 emwidth) { int32 char_advance = 0; FIXED kern = 0; -- cgit v1.2.3