Mercurial > pidgin.yaz
view console/libgnt/gntutils.c @ 14420:c4a32405af68
[gaim-migrate @ 17128]
Keep things neat and clean in gnt_util_onscreen_width_to_pointer.
The only use of this function currently is to truncate a string to
make sure it fits in the drawing area, eg, the title of a window,
or in the combobox. The function is called on a newly allocated
string, which is truncated (if necessary), printed, and freed.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 02 Sep 2006 18:55:27 +0000 |
parents | b50aa149e09d |
children | cfd5bcc06a7e |
line wrap: on
line source
#include "gntutils.h" #include <stdlib.h> #include <string.h> #include "config.h" void gnt_util_get_text_bound(const char *text, int *width, int *height) { const char *s = text, *last; int count = 1, max = 0; int len; /* XXX: ew ... everyone look away */ last = s; if (s) { while (*s) { if (*s == '\n' || *s == '\r') { count++; len = gnt_util_onscreen_width(last, s); if (max < len) max = len; last = s + 1; } s = g_utf8_next_char(s); } len = gnt_util_onscreen_width(last, s); if (max < len) max = len; } if (height) *height = count; if (width) *width = max + (count > 1); } int gnt_util_onscreen_width(const char *start, const char *end) { int width = 0; while (start < end) { width += g_unichar_iswide(g_utf8_get_char(start)) ? 2 : 1; start = g_utf8_next_char(start); } return width; } const char *gnt_util_onscreen_width_to_pointer(const char *string, int len, int *w) { int size; int width = 0; const char *str = string; while (width < len && *str) { size = g_unichar_iswide(g_utf8_get_char(str)) ? 2 : 1; if (width + size > len) break; str = g_utf8_next_char(str); width += size; } if (w) *w = width; return str; }