]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/output-gnome.scm
* scm/framework-gnome.scm (output-framework-gnome): Try loading
[lilypond.git] / scm / output-gnome.scm
index 45830fcc30764e5d43df2ff1e79d6b203a914328..c1d6e4954d4ee63893ea9dd80e4830b6dd5b4a89 100644 (file)
@@ -4,48 +4,49 @@
 ;;;; 
 ;;;; (c)  2004 Jan Nieuwenhuizen <janneke@gnu.org>
 
-
 ;;; HIP -- hack in progress
 ;;;
 ;;; You need:
 ;;;
 ;;;   * guile-1.6.4 (NOT CVS)
 ;;;   * Rotty's g-wrap--tng, possibly Janneke's if you have libffi-3.4.
-;;;   * lilypond branch: lilypond_2_3_2b; the framework-* backend
-;;;     loads output-gnome.scm at startup, which seems to break g-wrapped
-;;;     goops.
 ;;;
 ;;; see also: guile-gtk-general@gnu.org
 ;;;
 ;;; Try it
 ;;;
-;;;   * Install g-wrap, guile-gnome (see script below)
+;;;   * If using GUILE CVS , then compile LilyPond with GUILE 1.6, 
+;;;
+;;;    PATH=/usr/bin/:$PATH ./configure --enable-config=g16  ; make conf=g16
+;;;
+;;;   * Install gnome/gtk development stuff and g-wrap, guile-gnome
+;;;     see buildscripts/guile-gnome.sh
 ;;;  
 ;;;   * Use latin1 encoding for gnome backend, do
-;;;       make -C mf clean
-;;;       make -C mf ENCODING_FILE=$(kpsewhich cork.enc)
-;;;       (cd mf/out && mkfontdir)
-;;;       xset +fp $(pwd)/mf/out
 ;;;
-;;;   * Setup PATHs:
-
 "
-# do not use guile CVS:
-export PATH=/usr/bin/:$PATH
-# use g-wrap and guile-gnome from usr/pkg
+       ./configure --prefix=$(pwd) --enable-config=g16
+       make -C mf conf=g16 clean
+       make -C mf conf=g16 ENCODING_FILE=$(kpsewhich cork.enc)
+       (cd mf/out-g16 && mkfontdir)
+       xset +fp $(pwd)/mf/out-g16
+"
+;;;
+;;;   * Setup environment
+"
 export GUILE_LOAD_PATH=$HOME/usr/pkg/g-wrap/share/guile/site:$HOME/usr/pkg/g-wrap/share/guile/site/g-wrap:$HOME/usr/pkg/guile-gnome/share/guile
 export LD_LIBRARY_PATH=$HOME/usr/pkg/g-wrap/lib:$HOME/usr/pkg/guile-gnome/lib
+export XEDITOR='/usr/bin/emacsclient --no-wait +%l:%c %f'
 "
-
-;;;  * Set XEDITOR and add
+;;;  * For GNOME point-and-click, add
 ;;;     #(ly:set-point-and-click 'line-column)
-;;;    to your .ly to get point-and-click
-;;;
-;;;  * Run lily: lilypond-bin -fgnome input/simple-song.ly
+;;;    to your .ly; just click an object on the canvas.
 ;;;
