workaround for #303 (#1122)

* workaround for #303

Subpixel rendering may be disabled by some clip paths or when text
itself is clipped.

* optimize draw_pango_layout()
This commit is contained in:
nick87720z 2020-05-12 15:05:56 +05:00 committed by GitHub
parent 2ccc65ff52
commit 8a2e67f6fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 25 additions and 1 deletions

View File

@ -404,6 +404,30 @@ static void textbox_free ( widget *wid )
g_slice_free ( textbox, tb );
}
/* FIXME: workaround for cairo bug, when subpixel rendering failed with some cairo clip paths */
static void draw_pango_layout (cairo_t * cr, PangoLayout * layout, int x, int y)
{
cairo_surface_t * txt_surf;
cairo_t * txt_cr;
txt_surf = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, NULL);
txt_cr = cairo_create (txt_surf);
cairo_set_source (txt_cr, cairo_get_source (cr));
pango_cairo_show_layout (txt_cr, layout);
cairo_destroy (txt_cr);
{
cairo_pattern_t * pat = cairo_get_source (cr);
cairo_pattern_reference (pat);
cairo_set_source_surface (cr, txt_surf, x, y);
cairo_paint (cr);
cairo_set_source (cr, pat);
}
cairo_surface_destroy (txt_surf);
}
static void textbox_draw ( widget *wid, cairo_t *draw )
{
if ( wid == NULL ) {
@ -447,7 +471,7 @@ static void textbox_draw ( widget *wid, cairo_t *draw )
// Set ARGB
// We need to set over, otherwise subpixel hinting wont work.
cairo_move_to ( draw, x, top );
pango_cairo_show_layout ( draw, tb->layout );
draw_pango_layout (draw, tb->layout, x, top);
// draw the cursor
rofi_theme_get_color ( WIDGET ( tb ), "text-color", draw );