]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/molecule.hh
patch::: 1.3.18.jcn3
[lilypond.git] / lily / include / molecule.hh
index 0a4bae3c29e8be630b0aa7c796595a6d814844fe..90102b62423981b8bb84042b028ec052a07b9f7f 100644 (file)
@@ -9,15 +9,23 @@
 #define MOLECULE_HH
 
 #include "lily-proto.hh"
-#include "plist.hh"
 #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_;
@@ -26,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;
@@ -47,5 +69,6 @@ public:
   Molecule (const Molecule&s);
   void print() const;
   void operator=(const Molecule&);  
+  bool empty_b() const;
 };
 #endif