]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/tweak-registration.cc (replace_grob_tweak): New function.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 1 Mar 2005 20:29:40 +0000 (20:29 +0000)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 1 Mar 2005 20:29:40 +0000 (20:29 +0000)
* lily/tweak-registration-scheme.cc (LY_DEFINE): Wrap it.
* scm/framework-gnome.scm (tweak): Use it.

ChangeLog
lily/include/tweak-registration.hh
lily/tweak-registration-scheme.cc
lily/tweak-registration.cc
scm/framework-gnome.scm

index 0c2d3641670f216503297916dc894c7324041b85..392d5ce1cfb001b0a6bb5bdc469d75e1ba31e496 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-01  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * lily/tweak-registration.cc (replace_grob_tweak): New function.
+       * lily/tweak-registration-scheme.cc (LY_DEFINE): Wrap it.
+       * scm/framework-gnome.scm (tweak): Use it.
+
 2005-03-01  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
        * Documentation/topdocs/NEWS.tely (Top): elucidate GS problem.
index 540336f915a1ec8de044125127e2f71e1d920c59..8846c543320fdbd628b31a59b89271916aa88e7d 100644 (file)
@@ -15,7 +15,7 @@
 #include "lily-proto.hh"
 #include "object-key.hh"
 
-typedef std::map<Object_key const*, SCM, Object_key_less> Tweak_map ;
+typedef std::map<Object_key const*, SCM, Object_key_less> Tweak_map;
 
 class Tweak_registry
 {
@@ -25,18 +25,19 @@ class Tweak_registry
   DECLARE_SMOBS(Tweak_registry, );
   
 public:
+  Tweak_registry ();
+
   Object_key_undumper *undumper() const;
   void clear ();
   void insert_grob_tweak (Grob*, SCM);
+  void replace_grob_tweak (Grob*, SCM);
   SCM get_tweaks (Grob *);
   SCM list_tweaks ();
   void insert_tweak_from_file (SCM);
-  Tweak_registry ();
 };
 
 extern Tweak_registry *global_registry_;
 
-DECLARE_UNSMOB(Tweak_registry, tweak_registry);
+DECLARE_UNSMOB (Tweak_registry, tweak_registry);
 
 #endif /* TWEAK_REGISTRATION_HH */
-
index da5ca742c1418f6ca04428da9a7da2a83524a511..be54412d8e3721e9dfc6624eba7497a1a1d67f3e 100644 (file)
 #include "grob.hh"
 #include "object-key-undumper.hh"
 
-LY_DEFINE(ly_clear_tweak_registry, "ly:tweak-clear-registry",
-         0, 0, 0, (),
-         "Clear global tweak registry"
-         )
+LY_DEFINE (ly_clear_tweak_registry, "ly:tweak-clear-registry",
+          0, 0, 0, (),
+          "Clear global tweak registry"
+          )
 {
   global_registry_->clear ();
   return SCM_UNSPECIFIED;
 }
 
-LY_DEFINE(ly_insert_tweak, "ly:insert-tweak",
-         2, 0, 0,
-         (SCM grob, SCM tweak),
-         "add new tweak for grob."
-         )
+LY_DEFINE (ly_grob_insert_tweak, "ly:grob-insert-tweak",
+          2, 0, 0,
+          (SCM grob, SCM tweak),
+          "add new tweak for grob."
+          )
 {
   Grob *gr = unsmob_grob (grob);
-  SCM_ASSERT_TYPE(gr, grob, SCM_ARG1, __FUNCTION__, "Grob");
-  SCM_ASSERT_TYPE(scm_list_p (tweak) == SCM_BOOL_T
-                 && ly_c_procedure_p (scm_car (tweak)),
-                 tweak, SCM_ARG2, __FUNCTION__, "Tweak");
+  SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "Grob");
+  SCM_ASSERT_TYPE (scm_list_p (tweak) == SCM_BOOL_T
+                  && ly_c_procedure_p (scm_car (tweak)),
+                  tweak, SCM_ARG2, __FUNCTION__, "Tweak");
   
   global_registry_->insert_grob_tweak (gr, tweak);
   return SCM_UNSPECIFIED;
 }
 
+LY_DEFINE (ly_grob_replace_tweak, "ly:grob-replace-tweak",
+          2, 0, 0,
+          (SCM grob, SCM tweak),
+          "Replace tweak for grob."
+          )
+{
+  Grob *gr = unsmob_grob (grob);
+  SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "Grob");
+  SCM_ASSERT_TYPE (scm_list_p (tweak) == SCM_BOOL_T
+                  && ly_c_procedure_p (scm_car (tweak)),
+                  tweak, SCM_ARG2, __FUNCTION__, "Tweak");
+  
+  global_registry_->replace_grob_tweak (gr, tweak);
+  return SCM_UNSPECIFIED;
+}
+
 
