]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/stencil.hh
Run `make grand-replace'.
[lilypond.git] / lily / include / stencil.hh
index 41f495e9982c5935f08c278a694533e999a3fda5..dfc40fc470c6e304d0450b846f59269008d3fec5 100644 (file)
@@ -3,17 +3,16 @@
 
   source file of the GNU LilyPond music typesetter
 
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 #ifndef STENCIL_HH
 #define STENCIL_HH
 
 */
 #ifndef STENCIL_HH
 #define STENCIL_HH
 
-#include <stdlib.h>            // size_t
+#include <cstdlib>             // size_t
+using namespace std;
+
 #include "lily-proto.hh"
 #include "box.hh"
 #include "lily-proto.hh"
 #include "box.hh"
-#include "axes.hh"
-#include "direction.hh"
-#include "lily-guile.hh"
 #include "smobs.hh"
 
 /** a group of individually translated symbols. You can add stencils
 #include "smobs.hh"
 
 /** a group of individually translated symbols. You can add stencils
 
     It is implemented as a "tree" of scheme expressions, as in
 
 
     It is implemented as a "tree" of scheme expressions, as in
 
-     Expr = combine Expr Expr
-              | translate Offset Expr
-             | SCHEME
-             ;
+    Expr = combine Expr-list
+    | translate Offset Expr
+    | origin (ORIGIN) Expr
+    | no-origin Expr
+    | (SCHEME)
+    ;
 
     SCHEME is a Scheme expression that --when eval'd-- produces the
 
     SCHEME is a Scheme expression that --when eval'd-- produces the
-    desired output.  
+    desired output.
 
 
+    Notes:
 
 
-    Because of the way that Stencil is implemented, it is the most
+    Because of the way that Stencil is implemented, it is the most
     efficient to add "fresh" stencils to what you're going to build.
     efficient to add "fresh" stencils to what you're going to build.
-    
-    Dimension behavior:
 
 
-    Empty stencils have empty dimensions.  If add_at_edge is used to
+    * Do not create Stencil objects on the heap. That includes passing
+    around Stencil* which are produced by unsmob_stencil(). Either
+    copy Stencil objects, or use SCM references.
+
+    * Empty stencils have empty dimensions.  If add_at_edge is used to
     init the stencil, we assume that
     init the stencil, we assume that
-    DIMENSIONS = (Interval (0,0),Interval (0,0)
+
+    DIMENSIONS = (Interval (0, 0), Interval (0, 0)
 */
 class Stencil
 {
 */
 class Stencil
 {
-  friend SCM ly_stencil_set_extent_x (SCM, SCM, SCM);
-
-  Offset origin_;
   Box dim_;
   SCM expr_;
   Box dim_;
   SCM expr_;
-  
-  DECLARE_SIMPLE_SMOBS (Stencil,);  
+
+  DECLARE_SIMPLE_SMOBS (Stencil);
 public:
   Stencil (Box, SCM s);
   Stencil ();
 public:
   Stencil (Box, SCM s);
   Stencil ();
-  
-  Offset origin () const;
-  SCM get_expr () const;
+
+  SCM expr () const;
 
   /**
 
   /**
-     Set dimensions to empty, or to (Interval (0,0),Interval (0,0) */
+     Set dimensions to empty, or to (Interval (0, 0), Interval (0, 0) */
   void set_empty (bool);
   void set_empty (bool);
-  Stencil moved_to_edge (Axis a, Direction d, const Stencil &m, Real padding,
-                        Real minimum) const;
-
-  void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding,
-                   Real minimum);
+  void add_at_edge (Axis a, Direction d, const Stencil &m, Real padding);
   void add_stencil (Stencil const &m);
   void translate (Offset);
   void add_stencil (Stencil const &m);
   void translate (Offset);
+  Stencil translated (Offset) const;
+  void rotate (Real, Offset);
+  void rotate_degrees (Real, Offset);
+  void rotate_degrees_absolute (Real, Offset);
   void align_to (Axis a, Real x);
   void align_to (Axis a, Real x);
-  void translate_axis (Real,Axis);
-  
+  void translate_axis (Real, Axis);
+
   Interval extent (Axis) const;
   Box extent_box () const;
   bool is_empty () const;
   Interval extent (Axis) const;
   Box extent_box () const;
   bool is_empty () const;
-
-  static SCM ly_get_stencil_extent (SCM mol, SCM axis);
-  static SCM ly_set_stencil_extent_x (SCM,SCM,SCM);
-  static SCM ly_stencil_combined_at_edge (SCM,SCM,SCM,SCM,SCM);
+  Stencil in_color (Real r, Real g, Real b) const;
 };
 
 };
 
+DECLARE_UNSMOB (Stencil, stencil);
 
 
-DECLARE_UNSMOB(Stencil,stencil);
-SCM fontify_atom (Font_metric const*, SCM atom);
-
-Stencil create_stencil (SCM print);
+void interpret_stencil_expression (SCM expr,
+                                  void (*func) (void *, SCM),
+                                  void *func_arg,
+                                  Offset o);
+SCM find_expression_fonts (SCM expr);
 
 
+void register_stencil_head (SCM symbol);
+bool is_stencil_head (SCM symbol);
+SCM all_stencil_heads ();
 
 
 
 
-#endif
+#endif /* STENCIL_HH */