#include <math.h>
#include <libc-extension.hh>
-#include "dimension-cache.hh"
+
#include "debug.hh"
#include "spanner.hh"
#include "paper-column.hh"
if (!left || !right)
return;
- if (left == right)
- {
- warning (_f ("Spanner `%s' has equal left and right spanpoints",
- classname (this)));
- }
-
/*
Check if our parent in X-direction spans equally wide
or wider than we do.
if (left == right)
{
- /*
- FIXME: this is broken.
- */
/*
If we have a spanner spanning one column, we must break it
anyway because it might provide a parent for another item. */
do
{
Item* bound = left->find_prebroken_piece (d);
- if (bound->line_l ())
+ if (!bound)
+ programming_error ("no broken bound");
+ else if (bound->line_l ())
{
Spanner * span_p = dynamic_cast<Spanner*>( clone ());
span_p->set_bound (LEFT, bound);
if (spanned_drul_[LEFT])
{
- iv[LEFT] = spanned_drul_[LEFT]->column_l ()->rank_i ();
+ iv[LEFT] = Paper_column::rank_i (spanned_drul_[LEFT]->column_l ());
}
if (spanned_drul_[RIGHT])
{
- iv[RIGHT] = spanned_drul_[RIGHT]->column_l ()->rank_i ();
+ iv[RIGHT] = Paper_column::rank_i (spanned_drul_[RIGHT]->column_l ());
}
return iv;
}
{
set_parent (i, X_AXIS);
}
-
- if (spanned_drul_[Direction(-d)] == spanned_drul_[d]
- && i)
- warning (_f ("Spanner `%s' has equal left and right spanpoints",
- classname (this)));
}
int
Spanner::compare (Spanner * const &p1, Spanner * const &p2)
{
- return p1->line_l ()->rank_i_ - p2->line_l ()->rank_i_;
+ return p1->line_l ()->rank_i_ - p2->line_l ()->rank_i_;
}
bool
return broken_into_l_arr_.size();
}
-Array<Rod>
-Spanner::get_rods () const
-{
- Array<Rod> r;
- return r;
-}
-
-Array<Spring>
-Spanner::get_springs () const
-{
- Array<Spring> s;
- return s;
-}
-
-void
-Spanner::do_space_processing ()
-{
- Array<Rod> rs (get_rods ());
- for (int i=0; i < rs.size (); i++)
- {
- rs[i].add_to_cols ();
- }
-
- Array<Spring> ss (get_springs ());
- for (int i=0; i < ss.size (); i++)
- {
- if (isinf (ss[i].distance_f_))
- programming_error ("weird spring");
- else
- ss[i].add_to_cols ();
- }
-}
/*
If this is a broken spanner, return the amount the left end is to be
if (spanned_drul_[d])
scm_gc_mark (spanned_drul_[d]->self_scm_);
while (flip (&d) != LEFT);
+
+ for (int i= broken_into_l_arr_.size () ; i--;)
+ scm_gc_mark (broken_into_l_arr_[i]->self_scm_);
}
+void
+add_bound_item (Spanner* sp, Item*it)
+{
+ if (!sp->get_bound (LEFT))
+ sp->set_bound (LEFT, it);
+ else
+ sp->set_bound (RIGHT, it);
+}