]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/framework-gnome.scm (item-event): Print grob id.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 9 Nov 2004 01:47:54 +0000 (01:47 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 9 Nov 2004 01:47:54 +0000 (01:47 +0000)
(save-tweaks): New function.
(tweak): New funtion.
(item-event): Use it, bound to arrow keys.

* lily/include/context-selector.hh:
* lily/include/grob-selector.hh:
* lily/context-selector.cc:
* lily/grob-selector.cc: New file.

ChangeLog
lily/grob-selector.cc
scm/framework-gnome.scm

index ee479778d5968bea43262f731b2fc2def7fe4cd5..b1874b715e3b645d44e24798285db523950fd6e5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
 2004-11-09  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * scm/framework-gnome.scm (item-event): Print grob id.
+       (save-tweaks): New function.
+       (tweak): New funtion.
+       (item-event): Use it, bound to arrow keys.
 
        * lily/context-property.cc (make_item_from_properties): Register grob.
        * lily/context.cc (add_context): Register context.
index 58574a45b0d167739de4e9984fcfe8ce1cf6b0bf..186eae8ba906fec1f479f6b7935a8189ef6d2771 100644 (file)
@@ -12,6 +12,7 @@
 #include "grob.hh"
 #include "paper-column.hh"
 #include "scm-hash.hh"
+#include "warn.hh"
 
 Scheme_hash_table *Grob_selector::grobs_ = 0;
 
@@ -66,6 +67,6 @@ LY_DEFINE (ly_grob_id, "ly:grob-id",
           "Return grob id.")
 {
   Grob *grob = unsmob_grob (grob_scm);
-  SCM s = Grob_selector::identify_grob (grob);
-  return s;
+  SCM_ASSERT_TYPE (grob, grob_scm, SCM_ARG1, __FUNCTION__, "grob");
+  return Grob_selector::identify_grob (grob);
 }
index 631c762f873af956c7082267b9b3ce5a7e112053..e2444d72df18686ebd239d89b08ad485fda0d3b9 100644 (file)
@@ -19,7 +19,7 @@
  (gnome gw canvas))
 
 (define-public (output-framework outputter book scopes fields basename)
-  (gnome-main book))
+  (gnome-main book basename))
 
 (define SCROLLBAR-SIZE 20)
 (define BUTTON-HEIGHT 25)
@@ -38,6 +38,7 @@
       (stderr (cons string rest))))
       
 (define-class <gnome-outputter> ()
+  (name #:init-value "untitled" #:init-keyword #:name #:accessor name)
   (page-stencils ;;#:init-value '#()
    #:init-keyword #:page-stencils #:accessor page-stencils)
   (window #:init-value (make <gtk-window> #:type 'toplevel) #:accessor window)
@@ -48,6 +49,7 @@
   (text-items #:init-value '() #:accessor text-items)
   (grob #:init-value #f #:accessor grob)
   (item-grobs #:init-value (make-hash-table 31) #:accessor item-grobs)
+  (grob-tweaks #:init-value (make-hash-table 31) #:accessor grob-tweaks)
   (window-width #:init-keyword #:window-width #:accessor window-width)
   (window-height #:init-keyword #:window-height #:accessor window-height)
   (canvas-width #:init-keyword #:canvas-width #:accessor canvas-width)
@@ -89,7 +91,7 @@
     (add hbox button)
 
     ;; signals
-    (connect button 'clicked (lambda (b) (gtk-main-quit)))
+    (connect button 'clicked (lambda (b) (save-tweaks go) (gtk-main-quit)))
     (connect next 'clicked (lambda (b) (dump-page go (1+ (page-number go)))))
     (connect prev 'clicked (lambda (b) (dump-page go (1- (page-number go)))))
     (connect (window go) 'key-press-event
     (show-all (window go))))
 
 
-(define (gnome-main book)
+(define (gnome-main book name)
   (let* ((paper (ly:paper-book-paper book))
         (hsize (ly:output-def-lookup paper 'hsize))
         (vsize (ly:output-def-lookup paper 'vsize))
          (desktop-height (- screen-height PANELS-HEIGHT))
 
         (go (make <gnome-outputter>
+              #:name name
               #:page-stencils (list->vector (ly:paper-book-pages book))
               #:canvas-width page-width
               #:canvas-height page-height
                (ly:input-location music-origin)
                #f)))
 
+(define-method (tweak (go <gnome-outputter>) item offset)
+  (let* ((grob (hashq-ref (item-grobs go) item #f))
+        (origin (hashq-ref (grob-tweaks go) grob '(0 . 0))))
+    (if grob
+       (hashq-set! (grob-tweaks go) grob (cons (+ (car origin) (car offset))
+                                               (+ (cdr origin) (cdr offset)))))
+    (move item (car offset) (cdr offset))))
+
+(define-method (save-tweaks (go <gnome-outputter>))
+  (let ;;((file (current-error-port)))
+      ((file (open-file (string-append (name go) ".twy") "w")))
+    (format file "%% TWEAKS %%\n")
+    (hash-fold
+     (lambda (key value seed)
+       (format file "~S:~S\n"
+              (if (ly:grob? key) (ly:grob-id key) "unidentified grob") value))
+     #f (grob-tweaks go))))
+
 ;;;(define (item-event go grob item event)
 (define (item-event go item event)
   (case (gdk-event:type event)
              (move window x y)
              )))))))
     
-    ((2button-press) (gobject-set-property item 'fill-color "green")))
+    ((2button-press) (gobject-set-property item 'fill-color "green"))
+    ((key-press)
+     (let ((keyval (gdk-event-key:keyval event))
+          (mods (gdk-event-key:modifiers event))
+          (step (quotient (pixels-per-unit go) 2)))
+       (cond ((and (null? mods)
+                  (eq? keyval gdk:Up))
+             (tweak go item (cons 0 (- 0 step))))
+            ((and (null? mods)
+                  (eq? keyval gdk:Down))
+             (tweak go item (cons 0 step)))
+            ((and (null? mods)
+                  (eq? keyval gdk:Left))
+             (tweak go item (cons (- 0 step) 0)))
+            ((and (null? mods)
+                  (eq? keyval gdk:Right))
+             (tweak go item (cons step 0)))))))
   #t)
 
 (define (scale-canvas go factor)