X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil.cc;h=3b92b558007aa71ba77383e83cb709ddc1ce049f;hb=7ca9cb3b2f682baffe64c3c782ebf02253c12aab;hp=0da8031c4ba05e6e50dc27d67044a76aee16aa06;hpb=474c8729dc274a30558102a015a01fa5882673db;p=lilypond.git diff --git a/lily/stencil.cc b/lily/stencil.cc index 0da8031c4b..3b92b55800 100644 --- a/lily/stencil.cc +++ b/lily/stencil.cc @@ -72,17 +72,21 @@ Stencil::extent_box () const { return dim_; } -Offset -Stencil::origin () const + +void +Stencil::rotate (Real a, Offset off) { - return origin_; + rotate_degrees (a * 180/M_PI, off); } /* - * Rotate this stencil around the point [x, y] + Rotate this stencil around the point RELATIVE_OFF. + + RELATIVE_OFF is measured in terms of the extent of the stencil, so + -1 = LEFT/DOWN edge, 1 = RIGHT/UP edge. */ void -Stencil::rotate (Real a, Offset off) +Stencil::rotate_degrees (Real a, Offset relative_off) { const Real x_cen = extent (X_AXIS).center (); const Real y_cen = extent (Y_AXIS).center (); @@ -90,8 +94,8 @@ Stencil::rotate (Real a, Offset off) /* * Calculate the center of rotation */ - const Real x = x_cen + off[X_AXIS] * x_cen; - const Real y = y_cen + off[Y_AXIS] * y_cen; + const Real x = x_cen + relative_off[X_AXIS] * x_cen; + const Real y = y_cen + relative_off[Y_AXIS] * y_cen; /* * Build scheme expression (processed in stencil-interpret.cc) @@ -143,7 +147,6 @@ Stencil::translate (Offset o) expr_, SCM_UNDEFINED); if (!is_empty ()) dim_.translate (o); - origin_ += o; } void @@ -186,20 +189,16 @@ Stencil::align_to (Axis a, Real x) translate_axis (-i.linear_combination (x), a); } -/* FIXME: unintuitive naming, you would expect *this to be moved. - Kept (keeping?) API for compat with add_at_edge (). - - What is PADDING, what is MINIMUM, exactly? */ -Stencil -Stencil::moved_to_edge (Axis a, Direction d, Stencil const &s, - Real padding, Real minimum) const +/* See scheme Function. */ +void +Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding) { Interval my_extent = dim_[a]; Interval i (s.extent (a)); Real his_extent; if (i.is_empty ()) { - programming_error ("Stencil::moved_to_edge: adding empty stencil."); + programming_error ("Stencil::add_at_edge: adding empty stencil."); his_extent = 0.0; } else @@ -210,20 +209,7 @@ Stencil::moved_to_edge (Axis a, Direction d, Stencil const &s, Stencil toadd (s); toadd.translate_axis (offset, a); - - if (minimum > 0 && d * (-origin ()[a] + toadd.origin ()[a]) < minimum) - toadd.translate_axis (-toadd.origin ()[a] - + origin ()[a] + d * minimum, a); - - return toadd; -} - -/* See scheme Function. */ -void -Stencil::add_at_edge (Axis a, Direction d, Stencil const &s, Real padding, - Real minimum) -{ - add_stencil (moved_to_edge (a, d, s, padding, minimum)); + add_stencil (toadd); } Stencil