diff options
author | Phil Jones <philj56@gmail.com> | 2023-02-28 23:40:44 +0000 |
---|---|---|
committer | Phil Jones <philj56@gmail.com> | 2023-02-28 23:47:24 +0000 |
commit | 570ea4ab9e7f8e3cb71dba199cb8fb46e1f58cdb (patch) | |
tree | f932583466fefd7ad01e10e1fc5e05e7ff10731b | |
parent | 5dc06ce1f99e8ea25386bf3823b995be5f1cac53 (diff) |
Fix background box -1 padding alignment.
-rw-r--r-- | src/entry_backend/harfbuzz.c | 27 | ||||
-rw-r--r-- | src/entry_backend/pango.c | 30 |
2 files changed, 35 insertions, 22 deletions
diff --git a/src/entry_backend/harfbuzz.c b/src/entry_backend/harfbuzz.c index 3bb8a8f..5026993 100644 --- a/src/entry_backend/harfbuzz.c +++ b/src/entry_backend/harfbuzz.c @@ -192,19 +192,26 @@ static cairo_text_extents_t render_text_themed( */ cairo_matrix_t mat; cairo_get_matrix(cr, &mat); - int32_t base_x = mat.x0 - entry->clip_x + extents.x_bearing; - int32_t base_y = mat.y0 - entry->clip_y; + double base_x = mat.x0 - entry->clip_x + extents.x_bearing; + double base_y = mat.y0 - entry->clip_y; + + /* Need to use doubles to end up on nice pixel boundaries. */ + double padding_left = padding.left; + double padding_right = padding.right; + double padding_top = padding.top; + double padding_bottom = padding.bottom; + if (padding.left < 0) { - padding.left = base_x; + padding_left = base_x; } if (padding.right < 0) { - padding.right = entry->clip_width - extents.width - base_x; + padding_right = entry->clip_width - extents.width - base_x; } if (padding.top < 0) { - padding.top = base_y; + padding_top = base_y; } if (padding.bottom < 0) { - padding.bottom = entry->clip_height - font_extents.height - base_y; + padding_bottom = entry->clip_height - font_extents.height - base_y; } cairo_save(cr); @@ -212,12 +219,12 @@ static cairo_text_extents_t render_text_themed( cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); cairo_translate( cr, - floor(-padding.left + extents.x_bearing), - -padding.top); + -padding_left + extents.x_bearing, + -padding_top); rounded_rectangle( cr, - ceil(extents.width + padding.left + padding.right), - ceil(font_extents.height + padding.top + padding.bottom), + ceil(extents.width + padding_left + padding_right), + ceil(font_extents.height + padding_top + padding_bottom), theme->background_corner_radius ); cairo_fill(cr); diff --git a/src/entry_backend/pango.c b/src/entry_backend/pango.c index 2865961..d0edcce 100644 --- a/src/entry_backend/pango.c +++ b/src/entry_backend/pango.c @@ -61,17 +61,23 @@ static void render_text_themed( cairo_get_matrix(cr, &mat); int32_t base_x = mat.x0 - entry->clip_x + ink_rect->x; int32_t base_y = mat.y0 - entry->clip_y; - if (padding.left < 0) { - padding.left = base_x; + + double padding_left = padding.left; + double padding_right = padding.right; + double padding_top = padding.top; + double padding_bottom = padding.bottom; + + if (padding_left < 0) { + padding_left = base_x; } - if (padding.right < 0) { - padding.right = entry->clip_width - ink_rect->width - base_x; + if (padding_right < 0) { + padding_right = entry->clip_width - ink_rect->width - base_x; } - if (padding.top < 0) { - padding.top = base_y; + if (padding_top < 0) { + padding_top = base_y; } - if (padding.bottom < 0) { - padding.bottom = entry->clip_height - logical_rect->height - base_y; + if (padding_bottom < 0) { + padding_bottom = entry->clip_height - logical_rect->height - base_y; } cairo_save(cr); @@ -79,12 +85,12 @@ static void render_text_themed( cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a); cairo_translate( cr, - floor(-padding.left + ink_rect->x), - -padding.top); + -padding_left + ink_rect->x, + -padding_top); rounded_rectangle( cr, - ceil(ink_rect->width + padding.left + padding.right), - ceil(logical_rect->height + padding.top + padding.bottom), + ceil(ink_rect->width + padding_left + padding_right), + ceil(logical_rect->height + padding_top + padding_bottom), theme->background_corner_radius ); cairo_fill(cr); |