int TextMetrics::rightMargin(ParagraphMetrics const & pm) const
{
- return main_text_? pm.rightMargin(*bv_) : 0;
+ return text_->isMainText() ? pm.rightMargin(*bv_) : 0;
}
int TextMetrics::rightMargin(pit_type const pit) const
{
- return main_text_? par_metrics_[pit].rightMargin(*bv_) : 0;
+ return text_->isMainText() ? par_metrics_[pit].rightMargin(*bv_) : 0;
}
pm.reset(par);
Buffer & buffer = bv_->buffer();
- main_text_ = (text_ == &buffer.text());
bool changed = false;
// Check whether there are InsetBibItems that need fixing
if (row_index == pm.rows().size())
pm.rows().push_back(Row());
Row & row = pm.rows()[row_index];
+ row.pit(pit);
row.pos(first);
breakRow(row, right_margin, pit);
setRowHeight(row, pit);
row.setChanged(false);
if (row_index || row.endpos() < par.size()
- || (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE))
+ || (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE)) {
/* If there is more than one row or the row has been
* broken by a display inset or a newline, expand the text
* to the full allowable width. This setting here is
* that, and it triggers when using a caption in a
* longtable (see bugs #9945 and #9757).
*/
- dim_.wid = max_width_;
+ if (dim_.wid < max_width_)
+ dim_.wid = max_width_;
+ }
int const max_row_width = max(dim_.wid, row.width());
computeRowMetrics(pit, row, max_row_width);
first = row.endpos();
// following code in another method specially tailored for the
// main Text. The following test is thus bogus.
// Top and bottom margin of the document (only at top-level)
- if (main_text_ && topBottomSpace) {
+ if (text_->isMainText() && topBottomSpace) {
if (pit == 0 && row.pos() == 0)
maxasc += 20;
if (pit + 1 == pit_type(pars.size()) &&
int const xo = origin_.x_;
x -= xo;
+ int offset = 0;
+ CursorSlice rowSlice(const_cast<InsetText &>(text_->inset()));
+ rowSlice.pit() = row.pit();
+ rowSlice.pos() = row.pos();
+
+ // Adapt to cursor row scroll offset if applicable.
+ if (bv_->currentRowSlice() == rowSlice)
+ offset = bv_->horizScrollOffset();
+ x += offset;
+
pos_type pos = row.pos();
boundary = false;
if (row.empty())
else
boundary = row.right_boundary();
}
- x += xo;
+
+ x += xo - offset;
//LYXERR0("getPosNearX ==> pos=" << pos << ", boundary=" << boundary);
+
return pos;
}
boundary = true;
else
--end;
- }
+ } else if (cur.paragraph().isEnvSeparator(end-1))
+ --end;
return text_->setCursor(cur, cur.pit(), end, true, boundary);
}