X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpango-font.cc;h=e9fb2e8fda4b4d1f20426e4cda4a74ee5f3566da;hb=2e581052026c48aed3e44fd32de74b8308f8434d;hp=86affcd7823275492618b76fecb88719ad16b957;hpb=1f0dbc5ce41f4fa5aecc2994452b58ba42ca558c;p=lilypond.git diff --git a/lily/pango-font.cc b/lily/pango-font.cc index 86affcd782..e9fb2e8fda 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2009 Han-Wen Nienhuys + Copyright (C) 2004--2010 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,7 +17,10 @@ along with LilyPond. If not, see . */ -#define PANGO_ENABLE_BACKEND // ugh, why necessary? +// Necessary for supporting pango_context_new() and +// pango_context_set_font_map() in Pango < 1.22 +#define PANGO_ENABLE_BACKEND + #include #include @@ -40,14 +43,14 @@ #if HAVE_PANGO_FT2 #include "stencil.hh" -Pango_font::Pango_font (PangoFT2FontMap * /* fontmap */, +Pango_font::Pango_font (PangoFT2FontMap *fontmap, PangoFontDescription const *description, Real output_scale) { physical_font_tab_ = scm_c_make_hash_table (11); PangoDirection pango_dir = PANGO_DIRECTION_LTR; - context_ = pango_ft2_get_context (PANGO_RESOLUTION, - PANGO_RESOLUTION); + context_ = pango_context_new (); + pango_context_set_font_map (context_, PANGO_FONT_MAP (fontmap)); pango_description_ = pango_font_description_copy (description); attribute_list_ = pango_attr_list_new (); @@ -108,8 +111,7 @@ get_unicode_name (char *s, } Stencil -Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item, - bool tight_bbox) const +Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item) const { const int GLYPH_NAME_LEN = 256; char glyph_name[GLYPH_NAME_LEN]; @@ -121,19 +123,15 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item, PangoRectangle ink_rect; pango_glyph_string_extents (pgs, pa->font, &ink_rect, &logical_rect); - PangoFcFont *fcfont = G_TYPE_CHECK_INSTANCE_CAST (pa->font, - PANGO_TYPE_FC_FONT, - PangoFcFont); + PangoFcFont *fcfont = PANGO_FC_FONT (pa->font); FT_Face ftface = pango_fc_font_lock_face (fcfont); - PangoRectangle const *which_rect = tight_bbox ? &ink_rect - : &logical_rect; - Box b (Interval (PANGO_LBEARING (logical_rect), PANGO_RBEARING (logical_rect)), - Interval (-PANGO_DESCENT (*which_rect), - PANGO_ASCENT (*which_rect))); + Interval (-PANGO_DESCENT (ink_rect), + PANGO_ASCENT (ink_rect))); + b.scale (scale_); char const *ps_name_str0 = FT_Get_Postscript_Name (ftface); @@ -182,8 +180,8 @@ Pango_font::pango_item_string_stencil (PangoGlyphItem const *glyph_item, glyph_name[0] = '\0'; if (has_glyph_names) { - int errorcode = FT_Get_Glyph_Name (ftface, pg, glyph_name, - GLYPH_NAME_LEN); + FT_Error errorcode = FT_Get_Glyph_Name (ftface, pg, glyph_name, + GLYPH_NAME_LEN); if (errorcode) programming_error ( _f ("FT_Get_Glyph_Name () error: %s", @@ -299,24 +297,11 @@ Pango_font::physical_font_tab () const return physical_font_tab_; } -Stencil -Pango_font::word_stencil (string str, bool music_string) const -{ - return text_stencil (str, music_string, true); -} - -Stencil -Pango_font::text_stencil (string str, bool music_string) const -{ - return text_stencil (str, music_string, false); -} - extern bool music_strings_to_paths; Stencil -Pango_font::text_stencil (string str, - bool music_string, - bool tight) const +Pango_font::text_stencil (Output_def *state, + string str, bool music_string) const { /* The text assigned to a PangoLayout is automatically divided @@ -338,7 +323,7 @@ Pango_font::text_stencil (string str, for (GSList *p = layout_runs; p; p = p->next) { PangoGlyphItem *item = (PangoGlyphItem *) p->data; - Stencil item_stencil = pango_item_string_stencil (item, tight); + Stencil item_stencil = pango_item_string_stencil (item); item_stencil.translate_axis (last_x, X_AXIS); last_x = item_stencil.extent (X_AXIS)[RIGHT];