+/**
+ * \file math_textinset.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
#include "math_textinset.h"
-#include "metricsinfo.h"
+#include "math_data.h"
+
+#include "cursor_slice.h"
#include "debug.h"
+#include "metricsinfo.h"
using std::auto_ptr;
+using std::endl;
MathTextInset::MathTextInset()
for (pos_type r = 0, n = cache_.nargs(); r < n; ++r)
if (pos >= cache_.cellinfo_[r].begin_ && pos <= cache_.cellinfo_[r].end_)
return r;
- lyxerr << "illegal row for pos " << pos << "\n";
+ lyxerr << "illegal row for pos " << pos << endl;
return 0;
}
-void MathTextInset::getPos(idx_type /*idx*/, pos_type pos, int & x, int & y) const
+void MathTextInset::getCursorPos(CursorSlice const & cur, int & x, int & y) const
{
- idx_type const i = pos2row(pos);
- pos_type const p = pos - cache_.cellinfo_[i].begin_;
- cache_.getPos(i, p, x, y);
- y = cache_.cell(i).yo();
+ CursorSlice c = cur;
+ c.idx() = pos2row(cur.pos());
+ c.pos() -= cache_.cellinfo_[c.idx()].begin_;
+ cache_.getCursorPos(c, x, y);
+ y = cache_.cell(c.idx()).yo();
}
-bool MathTextInset::idxUpDown2(idx_type &, pos_type & pos, bool up,
- int /*targetx*/) const
+#if 0
+bool MathTextInset::idxUpDown2(LCursor & pos, bool up) const
{
// try to move only one screen row up or down if possible
idx_type i = pos2row(pos);
pos = cell2.begin_ + cache_.cell(i).x2pos(x, cell2.glue_);
return true;
}
+#endif
void MathTextInset::metrics(MetricsInfo & mi, Dimension & dim) const
// Special handling of spaces. We reached a safe position for breaking.
char const c = cell(0)[i]->getChar();
if (c == ' ') {
- //lyxerr << "reached safe pos\n";
+ //lyxerr << "reached safe pos" << endl;
// we don't count the space into the safe pos
safe += curr;
// we reset to this safepos if the next chunk does not fit
safepos = i;
++spaces;
// restart chunk with size of the space
- curr = cell(0)[i].width_;
+ curr = cell(0)[i]->width();
continue;
}
if (c != '\n') {
// This is a regular char. Go on if we either don't care for
// the width limit or have not reached that limit.
- curr += cell(0)[i].width_;
- if (!mi.base.restrictwidth || curr + safe <= mi.base.textwidth)
+ curr += cell(0)[i]->width();
+ if (curr + safe <= mi.base.textwidth)
continue;
}
// We passed the limit. Create a row entry.
- //lyxerr << "passed limit\n";
+ //lyxerr << "passed limit" << endl;
cache_.appendRow();
MathArray & ar = cache_.cell(cache_.nargs() - 1);
MathGridInset::CellInfo & row = cache_.cellinfo_.back();
} else if (spaces) {
// but we had a space break before this position.
// so retreat to this position
- //lyxerr << "... but had safe pos.\n";
+ //lyxerr << "... but had safe pos." << endl;
row.begin_ = begin;
row.end_ = safepos; // this is position of the safe space
i = safepos; // i gets incremented at end of loop
} else {
// This item is too large and it is the only one.
// We have no choice but to produce an overfull box.
- lyxerr << "... without safe pos\n";
+ lyxerr << "... without safe pos" << endl;
row.begin_ = begin;
row.end_ = i + 1;
begin = i + 1;
}
ar = MathArray(cell(0).begin() + row.begin_, cell(0).begin() + row.end_);
- //lyxerr << "line: " << ar << "\n";
+ //lyxerr << "line: " << ar << endl;
// in any case, start the new row with empty boxes
curr = 0;
safe = 0;
row.begin_ = begin;
row.end_ = cell(0).size();
ar = MathArray(cell(0).begin() + row.begin_, cell(0).begin() + row.end_);
- //lyxerr << "last line: " << ar.data() << "\n";
+ //lyxerr << "last line: " << ar.data() << endl;
// what to report?
cache_.metrics(mi, dim_);
}
+/*
void MathTextInset::drawSelection(PainterInfo & pi,
idx_type idx1, pos_type pos1, idx_type idx2, pos_type pos2) const
{
cache_.drawSelection(pi, idx1, pos1, idx2, pos2);
}
+*/