]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/graphical-axis-group.cc
release: 1.3.8
[lilypond.git] / lily / graphical-axis-group.cc
index 6beccc696110c5ddedd434eca97c58d1df5e6d5e..e0cfcaf1ef5f7deb2102de7213303bdf5059226a 100644 (file)
   Graphical_axis_group at one time. */
 Graphical_axis_group::Graphical_axis_group(Graphical_axis_group const&s)
 {
-#if 0
-  /*
-  gcc-2.95: huh? why can't i assign a const value to a var?
-  graphical-axis-group.cc:20: incompatible types in assignment of `const Axis[2]' to `Axis[2]'
-  */
-  axes_ = s.axes_;
-#else
   axes_[0] = s.axes_[0];
   axes_[1] = s.axes_[1];
-#endif 
   ordered_b_ = s.ordered_b_;
 }
 
@@ -40,31 +32,45 @@ Interval
 Graphical_axis_group::extent (Axis axis) const
 {
   Interval r;
-  for (int i=0; i < elem_l_arr_.size(); i++) 
-    r.unite (elem_l_arr_[i]->extent (axis));
+  for (int i=0; i < elem_l_arr_.size(); i++)
+    {
+      r.unite (elem_l_arr_[i]->extent (axis)
+              + elem_l_arr_[i]->relative_coordinate (this, axis)
+              );
+    }
   return r;
 }
 
 void
-Graphical_axis_group::add_element (Graphical_element*e)
+Graphical_axis_group::add_element (Graphical_element*e, Axis a1 , Axis a2)
 {
   used_b_ =true;
   e->used_b_ = true;
+
+  Axis as[2] = {
+    (a1 == NO_AXES) ? axes_[0] : a1,
+    (a2 == NO_AXES) ? axes_[1] : a2,    
+  };
+
+    
+  
   for (int i = 0; i < 2; i++)
     {
-      Axis a = axes_[i];
-      assert (a>=0);
-      Dimension_cache * &d = e->dim_cache_[a]->parent_l_;
-      assert (!d || d == dim_cache_[a]);
-      d = dim_cache_[a];
-      d->dependencies_l_arr_.push (dim_cache_[a]);
-    }
+      if (e->parent_l (as[i]))
+       continue;
+      
+      e->set_parent (this, as[i]);
 
+      //      e->dim_cache_[as[i]]->dependencies_l_arr_.push (dim_cache_[as[i]]);
+    }
+  assert (e->parent_l(Y_AXIS) == this || e->parent_l (X_AXIS) == this);
   elem_l_arr_.push (e);
 }
 
 
-
+/**
+   ugr. duplication of functionality with remove_all ()
+ */
 void
 Graphical_axis_group::remove_element (Graphical_element*e)
 {
@@ -73,13 +79,20 @@ Graphical_axis_group::remove_element (Graphical_element*e)
     elem_l_arr_.substitute (e,0);
   else
     elem_l_arr_.unordered_substitute (e,0);
-  
+
+  do_remove (e);
+}
+
+void
+Graphical_axis_group::do_remove (Graphical_element *e)
+{
   for (int i=0; i<  2; i++)
     {
       Axis a=axes_[i];
-      Dimension_cache * d = e->dim_cache_[a];
-      d->parent_l_ = 0;
-      d->dependencies_l_arr_.unordered_substitute (dim_cache_[a], 0);
+      if (e->parent_l (a) != this)
+       continue;
+      e->set_parent (0, a);
+      //      e->dim_cache_[a]->dependencies_l_arr_.clear ();
     }
 }
 
@@ -87,17 +100,8 @@ void
 Graphical_axis_group::remove_all ()
 {
   for (int i=0; i < elem_l_arr_.size(); i++) 
-    {
-      Graphical_element*e=elem_l_arr_[i];
-      for (int i=0; i<  2; i++)
-       {
-         Axis a=axes_[i];
-         Dimension_cache * d = e->dim_cache_[a];
-         d->parent_l_ = 0;
-         d->dependencies_l_arr_.clear ();
-       }
-      
-    }
+    do_remove (elem_l_arr_[i]);
+
   elem_l_arr_.clear ();
 }
 
@@ -107,7 +111,7 @@ Graphical_axis_group::do_print() const
 {
 #ifndef NPRINT
   for (int i=0; i < elem_l_arr_.size(); i++) 
-    DOUT << classname(elem_l_arr_[i]) << " ";
+    DEBUG_OUT << classname(elem_l_arr_[i]) << " ";
 #endif
 }