diff options
author | Christopher Blizzard <blizzard@redhat.com> | 2004-06-09 22:03:18 +0000 |
---|---|---|
committer | Christopher Blizzard <blizzard@src.gnome.org> | 2004-06-09 22:03:18 +0000 |
commit | 5ca931f88a431fa7158a8e406d3bf92a1bdafd07 (patch) | |
tree | ef7933a8755cd870fa96267cab67ce9d0f4d280f /pango/pangofc-font.c | |
parent | d2f58271eab023e452d84a8dd855ad06151d0eb6 (diff) | |
download | pango-5ca931f88a431fa7158a8e406d3bf92a1bdafd07.tar.gz |
Add export of pangofc-decoder.h. Build pangofc-decoder.c.
Wed Jun 9 17:32:59 2004 Christopher Blizzard <blizzard@redhat.com>
* pango/Makefile.am: Add export of pangofc-decoder.h. Build
pangofc-decoder.c.
* pango/pangofc-decoder.h pango/pangofc-decoder.c: New files.
Virtual base class for any custom font decoders.
* pango/pangofc-font.c: Add new PangoFcFontPrivate structure.
* pango/pangofc-font.c (pango_fc_font_class_init): Attach new
private structure using g_type_class_add_private().
* pango/pangofc-font.c (pango_fc_font_finalize): Make sure to
unset any decoders that are attached to the font.
* pango/pangofc-font.c (pango_fc_font_get_coverage): When
determining coverage, use a custom decoder if available.
* pango/pangofc-font.c (pango_fc_font_has_char): When determining
if a font has a character, use a custom decoder if available.
* pango/pangofc-font.c (pango_fc_font_get_glyph): When doing
single character to glyph convertions, use a custom decoder if
available.
* pango/pangofc-font.c (_pango_fc_font_get_decoder): New
function. Get the custom decoder for the given font.
* pango/pangofc-font.c (_pango_fc_font_set_decoder): New
function. Set a custom decoder for the given font.
* pango/pangofc-fontmap.c: Add structure PangoFcFindFuncInfo to
keep track of callbacks to create custom decoders. Modify
PangoFcFontMapPrivate by adding a list of PangoFcFontFuncInfo
callbacks that have been registered.
* pango/pangofc-fontmap.c (pango_fc_font_map_add_find_func): New
function. Add callbacks to the fontmap that will create custom
decoders when pango creates new fonts.
* pango/pangofc-fontmap.c (pango_fc_font_map_finalize): Clear out
any findfuncs that have been registered and notify them about
destruction.
* pango/pangofc-fontmap.c (pango_fc_font_map_new_font): When
creating new fonts, call back to any registered find functions so
they can create custom decoders for those fonts. Attach those
custom decoders to the newly created fonts.
* pango/pangofc-fontmap.c (_pango_fc_font_map_get_coverage):
Change the argument to take a PangoFcFont instead of an FcPattern.
Call _pango_fc_font_map_fc_to_coverage instead of doing the
conversion inline.
* pango/pangofc-fontmap.c (_pango_fc_font_map_fc_to_coverage): New
function. Convert an FcCharSet to a PangoCoverage object.
* pango/pangofc-fontmap.h: New declarations for
pango_fc_font_map_add_decoder_find_func and
PangoFcDecoderFindFunc.
* pango/pangofc-private.h: New declarations for
_pango_fc_font_map_fc_to_coverage, _pango_fc_font_get_decoder and
_pango_fc_font_set_decoder.
Diffstat (limited to 'pango/pangofc-font.c')
-rw-r--r-- | pango/pangofc-font.c | 84 |
1 files changed, 83 insertions, 1 deletions
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c index de43513d..a7e35ebf 100644 --- a/pango/pangofc-font.c +++ b/pango/pangofc-font.c @@ -48,6 +48,15 @@ enum { PROP_PATTERN }; +typedef struct _PangoFcFontPrivate PangoFcFontPrivate; + +#define PANGO_FC_FONT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), PANGO_TYPE_FC_FONT, PangoFcFontPrivate)) + +struct _PangoFcFontPrivate +{ + PangoFcDecoder *decoder; +}; + static void pango_fc_font_class_init (PangoFcFontClass *class); static void pango_fc_font_finalize (GObject *object); static void pango_fc_font_set_property (GObject *object, @@ -114,6 +123,8 @@ pango_fc_font_class_init (PangoFcFontClass *class) "Pattern", "The fontconfig pattern for this font", G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + + g_type_class_add_private (object_class, sizeof (PangoFcFontPrivate)); } static void @@ -127,6 +138,7 @@ static void pango_fc_font_finalize (GObject *object) { PangoFcFont *fcfont = PANGO_FC_FONT (object); + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (fcfont); g_slist_foreach (fcfont->metrics_by_lang, (GFunc)free_metrics_info, NULL); g_slist_free (fcfont->metrics_by_lang); @@ -137,6 +149,9 @@ pango_fc_font_finalize (GObject *object) FcPatternDestroy (fcfont->font_pattern); pango_font_description_free (fcfont->description); + if (priv->decoder) + _pango_fc_font_set_decoder (fcfont, NULL); + parent_class->finalize (object); } @@ -206,9 +221,17 @@ pango_fc_font_get_coverage (PangoFont *font, PangoLanguage *language) { PangoFcFont *fcfont = (PangoFcFont *)font; + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (fcfont); + FcCharSet *charset; + + if (priv->decoder) + { + charset = pango_fc_decoder_get_charset (priv->decoder, fcfont); + return _pango_fc_font_map_fc_to_coverage (charset); + } return _pango_fc_font_map_get_coverage (PANGO_FC_FONT_MAP (fcfont->fontmap), - fcfont->font_pattern); + fcfont); } static void @@ -472,8 +495,17 @@ gboolean pango_fc_font_has_char (PangoFcFont *font, gunichar wc) { + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (font); + FcCharSet *charset; + g_return_val_if_fail (PANGO_IS_FC_FONT (font), FALSE); + if (priv->decoder) + { + charset = pango_fc_decoder_get_charset (priv->decoder, font); + return FcCharSetHasChar (charset, wc); + } + return PANGO_FC_FONT_GET_CLASS (font)->has_char (font, wc); } @@ -495,8 +527,13 @@ PangoGlyph pango_fc_font_get_glyph (PangoFcFont *font, gunichar wc) { + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (font); + g_return_val_if_fail (PANGO_IS_FC_FONT (font), 0); + if (priv->decoder) + return pango_fc_decoder_get_glyph (priv->decoder, font, wc); + return PANGO_FC_FONT_GET_CLASS (font)->get_glyph (font, wc); } @@ -577,3 +614,48 @@ pango_fc_font_kern_glyphs (PangoFcFont *font, pango_fc_font_unlock_face (font); } + +/** + * _pango_fc_font_get_decoder + * @font: a #PangoFcFont + * + * This will return any custom decoder set on this font. + * + * Returns: The custom decoder + * + * Since: 1.6 + **/ + +PangoFcDecoder * +_pango_fc_font_get_decoder (PangoFcFont *font) +{ + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (font); + + return priv->decoder; +} + +/** + * _pango_fc_font_set_decoder + * @font: a #PangoFcFont + * @decoder: a #PangoFcDecoder to set for this font + * + * This sets a custom decoder for this font. Any previous decoder + * will be released before this one is set. + * + * Since: 1.6 + **/ + +void +_pango_fc_font_set_decoder (PangoFcFont *font, + PangoFcDecoder *decoder) +{ + PangoFcFontPrivate *priv = PANGO_FC_FONT_GET_PRIVATE (font); + + if (priv->decoder) + g_object_unref (priv->decoder); + + priv->decoder = decoder; + + if (priv->decoder) + g_object_ref (priv->decoder); +} |