diff options
-rw-r--r-- | pango/meson.build | 20 | ||||
-rw-r--r-- | pango/pango-attributes.c | 15 | ||||
-rw-r--r-- | pango/pango-context.c | 2 | ||||
-rw-r--r-- | pango/pango-ot.h | 23 | ||||
-rw-r--r-- | pango/pangocairo-fc.h | 6 | ||||
-rw-r--r-- | pango/pangocairo.h | 24 | ||||
-rw-r--r-- | pango/pangofc-decoder.h | 22 | ||||
-rw-r--r-- | pango/pangofc-font.h | 6 | ||||
-rw-r--r-- | pango/pangofc-fontmap.h | 6 | ||||
-rw-r--r-- | pango/pangoft2.h | 12 | ||||
-rw-r--r-- | pango/pangoxft-font.c | 12 | ||||
-rw-r--r-- | pango/pangoxft-render.h | 9 | ||||
-rw-r--r-- | pango/pangoxft.h | 31 | ||||
-rw-r--r-- | tests/layouts/valid-4.expected | 2 | ||||
-rw-r--r-- | tests/layouts/valid-4.markup | 2 | ||||
-rw-r--r-- | tests/testattributes.c | 144 | ||||
-rw-r--r-- | tests/testmisc.c | 14 |
17 files changed, 311 insertions, 39 deletions
diff --git a/pango/meson.build b/pango/meson.build index ad7fb798..41158141 100644 --- a/pango/meson.build +++ b/pango/meson.build @@ -238,8 +238,8 @@ if build_pangoft2 dependencies: [ libpango_dep, pango_gir_dep ], namespace: 'PangoFc', nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', + identifier_prefix: 'PangoFc', + symbol_prefix: 'pango_fc', export_packages: 'pangofc', includes: [ pango_gir[0], 'fontconfig-2.0', ], header: 'pango/pangofc-fontmap.h', @@ -256,8 +256,8 @@ if build_pangoft2 dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep ], namespace: 'PangoOT', nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', + identifier_prefix: 'PangoOT', + symbol_prefix: 'pango_ot', export_packages: 'pangoot', includes: [ pangofc_gir[0], 'freetype2-2.0', ], header: 'pango/pango-ot.h', @@ -273,8 +273,8 @@ if build_pangoft2 dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep, pangoot_gir_dep ], namespace: 'PangoFT2', nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', + identifier_prefix: 'PangoFT2', + symbol_prefix: 'pango_ft2', export_packages: 'pangoft2', includes: [ pangofc_gir[0], 'freetype2-2.0', ], header: 'pango/pangoft2.h', @@ -363,8 +363,8 @@ if xft_dep.found() and fontconfig_dep.found() dependencies: [ libpango_dep, libpangoft2_dep, pango_gir_dep, pangoot_gir_dep, pangoft2_gir_dep ], namespace: 'PangoXft', nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', + identifier_prefix: 'PangoXft', + symbol_prefix: 'pango_xft', export_packages: 'pangoxft', includes: [ pango_gir[0], pangoot_gir[0], pangoft2_gir[0], 'GObject-2.0', 'xft-2.0', 'xlib-2.0' ], header: 'pango/pangoxft.h', @@ -528,8 +528,8 @@ if cairo_dep.found() dependencies: [ pangocairo_deps, pango_gir_dep ], namespace: 'PangoCairo', nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', + identifier_prefix: 'PangoCairo', + symbol_prefix: 'pango_cairo', export_packages: 'pangocairo', includes: [ pango_gir[0], 'GObject-2.0', 'cairo-1.0' ], header: 'pango/pangocairo.h', diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c index 239fc935..1fa8c399 100644 --- a/pango/pango-attributes.c +++ b/pango/pango-attributes.c @@ -1531,7 +1531,7 @@ pango_attr_list_change (PangoAttrList *list, g_return_if_fail (list != NULL); - if (start_index == end_index) /* empty, nothing to do */ + if (start_index == end_index) /* empty, nothing to do */ { pango_attribute_destroy (attr); return; @@ -1560,7 +1560,7 @@ pango_attr_list_change (PangoAttrList *list, continue; /* This attr does not overlap with the new one */ g_assert (tmp_attr->end_index >= start_index); - g_assert (start_index < tmp_attr->end_index); + g_assert (start_index <= tmp_attr->end_index); if (pango_attribute_equal (tmp_attr, attr)) { @@ -1571,7 +1571,6 @@ pango_attr_list_change (PangoAttrList *list, /* We are totally overlapping the previous attribute. * No action is needed. */ - g_ptr_array_remove_index (list->attributes, i); pango_attribute_destroy (attr); return; } @@ -1607,6 +1606,13 @@ pango_attr_list_change (PangoAttrList *list, } } + if (i == p) + { + /* we didn't insert attr yet */ + pango_attr_list_insert (list, attr); + return; + } + /* We now have the range inserted into the list one way or the * other. Fix up the remainder */ /* Attention: No i = 0 here. */ @@ -1863,6 +1869,9 @@ pango_attr_list_equal (PangoAttrList *list, if (list == NULL || other_list == NULL) return FALSE; + if (list->attributes == NULL || other_list->attributes == NULL) + return list->attributes == other_list->attributes; + attrs = list->attributes; other_attrs = other_list->attributes; diff --git a/pango/pango-context.c b/pango/pango-context.c index 7772878f..bebe804a 100644 --- a/pango/pango-context.c +++ b/pango/pango-context.c @@ -1566,7 +1566,7 @@ pango_itemize_with_base_dir (PangoContext *context, g_return_val_if_fail (length >= 0, NULL); g_return_val_if_fail (length == 0 || text != NULL, NULL); - if (length == 0) + if (length == 0 || g_utf8_strlen (text, length) == 0) return NULL; itemize_state_init (&state, context, text, base_dir, start_index, length, diff --git a/pango/pango-ot.h b/pango/pango-ot.h index 2c9f42d5..b8c6acc8 100644 --- a/pango/pango-ot.h +++ b/pango/pango-ot.h @@ -247,16 +247,29 @@ struct _PangoOTRulesetDescription { guint n_other_features; }; - +#ifdef __GI_SCANNER__ +#define PANGO_OT_TYPE_INFO (pango_ot_info_get_type ()) +#define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_INFO, PangoOTInfo)) +#define PANGO_OT_IS_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_INFO)) +#else #define PANGO_TYPE_OT_INFO (pango_ot_info_get_type ()) #define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_INFO, PangoOTInfo)) #define PANGO_IS_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_INFO)) +#endif + PANGO_DEPRECATED GType pango_ot_info_get_type (void) G_GNUC_CONST; +#ifdef __GI_SCANNER__ +#define PANGO_OT_TYPE_RULESET (pango_ot_ruleset_get_type ()) +#define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_RULESET, PangoOTRuleset)) +#define PANGO_OT_IS_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_RULESET)) +#else #define PANGO_TYPE_OT_RULESET (pango_ot_ruleset_get_type ()) #define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_RULESET, PangoOTRuleset)) #define PANGO_IS_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_RULESET)) +#endif + PANGO_DEPRECATED GType pango_ot_ruleset_get_type (void) G_GNUC_CONST; @@ -300,7 +313,11 @@ PangoOTTag *pango_ot_info_list_features (PangoOTInfo *info, guint script_index, guint language_index); +#ifdef __GI_SCANNER__ +#define PANGO_OT_TYPE_BUFFER (pango_ot_buffer_get_type()) +#else #define PANGO_TYPE_OT_BUFFER (pango_ot_buffer_get_type()) +#endif PANGO_DEPRECATED GType pango_ot_buffer_get_type (void) G_GNUC_CONST; @@ -383,7 +400,11 @@ PangoLanguage *pango_ot_tag_to_language (PangoOTTag language_tag) G_GNUC_ PANGO_DEPRECATED PangoOTTag pango_ot_tag_from_language (PangoLanguage *language) G_GNUC_CONST; +#ifdef __GI_SCANNER__ +#define PANGO_OT_TYPE_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type()) +#else #define PANGO_TYPE_OT_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type()) +#endif PANGO_DEPRECATED GType pango_ot_ruleset_description_get_type (void) G_GNUC_CONST; diff --git a/pango/pangocairo-fc.h b/pango/pangocairo-fc.h index 0d9d04b4..36529569 100644 --- a/pango/pangocairo-fc.h +++ b/pango/pangocairo-fc.h @@ -27,9 +27,15 @@ G_BEGIN_DECLS +#ifdef __GI_SCANNER__ +#define PANGO_CAIRO_TYPE_FC_FONT_MAP (pango_cairo_fc_font_map_get_type()) +#define PANGO_CAIRO_FC_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FC_FONT_MAP, PangoCairoFcFontMap)) +#define PANGO_CAIRO_IS_FC_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FC_FONT_MAP)) +#else #define PANGO_TYPE_CAIRO_FC_FONT_MAP (pango_cairo_fc_font_map_get_type ()) #define PANGO_CAIRO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP, PangoCairoFcFontMap)) #define PANGO_IS_CAIRO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP)) +#endif typedef struct _PangoCairoFcFontMap PangoCairoFcFontMap; diff --git a/pango/pangocairo.h b/pango/pangocairo.h index cd368f8f..633ccf9d 100644 --- a/pango/pangocairo.h +++ b/pango/pangocairo.h @@ -37,9 +37,20 @@ G_BEGIN_DECLS * Since: 1.18 **/ typedef struct _PangoCairoFont PangoCairoFont; -#define PANGO_TYPE_CAIRO_FONT (pango_cairo_font_get_type ()) -#define PANGO_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT, PangoCairoFont)) -#define PANGO_IS_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT)) + +/* This is a hack because PangoCairo is hijacking the Pango namespace, but + * consumers of the PangoCairo API expect these symbols to live under the + * PangoCairo namespace. + */ +#ifdef __GI_SCANNER__ +#define PANGO_CAIRO_TYPE_FONT (pango_cairo_font_get_type()) +#define PANGO_CAIRO_FONT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FONT, PangoCairoFont)) +#define PANGO_CAIRO_IS_FONT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FONT)) +#else +#define PANGO_TYPE_CAIRO_FONT (pango_cairo_font_get_type ()) +#define PANGO_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT, PangoCairoFont)) +#define PANGO_IS_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT)) +#endif /** * PangoCairoFontMap: @@ -51,9 +62,16 @@ typedef struct _PangoCairoFont PangoCairoFont; * Since: 1.10 **/ typedef struct _PangoCairoFontMap PangoCairoFontMap; + +#ifdef __GI_SCANNER__ +#define PANGO_CAIRO_TYPE_FONT_MAP (pango_cairo_font_map_get_type()) +#define PANGO_CAIRO_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FONT_MAP, PangoCairoFontMap)) +#define PANGO_CAIRO_IS_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FONT_MAP)) +#else #define PANGO_TYPE_CAIRO_FONT_MAP (pango_cairo_font_map_get_type ()) #define PANGO_CAIRO_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT_MAP, PangoCairoFontMap)) #define PANGO_IS_CAIRO_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT_MAP)) +#endif /** * PangoCairoShapeRendererFunc: diff --git a/pango/pangofc-decoder.h b/pango/pangofc-decoder.h index f4b8cc86..7c78958c 100644 --- a/pango/pangofc-decoder.h +++ b/pango/pangofc-decoder.h @@ -26,17 +26,25 @@ G_BEGIN_DECLS -#define PANGO_TYPE_FC_DECODER (pango_fc_decoder_get_type()) -#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_DECODER, PangoFcDecoder)) -#define PANGO_IS_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_DECODER)) +#ifdef __GI_SCANNER__ +#define PANGO_FC_TYPE_DECODER (pango_fc_decoder_get_type()) +#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_DECODER, PangoFcDecoder)) +#define PANGO_FC_IS_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_DECODER)) +#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_FC_TYPE_DECODER, PangoFcDecoderClass)) +#define PANGO_FC_IS_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_FC_TYPE_DECODER)) +#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_FC_TYPE_DECODER, PangoFcDecoderClass)) +#else +#define PANGO_TYPE_FC_DECODER (pango_fc_decoder_get_type()) +#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_DECODER, PangoFcDecoder)) +#define PANGO_IS_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_DECODER)) +#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass)) +#define PANGO_IS_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_DECODER)) +#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass)) +#endif typedef struct _PangoFcDecoder PangoFcDecoder; typedef struct _PangoFcDecoderClass PangoFcDecoderClass; -#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass)) -#define PANGO_IS_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_DECODER)) -#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass)) - /** * PangoFcDecoder: * diff --git a/pango/pangofc-font.h b/pango/pangofc-font.h index 641f5947..25a0277c 100644 --- a/pango/pangofc-font.h +++ b/pango/pangofc-font.h @@ -42,9 +42,15 @@ G_BEGIN_DECLS +#ifdef __GI_SCANNER__ +#define PANGO_FC_TYPE_FONT (pango_fc_font_get_type ()) +#define PANGO_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FONT, PangoFcFont)) +#define PANGO_FC_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FONT)) +#else #define PANGO_TYPE_FC_FONT (pango_fc_font_get_type ()) #define PANGO_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT, PangoFcFont)) #define PANGO_IS_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT)) +#endif typedef struct _PangoFcFont PangoFcFont; typedef struct _PangoFcFontClass PangoFcFontClass; diff --git a/pango/pangofc-fontmap.h b/pango/pangofc-fontmap.h index ae11ec31..a41ae1d9 100644 --- a/pango/pangofc-fontmap.h +++ b/pango/pangofc-fontmap.h @@ -35,9 +35,15 @@ G_BEGIN_DECLS * PangoFcFontMap */ +#ifdef __GI_SCANNER__ +#define PANGO_FC_TYPE_FONT_MAP (pango_fc_font_map_get_type ()) +#define PANGO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FONT_MAP, PangoFcFontMap)) +#define PANGO_FC_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FONT_MAP)) +#else #define PANGO_TYPE_FC_FONT_MAP (pango_fc_font_map_get_type ()) #define PANGO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT_MAP, PangoFcFontMap)) #define PANGO_IS_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT_MAP)) +#endif typedef struct _PangoFcFontMap PangoFcFontMap; typedef struct _PangoFcFontMapClass PangoFcFontMapClass; diff --git a/pango/pangoft2.h b/pango/pangoft2.h index 87d0ae2d..483bc366 100644 --- a/pango/pangoft2.h +++ b/pango/pangoft2.h @@ -33,9 +33,11 @@ G_BEGIN_DECLS +#ifndef __GI_SCANNER__ + #ifndef PANGO_DISABLE_DEPRECATED /** - * PANGO_RENDER_TYPE_FT2: + * PANGO_RENDER_TYPE_FT2: (skip) * * A string constant that was used to identify shape engines that work * with the FreeType backend. See %PANGO_RENDER_TYPE_FC for the replacement. @@ -43,9 +45,17 @@ G_BEGIN_DECLS #define PANGO_RENDER_TYPE_FT2 "PangoRenderFT2" #endif +#endif /* __GI_SCANNER__ */ + +#ifdef __GI_SCANNER__ +#define PANGO_FT2_TYPE_FONT_MAP (pango_ft2_font_map_get_type ()) +#define PANGO_FT2_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FT2_TYPE_FONT_MAP, PangoFT2FontMap)) +#define PANGO_FT2_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FT2_TYPE_FONT_MAP)) +#else #define PANGO_TYPE_FT2_FONT_MAP (pango_ft2_font_map_get_type ()) #define PANGO_FT2_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FT2_FONT_MAP, PangoFT2FontMap)) #define PANGO_FT2_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FT2_FONT_MAP)) +#endif typedef struct _PangoFT2FontMap PangoFT2FontMap; diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c index 45418c15..38198bc0 100644 --- a/pango/pangoxft-font.c +++ b/pango/pangoxft-font.c @@ -518,7 +518,7 @@ pango_xft_font_get_font (PangoFont *font) /** * pango_xft_font_get_display: (skip) - * @font: a #PangoFont. + * @font: (type PangoXftFont): a #PangoFont. * * Returns the X display of the `XftFont` of a font. * @@ -540,7 +540,7 @@ pango_xft_font_get_display (PangoFont *font) /** * pango_xft_font_get_unknown_glyph: - * @font: a #PangoFont. + * @font: (type PangoXftFont): a #PangoFont. * @wc: the Unicode character for which a glyph is needed. * * Returns the index of a glyph suitable for drawing @wc as an @@ -561,7 +561,7 @@ pango_xft_font_get_unknown_glyph (PangoFont *font, /** * pango_xft_font_lock_face: (skip) - * @font: a #PangoFont. + * @font: (type PangoXftFont): a #PangoFont. * * Gets the FreeType `FT_Face` associated with a font. * @@ -583,7 +583,7 @@ pango_xft_font_lock_face (PangoFont *font) /** * pango_xft_font_unlock_face: (skip) - * @font: a #PangoFont. + * @font: (type PangoXftFont): a #PangoFont. * * Releases a font previously obtained with * pango_xft_font_lock_face(). @@ -602,7 +602,7 @@ pango_xft_font_unlock_face (PangoFont *font) /** * pango_xft_font_get_glyph: - * @font: a #PangoFont for the Xft backend + * @font: (type PangoXftFont): a #PangoFont for the Xft backend * @wc: Unicode codepoint to look up * * Gets the glyph index for a given Unicode character @@ -627,7 +627,7 @@ pango_xft_font_get_glyph (PangoFont *font, /** * pango_xft_font_has_char: - * @font: a #PangoFont for the Xft backend + * @font: (type PangoXftFont): a #PangoFont for the Xft backend * @wc: Unicode codepoint to look up * * Determines whether @font has a glyph for the codepoint @wc. diff --git a/pango/pangoxft-render.h b/pango/pangoxft-render.h index 5893574b..77684728 100644 --- a/pango/pangoxft-render.h +++ b/pango/pangoxft-render.h @@ -38,12 +38,21 @@ typedef struct _PangoXftRenderer PangoXftRenderer; typedef struct _PangoXftRendererClass PangoXftRendererClass; typedef struct _PangoXftRendererPrivate PangoXftRendererPrivate; +#ifdef __GI_SCANNER__ +#define PANGO_XFT_TYPE_RENDERER (pango_xft_renderer_get_type()) +#define PANGO_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_XFT_TYPE_RENDERER, PangoXftRenderer)) +#define PANGO_XFT_IS_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_XFT_TYPE_RENDERER)) +#define PANGO_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_XFT_TYPE_RENDERER, PangoXftRendererClass)) +#define PANGO_XFT_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_XFT_TYPE_RENDERER)) +#define PANGO_XFT_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_XFT_TYPE_RENDERER, PangoXftRendererClass)) +#else #define PANGO_TYPE_XFT_RENDERER (pango_xft_renderer_get_type()) #define PANGO_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_RENDERER, PangoXftRenderer)) #define PANGO_IS_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_RENDERER)) #define PANGO_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass)) #define PANGO_IS_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_XFT_RENDERER)) #define PANGO_XFT_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass)) +#endif /** * PangoXftRenderer: diff --git a/pango/pangoxft.h b/pango/pangoxft.h index d02624f3..f14b89c9 100644 --- a/pango/pangoxft.h +++ b/pango/pangoxft.h @@ -31,8 +31,10 @@ G_BEGIN_DECLS +#ifndef __GI_SCANNER__ + /** - * PANGO_RENDER_TYPE_XFT: + * PANGO_RENDER_TYPE_XFT: (skip) * * A string constant that was used to identify shape engines that work * with the Xft backend. See %PANGO_RENDER_TYPE_FC for the replacement. @@ -41,6 +43,8 @@ G_BEGIN_DECLS #define PANGO_RENDER_TYPE_XFT "PangoRenderXft" #endif +#endif /* __GI_SCANNER__ */ + /** * PangoXftFontMap: * @@ -48,9 +52,20 @@ G_BEGIN_DECLS * the Xft library as the renderer. It is used in to create fonts of * type #PangoXftFont. */ -#define PANGO_TYPE_XFT_FONT_MAP (pango_xft_font_map_get_type ()) -#define PANGO_XFT_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap)) -#define PANGO_XFT_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP)) + +/* This is a hack needed because PangoXft hijacks the Pango namespace + * for the identifiers, but consumers expect these symbols to be under + * the PangoXft namespace. + */ +#ifdef __GI_SCANNER__ +#define PANGO_XFT_TYPE_FONT_MAP (pango_xft_font_map_get_type()) +#define PANGO_XFT_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_XFT_TYPE_FONT_MAP, PangoXftFontMap)) +#define PANGO_XFT_IS_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_XFT_TYPE_FONT_MAP)) +#else +#define PANGO_TYPE_XFT_FONT_MAP (pango_xft_font_map_get_type ()) +#define PANGO_XFT_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap)) +#define PANGO_XFT_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP)) +#endif typedef struct _PangoXftFontMap PangoXftFontMap; @@ -99,9 +114,15 @@ void pango_xft_substitute_changed (Display *display, PANGO_AVAILABLE_IN_ALL GType pango_xft_font_map_get_type (void) G_GNUC_CONST; -#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT, PangoXftFont)) +#ifdef __GI_SCANNER__ +#define PANGO_XFT_TYPE_FONT (pango_xft_font_get_type ()) +#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_XFT_TYPE_FONT, PangoXftFont)) +#define PANGO_XFT_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_XFT_TYPE_FONT)) +#else #define PANGO_TYPE_XFT_FONT (pango_xft_font_get_type ()) +#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT, PangoXftFont)) #define PANGO_XFT_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT)) +#endif PANGO_AVAILABLE_IN_ALL GType pango_xft_font_get_type (void) G_GNUC_CONST; diff --git a/tests/layouts/valid-4.expected b/tests/layouts/valid-4.expected index 09f143f3..66796cb5 100644 --- a/tests/layouts/valid-4.expected +++ b/tests/layouts/valid-4.expected @@ -5,7 +5,7 @@ This paragraph should actually have multiple lines, unlike all the other wan wrapped: 1 ellipsized: 0 lines: 6 -width: 194560 +width: 192512 --- attributes diff --git a/tests/layouts/valid-4.markup b/tests/layouts/valid-4.markup index 16111976..0b2bb51a 100644 --- a/tests/layouts/valid-4.markup +++ b/tests/layouts/valid-4.markup @@ -1,2 +1,2 @@ -width=190 +width=188 This paragraph should actually have multiple lines, unlike all the other wannabe äöü paragraph tests in this ugh test-case. Grow some lines! diff --git a/tests/testattributes.c b/tests/testattributes.c index 4eea97da..d6c8c87c 100644 --- a/tests/testattributes.c +++ b/tests/testattributes.c @@ -627,6 +627,12 @@ test_list_equal (void) list1 = pango_attr_list_new (); list2 = pango_attr_list_new (); + g_assert_true (pango_attr_list_equal (NULL, NULL)); + g_assert_false (pango_attr_list_equal (list1, NULL)); + g_assert_false (pango_attr_list_equal (NULL, list1)); + g_assert_true (pango_attr_list_equal (list1, list1)); + g_assert_true (pango_attr_list_equal (list1, list2)); + attr = pango_attr_size_new (10 * PANGO_SCALE); attr->start_index = 0; attr->end_index = 7; @@ -688,6 +694,142 @@ test_list_equal (void) } } +static void +test_insert (void) +{ + PangoAttrList *list; + PangoAttribute *attr; + + list = pango_attr_list_new (); + attr = pango_attr_size_new (10 * PANGO_SCALE); + attr->start_index = 10; + attr->end_index = 11; + pango_attr_list_insert (list, attr); + attr = pango_attr_rise_new (100); + attr->start_index = 0; + attr->end_index = 200; + pango_attr_list_insert (list, attr); + attr = pango_attr_family_new ("Times"); + attr->start_index = 5; + attr->end_index = 15; + pango_attr_list_insert (list, attr); + attr = pango_attr_fallback_new (FALSE); + attr->start_index = 11; + attr->end_index = 100; + pango_attr_list_insert (list, attr); + attr = pango_attr_stretch_new (PANGO_STRETCH_CONDENSED); + attr->start_index = 30; + attr->end_index = 60; + pango_attr_list_insert (list, attr); + + assert_attr_list (list, "[0,200]rise=100\n" + "[5,15]family=Times\n" + "[10,11]size=10240\n" + "[11,100]fallback=0\n" + "[30,60]stretch=2\n"); + + attr = pango_attr_family_new ("Times"); + attr->start_index = 10; + attr->end_index = 25; + pango_attr_list_change (list, attr); + + assert_attr_list (list, "[0,200]rise=100\n" + "[5,25]family=Times\n" + "[10,11]size=10240\n" + "[11,100]fallback=0\n" + "[30,60]stretch=2\n"); + + attr = pango_attr_family_new ("Futura"); + attr->start_index = 11; + attr->end_index = 25; + pango_attr_list_insert (list, attr); + + assert_attr_list (list, "[0,200]rise=100\n" + "[5,25]family=Times\n" + "[10,11]size=10240\n" + "[11,100]fallback=0\n" + "[11,25]family=Futura\n" + "[30,60]stretch=2\n"); + + pango_attr_list_unref (list); +} + +static gboolean +attr_list_merge_filter (PangoAttribute *attribute, + gpointer list) +{ + pango_attr_list_change (list, pango_attribute_copy (attribute)); + return FALSE; +} + +/* test something that gtk does */ +static void +test_merge (void) +{ + PangoAttrList *list; + PangoAttrList *list2; + PangoAttribute *attr; + + list = pango_attr_list_new (); + attr = pango_attr_size_new (10 * PANGO_SCALE); + attr->start_index = 10; + attr->end_index = 11; + pango_attr_list_insert (list, attr); + attr = pango_attr_rise_new (100); + attr->start_index = 0; + attr->end_index = 200; + pango_attr_list_insert (list, attr); + attr = pango_attr_family_new ("Times"); + attr->start_index = 5; + attr->end_index = 15; + pango_attr_list_insert (list, attr); + attr = pango_attr_fallback_new (FALSE); + attr->start_index = 11; + attr->end_index = 100; + pango_attr_list_insert (list, attr); + attr = pango_attr_stretch_new (PANGO_STRETCH_CONDENSED); + attr->start_index = 30; + attr->end_index = 60; + pango_attr_list_insert (list, attr); + + assert_attr_list (list, "[0,200]rise=100\n" + "[5,15]family=Times\n" + "[10,11]size=10240\n" + "[11,100]fallback=0\n" + "[30,60]stretch=2\n"); + + list2 = pango_attr_list_new (); + attr = pango_attr_size_new (10 * PANGO_SCALE); + attr->start_index = 11; + attr->end_index = 13; + pango_attr_list_insert (list2, attr); + attr = pango_attr_size_new (11 * PANGO_SCALE); + attr->start_index = 13; + attr->end_index = 15; + pango_attr_list_insert (list2, attr); + attr = pango_attr_size_new (12 * PANGO_SCALE); + attr->start_index = 40; + attr->end_index = 50; + pango_attr_list_insert (list2, attr); + + assert_attr_list (list2, "[11,13]size=10240\n" + "[13,15]size=11264\n" + "[40,50]size=12288\n"); + + pango_attr_list_filter (list2, attr_list_merge_filter, list); + + assert_attr_list (list, "[0,200]rise=100\n" + "[5,15]family=Times\n" + "[10,13]size=10240\n" + "[11,100]fallback=0\n" + "[13,15]size=11264\n" + "[30,60]stretch=2\n" + "[40,50]size=12288\n"); + + pango_attr_list_unref (list); + pango_attr_list_unref (list2); +} + int main (int argc, char *argv[]) { @@ -701,6 +843,8 @@ main (int argc, char *argv[]) g_test_add_func ("/attributes/list/filter", test_list_filter); g_test_add_func ("/attributes/list/update", test_list_update); g_test_add_func ("/attributes/list/equal", test_list_equal); + g_test_add_func ("/attributes/list/insert", test_insert); + g_test_add_func ("/attributes/list/merge", test_merge); g_test_add_func ("/attributes/iter/basic", test_iter); g_test_add_func ("/attributes/iter/get", test_iter_get); g_test_add_func ("/attributes/iter/get_font", test_iter_get_font); diff --git a/tests/testmisc.c b/tests/testmisc.c index a078944d..f5583cab 100644 --- a/tests/testmisc.c +++ b/tests/testmisc.c @@ -41,12 +41,26 @@ test_shape_tab_crash (void) g_object_unref (context); } +/* Test that itemizing a string with 0 characters works + */ +static void +test_itemize_empty_crash (void) +{ + PangoContext *context; + + context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); + pango_itemize_with_base_dir (context, PANGO_DIRECTION_LTR, "", 0, 1, NULL, NULL); + + g_object_unref (context); +} + int main (int argc, char *argv[]) { g_test_init (&argc, &argv, NULL); g_test_add_func ("/layout/shape-tab-crash", test_shape_tab_crash); + g_test_add_func ("/layout/itemize-empty-crash", test_itemize_empty_crash); return g_test_run (); } |