source file of the GNU LilyPond music typesetter
- (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "grob.hh"
#include <cstring>
-#include "main.hh"
#include "input-smob.hh"
-#include "warn.hh"
-#include "pointer-group-interface.hh"
-#include "misc.hh"
-#include "paper-score.hh"
-#include "stencil.hh"
-#include "warn.hh"
-#include "system.hh"
+#include "international.hh"
#include "item.hh"
-#include "stencil.hh"
+#include "main.hh"
#include "misc.hh"
#include "music.hh"
-#include "item.hh"
-#include "paper-score.hh"
-#include "ly-smobs.icc"
#include "output-def.hh"
+#include "pointer-group-interface.hh"
+#include "stencil.hh"
+#include "system.hh"
+#include "warn.hh"
-
-
-
+#include "ly-smobs.icc"
Grob *
Grob::clone (int count) const
else
{
SCM expr = m->expr ();
- if (point_and_click_global)
- expr = scm_list_3 (ly_symbol2scm ("grob-cause"),
- self_scm (), expr);
+ expr = scm_list_3 (ly_symbol2scm ("grob-cause"),
+ self_scm (), expr);
retval = Stencil (m->extent_box (), expr);
}
+ SCM rot = get_property ("rotation");
+ if (scm_is_pair (rot))
+ {
+ Real angle = scm_to_double (scm_car (rot));
+ Real x = scm_to_double (scm_cadr (rot));
+ Real y = scm_to_double (scm_caddr (rot));
+
+ retval.rotate (angle, Offset (x, y));
+ }
/* color support... see interpret_stencil_expression () for more... */
SCM color = get_property ("color");
if (!is_live ())
return;
+ for (int a = X_AXIS; a < NO_AXES; a++)
+ dim_cache_[a].clear ();
+
mutable_property_alist_ = SCM_EOL;
object_alist_ = SCM_EOL;
immutable_property_alist_ = SCM_EOL;
dim_cache_[a].offset_ is unaliased.
*/
Real off = robust_scm2double (internal_get_property (sym), 0.0);
- *me->dim_cache_[a].offset_ += off;
-
- me->del_property (sym);
- return *me->dim_cache_[a].offset_;
+ if (me->dim_cache_[a].offset_)
+ {
+ *me->dim_cache_[a].offset_ += off;
+ me->del_property (sym);
+ return *me->dim_cache_[a].offset_;
+ }
+ else
+ return 0.0;
}
}
else
{
- SCM min_ext_sym =
- (a == X_AXIS)
- ? ly_symbol2scm ("minimum-X-extent")
- : ly_symbol2scm ("minimum-Y-extent");
-
+ /*
+ Order is significant: ?-extent may trigger suicide.
+ */
SCM ext_sym =
(a == X_AXIS)
? ly_symbol2scm ("X-extent")
: ly_symbol2scm ("Y-extent");
-
- SCM min_ext = internal_get_property (min_ext_sym);
- SCM ext = internal_get_property (ext_sym);
- if (is_number_pair (min_ext))
- real_ext.unite (ly_scm2interval (min_ext));
+ SCM ext = internal_get_property (ext_sym);
if (is_number_pair (ext))
real_ext.unite (ly_scm2interval (ext));
+ SCM min_ext_sym =
+ (a == X_AXIS)
+ ? ly_symbol2scm ("minimum-X-extent")
+ : ly_symbol2scm ("minimum-Y-extent");
+ SCM min_ext = internal_get_property (min_ext_sym);
+ if (is_number_pair (min_ext))
+ real_ext.unite (ly_scm2interval (min_ext));
((Grob*)this)->del_property (ext_sym);
((Grob*)this)->dim_cache_[a].extent_ = new Interval (real_ext);
}
MESSAGES
****************************************************************/
void
-Grob::warning (String s) const
+Grob::warning (string s) const
{
SCM cause = self_scm ();
while (Grob *g = unsmob_grob (cause))
}
-String
+string
Grob::name () const
{
SCM meta = get_property ("meta");
}
void
-Grob::programming_error (String s) const
+Grob::programming_error (string s) const
{
SCM cause = self_scm ();
while (Grob *g = unsmob_grob (cause))
"meta "
"minimum-X-extent "
"minimum-Y-extent "
+ "rotation "
"springs-and-rods "
"staff-symbol "
"stencil "
}
Grob *
-common_refpoint_of_array (Link_array<Grob> const &arr, Grob *common, Axis a)
+common_refpoint_of_array (vector<Grob*> const &arr, Grob *common, Axis a)
{
- for (int i = arr.size (); i--;)
+ for (vsize i = arr.size (); i--;)
if (Grob *s = arr[i])
{
if (common)