-;;;
-;;;      todo: hmm --output-base broken?
-;;;   ### cd mf && mftrace --encoding=$(kpsewhich cork.enc) --autotrace --output-base=feta-cork-20 feta20.mf && mv feta20.pfa out
+;;;  * Run lily:
+"
+lilypond-bin -fgnome input/simple-song.ly
+"
+
 
 ;;; TODO:
 ;;;  * pango+feta font (see archives gtk-i18n-list@gnome.org and
@@ -55,99 +56,19 @@ export LD_LIBRARY_PATH=$HOME/usr/pkg/g-wrap/lib:$HOME/usr/pkg/guile-gnome/lib
 ;;;    - hack feta20/feta20.pfa?:
 ;;;  * font, canvas, scaling?
 ;;;  * implement missing stencil functions
-;;;  * implement missing commands (next, prev? page)
+;;;  * implement missing commands
 ;;;  * user-interface, keybindings
+;;;  * cleanups: (too many) global vars
+;;;  * papersize, outputscale from book
 
-;;; Note: this install information is volatile
-;;;       you'll probably want to pull all from
-;;;       from guile-gnome-devel@gnu.org--2004 soon
-;;;   
-
-"
-#!/bin/bash
-
-set -ex
-
-rm -rf test
-mkdir test
-cd test
 
-## 1.  install gnome-devel (Debian/unstable: apt-get install gnome-devel)
+;;; SCRIPT moved to buildscripts/guile-gnome.sh
 
-## 2.  *** NOTE: use guile-1.6 for g-wrap and guile-gnome ***
-##### using GUILE CVS g-wrap/guile-gnome is experimental (read: segfaults)
-PATH=/usr/bin:$PATH
 
 
-## 3.  get g-wrap 2.0
-tla register-archive a.rottmann@gmx.at--2004-main http://people.debian.org/~rotty/arch/a.rottmann@gmx.at/2004-main || true
-
-rm -rf g-wrap
-## tla get a.rottmann@gmx.at--2004-main/g-wrap--tng g-wrap
-## pull latest g-wrap from janneke -- this step is probably no longer
-## necessary when you read this
-tla register-archive janneke@gnu.org--2004-gnome http://lilypond.org/~janneke/{arch}/2004-gnome || true
-tla get janneke@gnu.org--2004-gnome/g-wrap--janneke g-wrap
-cd g-wrap
-
-rm -rf $HOME/usr/pkg/g-wrap
-AUTOMAKE=automake-1.8 AUTOCONF=autoconf2.50 sh autogen.sh --noconfigure
-mkdir =build
-cd =build
-../configure --prefix=$HOME/usr/pkg/g-wrap
-make install
-
-# cp srfi-34.scm from CVS head ?  --hwn
-(cd $HOME/usr/pkg/g-wrap/share/guile/site
- mv srfi-34.scm srfi-34.scm-g-wrap
- cp $HOME/usr/pkg/guile/share/guile-1.7/srfi/srfi-34.scm .)
-
-cd ../..
-
-## 4.  get guile-gnome
-tla register-archive guile-gnome-devel@gnu.org--2004 http://people.debian.org/~rotty/arch/guile-gnome-devel@gnu.org/2004/ || true
-rm -rf guile-gnome
-tla get guile-gnome-devel@gnu.org--2004/dists--dev guile-gnome
-cd guile-gnome
-tla build-config -r configs/gnu.org/dev
-cd src
-
-## 5.  get the gnome canvas module
-tla get guile-gnome-devel@gnu.org--2004/libgnomecanvas--dev libgnomecanvas
-
-## pull latest defs from janneke -- this step is probably no longer
-## necessary when you read this
-## tla register-archive janneke@gnu.org--2004-gnome http://lilypond.org/~janneke/{arch}/2004-gnome || true
-## rm -rf defs
-## tla get janneke@gnu.org--2004-gnome/defs--janneke defs
-
-rm -rf $HOME/usr/pkg/guile-gnome
-AUTOMAKE=automake-1.8 AUTOCONF=autoconf2.50 sh autogen.sh --noconfigure
-mkdir ../=build
-cd ../=build
-
-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
-
-G_WRAP_MODULE_DIR=$HOME/usr/pkg/g-wrap/share/guile/site make install
-
-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
-guile -s ../src/libgnomecanvas/examples/canvas.scm
-
-
-# simple test
-guile -s ../src/libgnomecanvas/examples/canvas.scm
-
-"
-
 (debug-enable 'backtrace)
 
-(define-module (scm output-gnome)
-  #:export (header))
+(define-module (scm output-gnome))
 
 (define this-module (current-module))
 
@@ -157,14 +78,35 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
  (srfi srfi-13)
  (lily)
  (gnome gtk)
- (gnome gtk gdk-event)
- ;; the name of the module will change to canvas rsn
- (gnome gw libgnomecanvas))
- ;;(gnome gw canvas))
+ (gnome gtk gdk-event))
 
