From fa6264019f315d1e7d6cb330acd136f50261e0ab Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 20 Apr 2014 21:42:10 -0400 Subject: allow configuring the interpretation of bold --- config.c | 33 +++++++++++++++++++++++++++++++-- display.c | 12 +++++++++--- term.h | 2 ++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/config.c b/config.c index 1664e4b..c266682 100644 --- a/config.c +++ b/config.c @@ -8,6 +8,8 @@ static void runes_config_set_defaults(RunesTerm *t); static FILE *runes_config_get_config_file(); static void runes_config_process_config_file(RunesTerm *t, FILE *config_file); static void runes_config_set(RunesTerm *t, char *key, char *value); +static char runes_config_parse_bool(char *val); +static char *runes_config_parse_string(char *val); void runes_config_init(RunesTerm *t, int argc, char *argv[]) { @@ -22,7 +24,9 @@ void runes_config_init(RunesTerm *t, int argc, char *argv[]) static void runes_config_set_defaults(RunesTerm *t) { - t->font_name = "monospace 10"; + t->font_name = "monospace 10"; + t->bold_is_bright = 1; + t->bold_is_bold = 1; } static FILE *runes_config_get_config_file() @@ -112,9 +116,34 @@ static void runes_config_process_config_file(RunesTerm *t, FILE *config_file) static void runes_config_set(RunesTerm *t, char *key, char *val) { if (!strcmp(key, "font")) { - t->font_name = strdup(val); + t->font_name = runes_config_parse_string(val); + } + else if (!strcmp(key, "bold_is_bright")) { + t->bold_is_bright = runes_config_parse_bool(val); + } + else if (!strcmp(key, "bold_is_bold")) { + t->bold_is_bold = runes_config_parse_bool(val); } else { fprintf(stderr, "unknown option: '%s'\n", key); } } + +static char runes_config_parse_bool(char *val) +{ + if (!strcmp(val, "true")) { + return 1; + } + else if (!strcmp(val, "false")) { + return 0; + } + else { + fprintf(stderr, "unknown boolean value: '%s'\n", val); + return 0; + } +} + +static char *runes_config_parse_string(char *val) +{ + return strdup(val); +} diff --git a/display.c b/display.c index 98f09d7..1a0680f 100644 --- a/display.c +++ b/display.c @@ -280,7 +280,10 @@ void runes_display_set_bold(RunesTerm *t) PangoAttrList *attrs; attrs = pango_layout_get_attributes(t->layout); - pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); + if (t->bold_is_bold) { + pango_attr_list_change( + attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); + } t->bold = 1; cairo_set_source(t->cr, runes_display_get_fgcolor(t)); } @@ -290,7 +293,10 @@ void runes_display_reset_bold(RunesTerm *t) PangoAttrList *attrs; attrs = pango_layout_get_attributes(t->layout); - pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_NORMAL)); + if (t->bold_is_bold) { + pango_attr_list_change( + attrs, pango_attr_weight_new(PANGO_WEIGHT_NORMAL)); + } t->bold = 0; cairo_set_source(t->cr, runes_display_get_fgcolor(t)); } @@ -483,7 +489,7 @@ static cairo_pattern_t *runes_display_get_fgcolor(RunesTerm *t) else if (color == -1) { return t->inverse ? t->bgdefault : t->fgdefault; } - else if (t->bold) { + else if (t->bold_is_bright && t->bold) { return t->brightcolors[color]; } else { diff --git a/term.h b/term.h index 3938862..5dfcfc8 100644 --- a/term.h +++ b/term.h @@ -41,6 +41,8 @@ struct runes_term { int readlen; int remaininglen; + char bold_is_bright; + char bold_is_bold; char bold; char inverse; char hide_cursor; -- cgit v1.2.3-54-g00ecf