summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-09 11:40:19 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-09 11:40:19 +0000
commit587c159a8b835a84f4ee5ec731052b2dc3c02aee (patch)
tree4f622868f8a81defd645759e236fd284ca726c4b
parent486892cd3e8ecf981b238a420ed1d22fd7abdc7e (diff)
parenta7c882df35d84b1def7322b8d4f837c9f6d24922 (diff)
downloadpango-587c159a8b835a84f4ee5ec731052b2dc3c02aee.tar.gz
Merge branch 'win32-fixes' into 'main'
Attempt to fix some Win32-related issues Closes #583 and #578 See merge request GNOME/pango!399
-rw-r--r--pango/pango-markup.c2
-rw-r--r--pango/pangowin32-fontmap.c22
-rw-r--r--pango/shape.c12
-rw-r--r--tests/testmisc.c7
4 files changed, 39 insertions, 4 deletions
diff --git a/pango/pango-markup.c b/pango/pango-markup.c
index 00b16943..91def193 100644
--- a/pango/pango-markup.c
+++ b/pango/pango-markup.c
@@ -1671,7 +1671,7 @@ span_parse_func (MarkupData *md G_GNUC_UNUSED,
if (!span_parse_float ("line_height", line_height, &f, line_number, error))
goto error;
- if (f > 1024.0 && strchr (line_height, ".") == 0)
+ if (f > 1024.0 && strchr (line_height, '.') == 0)
add_attribute (tag, pango_attr_line_height_new_absolute ((int)f));
else
add_attribute (tag, pango_attr_line_height_new (f));
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index b6341f52..200ea9ce 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -1037,19 +1037,35 @@ pango_win32_font_map_load_font (PangoFontMap *fontmap,
win32family = g_hash_table_lookup (win32fontmap->families, families[i]);
if (win32family)
{
+ PangoFontDescription *new_desc;
+ PangoFontDescription *best_desc = NULL;
+
PING (("got win32family"));
tmp_list = win32family->faces;
+
while (tmp_list)
{
PangoWin32Face *face = tmp_list->data;
+ new_desc = pango_font_face_describe (PANGO_FONT_FACE (face));
+ pango_font_description_set_gravity (new_desc,
+ pango_font_description_get_gravity (description));
if (pango_font_description_better_match (description,
- best_match ? best_match->description : NULL,
- face->description))
- best_match = face;
+ best_desc,
+ new_desc))
+ {
+ pango_font_description_free (best_desc);
+ best_desc = new_desc;
+ best_match = face;
+ }
+ else
+ pango_font_description_free (new_desc);
tmp_list = tmp_list->next;
}
+
+ if (best_desc != NULL)
+ pango_font_description_free (best_desc);
}
}
diff --git a/pango/shape.c b/pango/shape.c
index f8ac3691..aed028b7 100644
--- a/pango/shape.c
+++ b/pango/shape.c
@@ -341,5 +341,17 @@ pango_shape_with_flags (const gchar *item_text,
#undef HINT
}
}
+ else
+ {
+ for (i = 0; i < glyphs->num_glyphs; i++)
+ {
+ 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);
+ }
+ }
}
}
diff --git a/tests/testmisc.c b/tests/testmisc.c
index 54566f78..d8275aad 100644
--- a/tests/testmisc.c
+++ b/tests/testmisc.c
@@ -22,7 +22,10 @@
#include "config.h"
#include <glib.h>
#include <pango/pangocairo.h>
+
+#ifdef HAVE_CAIRO_FREETYPE
#include <pango/pango-ot.h>
+#endif
/* test that we don't crash in shape_tab when the layout
* is such that we don't have effective attributes
@@ -245,6 +248,7 @@ test_gravity_for_script (void)
}
}
+#ifdef HAVE_CAIRO_FREETYPE
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
static void
@@ -264,6 +268,7 @@ test_language_to_tag (void)
}
G_GNUC_END_IGNORE_DEPRECATIONS
+#endif
static void
test_fallback_shape (void)
@@ -383,7 +388,9 @@ main (int argc, char *argv[])
g_test_add_func ("/gravity/from-matrix", test_gravity_from_matrix);
g_test_add_func ("/gravity/for-script", test_gravity_for_script);
g_test_add_func ("/layout/fallback-shape", test_fallback_shape);
+#ifdef HAVE_CAIRO_FREETYPE
g_test_add_func ("/language/to-tag", test_language_to_tag);
+#endif
g_test_add_func ("/bidi/get-cursor-crash", test_get_cursor_crash);
g_test_add_func ("/bidi/get-cursor", test_get_cursor);