summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2013-12-18 16:38:20 +0100
committerSebastien Helleu <flashcode@flashtux.org>2013-12-18 16:38:20 +0100
commitd7f29995fdb32d5e2747edd60e56397de742b836 (patch)
treeba738a54bf8710f423fcbe6d039df9328e667485 /src/gui
parent66494c439ed55ad29ae85600d5ca7cd5b1d6f075 (diff)
downloadweechat-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.c38
-rw-r--r--src/gui/curses/gui-curses-window.c83
-rw-r--r--src/gui/curses/gui-curses.h4
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 */