diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-19 17:10:12 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-19 17:10:12 -0400 |
commit | ab063f3928a27601bd4c7ca514d78a544ba7ffcf (patch) | |
tree | f7a2a582072c4605bf5257eb448a9ad04db70833 /display.c | |
parent | 6424c4929f8de18799d4d01a71cf2f5e21701126 (diff) | |
download | runes-ab063f3928a27601bd4c7ca514d78a544ba7ffcf.tar.gz runes-ab063f3928a27601bd4c7ca514d78a544ba7ffcf.zip |
handle inverted text
Diffstat (limited to 'display.c')
-rw-r--r-- | display.c | 38 |
1 files changed, 31 insertions, 7 deletions
@@ -273,6 +273,7 @@ void runes_display_reset_text_attributes(RunesTerm *t) runes_display_reset_bold(t); runes_display_reset_italic(t); runes_display_reset_underline(t); + runes_display_reset_inverse(t); } void runes_display_set_bold(RunesTerm *t) @@ -329,6 +330,18 @@ void runes_display_reset_underline(RunesTerm *t) attrs, pango_attr_underline_new(PANGO_UNDERLINE_NONE)); } +void runes_display_set_inverse(RunesTerm *t) +{ + t->inverse = 1; + cairo_set_source(t->cr, runes_display_get_fgcolor(t)); +} + +void runes_display_reset_inverse(RunesTerm *t) +{ + t->inverse = 0; + cairo_set_source(t->cr, runes_display_get_fgcolor(t)); +} + void runes_display_set_fg_color(RunesTerm *t, int color) { t->fgcolor = color; @@ -343,6 +356,7 @@ void runes_display_reset_fg_color(RunesTerm *t) void runes_display_set_bg_color(RunesTerm *t, int color) { t->bgcolor = color; + cairo_set_source(t->cr, runes_display_get_fgcolor(t)); } void runes_display_reset_bg_color(RunesTerm *t) @@ -462,24 +476,34 @@ void runes_display_cleanup(RunesTerm *t) static cairo_pattern_t *runes_display_get_fgcolor(RunesTerm *t) { - if (t->fgcolor == -1) { - return t->fgdefault; + int color = t->inverse ? t->bgcolor : t->fgcolor; + + if (t->inverse && t->bgcolor == t->fgcolor) { + return t->bgdefault; + } + else if (color == -1) { + return t->inverse ? t->bgdefault : t->fgdefault; } else if (t->bold) { - return t->brightcolors[t->fgcolor]; + return t->brightcolors[color]; } else { - return t->colors[t->fgcolor]; + return t->colors[color]; } } static cairo_pattern_t *runes_display_get_bgcolor(RunesTerm *t) { - if (t->bgcolor == -1) { - return t->bgdefault; + int color = t->inverse ? t->fgcolor : t->bgcolor; + + if (t->inverse && t->bgcolor == t->fgcolor) { + return t->fgdefault; + } + else if (color == -1) { + return t->inverse ? t->fgdefault : t->bgdefault; } else { - return t->colors[t->bgcolor]; + return t->colors[color]; } } |