]> git.donarmstrong.com Git - lilypond.git/commitdiff
Pick-up user-installe pango.
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 14 Jun 2004 23:43:58 +0000 (23:43 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 14 Jun 2004 23:43:58 +0000 (23:43 +0000)
ChangeLog
buildscripts/guile-gnome.sh
lily/stencil.cc
scm/framework-gnome.scm
scm/output-gnome.scm

index 2c0c3e6174a78df58bc6bdc8f872d2b50a26e0a5..a007122d102bb4ece683d0a0e9612630047df565 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-06-15  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * buildscripts/guile-gnome.sh: Pick-up user-installe pango.
+
 2004-06-15  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
        * lily/tuplet-bracket.cc (before_line_breaking): do not return
index 5c8c425a4aeb4b5d0cfb180edf4d3057252e4dce..a9cf1bff1d4ea8e298110cb3d1c6046d0ec5025c 100644 (file)
@@ -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
index e10f1f403a00d701e2da53ea9490c243018ee4d9..3d7420efacbd39287a40ef222540a9fe52ff57f6 100644 (file)
@@ -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 (voidp, 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;
 }
index 33c895322406d84cd6e0782b364fdbb638d84b5b..d3e7dd181b6feff8df62d92e706136628d2e68c0 100644 (file)
@@ -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 <gtk-window> #: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 <gtk-window> #: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 <gtk-window> #: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 <gtk-window> #:type 'toplevel)))
-               (write window))
-             (current-module)))
-
     (ly:outputter-dump-stencil
      outputter
      (ly:make-stencil (list 'main outputter bookpaper pages)
index 62bdc8df8342ba522958792c3e48dbf2097cfc67..d62b82e557961e9bb5027bb27869795f6ead3841 100644 (file)
@@ -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)