From 8b937f183cab50e783265c10dbafc3597c0529f5 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Tue, 16 Jan 2007 23:44:34 +0100 Subject: [PATCH] plug small pango font memory leak. --- lily/all-font-metrics.cc | 7 +------ lily/grob-smob.cc | 3 +++ lily/include/all-font-metrics.hh | 5 +---- lily/include/pango-font.hh | 2 +- lily/pango-font.cc | 4 ++-- lily/paper-def.cc | 9 ++++++++- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index bf2aadd4bb..282acb770a 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -65,15 +65,10 @@ All_font_metrics::All_font_metrics (All_font_metrics const &) #if HAVE_PANGO_FT2 Pango_font * -All_font_metrics::find_pango_font (PangoFontDescription *description, - Real magnification, +All_font_metrics::find_pango_font (PangoFontDescription const *description, Real output_scale ) { - pango_font_description_set_size (description, - gint (magnification * - pango_font_description_get_size (description))); - gchar *pango_fn = pango_font_description_to_filename (description); SCM key = ly_symbol2scm (pango_fn); diff --git a/lily/grob-smob.cc b/lily/grob-smob.cc index 4fb42c9237..f3fcb7d2fa 100644 --- a/lily/grob-smob.cc +++ b/lily/grob-smob.cc @@ -9,6 +9,7 @@ #include "grob.hh" #include "paper-score.hh" +#include "warn.hh" #include "ly-smobs.icc" @@ -19,6 +20,8 @@ IMPLEMENT_TYPE_P (Grob, "ly:grob?"); SCM Grob::mark_smob (SCM ses) { + ASSERT_LIVE_IS_ALLOWED(); + Grob *s = (Grob *) SCM_CELL_WORD_1 (ses); scm_gc_mark (s->immutable_property_alist_); diff --git a/lily/include/all-font-metrics.hh b/lily/include/all-font-metrics.hh index 34a05e701f..33ffacc327 100644 --- a/lily/include/all-font-metrics.hh +++ b/lily/include/all-font-metrics.hh @@ -43,11 +43,8 @@ public: All_font_metrics (string search_path); ~All_font_metrics (); -#if HAVE_PANGO_FT2 - Pango_font *find_pango_font (PangoFontDescription *description, - Real magnification, + Pango_font *find_pango_font (PangoFontDescription const *description, Real scale); -#endif Font_metric *find_font (string name); Open_type_font *find_otf (string name); diff --git a/lily/include/pango-font.hh b/lily/include/pango-font.hh index 5449ec0a42..52117459c8 100644 --- a/lily/include/pango-font.hh +++ b/lily/include/pango-font.hh @@ -32,7 +32,7 @@ class Pango_font : public Font_metric public: SCM physical_font_tab () const; Pango_font (PangoFT2FontMap *, - PangoFontDescription *, + PangoFontDescription const *, Real); ~Pango_font (); diff --git a/lily/pango-font.cc b/lily/pango-font.cc index 575c6846be..4b5b731d15 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -26,15 +26,15 @@ #include "stencil.hh" Pango_font::Pango_font (PangoFT2FontMap *fontmap, - PangoFontDescription *description, + PangoFontDescription const *description, Real output_scale) { (void) fontmap; + 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_ft2_font_map_create_context (fontmap); pango_description_ = pango_font_description_copy (description); attribute_list_ = pango_attr_list_new (); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 8a17064261..ef738fc71f 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -80,10 +80,17 @@ find_pango_font (Output_def *layout, SCM descr, Real factor) PangoFontDescription *description = pango_font_description_from_string (scm_i_string_chars (descr)); + + pango_font_description_set_size (description, + gint (factor * + pango_font_description_get_size (description))); + + Font_metric *fm = all_fonts_global->find_pango_font (description, - factor, output_scale (layout)); + pango_font_description_free (description); + sizes = scm_acons (size_key, fm->self_scm (), sizes); scm_hash_set_x (table, descr, sizes); -- 2.39.5