int BufferView::rightMargin() const
{
+ // The value used to be hardcoded to 10, which is 2.5mm at 100dpi
+ int const default_margin = Length(2.5, Length::MM).inPixels(0);
// The additional test for the case the outliner is opened.
- if (!full_screen_ ||
- !lyxrc.full_screen_limit ||
- width_ < lyxrc.full_screen_width + 20)
- return 10;
+ if (!full_screen_ || !lyxrc.full_screen_limit
+ || width_ < lyxrc.full_screen_width + 2 * default_margin)
+ return default_margin;
return (width_ - lyxrc.full_screen_width) / 2;
}
void BufferView::processUpdateFlags(Update::flags flags)
{
// This is close to a hot-path.
- LYXERR(Debug::DEBUG, "BufferView::processUpdateFlags()"
+ LYXERR(Debug::PAINTING, "BufferView::processUpdateFlags()"
<< "[fitcursor = " << (flags & Update::FitCursor)
<< ", forceupdate = " << (flags & Update::Force)
<< ", singlepar = " << (flags & Update::SinglePar)
setCursor(dit);
// set the current font.
d->cursor_.setCurrentFont();
+ // Do not forget to reset the anchor (see #9912)
+ d->cursor_.resetAnchor();
// To center the screen on this new position we need the
// paragraph position which is computed at draw() time.
// So we need a redraw!
// cursor in front of the inset.
if (inset->hasSettings() &&
cur.nextInset() != inset && cur.prevInset() == inset)
- cur.backwardPos();
+ cur.posBackward();
}
// Put anchor at the same position.
// FIXME: (2) if we had a working InsetText::notifyCursorLeaves,
// the leftinset bool would not be necessary (badcursor instead).
bool update = leftinset;
- if (!do_selection && d->cursor_.inTexted())
+ if (!do_selection && d->cursor_.inTexted()) {
update |= checkDepm(cur, d->cursor_);
+ if (cur.inTexted() && cur.pos()
+ && cur.paragraph().isEnvSeparator(cur.pos() - 1))
+ cur.posBackward();
+ }
if (!do_selection)
d->cursor_.resetAnchor();
// Set the row on which the cursor lives.
setCurrentRowSlice(rowSlice);
- // Current x position of the cursor in pixels
- int cur_x = getPos(d->cursor_).x_;
-
- // If cursor offset is left margin and offset is not the leftmost
- // position of the row, there is a cache problem.
- if (cur_x == row.left_margin && !row.empty()
- && d->cursor_.pos() != row.front().left_pos()) {
+ // If insets referred to by cursor are not all in the cache, the positions
+ // need to be recomputed.
+ if (!d->cursor_.inCoordCache()) {
/** FIXME: the code below adds an extraneous computation of
* inset positions, and can therefore be bad for performance
* (think for example about a very large tabular inset.
* cache. This would not happen if we did not have two-stage
* drawing.
*
- * A proper fix should be found and this code should be removed.
+ * A proper fix would be to always have proper inset positions
+ * at this point.
*/
// Force the recomputation of inset positions
bool const drawing = pi.pain.isDrawingEnabled();
-d->horiz_scroll_offset_, 0);
rp.paintText();
pi.pain.setDrawingEnabled(drawing);
-
- // Recompute current Current x position of the cursor in pixels
- cur_x = getPos(d->cursor_).x_;
}
+ // Current x position of the cursor in pixels
+ int cur_x = getPos(d->cursor_).x_;
+
// Horizontal scroll offset of the cursor row in pixels
int offset = d->horiz_scroll_offset_;
int const MARGIN = 2 * theFontMetrics(d->cursor_.real_current_font).em()