-LY_DEFINE(ly_tweak_read_keys, "ly:tweak-define-keys",
-         1, 0, 0, (SCM keys),
-         "Read keys"
-         )
+LY_DEFINE (ly_tweak_read_keys, "ly:tweak-define-keys",
+          1, 0, 0, (SCM keys),
+          "Read keys"
+          )
 {
   global_registry_->undumper ()->parse_contents (keys); 
   return SCM_UNSPECIFIED;
 }
 
 
-LY_DEFINE(ly_all_tweaks, "ly:all-tweaks",
-         0, 0, 0, (),
-         "all tweaks"
-         )
+LY_DEFINE (ly_all_tweaks, "ly:all-tweaks",
+          0, 0, 0, (),
+          "all tweaks"
+          )
 {
-  return global_registry_->list_tweaks();
+  return global_registry_->list_tweaks ();
 }
 
 
-LY_DEFINE(ly_tweak_read_tweaks, "ly:tweak-define-tweaks",
-         1, 0, 0, (SCM tweaks),
-         "Read  tweaks"
-         )
+LY_DEFINE (ly_tweak_read_tweaks, "ly:tweak-define-tweaks",
+          1, 0, 0, (SCM tweaks),
+          "Read  tweaks"
+          )
 {
   for (SCM s = tweaks; scm_is_pair (s); s = scm_cdr (s))
-    {
-      global_registry_->insert_tweak_from_file (scm_car (s));
-    }
+    global_registry_->insert_tweak_from_file (scm_car (s));
   return SCM_UNSPECIFIED;
 }
index 9a1ca358bf4550c1731d5840c943fa57d21eed67..c29aca1cb6793d7ac76da17d85c3cadb0fcf505a 100644 (file)
 
 #include "ly-smobs.icc"
 
+Tweak_registry::Tweak_registry ()
+{
+  undumper_ = 0;
+  smobify_self ();
+  undumper_ = new Object_key_undumper ();
+  scm_gc_unprotect_object (undumper_->self_scm ());
+}
+
+Tweak_registry::~Tweak_registry ()
+{
+}
+
 void
 Tweak_registry::clear ()
 {
   tweaks_.clear ();
-  undumper_ = new Object_key_undumper();
+  undumper_ = new Object_key_undumper ();
   scm_gc_unprotect_object (undumper_->self_scm ());
 }
 
