mirror of
https://github.com/rkd77/elinks.git
synced 2024-11-04 08:17:17 -05:00
[bfu] draw_*_node
This commit is contained in:
parent
179e30aa12
commit
4b93f841a8
@ -112,6 +112,7 @@ dlg_format_field(struct dialog_data *dlg_data,
|
|||||||
static int *prev_y; /* Assert the uniqueness of y */ /* TODO: get rid of this !! --Zas */
|
static int *prev_y; /* Assert the uniqueness of y */ /* TODO: get rid of this !! --Zas */
|
||||||
char *label = widget_data->widget->text;
|
char *label = widget_data->widget->text;
|
||||||
struct color_pair *text_color = NULL;
|
struct color_pair *text_color = NULL;
|
||||||
|
unsigned int text_color_node = 0;
|
||||||
int label_width = 0;
|
int label_width = 0;
|
||||||
int float_label = widget_data->widget->info.field.flags & (INPFIELD_FLOAT|INPFIELD_FLOAT2);
|
int float_label = widget_data->widget->info.field.flags & (INPFIELD_FLOAT|INPFIELD_FLOAT2);
|
||||||
|
|
||||||
@ -131,9 +132,13 @@ dlg_format_field(struct dialog_data *dlg_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (label && *label) {
|
if (label && *label) {
|
||||||
if (!format_only) text_color = get_bfu_color(term, "dialog.text");
|
if (!format_only) {
|
||||||
|
// text_color = get_bfu_color(term, "dialog.text");
|
||||||
|
text_color_node = get_bfu_color_node(term, "dialog.text");
|
||||||
|
}
|
||||||
|
|
||||||
dlg_format_text_do(dlg_data, label, x, y, w, rw, text_color, ALIGN_LEFT, format_only);
|
// dlg_format_text_do(dlg_data, label, x, y, w, rw, text_color, ALIGN_LEFT, format_only);
|
||||||
|
dlg_format_text_do_node(dlg_data, label, x, y, w, rw, text_color_node, ALIGN_LEFT, format_only);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: We want the field and label on the same line if the terminal
|
/* XXX: We want the field and label on the same line if the terminal
|
||||||
@ -141,9 +146,13 @@ dlg_format_field(struct dialog_data *dlg_data,
|
|||||||
if (label && *label && float_label) {
|
if (label && *label && float_label) {
|
||||||
if (widget_data->widget->info.field.flags & INPFIELD_FLOAT) {
|
if (widget_data->widget->info.field.flags & INPFIELD_FLOAT) {
|
||||||
(*y) -= INPUTFIELD_HEIGHT;
|
(*y) -= INPUTFIELD_HEIGHT;
|
||||||
dlg_format_text_do(dlg_data, INPUTFIELD_FLOAT_SEPARATOR,
|
// dlg_format_text_do(dlg_data, INPUTFIELD_FLOAT_SEPARATOR,
|
||||||
|
// x + label_width, y, w, rw,
|
||||||
|
// text_color, ALIGN_LEFT, format_only);
|
||||||
|
|
||||||
|
dlg_format_text_do_node(dlg_data, INPUTFIELD_FLOAT_SEPARATOR,
|
||||||
x + label_width, y, w, rw,
|
x + label_width, y, w, rw,
|
||||||
text_color, ALIGN_LEFT, format_only);
|
text_color_node, ALIGN_LEFT, format_only);
|
||||||
w -= INPUTFIELD_FLOAT_SEPARATOR_LEN + INPUTFIELD_FLOATLABEL_PADDING;
|
w -= INPUTFIELD_FLOAT_SEPARATOR_LEN + INPUTFIELD_FLOATLABEL_PADDING;
|
||||||
x += INPUTFIELD_FLOAT_SEPARATOR_LEN + INPUTFIELD_FLOATLABEL_PADDING;
|
x += INPUTFIELD_FLOAT_SEPARATOR_LEN + INPUTFIELD_FLOATLABEL_PADDING;
|
||||||
}
|
}
|
||||||
@ -266,6 +275,7 @@ display_field_do(struct dialog_data *dlg_data, struct widget_data *widget_data,
|
|||||||
{
|
{
|
||||||
struct terminal *term = dlg_data->win->term;
|
struct terminal *term = dlg_data->win->term;
|
||||||
struct color_pair *color;
|
struct color_pair *color;
|
||||||
|
unsigned int color_node;
|
||||||
int sel = is_selected_widget(dlg_data, widget_data);
|
int sel = is_selected_widget(dlg_data, widget_data);
|
||||||
#ifdef CONFIG_UTF8
|
#ifdef CONFIG_UTF8
|
||||||
int len = 0, left = 0;
|
int len = 0, left = 0;
|
||||||
@ -289,12 +299,23 @@ display_field_do(struct dialog_data *dlg_data, struct widget_data *widget_data,
|
|||||||
int_lower_bound(&widget_data->info.field.vpos, 0);
|
int_lower_bound(&widget_data->info.field.vpos, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
color = get_bfu_color(term, "dialog.field");
|
// color = get_bfu_color(term, "dialog.field");
|
||||||
if (color)
|
color_node = get_bfu_color_node(term, "dialog.field");
|
||||||
draw_box(term, &widget_data->box, ' ', 0, color);
|
// if (color) {
|
||||||
|
// draw_box(term, &widget_data->box, ' ', 0, color);
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (color_node) {
|
||||||
|
draw_box_node(term, &widget_data->box, ' ', 0, color_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
// color = get_bfu_color(term, "dialog.field-text");
|
||||||
|
// if (color) {
|
||||||
|
|
||||||
|
color_node = get_bfu_color_node(term, "dialog.field-text");
|
||||||
|
if (color_node) {
|
||||||
|
|
||||||
|
|
||||||
color = get_bfu_color(term, "dialog.field-text");
|
|
||||||
if (color) {
|
|
||||||
char *text = widget_data->cdata + widget_data->info.field.vpos;
|
char *text = widget_data->cdata + widget_data->info.field.vpos;
|
||||||
int len, w;
|
int len, w;
|
||||||
|
|
||||||
@ -313,15 +334,18 @@ display_field_do(struct dialog_data *dlg_data, struct widget_data *widget_data,
|
|||||||
if (term->utf8_cp)
|
if (term->utf8_cp)
|
||||||
w = utf8_cells2bytes(text, w, NULL);
|
w = utf8_cells2bytes(text, w, NULL);
|
||||||
#endif /* CONFIG_UTF8 */
|
#endif /* CONFIG_UTF8 */
|
||||||
draw_dlg_text(dlg_data, widget_data->box.x, widget_data->box.y,
|
// draw_dlg_text(dlg_data, widget_data->box.x, widget_data->box.y,
|
||||||
text, w, 0, color);
|
// text, w, 0, color);
|
||||||
|
draw_dlg_text_node(dlg_data, widget_data->box.x, widget_data->box.y,
|
||||||
|
text, w, 0, color_node);
|
||||||
} else {
|
} else {
|
||||||
struct el_box box;
|
struct el_box box;
|
||||||
|
|
||||||
copy_box(&box, &widget_data->box);
|
copy_box(&box, &widget_data->box);
|
||||||
box.width = w;
|
box.width = w;
|
||||||
|
|
||||||
draw_box(term, &box, '*', 0, color);
|
// draw_box(term, &box, '*', 0, color);
|
||||||
|
draw_box_node(term, &box, '*', 0, color_node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,6 +264,61 @@ dlg_format_text_do(struct dialog_data *dlg_data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Format text according to dialog box and alignment. */
|
||||||
|
void
|
||||||
|
dlg_format_text_do_node(struct dialog_data *dlg_data,
|
||||||
|
const char *text,
|
||||||
|
int x, int *y, int width, int *real_width,
|
||||||
|
unsigned int color_node, format_align_T align,
|
||||||
|
int format_only)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_UTF8
|
||||||
|
struct terminal *term = dlg_data->win->term;
|
||||||
|
#endif
|
||||||
|
int line_width;
|
||||||
|
int firstline = 1;
|
||||||
|
|
||||||
|
for (; *text; text += line_width, (*y)++) {
|
||||||
|
int shift;
|
||||||
|
int cells = 0;
|
||||||
|
|
||||||
|
/* Skip first leading \n or space. */
|
||||||
|
if (!firstline && isspace(*text))
|
||||||
|
text++;
|
||||||
|
else
|
||||||
|
firstline = 0;
|
||||||
|
if (!*text) break;
|
||||||
|
|
||||||
|
#ifdef CONFIG_UTF8
|
||||||
|
line_width = split_line(text, width, &cells, term->utf8_cp);
|
||||||
|
#else
|
||||||
|
line_width = split_line(text, width, &cells);
|
||||||
|
#endif /* CONFIG_UTF8 */
|
||||||
|
|
||||||
|
/* split_line() may return 0. */
|
||||||
|
if (line_width < 1) {
|
||||||
|
line_width = 1; /* Infinite loop prevention. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (real_width) int_lower_bound(real_width, cells);
|
||||||
|
if (format_only || !line_width) continue;
|
||||||
|
|
||||||
|
/* Calculate the number of chars to indent */
|
||||||
|
if (align == ALIGN_CENTER)
|
||||||
|
shift = (width - cells) / 2;
|
||||||
|
else if (align == ALIGN_RIGHT)
|
||||||
|
shift = width - cells;
|
||||||
|
else
|
||||||
|
shift = 0;
|
||||||
|
|
||||||
|
assert(cells <= width && shift < width);
|
||||||
|
|
||||||
|
draw_dlg_text_node(dlg_data, x + shift, *y, text, line_width, 0, color_node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
dlg_format_text(struct dialog_data *dlg_data,
|
dlg_format_text(struct dialog_data *dlg_data,
|
||||||
struct widget_data *widget_data,
|
struct widget_data *widget_data,
|
||||||
|
@ -54,6 +54,11 @@ void dlg_format_text_do(struct dialog_data *dlg_data,
|
|||||||
const char *text, int x, int *y, int w, int *rw,
|
const char *text, int x, int *y, int w, int *rw,
|
||||||
struct color_pair *scolor, format_align_T align, int format_only);
|
struct color_pair *scolor, format_align_T align, int format_only);
|
||||||
|
|
||||||
|
void dlg_format_text_do_node(struct dialog_data *dlg_data,
|
||||||
|
const char *text, int x, int *y, int w, int *rw,
|
||||||
|
unsigned int scolor_node, format_align_T align, int format_only);
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
dlg_format_text(struct dialog_data *dlg_data, struct widget_data *widget_data,
|
dlg_format_text(struct dialog_data *dlg_data, struct widget_data *widget_data,
|
||||||
int x, int *y, int dlg_width, int *real_width, int height, int format_only);
|
int x, int *y, int dlg_width, int *real_width, int height, int format_only);
|
||||||
|
Loading…
Reference in New Issue
Block a user