#include "support/debug.h"
#include <cstdlib>
-#include <boost/assert.hpp>
+#include "support/lassert.h"
using namespace std;
TextMetrics::TextMetrics(BufferView * bv, Text * text)
: bv_(bv), text_(text)
{
- BOOST_ASSERT(bv_);
+ LASSERT(bv_, /**/);
max_width_ = bv_->workWidth();
dim_.wid = max_width_;
dim_.asc = 10;
bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width)
{
- BOOST_ASSERT(mi.base.textwidth);
+ LASSERT(mi.base.textwidth, /**/);
max_width_ = mi.base.textwidth;
// backup old dimension.
Dimension const old_dim = dim_;
Font TextMetrics::displayFont(pit_type pit, pos_type pos) const
{
- BOOST_ASSERT(pos >= 0);
+ LASSERT(pos >= 0, /**/);
ParagraphList const & pars = text_->paragraphs();
Paragraph const & par = pars[pit];
<< " the context is better then.");
updateLabels(bv_->buffer());
parPos = text_->macrocontextPosition();
- BOOST_ASSERT(!parPos.empty());
+ LASSERT(!parPos.empty(), /**/);
parPos.pit() = pit;
}
double w = width - row.width();
// FIXME: put back this assertion when the crash on new doc is solved.
- //BOOST_ASSERT(w >= 0);
+ //LASSERT(w >= 0, /**/);
//lyxerr << "\ndim_.wid " << dim_.wid << endl;
//lyxerr << "row.width() " << row.width() << endl;
Paragraph const & par = text_->getPar(pit);
pos_type last = par.beginOfBody();
- BOOST_ASSERT(last > 0);
+ LASSERT(last > 0, /**/);
// -1 because a label ends with a space that is in the label
--last;
left_side = true;
}
- BOOST_ASSERT(vc <= end); // This shouldn't happen.
+ LASSERT(vc <= end, /**/); // This shouldn't happen.
boundary = false;
// This (rtl_support test) is not needed, but gives
// upDownInText() while in selection mode.
ParagraphMetrics const & pm = parMetrics(pit);
- BOOST_ASSERT(row < int(pm.rows().size()));
+ LASSERT(row < int(pm.rows().size()), /**/);
bool bound = false;
Row const & r = pm.rows()[row];
return r.pos() + getColumnNearX(pit, r, x, bound);
// y is screen coordinate
pit_type TextMetrics::getPitNearY(int y)
{
- BOOST_ASSERT(!text_->paragraphs().empty());
+ LASSERT(!text_->paragraphs().empty(), /**/);
LYXERR(Debug::DEBUG, "y: " << y << " cache size: " << par_metrics_.size());
// look for highest numbered paragraph with y coordinate less than given y
ParagraphMetrics const & pm = par_metrics_[pit];
int yy = pm.position() - pm.ascent();
- BOOST_ASSERT(!pm.rows().empty());
+ LASSERT(!pm.rows().empty(), /**/);
RowList::const_iterator rit = pm.rows().begin();
RowList::const_iterator rlast = pm.rows().end();
--rlast;
cur.bv().coordCache().dump();
}
pit_type pit = getPitNearY(y);
- BOOST_ASSERT(pit != -1);
+ LASSERT(pit != -1, /**/);
Row const & row = getRowNearY(y, pit);
bool bound = false;
// This should be just before or just behind the
// cursor position set above.
- BOOST_ASSERT((pos != 0 && inset == insetBefore)
- || inset == pars[pit].getInset(pos));
+ LASSERT((pos != 0 && inset == insetBefore)
+ || inset == pars[pit].getInset(pos), /**/);
// Make sure the cursor points to the position before
// this inset.
void TextMetrics::setCursorFromCoordinates(Cursor & cur, int const x, int const y)
{
- BOOST_ASSERT(text_ == cur.text());
+ LASSERT(text_ == cur.text(), /**/);
pit_type pit = getPitNearY(y);
ParagraphMetrics const & pm = par_metrics_[pit];
" pit: " << pit << " yy: " << yy);
int r = 0;
- BOOST_ASSERT(pm.rows().size());
+ LASSERT(pm.rows().size(), /**/);
for (; r < int(pm.rows().size()) - 1; ++r) {
Row const & row = pm.rows()[r];
if (int(yy + row.height()) > y)
Inset * TextMetrics::checkInsetHit(int x, int y)
{
pit_type pit = getPitNearY(y);
- BOOST_ASSERT(pit != -1);
+ LASSERT(pit != -1, /**/);
Paragraph const & par = text_->paragraphs()[pit];
ParagraphMetrics const & pm = par_metrics_[pit];
int TextMetrics::cursorX(CursorSlice const & sl,
bool boundary) const
{
- BOOST_ASSERT(sl.text() == text_);
+ LASSERT(sl.text() == text_, /**/);
pit_type const pit = sl.pit();
Paragraph const & par = text_->paragraphs()[pit];
ParagraphMetrics const & pm = par_metrics_[pit];
bool TextMetrics::cursorHome(Cursor & cur)
{
- BOOST_ASSERT(text_ == cur.text());
+ LASSERT(text_ == cur.text(), /**/);
ParagraphMetrics const & pm = par_metrics_[cur.pit()];
Row const & row = pm.getRow(cur.pos(),cur.boundary());
return text_->setCursor(cur, cur.pit(), row.pos());
bool TextMetrics::cursorEnd(Cursor & cur)
{
- BOOST_ASSERT(text_ == cur.text());
+ LASSERT(text_ == cur.text(), /**/);
// if not on the last row of the par, put the cursor before
// the final space exept if I have a spanning inset or one string
// is so long that we force a break.
void TextMetrics::deleteLineForward(Cursor & cur)
{
- BOOST_ASSERT(text_ == cur.text());
+ LASSERT(text_ == cur.text(), /**/);
if (cur.lastpos() == 0) {
// Paragraph is empty, so we just go forward
text_->cursorForward(cur);
int TextMetrics::leftMargin(int max_width, pit_type pit) const
{
- BOOST_ASSERT(pit >= 0);
- BOOST_ASSERT(pit < int(text_->paragraphs().size()));
+ LASSERT(pit >= 0, /**/);
+ LASSERT(pit < int(text_->paragraphs().size()), /**/);
return leftMargin(max_width, pit, text_->paragraphs()[pit].size());
}
{
ParagraphList const & pars = text_->paragraphs();
- BOOST_ASSERT(pit >= 0);
- BOOST_ASSERT(pit < int(pars.size()));
+ LASSERT(pit >= 0, /**/);
+ LASSERT(pit < int(pars.size()), /**/);
Paragraph const & par = pars[pit];
- BOOST_ASSERT(pos >= 0);
- BOOST_ASSERT(pos <= par.size());
+ LASSERT(pos >= 0, /**/);
+ LASSERT(pos <= par.size(), /**/);
Buffer const & buffer = bv_->buffer();
//lyxerr << "TextMetrics::leftMargin: pit: " << pit << " pos: " << pos << endl;
DocumentClass const & tclass = buffer.params().documentClass();
&& !(!par.empty()
&& par.isInset(pos)
&& par.getInset(pos)->display())
- && ((tclass.isDefaultLayout(par.layout())
+ && (!(tclass.isDefaultLayout(par.layout())
|| tclass.isEmptyLayout(par.layout()))
|| buffer.params().paragraph_separation == BufferParams::ParagraphIndentSeparation)
)
if (row_selection) {
DocIterator beg = bv_->cursor().selectionBegin();
DocIterator end = bv_->cursor().selectionEnd();
- bool const beg_margin = beg.pit() < pit && i == 0;
- bool const end_margin = end.pit() > pit && i == nrows - 1;
+ // FIXME (not here): pit is not updated when extending
+ // a selection to a new row with cursor right/left
+ bool const beg_margin = beg.pit() < pit;
+ bool const end_margin = end.pit() > pit;
beg.pit() = pit;
beg.pos() = row.sel_beg;
end.pit() = pit;
end.pos() = row.sel_end;
+ if (end.pos() == row.endpos()) {
+ // selection goes till the end of the row.
+ end.boundary(true);
+ }
drawRowSelection(pi, x, row, beg, end, beg_margin, end_margin);
}
// draw the margins
if (drawOnBegMargin) {
- if (text_->isRTL(buffer, beg.paragraph()))
- pi.pain.fillRectangle(x + x1, y1, width() - x1, y2 - y1, Color_selection);
- else
- pi.pain.fillRectangle(x, y1, x1, y2 - y1, Color_selection);
+ if (text_->isRTL(buffer, beg.paragraph())) {
+ int lm = bv_->leftMargin();
+ pi.pain.fillRectangle(x + x1, y1, width() - lm - x1, y2 - y1, Color_selection);
+ } else {
+ int rm = bv_->rightMargin();
+ pi.pain.fillRectangle(rm, y1, x1 - rm, y2 - y1, Color_selection);
+ }
}
if (drawOnEndMargin) {
- if (text_->isRTL(buffer, beg.paragraph()))
- pi.pain.fillRectangle(x, y1, x2, y2 - y1, Color_selection);
- else
- pi.pain.fillRectangle(x + x2, y1, width() - x2, y2 - y1, Color_selection);
+ if (text_->isRTL(buffer, beg.paragraph())) {
+ int rm = bv_->rightMargin();
+ pi.pain.fillRectangle(x + rm, y1, x2 - rm, y2 - y1, Color_selection);
+ } else {
+ int lm = bv_->leftMargin();
+ pi.pain.fillRectangle(x + x2, y1, width() - lm - x2, y2 - y1, Color_selection);
+ }
}
// if we are on a boundary from the beginning, it's probably