]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/stencil.hh
Create Stencil::is_empty (Axis)
[lilypond.git] / lily / include / stencil.hh
index 41f495e9982c5935f08c278a694533e999a3fda5..6b03eb07a0eea1984892f90cba96d7f6a45169c9 100644 (file)
@@ -1,19 +1,29 @@
 /*
 /*
-  stencil.hh -- declare Stencil
+  This file is part of LilyPond, the GNU music typesetter.
 
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 
-  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.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
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 #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);
+  void scale (Real, Real);
+
   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);
+  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);
 
 
-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 */