bool is_empty () const;
bool is_empty (Axis) const;
Stencil in_color (Real r, Real g, Real b) const;
+ Stencil with_outline (Stencil const &ol) const;
static SCM skylines_from_stencil (SCM, Real, Axis);
};
return stencil_traverser (trans, scm_cadr (expr));
else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("output-attributes")))
return stencil_traverser (trans, scm_caddr (expr));
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("with-outline")))
+ return stencil_traverser (trans, scm_cadr (expr));
else
{
vector<Transform_matrix_and_expression> out;
return;
}
+ else if (scm_is_eq (head, ly_symbol2scm ("with-outline")))
+ {
+ expr = scm_caddr (expr);
+ }
else
{
(*func) (func_arg,
q->scale (scm_to_double (x), scm_to_double (y));
return new_s;
}
+
+LY_DEFINE (ly_stencil_outline, "ly:stencil-outline",
+ 2, 0, 0, (SCM stil, SCM outline),
+ "Return a stencil with the stencil expression (inking)"
+ " of stencil @var{stil} but with outline and dimensions"
+ " from stencil @var{outline}.")
+{
+ Stencil s = *LY_ASSERT_SMOB (Stencil, stil, 1);
+ Stencil o = *LY_ASSERT_SMOB (Stencil, outline, 2);
+ return s.with_outline (o).smobbed_copy ();
+}
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;
+}
scale-stencil
translate-stencil
transparent-stencil
+ with-outline
))
(for-each ly:register-stencil-expression
((eq? head 'color) (interpret (caddr expr)))
((eq? head 'rotate-stencil) (interpret (caddr expr)))
((eq? head 'translate-stencil) (interpret (caddr expr)))
+ ;; for signatures, we indeed want the _outline_ rather than
+ ;; the expression interpreted. Right?
+ ((eq? head 'with-outline) (interpret (cadr expr)))
((eq? head 'combine-stencil)
(for-each interpret (cdr expr)))
(else