| 66 if (w) |
66 if (w) |
| 67 *w = width; |
67 *w = width; |
| 68 return str; |
68 return str; |
| 69 } |
69 } |
| 70 |
70 |
| |
71 char *gnt_util_onscreen_fit_string(const char *string, int maxw) |
| |
72 { |
| |
73 const char *start, *end; |
| |
74 GString *str; |
| |
75 |
| |
76 if (maxw <= 0) |
| |
77 maxw = getmaxx(stdscr) - 4; |
| |
78 |
| |
79 start = string; |
| |
80 str = g_string_new(NULL); |
| |
81 |
| |
82 while (*start) { |
| |
83 if ((end = strchr(start, '\n')) != NULL || |
| |
84 (end = strchr(start, '\r')) != NULL) { |
| |
85 if (gnt_util_onscreen_width(start, end) <= maxw) { |
| |
86 ++end; |
| |
87 } else |
| |
88 end = NULL; |
| |
89 } |
| |
90 if (end == NULL) |
| |
91 end = gnt_util_onscreen_width_to_pointer(start, maxw, NULL); |
| |
92 str = g_string_append_len(str, start, end - start); |
| |
93 start = end; |
| |
94 if (*end && *end != '\n' && *end != '\r') |
| |
95 str = g_string_append_c(str, '\n'); |
| |
96 } |
| |
97 return g_string_free(str, FALSE); |
| |
98 } |
| |
99 |