diff --git a/3ff6365.patch b/3ff6365.patch new file mode 100644 index 0000000..e817540 --- /dev/null +++ b/3ff6365.patch @@ -0,0 +1,121 @@ +From d4356779945855f7cc950dbe162285ccf21bcce9 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Sun, 27 Jun 2021 11:31:13 -0400 +Subject: [PATCH] shape: Bring back careful rounding code + +When we added the round-glyph-positions option in +c43da2d3 and b5634799, we lost some code that was careful +to round in device coordinates. + +The reason we lost it is that the rounding needs fontconfig- +specific data that is only available in the backend, and the +rounding now happens in the frontend. + +Bringing it back is annoying, since we've run out of vfunc +slots to get info from the backend. This commit works around +that limitation in a hacky way. + +Fixes: #562 +--- + pango/shape.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 73 insertions(+), 4 deletions(-) + +diff --git a/pango/shape.c b/pango/shape.c +index 04407732..b870ecad 100644 +--- a/pango/shape.c ++++ b/pango/shape.c +@@ -151,6 +151,32 @@ fallback_shape (const char *text, + pango_glyph_string_reverse_range (glyphs, 0, glyphs->num_glyphs); + } + ++/* FIXME: This is very ugly. We are out of room for vfuncs, so we can't ++ * easily add api to get is_hinted and the matrix from the PangoFcFont. ++ * ++ * Keep in sync with pangofc-font.h! ++ */ ++struct _PangoFcFont ++{ ++ PangoFont parent_instance; ++ ++ gpointer font_pattern; /* fully resolved pattern */ ++ PangoFontMap *fontmap; /* associated map */ ++ gpointer priv; /* used internally */ ++ PangoMatrix matrix; /* used internally */ ++ PangoFontDescription *description; ++ ++ GSList *metrics_by_lang; ++ ++ guint is_hinted : 1; ++ guint is_transformed : 1; ++}; ++typedef struct _PangoFcFont PangoFcFont; ++ ++#define PANGO_IS_FC_FONT(obj) \ ++ g_type_is_a (((GTypeInstance*)obj)->g_class->g_type, \ ++ g_type_from_name ("PangoFcFont")) ++ + /** + * pango_shape_with_flags: + * @item_text: valid UTF-8 text to shape +@@ -294,11 +320,54 @@ pango_shape_with_flags (const gchar *item_text, + + if (flags & PANGO_SHAPE_ROUND_POSITIONS) + { +- for (i = 0; i < glyphs->num_glyphs; i++) ++ if (PANGO_IS_FC_FONT (analysis->font)) + { +- glyphs->glyphs[i].geometry.width = PANGO_UNITS_ROUND (glyphs->glyphs[i].geometry.width ); +- glyphs->glyphs[i].geometry.x_offset = PANGO_UNITS_ROUND (glyphs->glyphs[i].geometry.x_offset); +- glyphs->glyphs[i].geometry.y_offset = PANGO_UNITS_ROUND (glyphs->glyphs[i].geometry.y_offset); ++ PangoFcFont *fc_font = (PangoFcFont *)analysis->font; ++ if (fc_font->is_hinted) ++ { ++ double x_scale_inv, y_scale_inv; ++ double x_scale, y_scale; ++ ++ x_scale_inv = y_scale_inv = 1.0; ++ pango_matrix_get_font_scale_factors (&fc_font->matrix, &x_scale_inv, &y_scale_inv); ++ if (PANGO_GRAVITY_IS_IMPROPER (analysis->gravity)) ++ { ++ x_scale_inv = -x_scale_inv; ++ y_scale_inv = -y_scale_inv; ++ } ++ x_scale = 1. / x_scale_inv; ++ y_scale = 1. / y_scale_inv; ++ ++ if (x_scale == 1.0 && y_scale == 1.0) ++ { ++ for (i = 0; i < glyphs->num_glyphs; i++) ++ glyphs->glyphs[i].geometry.width = PANGO_UNITS_ROUND (glyphs->glyphs[i].geometry.width); ++ } ++ else ++ { ++ #if 0 ++ if (PANGO_GRAVITY_IS_VERTICAL (analysis->gravity)) ++ { ++ /* XXX */ ++ double tmp = x_scale; ++ x_scale = y_scale; ++ y_scale = -tmp; ++ } ++ #endif ++ #define HINT(value, scale_inv, scale) (PANGO_UNITS_ROUND ((int) ((value) * scale)) * scale_inv) ++ #define HINT_X(value) HINT ((value), x_scale, x_scale_inv) ++ #define HINT_Y(value) HINT ((value), y_scale, y_scale_inv) ++ for (i = 0; i < glyphs->num_glyphs; i++) ++ { ++ glyphs->glyphs[i].geometry.width = HINT_X (glyphs->glyphs[i].geometry.width); ++ glyphs->glyphs[i].geometry.x_offset = HINT_X (glyphs->glyphs[i].geometry.x_offset); ++ glyphs->glyphs[i].geometry.y_offset = HINT_Y (glyphs->glyphs[i].geometry.y_offset); ++ } ++ #undef HINT_Y ++ #undef HINT_X ++ #undef HINT ++ } ++ } + } + } + } +-- +GitLab + diff --git a/_service b/_service index 78a7355..1df82c1 100644 --- a/_service +++ b/_service @@ -2,7 +2,7 @@ https://gitlab.gnome.org/GNOME/pango.git git - refs/tags/1.48.5 + 1.48.7 @PARENT_TAG@+@TAG_OFFSET@ (.*)\+0 \1 diff --git a/pango-1.48.5.obscpio b/pango-1.48.5.obscpio deleted file mode 100644 index 5832662..0000000 --- a/pango-1.48.5.obscpio +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bcd03268ec4fc5813e11e4cf360ef91589b030199ec4d88bee39137648a9b6ab -size 3303436 diff --git a/pango-1.48.7.obscpio b/pango-1.48.7.obscpio new file mode 100644 index 0000000..a1c6237 --- /dev/null +++ b/pango-1.48.7.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75cfc2a22b159ceae580fec1f1b32d707019d1f6a68b95a6c9e478a5911ffffe +size 3360268 diff --git a/pango.changes b/pango.changes index 9507299..d3b75cf 100644 --- a/pango.changes +++ b/pango.changes @@ -1,3 +1,28 @@ +------------------------------------------------------------------- +Tue Jul 13 17:29:05 UTC 2021 - Dominique Leuenberger + +- Add 3ff6365.patch, reverse applied: fix build of e.g. g-c-c. This + commit introduced a requirement to run X. + +------------------------------------------------------------------- +Mon Jul 5 10:18:45 UTC 2021 - Bjørn Lie + +- Update to version 1.48.7: + + Fix a thread-safety issue in fontmap initialization. + + Small documentation improvements. + +------------------------------------------------------------------- +Tue Jun 29 16:22:13 UTC 2021 - Bjørn Lie + +- Update to version 1.48.6: + + Avoid attribute index overflow. + + Add a new pango-segmentation utility. + + Documentation cleanups and fixes. + + Update script property data for gravity. + + Bring back careful glyph position rounding. + + Add a few missing bidi types. + + Add more tests. + ------------------------------------------------------------------- Tue May 18 16:16:14 UTC 2021 - Michael Gorse diff --git a/pango.obsinfo b/pango.obsinfo index 35562a2..98e53b3 100644 --- a/pango.obsinfo +++ b/pango.obsinfo @@ -1,5 +1,5 @@ name: pango -version: 1.48.5 -mtime: 1621345915 -commit: 3940a1714e84b076d04d4638c88df3dba7d8014e +version: 1.48.7 +mtime: 1625320606 +commit: 467bda1e0bc2614b10e2edc46dccc9588388e045 diff --git a/pango.spec b/pango.spec index 39e9479..c67650b 100644 --- a/pango.spec +++ b/pango.spec @@ -17,7 +17,7 @@ Name: pango -Version: 1.48.5 +Version: 1.48.7 Release: 0 Summary: Library for Layout and Rendering of Text License: LGPL-2.1-or-later @@ -26,6 +26,8 @@ URL: https://pango.gnome.org/ Source0: %{name}-%{version}.tar.xz Source2: macros.pango Source99: baselibs.conf +# PATCH-FIX-UPSTREAM 3ff6365.patch dimstar@opensuse.org -- Revert upstream commit, introduces runtime dep on X +Patch0: https://gitlab.gnome.org/GNOME/pango/-/commit/3ff6365.patch BuildRequires: gcc-c++ BuildRequires: help2man @@ -117,7 +119,8 @@ This package contains all necessary include files and libraries needed to develop applications that require these. %prep -%autosetup -p1 +%setup +%patch0 -p1 -R %build %meson \ @@ -154,6 +157,7 @@ cp %{SOURCE2} %{buildroot}%_rpmmacrodir %files tools %{_bindir}/pango-list +%{_bindir}/pango-segmentation %{_bindir}/pango-view %{_mandir}/man1/pango-view.1%{ext_man}