mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-04 13:29:51 -05:00
Split background and foreground painting into separate loops
This commit is contained in:
parent
0c574d9ed5
commit
967bf72ef5
1 changed files with 25 additions and 14 deletions
|
|
@ -661,6 +661,7 @@ terminal_draw_contents(struct terminal *terminal)
|
||||||
int text_x, text_y;
|
int text_x, text_y;
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
double d;
|
double d;
|
||||||
|
struct terminal_color color;
|
||||||
|
|
||||||
window_get_child_rectangle(terminal->window, &rectangle);
|
window_get_child_rectangle(terminal->window, &rectangle);
|
||||||
|
|
||||||
|
|
@ -686,6 +687,7 @@ terminal_draw_contents(struct terminal *terminal)
|
||||||
cairo_set_line_width(cr, 1.0);
|
cairo_set_line_width(cr, 1.0);
|
||||||
cairo_set_antialias(cr, CAIRO_ANTIALIAS_SUBPIXEL);
|
cairo_set_antialias(cr, CAIRO_ANTIALIAS_SUBPIXEL);
|
||||||
|
|
||||||
|
/* paint the background */
|
||||||
for (row = 0; row < terminal->height; row++)
|
for (row = 0; row < terminal->height; row++)
|
||||||
for (col = 0; col < terminal->width; col++)
|
for (col = 0; col < terminal->width; col++)
|
||||||
{
|
{
|
||||||
|
|
@ -700,15 +702,9 @@ terminal_draw_contents(struct terminal *terminal)
|
||||||
foreground = background | (foreground & ATTRMASK_INTENSITY);
|
foreground = background | (foreground & ATTRMASK_INTENSITY);
|
||||||
background = tmp & ~ATTRMASK_INTENSITY;
|
background = tmp & ~ATTRMASK_INTENSITY;
|
||||||
}
|
}
|
||||||
bold = (attr & ATTRMASK_INTENSITY);
|
|
||||||
underline = (attr & ATTRMASK_UNDERLINE);
|
|
||||||
|
|
||||||
/* paint the background */
|
color = terminal->color_scheme->palette[background];
|
||||||
cairo_set_source_rgba(cr,
|
cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
|
||||||
terminal->color_scheme->palette[background].r,
|
|
||||||
terminal->color_scheme->palette[background].g,
|
|
||||||
terminal->color_scheme->palette[background].b,
|
|
||||||
terminal->color_scheme->palette[background].a);
|
|
||||||
cairo_move_to(cr, side_margin + (col * extents.max_x_advance),
|
cairo_move_to(cr, side_margin + (col * extents.max_x_advance),
|
||||||
top_margin + (row * extents.height));
|
top_margin + (row * extents.height));
|
||||||
cairo_rel_line_to(cr, extents.max_x_advance, 0);
|
cairo_rel_line_to(cr, extents.max_x_advance, 0);
|
||||||
|
|
@ -716,17 +712,32 @@ terminal_draw_contents(struct terminal *terminal)
|
||||||
cairo_rel_line_to(cr, -extents.max_x_advance, 0);
|
cairo_rel_line_to(cr, -extents.max_x_advance, 0);
|
||||||
cairo_close_path(cr);
|
cairo_close_path(cr);
|
||||||
cairo_fill(cr);
|
cairo_fill(cr);
|
||||||
|
}
|
||||||
|
|
||||||
/* paint the foreground */
|
/* paint the foreground */
|
||||||
|
for (row = 0; row < terminal->height; row++)
|
||||||
|
for (col = 0; col < terminal->width; col++)
|
||||||
|
{
|
||||||
|
attr = terminal_get_attr(terminal, row, col);
|
||||||
|
foreground = (attr & ATTRMASK_FOREGROUND) >> ATTRSHIFT_FOREGROUND;
|
||||||
|
background = (attr & ATTRMASK_BACKGROUND) >> ATTRSHIFT_BACKGROUND;
|
||||||
|
bold = (attr & ATTRMASK_INTENSITY);
|
||||||
|
underline = (attr & ATTRMASK_UNDERLINE);
|
||||||
|
|
||||||
|
if (terminal->inverse_mode ||
|
||||||
|
(terminal->show_cursor && terminal->focused &&
|
||||||
|
terminal->row == row && terminal->column == col)) {
|
||||||
|
tmp = foreground;
|
||||||
|
foreground = background | (foreground & ATTRMASK_INTENSITY);
|
||||||
|
background = tmp & ~ATTRMASK_INTENSITY;
|
||||||
|
}
|
||||||
|
|
||||||
if (bold)
|
if (bold)
|
||||||
cairo_set_font_face(cr, terminal->font_bold);
|
cairo_set_font_face(cr, terminal->font_bold);
|
||||||
else
|
else
|
||||||
cairo_set_font_face(cr, terminal->font_normal);
|
cairo_set_font_face(cr, terminal->font_normal);
|
||||||
cairo_set_source_rgba(cr,
|
color = terminal->color_scheme->palette[foreground];
|
||||||
terminal->color_scheme->palette[foreground].r,
|
cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
|
||||||
terminal->color_scheme->palette[foreground].g,
|
|
||||||
terminal->color_scheme->palette[foreground].b,
|
|
||||||
terminal->color_scheme->palette[foreground].a);
|
|
||||||
|
|
||||||
text_x = side_margin + col * extents.max_x_advance;
|
text_x = side_margin + col * extents.max_x_advance;
|
||||||
text_y = top_margin + extents.ascent + row * extents.height;
|
text_y = top_margin + extents.ascent + row * extents.height;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue