#include <cstring>
#include "align-interface.hh"
-#include "input-smob.hh"
+#include "input.hh"
#include "international.hh"
#include "item.hh"
#include "main.hh"
Object_key const *key)
{
key_ = key;
+
/* FIXME: default should be no callback. */
self_scm_ = SCM_EOL;
layout_ = 0;
retval = Stencil (m->extent_box (), expr);
}
+
SCM rot = get_property ("rotation");
if (scm_is_pair (rot))
{
/* color support... see interpret_stencil_expression () for more... */
SCM color = get_property ("color");
- if (color != SCM_EOL)
+ if (scm_is_pair (color))
{
- m = unsmob_stencil (stil);
SCM expr = scm_list_3 (ly_symbol2scm ("color"),
color,
- m->expr ());
+ retval.expr ());
- retval = Stencil (m->extent_box (), expr);
+ retval = Stencil (retval.extent_box (), expr);
}
}
dim_cache_[Y_AXIS].offset_ = 0;
}
- /* we simulate positioning-done if we are the child of a VerticalAlignment */
+ /* we simulate positioning-done if we are the child of a VerticalAlignment,
+ but only if we don't have a cached offset. If we do have a cached offset,
+ it probably means that the Alignment was fixed and it has already been
+ calculated.
+ */
Grob *p = get_parent (Y_AXIS);
Real trans = 0;
- if (Align_interface::has_interface (p))
+ if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_)
trans = Align_interface::get_pure_child_y_translation (p, this, start, end);
return off + trans
SCM_EOL));
Real offset = pure_relative_y_coordinate (refp, start, end);
+ SCM min_ext = get_property ("minimum-Y-extent");
+ if (is_number_pair (min_ext))
+ iv.unite (ly_scm2interval (min_ext));
+
iv.translate (offset);
return iv;
}
Interval_t<int>
Grob::spanned_rank_iv ()
{
- return Interval_t<int> (INT_MIN, INT_MAX);
+ return Interval_t<int> (-1, 0);
}
/****************************************************************
while (Grob *g = unsmob_grob (cause))
cause = g->get_property ("cause");
+ /* ES TODO: cause can't be Music*/
if (Music *m = unsmob_music (cause))
m->origin ()->warning (s);
else if (Stream_event *ev = unsmob_stream_event (cause))
s = _f ("programming error: %s", s);
+ /* ES TODO: cause can't be Music*/
if (Music *m = unsmob_music (cause))
m->origin ()->message (s);
else if (Stream_event *ev = unsmob_stream_event (cause))