object_alist_ = scm_assq_set_x (object_alist_, s, v);
}
+void
+Grob::set_callback (SCM s, SCM v)
+{
+ /* Perhaps we simply do the assq_set, but what the heck. */
+ if (!is_live ())
+ return;
+
+ /*
+ property_callbacks_ is r/o in principle, so we tack it in front.
+ */
+ property_callbacks_ = scm_acons (s,v, property_callbacks_);
+}
+
+
+
SCM
Grob::internal_get_object (SCM sym) const
{
#include "system.hh"
#include "font-interface.hh"
+
+LY_DEFINE (ly_grob_set_callback_x, "ly:grob-set-callback!",
+ 3, 0, 0, (SCM grob, SCM sym, SCM proc),
+ "Set @var{sym} in grob @var{grob} to value @var{proc}")
+{
+ Grob *sc = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (sc, grob, SCM_ARG1, __FUNCTION__, "grob");
+ SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE (ly_is_procedure (val), val, SCM_ARG3, __FUNCTION__, "procedure");
+
+ sc->set_callback (sym, val);
+ return SCM_UNSPECIFIED;
+}
+
LY_DEFINE (ly_grob_set_property_x, "ly:grob-set-property!",
3, 0, 0, (SCM grob, SCM sym, SCM val),
"Set @var{sym} in grob @var{grob} to value @var{val}")
Grob *common_refpoint (Grob const *s, Axis a) const;
// duh. slim down interface here. (todo)
+ void set_callback (SCM sym, SCM proc);
bool has_offset_callback (SCM callback, Axis) const;
void add_offset_callback (SCM callback, Axis);
bool has_extent_callback (SCM, Axis) const;
swapped around horizontally.
As the note head to put it on is not known now, postpone this
- decision to Script_interface::before_line_breaking (). */
-
+ decision to Script_interface::calc_direction (). */
+ */
for (int i = 0; i < scripts_.size (); i++)
{
Grob *e = scripts_[i].script_;