diff options
author | Sebastian Keller <skeller@gnome.org> | 2021-11-22 01:41:33 +0100 |
---|---|---|
committer | Sebastian Keller <skeller@gnome.org> | 2021-11-22 02:19:59 +0100 |
commit | 1c7c84a263af1e0688e2fedb3a98e2f10b55f0eb (patch) | |
tree | c10e7127330e991f80b7f22f3e10d4f743ac18d3 /pango | |
parent | a31741faf6e59737c561574c3a7679ea185f4154 (diff) | |
download | pango-1c7c84a263af1e0688e2fedb3a98e2f10b55f0eb.tar.gz |
Introduce and use FLOOR and CEIL macros in Pango units
This replaces the code that was trying to implement those via the ROUND
macro. This avoids a potential issue with values that already were on
whole units being rounded up to the next whole unit in the code that was
implementing CEIL this way.
Diffstat (limited to 'pango')
-rw-r--r-- | pango/pango-types.h | 26 | ||||
-rw-r--r-- | pango/pangocairo-font.c | 8 |
2 files changed, 30 insertions, 4 deletions
diff --git a/pango/pango-types.h b/pango/pango-types.h index f18225ba..ed86f699 100644 --- a/pango/pango-types.h +++ b/pango/pango-types.h @@ -107,6 +107,32 @@ typedef guint32 PangoGlyph; */ /** + * PANGO_UNITS_FLOOR: + * @d: a dimension in Pango units. + * + * Rounds a dimension down to whole device units, but does not + * convert it to device units. + * + * Return value: rounded down dimension in Pango units. + * Since: 1.50 + */ +#define PANGO_UNITS_FLOOR(d) \ + ((d) & ~(PANGO_SCALE - 1)) + +/** + * PANGO_UNITS_CEIL: + * @d: a dimension in Pango units. + * + * Rounds a dimension up to whole device units, but does not + * convert it to device units. + * + * Return value: rounded up dimension in Pango units. + * Since: 1.50 + */ +#define PANGO_UNITS_CEIL(d) \ + (((d) + (PANGO_SCALE - 1)) & ~(PANGO_SCALE - 1)) + +/** * PANGO_UNITS_ROUND: * @d: a dimension in Pango units. * diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c index 597a320d..fb36d294 100644 --- a/pango/pangocairo-font.c +++ b/pango/pangocairo-font.c @@ -817,13 +817,13 @@ _pango_cairo_font_private_glyph_extents_cache_init (PangoCairoFontPrivate *cf_pr if (cf_priv->is_hinted) { if (cf_priv->font_extents.y < 0) - cf_priv->font_extents.y = PANGO_UNITS_ROUND (cf_priv->font_extents.y - PANGO_SCALE/2); + cf_priv->font_extents.y = PANGO_UNITS_FLOOR (cf_priv->font_extents.y); else - cf_priv->font_extents.y = PANGO_UNITS_ROUND (cf_priv->font_extents.y + PANGO_SCALE/2); + cf_priv->font_extents.y = PANGO_UNITS_CEIL (cf_priv->font_extents.y); if (cf_priv->font_extents.height < 0) - cf_priv->font_extents.height = PANGO_UNITS_ROUND (cf_priv->font_extents.height - PANGO_SCALE/2); + cf_priv->font_extents.height = PANGO_UNITS_FLOOR (cf_priv->font_extents.height); else - cf_priv->font_extents.height = PANGO_UNITS_ROUND (cf_priv->font_extents.height + PANGO_SCALE/2); + cf_priv->font_extents.height = PANGO_UNITS_CEIL (cf_priv->font_extents.height); } if (PANGO_GRAVITY_IS_IMPROPER (cf_priv->gravity)) |