]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/molecule.hh
release: 1.1.39
[lilypond.git] / lily / include / molecule.hh
index 5727661321a0e1d55ea2608fbcb1605a0bbbab11..90102b62423981b8bb84042b028ec052a07b9f7f 100644 (file)
 #include "box.hh"
 #include "axes.hh"
 #include "direction.hh"
-#include "protected-scm.hh"
 #include "cons.hh"
 
 //#define ATOM_SMOB
 
 /** a group of individually translated symbols. You can add molecules
-    to the top, to the right, etc.  */
+    to the top, to the right, etc.
+
+    Dimension behavior:
+
+    Empty molecules have empty dimensions.  If add_at_edge is used to
+    init the molecule, we assume that
+    DIMENSIONS = (Interval(0,0),Interval(0,0)
+
+*/
 class Molecule {
 #ifdef ATOM_SMOB
   SCM atom_list_;
@@ -27,20 +34,34 @@ class Molecule {
   Cons<Atom> *atom_list_;
 #endif
   friend class Paper_outputter;
+
 public:
   Box dim_;
 
   Molecule();
   ~Molecule();
 
-  void add_at_edge (Axis a, Direction d, const Molecule &m, Real padding);
+  /**
+     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 Molecule &m, Real padding);
+  void add_atom (Atom const *a);    
   void add_molecule (Molecule const &m);
   void translate (Offset);
-  void do_center (Axis);
+  
+  /**
+     align D direction in axis A.
+
+     If D == CENTER, then move the dimension(A).center() to (0,0)
+
+     Else, move so dimension(A)[D] == 0.0
+     
+   */
+  void align_to (Axis a, Direction d);
   void translate_axis (Real,Axis);
+
   
-  void add_atom (Atom const *a);
   /// how big is #this#? 
   Box extent() const;
   Interval extent (Axis) const;