From: Jan Nieuwenhuizen Date: Mon, 14 Jun 2004 23:43:58 +0000 (+0000) Subject: Pick-up user-installe pango. X-Git-Tag: release/2.2.3~1^2~30 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8e91a4ab0e1612233aaa4f6cac90075d2f8786d3;p=lilypond.git Pick-up user-installe pango. --- diff --git a/ChangeLog b/ChangeLog index 2c0c3e6174..a007122d10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2004-06-15 Jan Nieuwenhuizen + + * buildscripts/guile-gnome.sh: Pick-up user-installe pango. + 2004-06-15 Han-Wen Nienhuys * lily/tuplet-bracket.cc (before_line_breaking): do not return diff --git a/buildscripts/guile-gnome.sh b/buildscripts/guile-gnome.sh index 5c8c425a4a..a9cf1bff1d 100644 --- a/buildscripts/guile-gnome.sh +++ b/buildscripts/guile-gnome.sh @@ -13,7 +13,7 @@ set -ex if [ -d $HOME/usr/pkg/libffi/ ]; then export LDFLAGS=-L$HOME/usr/pkg/libffi/lib export CPPFLAGS=-I$HOME/usr/pkg/libffi/include -fi +fi export AUTOMAKE=automake-1.8 export AUTOCONF=autoconf2.50 @@ -81,13 +81,24 @@ export GUILE_LOAD_PATH=$HOME/usr/pkg/g-wrap/share/guile/site:$GUILE_LOAD_PATH export LD_LIBRARY_PATH=$HOME/usr/pkg/g-wrap/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=$HOME/usr/pkg/g-wrap/lib/pkgconfig:$PKG_CONFIG_PATH -../src/configure --prefix=$HOME/usr/pkg/guile-gnome +# ugh +# pango CVS wants libtool 1.5.6 (barfs with 1.6.0) +# guile-gnome wants libtool 1.6.0 (barfs with 1.5.6) +if [ -d $HOME/usr/pkg/pango/ ]; then + export PKG_CONFIG_PATH=$HOME/usr/pkg/pango/lib/pkgconfig:$PKG_CONFIG_PATH + export LDFLAGS=-L$HOME/usr/pkg/pango/lib + export CPPFLAGS=-I$HOME/usr/pkg/pango/include/pango-1.0 +fi -# requires 800mb RAM with -O2 -# using gcc-3.4 may help here -- jcn -(cd libgnomecanvas/gnome/gw; perl -i~ -pe 's/-O2//g' Makefile) +../src/configure --prefix=$HOME/usr/pkg/guile-gnome -G_WRAP_MODULE_DIR=$HOME/usr/pkg/g-wrap/share/guile/site make install +if [ -x /usr/bin/gcc-3.4 ]; then + G_WRAP_MODULE_DIR=$HOME/usr/pkg/g-wrap/share/guile/site make install CC=gcc-3.4 +else + ## requires 800mb RAM with -O2 -- are you sure that's not for ./gtk ? + (cd libgnomecanvas/gnome/gw; perl -i~ -pe 's/-O2//g' Makefile) + G_WRAP_MODULE_DIR=$HOME/usr/pkg/g-wrap/share/guile/site make install +fi export GUILE_LOAD_PATH=$HOME/usr/pkg/guile-gnome/share/guile:$GUILE_LOAD_PATH export LD_LIBRARY_PATH=$HOME/usr/pkg/guile-gnome/lib:$LD_LIBRARY_PATH diff --git a/lily/stencil.cc b/lily/stencil.cc index e10f1f403a..3d7420efac 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -140,7 +140,7 @@ void Stencil::align_to (Axis a, Real x) { if (is_empty ()) - return ; + return; Interval i (extent (a)); translate_axis (-i.linear_combination (x), a); @@ -192,26 +192,25 @@ Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding, void interpret_stencil_expression (SCM expr, - void (*func) (void*, SCM), - void *func_arg, - Offset o) + void (*func) (void*, SCM), + void *func_arg, + Offset o) { while (1) { if (!ly_c_pair_p (expr)) return; - + SCM head =ly_car (expr); if (unsmob_input (head)) { Input *ip = unsmob_input (head); - (*func)(func_arg, - scm_list_4 (ly_symbol2scm ("define-origin"), - scm_makfrom0str (ip->file_string () - .to_str0 ()), - scm_int2num (ip->line_number ()), - scm_int2num (ip->column_number ()))); - + (*func) (func_arg, + scm_list_4 (ly_symbol2scm ("define-origin"), + scm_makfrom0str (ip->file_string () + .to_str0 ()), + scm_int2num (ip->line_number ()), + scm_int2num (ip->column_number ()))); expr = ly_cadr (expr); } else if (head == ly_symbol2scm ("no-origin")) @@ -227,10 +226,8 @@ interpret_stencil_expression (SCM expr, else if (head == ly_symbol2scm ("combine-stencil")) { for (SCM x = ly_cdr (expr); ly_c_pair_p (x); x = ly_cdr (x)) - { - interpret_stencil_expression (ly_car (x), func, func_arg, o); - } - return ; + interpret_stencil_expression (ly_car (x), func, func_arg, o); + return; } else { @@ -239,7 +236,7 @@ interpret_stencil_expression (SCM expr, scm_make_real (o[X_AXIS]), scm_make_real (o[Y_AXIS]), expr)); - return; + return; } } } @@ -251,10 +248,10 @@ struct Font_list }; static void -find_font_function (void * fs, SCM x) +find_font_function (void *fs, SCM x) { - Font_list * me = (Font_list*)fs; - + Font_list *me = (Font_list*) fs; + if (ly_car (x) == ly_symbol2scm ("placebox")) { SCM args = ly_cdr (x); @@ -263,9 +260,9 @@ find_font_function (void * fs, SCM x) if (ly_c_pair_p (what)) { SCM head = ly_car (what); - if (ly_symbol2scm ("text") == head) + if (ly_symbol2scm ("text") == head) me->fonts_ = scm_cons (ly_cadr (what), me->fonts_); - else if (head == ly_symbol2scm ("char")) + else if (head == ly_symbol2scm ("char")) me->fonts_ = scm_cons (ly_cadr (what), me->fonts_); } } @@ -279,7 +276,7 @@ find_expression_fonts (SCM expr) fl.fonts_ = SCM_EOL; interpret_stencil_expression (expr, &find_font_function, - (void*) &fl, Offset (0,0)); + (void*) &fl, Offset (0,0)); return fl.fonts_; } @@ -294,14 +291,15 @@ LY_DEFINE (ly_stencil_fonts, "ly:stencil-fonts", return find_expression_fonts (stil->expr ()); } -struct Stencil_interpret_arguments { +struct Stencil_interpret_arguments +{ SCM func; SCM arg1; }; -void stencil_interpret_in_scm (void* p, SCM expr) +void stencil_interpret_in_scm (void *p, SCM expr) { - Stencil_interpret_arguments * ap = (Stencil_interpret_arguments*) p; + Stencil_interpret_arguments *ap = (Stencil_interpret_arguments*) p; scm_call_2 (ap->func, ap->arg1, expr); } @@ -311,16 +309,15 @@ LY_DEFINE (ly_interpret_stencil_expression, "ly:interpret-stencil-expression", 4, 0, 0, (SCM expr, SCM func, SCM arg1, SCM offset), "Parse EXPR, feed bits to FUNC with first arg ARG1") { - SCM_ASSERT_TYPE(ly_c_procedure_p(func), func, SCM_ARG1, __FUNCTION__, - "procedure"); - - Stencil_interpret_arguments a ; + SCM_ASSERT_TYPE (ly_c_procedure_p(func), func, SCM_ARG1, __FUNCTION__, + "procedure"); + + Stencil_interpret_arguments a; a.func = func; a.arg1 = arg1; Offset o = ly_scm2offset (offset); - interpret_stencil_expression (expr, stencil_interpret_in_scm, - (void*) &a, o); + interpret_stencil_expression (expr, stencil_interpret_in_scm, (void*) &a, o); return SCM_UNSPECIFIED; } diff --git a/scm/framework-gnome.scm b/scm/framework-gnome.scm index 33c8953224..d3e7dd181b 100644 --- a/scm/framework-gnome.scm +++ b/scm/framework-gnome.scm @@ -7,53 +7,30 @@ (define-module (scm framework-gnome)) (use-modules (guile) (lily)) +(use-modules + (gnome gtk) + (gnome gtk gdk-event) + (gnome gw canvas)) + (define-public (output-framework-gnome outputter book scopes fields basename) (let* ((bookpaper (ly:paper-book-book-paper book)) (pages (list->vector (ly:paper-book-pages book)))) -;; try #1 - (if #f - (use-modules - (gnome gtk) - (gnome gtk gdk-event) - (gnome gw canvas))) - -;; try #2 - ;; waarom maken ze dit nou allemaal toch weer zo moeilijk? - ;; is there any documentation about modules for guile 1.6.4? - (map (lambda (x) (ly:import-module (current-module) (resolve-module x))) - '((gnome gtk) - (gnome gtk gdk-event) - (gnome gw canvas))) - - (if #f - (let* ((window (make #:type 'toplevel))) - (write window))) + ;; yay, it works + ;; TODO: goops class instance with + ;; - main-window? + ;; - main-scrolled window + ;; - canvas + ;; - page-number + ;; - pixels-per-unit (or can get from canvas?) + ;; - text-items list + ;; - item-locations hashmap + + ;; give that as first argument to all outputter/stencil functions? + ;; + (let* ((window (make #:type 'toplevel))) + (write window)) - ;; try #3 - (if #f - (let ((the-module-previously-known-as-current-module (current-module))) - (map (lambda (x) (ly:import-module - the-module-previously-known-as-current-module - (resolve-module x))) - '((gnome gtk) - (gnome gtk gdk-event) - (gnome gw canvas))) - - (eval '(let* ((window (make #:type 'toplevel))) - (write window)) - the-module-previously-known-as-current-module))) - - ;;try #4 - (if #f - (eval '(use-modules - (gnome gtk) - (gnome gtk gdk-event) - (gnome gw canvas)) - (let* ((window (make #:type 'toplevel))) - (write window)) - (current-module))) - (ly:outputter-dump-stencil outputter (ly:make-stencil (list 'main outputter bookpaper pages) diff --git a/scm/output-gnome.scm b/scm/output-gnome.scm index 62bdc8df83..d62b82e557 100644 --- a/scm/output-gnome.scm +++ b/scm/output-gnome.scm @@ -64,6 +64,84 @@ lilypond-bin -fgnome input/simple-song.ly ;;; SCRIPT moved to buildscripts/guile-gnome.sh +" + +// pango CVS supports custom font mappings + +// pango-CVS afm font mapping pseudo code +// - ask for help on gnome/gtk list? +// - get it to work +// - add to guile-gnome or to lily? + +#if 0 +// what about these? +pango_fc_decoder_class_init (PangoFcDecoderClass *klass) +pango_fc_decoder_init (PangoFcDecoder *decoder) +#endif + +FcCharset * +get_afm_charset (PangoFcFont *fcfont) +{ + // read afm + // convert afm mapping into FcCharset +} + +PangoGlyph * +get_afm_glyph (PangoFcFont *fcfont, guint32 wc) +{ + // map wc -> character name + // `get' character by name from font + // turn character into PangoGlyph +} + +PangoFcDecoder * +find_afm_decoder (FcPattern *pattern, gpointer user_data) +{ + // what is pattern, what is user_data? + // where do I get the font-name/font-file-name -> .AFM file mapping in? + + // Hmm, now what about the virtual baseclassness, + // Should I derive an AfmDecoder, AfmDecoderClass + // And how does that work in C / gtk+? + + PangoFcDecoderClass *dclass; + dclass = g_new (PangoFcDecoderClass, 1); + dclass->get_charset = &get_afm_charset; + dclass->get_charset = &get_afm_glyph; + + // What's the connection between the decoder and the class? + // #define _G_TYPE_IGC(ip, gt, ct) ((ct*) (((GTypeInstance*) ip)->g_class)) + + PangoFcDecoder *decoder; + decoder = g_new (PangoFcDecoder, 1); + + //Hmmm, there must be less hairy way? + decoder->parent_instance = dclass; + + return decoder; +} + +void +setup_pango (GtkWidget *canvas) +{ + // how to get map? + PangoFcFontMap *map; +#if 1 + // get map from context from widget + map = gtk_widget_get_pango_context (canvas) -> font_map; +#else + pango_x_font_map_for_display (display)) + //pango_xft_get_font_map (display, screen); +#endif + + pango_fc_font_map_add_decoder_find_func (map, &find_afm_decoder); +} + + + + +" + (debug-enable 'backtrace)