* lily/tweak-registration-scheme.cc (LY_DEFINE): Wrap it.
* scm/framework-gnome.scm (tweak): Use it.
+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.
#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
{
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 */
-
#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;
}
#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 ());
}
{
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;
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;
}
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 ();
}
(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))