diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2013-12-18 16:38:20 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2013-12-18 16:38:20 +0100 |
commit | d7f29995fdb32d5e2747edd60e56397de742b836 (patch) | |
tree | ba738a54bf8710f423fcbe6d039df9328e667485 /src/gui | |
parent | 66494c439ed55ad29ae85600d5ca7cd5b1d6f075 (diff) | |
download | weechat-d7f29995fdb32d5e2747edd60e56397de742b836.zip |
core: add support of UTF-8 chars in horizontal/vertical separators
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/curses/gui-curses-bar-window.c | 38 | ||||
-rw-r--r-- | src/gui/curses/gui-curses-window.c | 83 | ||||
-rw-r--r-- | src/gui/curses/gui-curses.h | 4 |
3 files changed, 78 insertions, 47 deletions
diff --git a/src/gui/curses/gui-curses-bar-window.c b/src/gui/curses/gui-curses-bar-window.c index 3e5ee5a1d..801a9078e 100644 --- a/src/gui/curses/gui-curses-bar-window.c +++ b/src/gui/curses/gui-curses-bar-window.c @@ -405,7 +405,7 @@ gui_bar_window_draw (struct t_gui_bar_window *bar_window, int chars_available, index, size; int length_screen_before_cursor, length_screen_after_cursor; int diff, max_length, optimal_number_of_lines; - int some_data_not_displayed, separator_horizontal, separator_vertical; + int some_data_not_displayed; int index_item, index_subitem, index_line; if (!gui_init_ok) @@ -747,47 +747,35 @@ gui_bar_window_draw (struct t_gui_bar_window *bar_window, if (CONFIG_INTEGER(bar_window->bar->options[GUI_BAR_OPTION_SEPARATOR])) { - separator_horizontal = ACS_HLINE; - separator_vertical = ACS_VLINE; - if (CONFIG_STRING(config_look_separator_horizontal) - && CONFIG_STRING(config_look_separator_horizontal)[0]) - { - separator_horizontal = utf8_char_int (CONFIG_STRING(config_look_separator_horizontal)); - if (separator_horizontal > 127) - separator_horizontal = ACS_HLINE; - } - if (CONFIG_STRING(config_look_separator_vertical) - && CONFIG_STRING(config_look_separator_vertical)[0]) - { - separator_vertical = utf8_char_int (CONFIG_STRING(config_look_separator_vertical)); - if (separator_vertical > 127) - separator_vertical = ACS_VLINE; - } switch (CONFIG_INTEGER(bar_window->bar->options[GUI_BAR_OPTION_POSITION])) { case GUI_BAR_POSITION_BOTTOM: gui_window_set_weechat_color (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, GUI_COLOR_SEPARATOR); - mvwhline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, - 0, 0, separator_horizontal, bar_window->width); + gui_window_hline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, + 0, 0, bar_window->width, + CONFIG_STRING(config_look_separator_horizontal)); break; case GUI_BAR_POSITION_TOP: gui_window_set_weechat_color (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, GUI_COLOR_SEPARATOR); - mvwhline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, - 0, 0, separator_horizontal, bar_window->width); + gui_window_hline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, + 0, 0, bar_window->width, + CONFIG_STRING(config_look_separator_horizontal)); break; case GUI_BAR_POSITION_LEFT: gui_window_set_weechat_color (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, GUI_COLOR_SEPARATOR); - mvwvline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, - 0, 0, separator_vertical, bar_window->height); + gui_window_vline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, + 0, 0, bar_window->height, + CONFIG_STRING(config_look_separator_vertical)); break; case GUI_BAR_POSITION_RIGHT: gui_window_set_weechat_color (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, GUI_COLOR_SEPARATOR); - mvwvline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, - 0, 0, separator_vertical, bar_window->height); + gui_window_vline (GUI_BAR_WINDOW_OBJECTS(bar_window)->win_separator, + 0, 0, bar_window->height, + CONFIG_STRING(config_look_separator_vertical)); break; case GUI_BAR_NUM_POSITIONS: break; diff --git a/src/gui/curses/gui-curses-window.c b/src/gui/curses/gui-curses-window.c index e89f106a1..107b656f7 100644 --- a/src/gui/curses/gui-curses-window.c +++ b/src/gui/curses/gui-curses-window.c @@ -39,7 +39,6 @@ #include "../../core/wee-hook.h" #include "../../core/wee-log.h" #include "../../core/wee-string.h" -#include "../../core/wee-utf8.h" #include "../../plugins/plugin.h" #include "../gui-window.h" #include "../gui-bar.h" @@ -1048,13 +1047,67 @@ gui_window_calculate_pos_size (struct t_gui_window *window) } /* + * Draws a horizontal line (like ncurses function "mvwhline", but UTF-8 chars + * are supported). + * + * If "string" is NULL or empty, the ACS_HLINE char is used (plain line). + * If "string" is not NULL and not empty, its width on screen must be exactly + * one char. + */ + +void +gui_window_hline (WINDOW *window, int x, int y, int width, const char *string) +{ + int i; + + if (string && string[0]) + { + for (i = 0; i < width; i++) + { + mvwaddstr (window, y, x + i, string); + } + } + else + { + mvwhline (window, y, x, ACS_HLINE, width); + } +} + +/* + * Draws a vertical line (like ncurses function "mvwvline", but UTF-8 chars + * are supported). + * + * If "string" is NULL or empty, the ACS_VLINE char is used (plain line). + * If "string" is not NULL and not empty, its width on screen must be exactly + * one char. + */ + +void +gui_window_vline (WINDOW *window, int x, int y, int height, const char *string) +{ + int i; + + if (string && string[0]) + { + for (i = 0; i < height; i++) + { + mvwaddstr (window, y + i, x, string); + } + } + else + { + mvwvline (window, y, x, ACS_VLINE, height); + } +} + +/* * Draws window separators. */ void gui_window_draw_separators (struct t_gui_window *window) { - int separator_char, separator_horizontal, separator_vertical, x, width; + int separator_horizontal, separator_vertical, x, width; /* remove separators */ if (GUI_WINDOW_OBJECTS(window)->win_separator_horiz) @@ -1086,16 +1139,9 @@ gui_window_draw_separators (struct t_gui_window *window) x); gui_window_set_weechat_color (GUI_WINDOW_OBJECTS(window)->win_separator_horiz, GUI_COLOR_SEPARATOR); - separator_char = ACS_HLINE; - if (CONFIG_STRING(config_look_separator_horizontal) - && CONFIG_STRING(config_look_separator_horizontal)[0]) - { - separator_char = utf8_char_int (CONFIG_STRING(config_look_separator_horizontal)); - if (separator_char > 127) - separator_char = ACS_VLINE; - } - mvwhline (GUI_WINDOW_OBJECTS(window)->win_separator_horiz, 0, 0, - separator_char, width); + gui_window_hline (GUI_WINDOW_OBJECTS(window)->win_separator_horiz, + 0, 0, width, + CONFIG_STRING(config_look_separator_horizontal)); wnoutrefresh (GUI_WINDOW_OBJECTS(window)->win_separator_horiz); } @@ -1108,16 +1154,9 @@ gui_window_draw_separators (struct t_gui_window *window) window->win_x - 1); gui_window_set_weechat_color (GUI_WINDOW_OBJECTS(window)->win_separator_vertic, GUI_COLOR_SEPARATOR); - separator_char = ACS_VLINE; - if (CONFIG_STRING(config_look_separator_vertical) - && CONFIG_STRING(config_look_separator_vertical)[0]) - { - separator_char = utf8_char_int (CONFIG_STRING(config_look_separator_vertical)); - if (separator_char > 127) - separator_char = ACS_VLINE; - } - mvwvline (GUI_WINDOW_OBJECTS(window)->win_separator_vertic, 0, 0, - separator_char, window->win_height); + gui_window_vline (GUI_WINDOW_OBJECTS(window)->win_separator_vertic, + 0, 0, window->win_height, + CONFIG_STRING(config_look_separator_vertical)); wnoutrefresh (GUI_WINDOW_OBJECTS(window)->win_separator_vertic); } } diff --git a/src/gui/curses/gui-curses.h b/src/gui/curses/gui-curses.h index 74345ae5d..710c0459b 100644 --- a/src/gui/curses/gui-curses.h +++ b/src/gui/curses/gui-curses.h @@ -134,6 +134,10 @@ extern void gui_window_string_apply_color_set_attr (unsigned char **str, WINDOW *window); extern void gui_window_string_apply_color_remove_attr (unsigned char **str, WINDOW *window); +extern void gui_window_hline (WINDOW *window, int x, int y, int width, + const char *string); +extern void gui_window_vline (WINDOW *window, int x, int y, int height, + const char *string); extern void gui_window_set_title (const char *title); #endif /* __WEECHAT_GUI_CURSES_H */ |