@@ -27,68 +39,53 @@ Tweak_registry::insert_tweak_from_file (SCM tweak)
 {
   SCM skey = scm_car (tweak);
 
-  assert(scm_is_pair (skey) &&
+  assert (scm_is_pair (skey) &&
         scm_car (skey) == ly_symbol2scm ("key"));
 
-  Object_key const * key =  undumper_->get_key (scm_to_int (scm_cadr (skey)));
-  if (tweaks_.find (key) == tweaks_.end())
-    {
-      tweaks_[key] = SCM_EOL;
-    }
+  Object_key const *key = undumper_->get_key (scm_to_int (scm_cadr (skey)));
+  if (tweaks_.find (key) == tweaks_.end ())
+    tweaks_[key] = SCM_EOL;
 
   tweaks_[key] = scm_cons (scm_cdr (tweak), tweaks_[key]);
 }
 
-
 void
 Tweak_registry::insert_grob_tweak (Grob *g, SCM tweak)
 {
-  Object_key const * key =  g->get_key ();
-  if (tweaks_.find (key) == tweaks_.end())
-    {
-      tweaks_[key] = SCM_EOL;
-    }
+  Object_key const *key = g->get_key ();
+  if (tweaks_.find (key) == tweaks_.end ())
+    tweaks_[key] = SCM_EOL;
 
   tweaks_[key] = scm_cons (tweak, tweaks_[key]);
 }
 
+void
+Tweak_registry::replace_grob_tweak (Grob *g, SCM tweak)
+{
+  Object_key const *key = g->get_key ();
+  tweaks_[key] = scm_cons (tweak, SCM_EOL);
+}
 
 SCM
 Tweak_registry::get_tweaks (Grob *g) 
 {
-  Object_key const *key = g->get_key();
-  if (tweaks_.find (key) == tweaks_.end())
-    {
-      return SCM_EOL;
-    }
+  Object_key const *key = g->get_key ();
+  if (tweaks_.find (key) == tweaks_.end ())
+    return SCM_EOL;
   return tweaks_[key];
 }
 
-Tweak_registry::Tweak_registry ()
-{
-  undumper_ = 0;
-  smobify_self();
-  undumper_ = new Object_key_undumper();
-  scm_gc_unprotect_object (undumper_->self_scm ());
-}
-
-Tweak_registry::~Tweak_registry ()
-{
-}
-
 SCM
 Tweak_registry::list_tweaks ()
 {
   SCM retval = SCM_EOL;
   for (Tweak_map::const_iterator i (tweaks_.begin ());
-       i != tweaks_.end();
+       i != tweaks_.end ();
        i++)
     {
-      const Object_key *  key = (*i).first;
+      Object_key const *key = (*i).first;
       for (SCM t = (*i).second; scm_is_pair (t); t = scm_cdr (t))
-       {
-         retval = scm_cons (scm_cons (key->self_scm(), scm_car (t)), retval);
-       }
+       retval = scm_cons (scm_cons (key->self_scm (), scm_car (t)), retval);
     }
 
   return retval;
@@ -97,18 +94,18 @@ Tweak_registry::list_tweaks ()
 SCM
 Tweak_registry::mark_smob (SCM smob)
 {
-  Tweak_registry *me = (Tweak_registry*) SCM_CELL_WORD_1(smob);
+  Tweak_registry *me = (Tweak_registry*) SCM_CELL_WORD_1 (smob);
 
   for (Tweak_map::const_iterator i (me->tweaks_.begin ());
-       i != me->tweaks_.end();
+       i != me->tweaks_.end ();
        i++)
     {
-      scm_gc_mark ((*i).first->self_scm());
+      scm_gc_mark ((*i).first->self_scm ());
       scm_gc_mark ((*i).second);
     }
 
   if (me->undumper_)
-    scm_gc_mark (me->undumper_->self_scm());
+    scm_gc_mark (me->undumper_->self_scm ());
                      
   return SCM_EOL;
 }
@@ -127,14 +124,14 @@ Tweak_registry::undumper () const
   return undumper_;
 }
 
-IMPLEMENT_DEFAULT_EQUAL_P(Tweak_registry);
-IMPLEMENT_SMOBS(Tweak_registry);
+IMPLEMENT_DEFAULT_EQUAL_P (Tweak_registry);
+IMPLEMENT_SMOBS (Tweak_registry);
 
 
-Tweak_registry  * global_registry_;
+Tweak_registry *global_registry_;
 
 void
-init_global_tweak_registry()
+init_global_tweak_registry ()
 {
-  global_registry_ = new Tweak_registry();
+  global_registry_ = new Tweak_registry ();
 }
index 17d95d8819d354d81b06875c5ffc3cf23cd6e7b3..b72e1f94a5c0055a9bb42dbf5916feb004bb9c5b 100644 (file)
   (let* ((grob (hashq-ref (item-grobs go) item #f))
         (extra-offset (ly:grob-property grob 'extra-offset))
         (origin (if (null? extra-offset) '(0 . 0)
-                    (offset-flip-y extra-offset))))
-    
+                    (offset-flip-y extra-offset))))
+
     (if grob
-       (ly:insert-tweak
+       (ly:grob-replace-tweak
         grob (list tweak-grob-property
                    'extra-offset
                    (offset-flip-y (offset-add origin offset)))))))
 (define-method (save-tweaks (go <gnome-outputter>))
   (let* ((dumper (ly:make-dumper))
         (tweaks (ly:all-tweaks))
-        (serialized-tweaks (map
-                            (lambda (tweak)
-                              (append 
-                               (list
-                                (ly:dumper-key-serial dumper (car tweak))
-                                (list 'unquote (procedure-name (cadr tweak))))
-                               (cddr tweak)))
-                            tweaks)))
+        (serialized-tweaks
+         (map
+          (lambda (tweak) (append 
+                           (list (ly:dumper-key-serial dumper (car tweak))
+                                 (list 'unquote (procedure-name (cadr tweak))))
+                           (cddr tweak)))
+          tweaks)))
 
     (if (not (null? serialized-tweaks))
        (let ((file (open-file (string-append (name go) ".twy") "w")))
                    (eq? keyval gdk:w))
                (equal? mods '(control-mask modifier-mask)))
           (gtk-main-quit))
+         (and (eq? keyval gdk:s)
+              (equal? mods '(control-mask modifier-mask))
+              (save-tweaks go))
          ((and #t ;;(null? mods)
                (eq? keyval gdk:plus))
           (scale-canvas go 2))