38
38
struct grub_term_output *term;
42
print_spaces (int number_spaces, struct grub_term_output *term)
45
for (i = 0; i < number_spaces; i++)
46
grub_putcode (' ', term);
50
grub_print_ucs4 (const grub_uint32_t * str,
51
const grub_uint32_t * last_position,
52
struct grub_term_output *term)
54
while (str < last_position)
56
grub_putcode (*str, term);
62
42
grub_getstringwidth (grub_uint32_t * str, const grub_uint32_t * last_position,
63
43
struct grub_term_output *term)
67
47
while (str < last_position)
69
width += grub_term_getcharwidth (term, *str);
49
struct grub_unicode_glyph glyph;
50
str += grub_unicode_aglomerate_comb (str, last_position - str, &glyph);
51
width += grub_term_getcharwidth (term, &glyph);
76
57
grub_print_message_indented (const char *msg, int margin_left, int margin_right,
77
58
struct grub_term_output *term)
81
60
grub_uint32_t *unicode_msg;
82
61
grub_uint32_t *last_position;
86
line_len = grub_term_width (term) - grub_term_getcharwidth (term, 'm') *
87
(margin_left + margin_right);
89
65
msg_len = grub_utf8_to_ucs4_alloc (msg, &unicode_msg, &last_position);
96
grub_uint32_t *current_position = unicode_msg;
98
grub_uint32_t *next_new_line = unicode_msg;
102
while (current_position < last_position)
105
grub_putcode ('\n', term);
107
next_new_line = (grub_uint32_t *) last_position;
109
while (grub_getstringwidth (current_position, next_new_line,term)
111
|| (next_new_line != last_position && *next_new_line != ' '
112
&& next_new_line > current_position))
117
if (next_new_line == current_position)
119
next_new_line = (next_new_line + line_len > last_position) ?
120
(grub_uint32_t *) last_position : next_new_line + line_len;
123
print_spaces (margin_left, term);
124
grub_print_ucs4 (current_position, next_new_line, term);
127
current_position = next_new_line;
72
grub_print_ucs4 (unicode_msg, last_position, margin_left, margin_right, term);
130
74
grub_free (unicode_msg);
139
83
grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
141
85
grub_term_gotoxy (term, GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y);
142
grub_putcode (GRUB_TERM_DISP_UL, term);
86
grub_putcode (GRUB_UNICODE_CORNER_UL, term);
143
87
for (i = 0; i < (unsigned) grub_term_border_width (term) - 2; i++)
144
grub_putcode (GRUB_TERM_DISP_HLINE, term);
145
grub_putcode (GRUB_TERM_DISP_UR, term);
88
grub_putcode (GRUB_UNICODE_HLINE, term);
89
grub_putcode (GRUB_UNICODE_CORNER_UR, term);
147
91
for (i = 0; i < (unsigned) grub_term_num_entries (term); i++)
149
93
grub_term_gotoxy (term, GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + i + 1);
150
grub_putcode (GRUB_TERM_DISP_VLINE, term);
94
grub_putcode (GRUB_UNICODE_VLINE, term);
151
95
grub_term_gotoxy (term, GRUB_TERM_MARGIN + grub_term_border_width (term)
153
97
GRUB_TERM_TOP_BORDER_Y + i + 1);
154
grub_putcode (GRUB_TERM_DISP_VLINE, term);
98
grub_putcode (GRUB_UNICODE_VLINE, term);
157
101
grub_term_gotoxy (term, GRUB_TERM_MARGIN,
158
102
GRUB_TERM_TOP_BORDER_Y + grub_term_num_entries (term) + 1);
159
grub_putcode (GRUB_TERM_DISP_LL, term);
103
grub_putcode (GRUB_UNICODE_CORNER_LL, term);
160
104
for (i = 0; i < (unsigned) grub_term_border_width (term) - 2; i++)
161
grub_putcode (GRUB_TERM_DISP_HLINE, term);
162
grub_putcode (GRUB_TERM_DISP_LR, term);
105
grub_putcode (GRUB_UNICODE_HLINE, term);
106
grub_putcode (GRUB_UNICODE_CORNER_LR, term);
164
108
grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
194
138
"entry is highlighted.\n");
195
139
char *msg_translated;
197
msg_translated = grub_xasprintf (msg, (grub_uint32_t) GRUB_TERM_DISP_UP,
198
(grub_uint32_t) GRUB_TERM_DISP_DOWN);
141
msg_translated = grub_xasprintf (msg, GRUB_UNICODE_UPARROW,
142
GRUB_UNICODE_DOWNARROW);
199
143
if (!msg_translated)
145
grub_putcode ('\n', term);
202
146
grub_print_message_indented (msg_translated, STANDARD_MARGIN,
203
147
STANDARD_MARGIN, term);
260
204
grub_term_gotoxy (term, GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN, y);
206
int last_printed = 0;
262
207
for (x = GRUB_TERM_LEFT_BORDER_X + GRUB_TERM_MARGIN + 1, i = 0;
263
208
x < (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term)
209
- GRUB_TERM_MARGIN);)
268
212
&& x <= (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term)
269
213
- GRUB_TERM_MARGIN - 1))
271
215
grub_ssize_t width;
273
width = grub_term_getcharwidth (term, unicode_title[i]);
275
if (x + width > (int) (GRUB_TERM_LEFT_BORDER_X
216
struct grub_unicode_glyph glyph;
218
i += grub_unicode_aglomerate_comb (unicode_title + i,
221
width = grub_term_getcharwidth (term, &glyph);
222
grub_free (glyph.combining);
224
if (x + width <= (int) (GRUB_TERM_LEFT_BORDER_X
276
225
+ grub_term_border_width (term)
277
226
- GRUB_TERM_MARGIN - 1))
278
grub_putcode (GRUB_TERM_DISP_RIGHT, term);
280
grub_putcode (unicode_title[i], term);
286
grub_putcode (' ', term);
234
grub_print_ucs4 (unicode_title,
235
unicode_title + last_printed, 0, 0, term);
237
if (last_printed != len)
239
grub_putcode (GRUB_UNICODE_RIGHTARROW, term);
240
struct grub_unicode_glyph pseudo_glyph = {
241
.base = GRUB_UNICODE_RIGHTARROW,
248
x += grub_term_getcharwidth (term, &pseudo_glyph);
251
for (; x < (int) (GRUB_TERM_LEFT_BORDER_X + grub_term_border_width (term)
252
- GRUB_TERM_MARGIN); x++)
253
grub_putcode (' ', term);
290
255
grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
291
256
grub_putcode (' ', term);
309
274
GRUB_TERM_FIRST_ENTRY_Y);
312
grub_putcode (GRUB_TERM_DISP_UP, term);
277
grub_putcode (GRUB_UNICODE_UPARROW, term);
314
279
grub_putcode (' ', term);
327
292
GRUB_TERM_TOP_BORDER_Y + grub_term_num_entries (term));
330
grub_putcode (GRUB_TERM_DISP_DOWN, term);
295
grub_putcode (GRUB_UNICODE_DOWNARROW, term);
332
297
grub_putcode (' ', term);
385
350
grub_print_message_indented (msg_translated, 3, 0, data->term);
387
352
posx = grub_term_getxy (data->term) >> 8;
388
print_spaces (grub_term_width (data->term) - posx - 1, data->term);
353
grub_print_spaces (data->term, grub_term_width (data->term) - posx - 1);
390
355
grub_term_gotoxy (data->term,
391
356
grub_term_cursor_x (data->term),
443
408
struct menu_viewer_data *data = dataptr;
445
410
grub_term_gotoxy (data->term, 0, grub_term_height (data->term) - 3);
446
print_spaces (grub_term_width (data->term) - 1, data->term);
411
grub_print_spaces (data->term, grub_term_width (data->term) - 1);
447
412
grub_term_gotoxy (data->term, grub_term_cursor_x (data->term),
448
413
GRUB_TERM_FIRST_ENTRY_Y + data->offset);
449
414
grub_term_refresh (data->term);