From f05453268160f2cbeff42603a74224a7f62334af Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 19 Apr 2014 16:14:53 -0400 Subject: use brighter colors for bold --- display.c | 59 +++++++++++++++++++++++++++++++++++++---------------------- display.h | 4 ++-- parser.c | 4 ++-- parser.l | 4 ++-- term.h | 7 +++++-- 5 files changed, 48 insertions(+), 30 deletions(-) diff --git a/display.c b/display.c index 240a89a..f852f01 100644 --- a/display.c +++ b/display.c @@ -16,19 +16,27 @@ void runes_display_init(RunesTerm *t) t->font_name = "monospace 10"; runes_display_recalculate_font_metrics(t); - t->colors[0] = cairo_pattern_create_rgb(0.0, 0.0, 0.0); - t->colors[1] = cairo_pattern_create_rgb(1.0, 0.0, 0.0); - t->colors[2] = cairo_pattern_create_rgb(0.0, 1.0, 0.0); - t->colors[3] = cairo_pattern_create_rgb(1.0, 1.0, 0.0); - t->colors[4] = cairo_pattern_create_rgb(0.0, 0.0, 1.0); - t->colors[5] = cairo_pattern_create_rgb(1.0, 0.0, 1.0); - t->colors[6] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); - t->colors[7] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); + t->colors[0] = cairo_pattern_create_rgb(0.0, 0.0, 0.0); + t->colors[1] = cairo_pattern_create_rgb(0.804, 0.0, 0.0); + t->colors[2] = cairo_pattern_create_rgb(0.0, 0.804, 0.0); + t->colors[3] = cairo_pattern_create_rgb(0.804, 0.804, 0.0); + t->colors[4] = cairo_pattern_create_rgb(0.0, 0.0, 0.804); + t->colors[5] = cairo_pattern_create_rgb(0.804, 0.0, 0.804); + t->colors[6] = cairo_pattern_create_rgb(0.804, 0.804, 0.804); + t->colors[7] = cairo_pattern_create_rgb(0.804, 0.804, 0.804); + t->brightcolors[0] = cairo_pattern_create_rgb(0.302, 0.302, 0.302); + t->brightcolors[1] = cairo_pattern_create_rgb(1.0, 0.0, 0.0); + t->brightcolors[2] = cairo_pattern_create_rgb(0.0, 1.0, 0.0); + t->brightcolors[3] = cairo_pattern_create_rgb(1.0, 1.0, 0.0); + t->brightcolors[4] = cairo_pattern_create_rgb(0.0, 0.0, 1.0); + t->brightcolors[5] = cairo_pattern_create_rgb(1.0, 0.0, 1.0); + t->brightcolors[6] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); + t->brightcolors[7] = cairo_pattern_create_rgb(1.0, 1.0, 1.0); t->cursorcolor = cairo_pattern_create_rgba(0.0, 1.0, 0.0, 0.5); - t->fgcolor = t->colors[7]; - t->bgcolor = t->colors[0]; + t->fgcolor = 7; + t->bgcolor = 0; } void runes_display_set_window_size(RunesTerm *t) @@ -60,7 +68,8 @@ void runes_display_set_window_size(RunesTerm *t) CAIRO_FORMAT_RGB24, t->xpixel, t->ypixel); t->cr = cairo_create(surface); cairo_surface_destroy(surface); - cairo_set_source(t->cr, t->fgcolor); + cairo_set_source( + t->cr, t->bold ? t->brightcolors[t->fgcolor] : t->colors[t->fgcolor]); if (t->layout) { pango_cairo_update_layout(t->cr, t->layout); } @@ -85,7 +94,7 @@ void runes_display_set_window_size(RunesTerm *t) cairo_set_source_surface(t->cr, cairo_get_target(old_cr), 0.0, 0.0); } else { - cairo_set_source(t->cr, t->bgcolor); + cairo_set_source(t->cr, t->colors[t->bgcolor]); } cairo_paint(t->cr); @@ -138,7 +147,7 @@ void runes_display_show_string_ascii(RunesTerm *t, char *buf, size_t len) int to_write = remaining > space_in_row ? space_in_row : remaining; runes_display_paint_rectangle( - t, t->cr, t->bgcolor, t->col, t->row, to_write, 1); + t, t->cr, t->colors[t->bgcolor], t->col, t->row, to_write, 1); pango_layout_set_text(t->layout, buf, to_write); pango_cairo_update_layout(t->cr, t->layout); @@ -192,7 +201,7 @@ void runes_display_show_string_utf8(RunesTerm *t, char *buf, size_t len) } runes_display_paint_rectangle( - t, t->cr, t->bgcolor, t->col, t->row, width, 1); + t, t->cr, t->colors[t->bgcolor], t->col, t->row, width, 1); pango_layout_set_text(t->layout, startpos, cluster_len); pango_cairo_update_layout(t->cr, t->layout); @@ -214,20 +223,20 @@ void runes_display_show_string_utf8(RunesTerm *t, char *buf, size_t len) void runes_display_clear_screen(RunesTerm *t) { runes_display_paint_rectangle( - t, t->cr, t->bgcolor, 0, 0, t->cols, t->rows); + t, t->cr, t->colors[t->bgcolor], 0, 0, t->cols, t->rows); } void runes_display_clear_screen_forward(RunesTerm *t) { runes_display_kill_line_forward(t); runes_display_paint_rectangle( - t, t->cr, t->bgcolor, 0, t->row, t->cols, t->rows - t->row); + t, t->cr, t->colors[t->bgcolor], 0, t->row, t->cols, t->rows - t->row); } void runes_display_kill_line_forward(RunesTerm *t) { runes_display_paint_rectangle( - t, t->cr, t->bgcolor, t->col, t->row, t->cols - t->col, 1); + t, t->cr, t->colors[t->bgcolor], t->col, t->row, t->cols - t->col, 1); } void runes_display_delete_characters(RunesTerm *t, int count) @@ -265,6 +274,8 @@ void runes_display_set_bold(RunesTerm *t) attrs = pango_layout_get_attributes(t->layout); pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD)); + t->bold = 1; + cairo_set_source(t->cr, t->brightcolors[t->fgcolor]); } void runes_display_reset_bold(RunesTerm *t) @@ -273,6 +284,8 @@ void runes_display_reset_bold(RunesTerm *t) attrs = pango_layout_get_attributes(t->layout); pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_NORMAL)); + t->bold = 0; + cairo_set_source(t->cr, t->colors[t->fgcolor]); } void runes_display_set_italic(RunesTerm *t) @@ -309,25 +322,26 @@ void runes_display_reset_underline(RunesTerm *t) attrs, pango_attr_underline_new(PANGO_UNDERLINE_NONE)); } -void runes_display_set_fg_color(RunesTerm *t, cairo_pattern_t *color) +void runes_display_set_fg_color(RunesTerm *t, int color) { t->fgcolor = color; - cairo_set_source(t->cr, t->fgcolor); + cairo_set_source( + t->cr, t->bold ? t->brightcolors[t->fgcolor] : t->colors[t->fgcolor]); } void runes_display_reset_fg_color(RunesTerm *t) { - runes_display_set_fg_color(t, t->colors[7]); + runes_display_set_fg_color(t, 7); } -void runes_display_set_bg_color(RunesTerm *t, cairo_pattern_t *color) +void runes_display_set_bg_color(RunesTerm *t, int color) { t->bgcolor = color; } void runes_display_reset_bg_color(RunesTerm *t) { - runes_display_set_bg_color(t, t->colors[0]); + runes_display_set_bg_color(t, 0); } void runes_display_show_cursor(RunesTerm *t) @@ -434,6 +448,7 @@ void runes_display_cleanup(RunesTerm *t) g_object_unref(t->layout); for (i = 0; i < 8; ++i) { cairo_pattern_destroy(t->colors[i]); + cairo_pattern_destroy(t->brightcolors[i]); } cairo_pattern_destroy(t->cursorcolor); cairo_destroy(t->cr); diff --git a/display.h b/display.h index 0cd2dbe..85974cb 100644 --- a/display.h +++ b/display.h @@ -19,9 +19,9 @@ void runes_display_set_italic(RunesTerm *t); void runes_display_reset_italic(RunesTerm *t); void runes_display_set_underline(RunesTerm *t); void runes_display_reset_underline(RunesTerm *t); -void runes_display_set_fg_color(RunesTerm *t, cairo_pattern_t *color); +void runes_display_set_fg_color(RunesTerm *t, int color); void runes_display_reset_fg_color(RunesTerm *t); -void runes_display_set_bg_color(RunesTerm *t, cairo_pattern_t *color); +void runes_display_set_bg_color(RunesTerm *t, int color); void runes_display_reset_bg_color(RunesTerm *t); void runes_display_show_cursor(RunesTerm *t); void runes_display_hide_cursor(RunesTerm *t); diff --git a/parser.c b/parser.c index 7317624..382be79 100644 --- a/parser.c +++ b/parser.c @@ -2606,14 +2606,14 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len) break; case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: - runes_display_set_fg_color(t, t->colors[params[i] - 30]); + runes_display_set_fg_color(t, params[i] - 30); break; case 39: runes_display_reset_fg_color(t); break; case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: - runes_display_set_bg_color(t, t->colors[params[i] - 40]); + runes_display_set_bg_color(t, params[i] - 40); break; case 49: runes_display_reset_bg_color(t); diff --git a/parser.l b/parser.l index f15b7ec..dbb5899 100644 --- a/parser.l +++ b/parser.l @@ -517,14 +517,14 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len) break; case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: - runes_display_set_fg_color(t, t->colors[params[i] - 30]); + runes_display_set_fg_color(t, params[i] - 30); break; case 39: runes_display_reset_fg_color(t); break; case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: - runes_display_set_bg_color(t, t->colors[params[i] - 40]); + runes_display_set_bg_color(t, params[i] - 40); break; case 49: runes_display_reset_bg_color(t); diff --git a/term.h b/term.h index 34e9aff..bb8f0ed 100644 --- a/term.h +++ b/term.h @@ -10,11 +10,13 @@ struct runes_term { cairo_t *alternate_cr; uv_loop_t *loop; - cairo_pattern_t *bgcolor; - cairo_pattern_t *fgcolor; cairo_pattern_t *cursorcolor; cairo_pattern_t *colors[8]; + cairo_pattern_t *brightcolors[8]; + + int fgcolor; + int bgcolor; int row; int col; @@ -33,6 +35,7 @@ struct runes_term { char *font_name; PangoLayout *layout; + char bold; char hide_cursor; char unfocused; -- cgit v1.2.3-54-g00ecf