From: Jan Nieuwenhuizen Date: Tue, 1 Mar 2005 20:29:40 +0000 (+0000) Subject: * lily/tweak-registration.cc (replace_grob_tweak): New function. X-Git-Tag: release/2.5.14~45 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=a1e6874fbb4437f8afbf7be161ff55e4c66197fa;p=lilypond.git * 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. --- diff --git a/ChangeLog b/ChangeLog index 0c2d364167..392d5ce1cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-03-01 Jan Nieuwenhuizen + + * 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 * Documentation/topdocs/NEWS.tely (Top): elucidate GS problem. diff --git a/lily/include/tweak-registration.hh b/lily/include/tweak-registration.hh index 540336f915..8846c54332 100644 --- a/lily/include/tweak-registration.hh +++ b/lily/include/tweak-registration.hh @@ -15,7 +15,7 @@ #include "lily-proto.hh" #include "object-key.hh" -typedef std::map Tweak_map ; +typedef std::map 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 */ - diff --git a/lily/tweak-registration-scheme.cc b/lily/tweak-registration-scheme.cc index da5ca742c1..be54412d8e 100644 --- a/lily/tweak-registration-scheme.cc +++ b/lily/tweak-registration-scheme.cc @@ -12,59 +12,73 @@ #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; } diff --git a/lily/tweak-registration.cc b/lily/tweak-registration.cc index 9a1ca358bf..c29aca1cb6 100644 --- a/lily/tweak-registration.cc +++ b/lily/tweak-registration.cc @@ -14,11 +14,23 @@ #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 (); } diff --git a/scm/framework-gnome.scm b/scm/framework-gnome.scm index 17d95d8819..b72e1f94a5 100644 --- a/scm/framework-gnome.scm +++ b/scm/framework-gnome.scm @@ -227,10 +227,10 @@ (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))))))) @@ -238,14 +238,13 @@ (define-method (save-tweaks (go )) (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"))) @@ -381,6 +380,9 @@ (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))