/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2011 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
efficient to add "fresh" stencils to what you're going to build.
* Do not create Stencil objects on the heap. That includes passing
- around Stencil* which are produced by unsmob_stencil(). Either
+ around Stencil* which are produced by Stencil::unsmob(). Either
copy Stencil objects, or use SCM references.
* Empty stencils have empty dimensions. If add_at_edge is used to
DIMENSIONS = (Interval (0, 0), Interval (0, 0)
*/
-class Stencil
+class Stencil : public Simple_smob<Stencil>
{
+public:
+ SCM mark_smob ();
+ static const char type_p_name_[];
+private:
Box dim_;
SCM expr_;
- DECLARE_SIMPLE_SMOBS (Stencil);
public:
Stencil (Box, SCM s);
Stencil ();
Set dimensions to empty, or to (Interval (0, 0), Interval (0, 0) */
void set_empty (bool);
void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding);
+ void stack (Axis a, Direction d, const Stencil &m, Real padding, Real mindist);
void add_stencil (Stencil const &m);
void translate (Offset);
Stencil translated (Offset) const;
Interval extent (Axis) const;
Box extent_box () const;
bool is_empty () const;
+ bool is_empty (Axis) const;
Stencil in_color (Real r, Real g, Real b) const;
+ static SCM skylines_from_stencil (SCM, Real, Axis);
};
-DECLARE_UNSMOB (Stencil, stencil);
void interpret_stencil_expression (SCM expr,
- void (*func) (void *, SCM),
+ SCM (*func) (void *, SCM),
void *func_arg,
Offset o);
SCM find_expression_fonts (SCM expr);