+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
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
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
Stencil::align_to (Axis a, Real x)
{
if (is_empty ())
- return ;
+ return;
Interval i (extent (a));
translate_axis (-i.linear_combination (x), a);
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"))
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
{
scm_make_real (o[X_AXIS]),
scm_make_real (o[Y_AXIS]),
expr));
- return;
+ return;
}
}
}
};
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);
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_);
}
}
fl.fonts_ = SCM_EOL;
interpret_stencil_expression (expr, &find_font_function,
- (void*) &fl, Offset (0,0));
+ (void*) &fl, Offset (0,0));
return fl.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);
}
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;
}
(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)
;;; 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)