+;; the name of the module will change to canvas rsn
+(if (resolve-module '(gnome gw canvas))
+    (use-modules (gnome gw canvas))
+    (use-modules (gnome gw libgnomecanvas)))
 
-;;; Lily output interface --- fix silly names and docme
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; module entry
+(define-public (gnome-output-expression expr port)
+  (display (dispatch expr) port))
 
+(define (dispatch expr)
+  (if (pair? expr)
+      (let ((keyword (car expr)))
+       (cond
+        ((eq? keyword 'some-func) "")
+        ;;((eq? keyword 'placebox) (dispatch (cadddr expr)))
+        (else
+         (if (module-defined? this-module keyword)
+             (apply (eval keyword this-module) (cdr expr))
+             (begin
+               (display
+                (string-append "undefined: " (symbol->string keyword) "\n"))
+               "")))))
+      expr))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Lily output interface --- fix silly names and docme
 "
  The output interface has functions for
   * formatting stencils, and
@@ -174,11 +116,12 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
  beam
  bezier-sandwich
  bracket
+ char
+ filledbox
+ text
  ...
 
  Commands:
- define-fonts
- header
  placebox
  ...
 
@@ -199,43 +142,23 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
 ;; minimal intercept list:
 (define output-interface-intercept
   '(comment
-    define-fonts
-    end-output
-    header
-    header-end
-    lily-def
-    no-origin
-    output-scopes
-    start-page
-    stop-page
-    start-system
-    stop-system))
+    define-origin
+    no-origin))
 
 (map (lambda (x) (module-define! this-module x dummy))
      output-interface-intercept)
 
-(define-public (gnome-output-expression expr port)
-  (display (dispatch expr) port))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(define (dispatch expr)
-  (if (pair? expr)
-      (let ((keyword (car expr)))
-       (cond
-        ((eq? keyword 'some-func) "")
-        ;;((eq? keyword 'placebox) (dispatch (cadddr expr)))
-        (else
-         (if (module-defined? this-module keyword)
-             (apply (eval keyword this-module) (cdr expr))
-             (begin
-               (display
-                (string-append "undefined: " (symbol->string keyword) "\n"))
-               "")))))
-      expr))
 
 ;;; Global vars
 (define main-window #f)
+(define main-scrolled #f)
 (define main-canvas #f)
-(define canvas-root #f)
+(define page-number 0)
+
+(define page-stencils #f)
+(define output-canvas #f)
 
 (define system-origin '(0 . 0))
 
@@ -243,26 +166,27 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
 (define item-locations (make-hash-table 31))
 (define location #f)
 
-(define canvas-width 400)
-(define canvas-height
-  (inexact->exact (round (* 1.42 canvas-width))))
+(define button-height 25)
+(define canvas-width 2000)
+(define canvas-height 4000)
+
+(define window-width 400)
+(define window-height
+  (inexact->exact (round (* 1.42 window-width))))
 
 (define font-paper #f)
 
-;;(define pixels-per-unit 1.0)
 (define pixels-per-unit 2.0)
-
-;; TODO: use canvas scaling, use output-scale for paper/canvas dimensions?
-;;(define output-scale (* 2 2.83464566929134))
-;;(define output-scale 2.83464566929134)
 (define OUTPUT-SCALE 2.83464566929134)
 (define output-scale (* OUTPUT-SCALE pixels-per-unit))
-;;(define output-scale 1)
 
-;; helper functions
+;; helper functions -- sort this out
 (define (stderr string . rest)
-  (apply format (cons (current-error-port) (cons string rest)))
-  (force-output (current-error-port)))
+  ;; debugging
+  (if #f
+      (begin
+       (apply format (cons (current-error-port) (cons string rest)))
+       (force-output (current-error-port)))))
 
 (define (utf8 i)
   (cond
@@ -286,6 +210,130 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
       (utf8 i)
       (utf8 (+ #xee00 i))))
 
+;;; hmm?
+(define (draw-rectangle x1 y1 x2 y2 color width-units)
+  (make <gnome-canvas-rect>
+    #:parent (root main-canvas) #:x1 x1 #:y1 y1 #:x2 x2 #:y2 y2
+    #:fill-color color #:width-units width-units))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; stencil outputters
+;;;;
+
+(define (char font i)
+  (text font (utf8 i)))
+
+(define (placebox x y expr)
+  (stderr "item: ~S\n" expr)
+  (let ((item expr))
+    ;;(if item
+    ;; FIXME ugly hack to skip #unspecified ...
+    (if (and item (not (eq? item (if #f #f))))
+       (begin
+         (move item
+               (* output-scale (+ (car system-origin) x))
+               (* output-scale (- (car system-origin) y)))
+         (affine-relative item output-scale 0 0 output-scale 0 0)
+         
+         (gtype-instance-signal-connect item 'event item-event)
+         (if location
+             (hashq-set! item-locations item location))
+         item)
+       #f)))
+
+(define (round-filled-box breapth width depth height blot-diameter)
+  ;; FIXME: no rounded corners on rectangle...
+  ;; FIXME: blot?
+  (draw-rectangle (- breapth) depth width (- height) "black" blot-diameter))
+
+(define (pango-font-name font)
+  (cond
+   ((equal? (ly:font-name font) "GNU-LilyPond-feta-20")
+    "lilypond-feta, regular 32")
+   (else
+    (ly:font-name font))))
+
+(define (pango-font-size font)
+  (let* ((designsize (ly:font-design-size font))
+        (magnification (* (ly:font-magnification font)))
+        ;;(ops (ly:paper-lookup paper 'outputscale))
+        ;;(ops (* pixels-per-unit OUTPUT-SCALE))
+        ;;(ops (* pixels-per-unit pixels-per-unit))
+        (ops (* (/ 12 20) (* pixels-per-unit pixels-per-unit)))
+        (scaling (* ops magnification designsize)))
+    scaling))
+
+(define (text font string)
+  (stderr "font-name: ~S\n" (ly:font-name font))
+  ;; TODO s/filename/file-name/
+  (stderr "font-filename: ~S\n" (ly:font-filename font))
+  
+  (stderr "pango-font-name: ~S\n" (pango-font-name font))
+  (stderr "pango-font-size: ~S\n" (pango-font-size font))
+  (set!
+   text-items
+   (cons
+    (make <gnome-canvas-text>
+      #:parent (root main-canvas)
+      #:x 0 #:y 0
+      #:font (pango-font-name font)
+      #:size-points (pango-font-size font)
+      #:size-set #t
+
+      ;;apparently no effect :-(
+      ;;#:scale 1.0
+      ;;#:scale-set #t
+      
+      #:fill-color "black"
+      #:text string
+      #:anchor 'west)
+    text-items))
+  (car text-items))
+
+(define (filledbox a b c d)
+  (round-filled-box a b c d 0.001))
+
+;; WTF is this in every backend?
+(define (horizontal-line x1 x2 thickness)
+  ;;(let ((thickness 2))
+  (filledbox (- x1) (- x2 x1) (* .5 thickness) (* .5 thickness)))
+
+;; origin -- bad name
+(define (define-origin file line col)
+  ;; ughr, why is this not passed as [part of] stencil object
+  (set! location (if (procedure? point-and-click)
+                    ;; duh, only silly string append
+                    ;; (point-and-click line col file)
+                    (list line col file)
+                    #f)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; gnome stuff  --- move to framework-gnome
+(define (dump-page number)
+  (if (or (not page-stencils)
+         (< number 0)
+         (>= number (vector-length page-stencils)))
+      (stderr "No such page: ~S\n" (1+ number))
+      
+      (let* ((old-canvas main-canvas)
+            (canvas (new-canvas)))
+       (set! page-number number)
+       
+       ;; no destroy method for gnome-canvas-text?
+       ;;(map destroy (gtk-container-get-children main-canvas))
+       ;;(map destroy text-items)
+
+       ;;Hmm
+       ;;(set! main-canvas canvas)
+       (set! text-items '())
+       (ly:outputter-dump-stencil output-canvas
+                                  (vector-ref page-stencils page-number))
+       
+       (if old-canvas (destroy old-canvas))
+       (add main-scrolled canvas)
+       (show canvas))))
+
 (define x-editor #f)
 (define (get-x-editor)
   (if (not x-editor)
@@ -327,7 +375,7 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
 
 (define (item-event item event . data)
   (case (gdk-event:type event)
-    ((enter-notify) (gobject-set-property item 'fill-color "white"))
+    ((enter-notify) (gobject-set-property item 'fill-color "red"))
     ((leave-notify) (gobject-set-property item 'fill-color "black"))
     ((button-press)
      (let ((location (hashq-ref item-locations item #f)))
@@ -346,11 +394,8 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
    (lambda (x)
      (let ((scale (gobject-get-property x 'scale))
           (points (gobject-get-property x 'size-points)))
-       ;;(stderr "scaling item:~S to ~S\n" x scale)
-       ;; (stderr "scaling item:~S to ~S\n" x points)
-       (gobject-set-property x 'size-points (* points factor))))
        ;;(gobject-set-property x 'scale pixels-per-unit)
-       ;;(gobject-set-property x 'scale-set #t))
+       (gobject-set-property x 'size-points (* points factor))))
      text-items))
 
 (define (key-press-event item event . data)
@@ -365,137 +410,100 @@ guile -s ../src/libgnomecanvas/examples/canvas.scm
           (scale-canvas 2))
          ((and #t ;; (null? mods)
                (eq? keyval gdk:minus))
-          (scale-canvas 0.5)))
+          (scale-canvas 0.5))
+         ((or (eq? keyval gdk:Page-Up)
+              (eq? keyval gdk:BackSpace))
+          (dump-page (1- page-number)))
+         ((or (eq? keyval gdk:Page-Down)
+              (eq? keyval gdk:space))
+          (dump-page (1+ page-number))))
     #f))
 
-(define (char font i)
-  (text font (utf8 i)))
+(define (papersize window paper)
+  (let* ((hsize (ly:output-def-lookup paper 'hsize))
+        (vsize (ly:output-def-lookup paper 'vsize))
+        (width (inexact->exact (ceiling (* output-scale hsize))))
+        (height (inexact->exact (ceiling (* output-scale vsize))))
+        (max-width (gdk-screen-width))
+        (max-height (gdk-screen-height))
+        (scrollbar-size 20))
 
-(define (placebox x y expr)
-  (stderr "item: ~S\n" expr)
-  (let ((item expr))
-    ;;(if item
-    ;; FIXME ugly hack to skip #unspecified ...
-    (if (and item (not (eq? item (if #f #f))))
-       (begin
-         (move item
-               (* output-scale (+ (car system-origin) x))
-               (* output-scale (- (car system-origin) y)))
-         (affine-relative item output-scale 0 0 output-scale 0 0)
-         
-         (gtype-instance-signal-connect item 'event item-event)
-         (if location
-             (hashq-set! item-locations item location))
-         item)
-       #f)))
+    ;; ughr: panels?
+    (set! max-height (- max-height 80))
 
-(define (round-filled-box breapth width depth height blot-diameter)
-  ;; FIXME: no rounded corners on rectangle
-  (make <gnome-canvas-rect>
-    #:parent canvas-root
-    #:x1 (- breapth) #:y1 depth #:x2 width #:y2 (- height)
-    #:fill-color "black" #:width-units blot-diameter))
+    ;; hmm?
+    ;;(set! OUTPUT-SCALE (ly:bookpaper-outputscale paper))
+    ;;(set! output-scale (* OUTPUT-SCALE pixels-per-unit))
 
-(define (fontify font expr)
-  #f)
+    ;; huh, *2?
+    
+    (set! window-width (min (+ scrollbar-size (* width 2)) max-width))
+    (set! window-height (min (+ button-height scrollbar-size (* height 2))
+                            max-height))
+    
+    (set! canvas-width width)
+    (set! canvas-height height)))
+
+
+(define (new-canvas)
+  (let* ((canvas (make <gnome-canvas>))
+        (root (root canvas)))
+    
+    (set-size-request canvas window-width window-height)
+    (set-scroll-region canvas 0 0 canvas-width canvas-height)
+    
+    (set-pixels-per-unit canvas pixels-per-unit)
 
-(define (end-output)
-  (gtk-main))
+    (set! main-canvas canvas)
+    (draw-rectangle 0 0 canvas-width canvas-height "white" 0)
+    
+    canvas))
 
-(define (header . rest)
+(define (main outputter bookpaper pages)
   (let* ((window (make <gtk-window> #:type 'toplevel))
         (button (make <gtk-button> #:label "Exit"))
-        (canvas (make <gnome-canvas>))
+        (next (make <gtk-button> #:label "Next"))
+        (prev (make <gtk-button> #:label "Previous"))
         (vbox (make <gtk-vbox> #:homogeneous #f))
-        (scrolled (make <gtk-scrolled-window>)))
+        (hbox (make <gtk-hbox> #:homogeneous #f))
+        (scrolled (make <gtk-scrolled-window>))
+        (canvas (new-canvas)))
 
+    (papersize window bookpaper)
+    (set-size-request window window-width window-height)
+    
     (add window vbox)
     (add vbox scrolled)
     (add scrolled canvas)
-
-    (set-size-request button canvas-width 20)
-    (add vbox button)
-    (set-child-packing vbox button #f #f 0 'end)
-
-    (gtype-instance-signal-connect button 'clicked
-                                  (lambda (b) (gtk-main-quit)))
     
-    ;; papersize
-    (set-size-request canvas canvas-width canvas-height)
-    (set-scroll-region canvas 0 0 2000 4000)
+    (add vbox hbox)
+    (set-size-request hbox window-width button-height)
+    (set-child-packing vbox hbox #f #f 0 'end)
     
-    (gtype-instance-signal-connect window 'key-press-event key-press-event)
+    (set-child-packing hbox button #f #f 0 'end)
+    (set-size-request button (quotient window-width 2) button-height)
+    
+    (add hbox next)
+    (add hbox prev)
+    (add hbox button)
+    
+    (gtype-instance-signal-connect button 'clicked
+                                  (lambda (b) (gtk-main-quit)))
+    (gtype-instance-signal-connect next 'clicked
+                                  (lambda (b) (dump-page (1+ page-number))))
+    (gtype-instance-signal-connect prev 'clicked
+                                  (lambda (b) (dump-page (1- page-number))))
 
-    (set-pixels-per-unit canvas pixels-per-unit)
+    (gtype-instance-signal-connect window 'key-press-event key-press-event)
     (show-all window)
-    (set! canvas-root (root canvas))
-    (set! main-canvas canvas)
-    (set! main-window window)))
-
-(define (pango-font-name font)
-  (cond
-   ((equal? (ly:font-name font) "GNU-LilyPond-feta-20")
-    "lilypond-feta, regular 32")
-   (else
-    (ly:font-filename font))))
-
-(define (pango-font-size font)
-  (let* ((designsize (ly:font-design-size font))
-        (magnification (* (ly:font-magnification font)))
-        ;;(ops (ly:paper-lookup paper 'outputscale))
-        ;;(ops (* pixels-per-unit OUTPUT-SCALE))
-        ;;(ops (* pixels-per-unit pixels-per-unit))
-        (ops (* (/ 12 20) (* pixels-per-unit pixels-per-unit)))
-        (scaling (* ops magnification designsize)))
-    scaling))
-
-(define (text font string)
-  (stderr "font-name: ~S\n" (ly:font-name font))
-  ;; TODO s/filename/file-name/
-  (stderr "font-filename: ~S\n" (ly:font-filename font))
-  
-  (stderr "pango-font-name: ~S\n" (pango-font-name font))
-  (stderr "pango-font-size: ~S\n" (pango-font-size font))
-  (set!
-   text-items
-   (cons
-    (make <gnome-canvas-text>
-      #:parent canvas-root
-      #:x 0 #:y 0
-      ;;    #:font "new century schoolbook, i bold 20"
-      #:font (pango-font-name font)
-      ;; #:size-points 12
-      #:size-points (pango-font-size font)
-      ;;#:size (pango-font-size font)
-      #:size-set #t
-
-      ;;apparently no effect :-(
-      ;;#:scale 1.0
-      ;;#:scale-set #t
-      
-      #:fill-color "black"
-      #:text string
-      #:anchor 'west)
-    text-items))
-  (car text-items))
-
-(define (filledbox a b c d)
-  (round-filled-box a b c d 0.001))
 
-;; WTF is this in every backend?
-(define (horizontal-line x1 x2 thickness)
-  ;;(let ((thickness 2))
-  (filledbox (- x1) (- x2 x1) (* .5 thickness) (* .5 thickness)))
-
-(define (start-system origin . rest)
-  (set! system-origin origin))
-
-;; origin -- bad name
-(define (define-origin file line col)
-  ;; ughr, why is this not passed as [part of] stencil object
-  (set! location (if (procedure? point-and-click)
-                    ;; duh, only silly string append
-                    ;; (point-and-click line col file)
-                    (list line col file)
-                    #f)))
+    ;; HMMM.  Make some class for these vars?
+    (set! main-window window)
+    (set! main-scrolled scrolled)
+    (set! output-canvas outputter)
+    (set! page-stencils pages)
+    
+    (dump-page 0)
+    
+    (gtk-main)))