X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil.cc;h=dc5549f6314393a0c3393fd088d62cee50db1b70;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=1e5e0ad4cc845aae82c488b510c2494c2db0ce84;hpb=00b9619cea1020f6773f23df8764ef85ee2912bf;p=lilypond.git diff --git a/lily/stencil.cc b/lily/stencil.cc index 1e5e0ad4cc..dc5549f631 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2014 Han-Wen Nienhuys + Copyright (C) 1997--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,21 +38,13 @@ Stencil::Stencil (Box b, SCM func) dim_ = b; } -int -Stencil::print_smob (SCM, SCM port, scm_print_state *) -{ - scm_puts ("#", port); - return 1; -} - SCM -Stencil::mark_smob () +Stencil::mark_smob () const { 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 @@ -63,7 +55,7 @@ Stencil::extent (Axis a) const bool Stencil::is_empty () const { - return (expr_ == SCM_EOL + return (scm_is_null (expr_) || dim_.is_empty ()); } @@ -88,7 +80,7 @@ Stencil::extent_box () const void Stencil::rotate (Real a, Offset off) { - rotate_degrees (a * 180 / M_PI, off); + rotate_degrees (a, off); } /* @@ -112,10 +104,10 @@ Stencil::rotate_degrees_absolute (Real a, Offset absolute_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 @@ -129,7 +121,7 @@ Stencil::rotate_degrees_absolute (Real a, Offset absolute_off) 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); @@ -175,9 +167,9 @@ Stencil::translate (Offset o) } 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); + expr_); dim_.translate (o); } @@ -423,3 +415,13 @@ Stencil::translated (Offset z) const 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; +}