/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
dim_ = b;
}
-int
-Stencil::print_smob (SCM, SCM port, scm_print_state *)
-{
- scm_puts ("#<Stencil ", port);
- scm_puts (" >", port);
- return 1;
-}
-
SCM
-Stencil::mark_smob (SCM smob)
+Stencil::mark_smob () const
{
- Stencil *s = (Stencil *) SCM_CELL_WORD_1 (smob);
- return s->expr_;
+ return expr_;
}
-const char Stencil::type_p_name_[] = "ly:stencil?";
+const char * const Stencil::type_p_name_ = "ly:stencil?";
Interval
Stencil::extent (Axis a) const
bool
Stencil::is_empty () const
{
- return (expr_ == SCM_EOL
+ return (scm_is_null (expr_)
|| dim_.is_empty ());
}
void
Stencil::rotate (Real a, Offset off)
{
- rotate_degrees (a * 180 / M_PI, off);
+ rotate_degrees (a, off);
}
/*
* *this = rotated()
*/
- expr_ = scm_list_n (ly_symbol2scm ("rotate-stencil"),
+ expr_ = scm_list_3 (ly_symbol2scm ("rotate-stencil"),
scm_list_2 (scm_from_double (a),
scm_cons (scm_from_double (x), scm_from_double (y))),
- expr_, SCM_UNDEFINED);
+ expr_);
/*
* Calculate the new bounding box
pts.push_back (Offset (shifted_box.x ().at (RIGHT), shifted_box.y ().at (UP)));
pts.push_back (Offset (shifted_box.x ().at (LEFT), shifted_box.y ().at (UP)));
- const Offset rot = complex_exp (Offset (0, a * M_PI / 180.0));
+ const Offset rot (offset_directed (a));
dim_.set_empty ();
for (vsize i = 0; i < pts.size (); i++)
dim_.add_point (pts[i] * rot + absolute_off);
}
if (!scm_is_null (expr_))
- expr_ = scm_list_n (ly_symbol2scm ("translate-stencil"),
+ expr_ = scm_list_3 (ly_symbol2scm ("translate-stencil"),
ly_offset2scm (o),
- expr_, SCM_UNDEFINED);
- if (!is_empty ())
- dim_.translate (o);
+ expr_);
+ dim_.translate (o);
}
void
s.translate (z);
return s;
}
+
+Stencil
+Stencil::with_outline (Stencil const &ol) const
+{
+ Stencil new_stencil (ol.extent_box (),
+ scm_list_3 (ly_symbol2scm ("with-outline"),
+ ol.expr (),
+ expr ()));
+ return new_stencil;
+}