summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhil Jones <philj56@gmail.com>2023-02-28 23:40:44 +0000
committerPhil Jones <philj56@gmail.com>2023-02-28 23:47:24 +0000
commit570ea4ab9e7f8e3cb71dba199cb8fb46e1f58cdb (patch)
treef932583466fefd7ad01e10e1fc5e05e7ff10731b /src
parent5dc06ce1f99e8ea25386bf3823b995be5f1cac53 (diff)
Fix background box -1 padding alignment.
Diffstat (limited to 'src')
-rw-r--r--src/entry_backend/harfbuzz.c27
-rw-r--r--src/entry_backend/pango.c30
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);