mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Fix some display glitches
* When doing a redraw with drawing disabled (to set inset positions properly), take horizontal scroll offset in account * reset horizontal scroll offset when it is smaller than the left margin. * when drawing a paragraph, do not modify x globally, only for the row that is offset.
This commit is contained in:
parent
fcaf5b5fc8
commit
c6e1db7682
@ -2929,7 +2929,8 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
|
||||
bool const drawing = pi.pain.isDrawingEnabled();
|
||||
pi.pain.setDrawingEnabled(false);
|
||||
// No need to care about vertical position.
|
||||
RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row, 0, 0);
|
||||
RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row,
|
||||
-d->horiz_scroll_offset_, 0);
|
||||
rp.paintText();
|
||||
pi.pain.setDrawingEnabled(drawing);
|
||||
|
||||
@ -2947,9 +2948,13 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
|
||||
offset = cur_x - workWidth() + MARGIN;
|
||||
}
|
||||
|
||||
if (offset < 0 || row.width() <= workWidth())
|
||||
if (offset < row.x || row.width() <= workWidth())
|
||||
offset = 0;
|
||||
|
||||
if (offset != d->horiz_scroll_offset_)
|
||||
LYXERR(Debug::PAINTING, "Horiz. scroll offset changed from "
|
||||
<< d->horiz_scroll_offset_ << " to " << offset);
|
||||
|
||||
if (d->update_strategy_ == NoScreenUpdate
|
||||
&& (offset != d->horiz_scroll_offset_
|
||||
|| !d->last_row_slice_.empty())) {
|
||||
|
@ -1807,7 +1807,7 @@ void TextMetrics::draw(PainterInfo & pi, int x, int y) const
|
||||
}
|
||||
|
||||
|
||||
void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) const
|
||||
void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const x, int y) const
|
||||
{
|
||||
BufferParams const & bparams = bv_->buffer().params();
|
||||
ParagraphMetrics const & pm = par_metrics_[pit];
|
||||
@ -1847,6 +1847,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) co
|
||||
for (size_t i = 0; i != nrows; ++i) {
|
||||
|
||||
Row const & row = pm.rows()[i];
|
||||
int row_x = x;
|
||||
if (i)
|
||||
y += row.ascent();
|
||||
|
||||
@ -1859,12 +1860,12 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) co
|
||||
|
||||
// Adapt to cursor row scroll offset if applicable.
|
||||
if (bv_->currentRowSlice() == rowSlice)
|
||||
x -= bv_->horizScrollOffset();
|
||||
row_x -= bv_->horizScrollOffset();
|
||||
|
||||
// It is not needed to draw on screen if we are not inside.
|
||||
pi.pain.setDrawingEnabled(inside && original_drawing_state);
|
||||
|
||||
RowPainter rp(pi, *text_, pit, row, x, y);
|
||||
RowPainter rp(pi, *text_, pit, row, row_x, y);
|
||||
|
||||
if (selection)
|
||||
row.setSelectionAndMargins(sel_beg_par, sel_end_par);
|
||||
@ -1903,10 +1904,10 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) co
|
||||
// Clear background of this row if paragraph background was not
|
||||
// already cleared because of a full repaint.
|
||||
if (!pi.full_repaint && row_has_changed) {
|
||||
LYXERR(Debug::PAINTING, "Clear rect@("
|
||||
<< max(x, 0) << ", " << y-row.ascent() << ")="
|
||||
LYXERR(Debug::PAINTING, "Clear rect@("
|
||||
<< max(row_x, 0) << ", " << y-row.ascent() << ")="
|
||||
<< width() << " x " << row.height());
|
||||
pi.pain.fillRectangle(max(x, 0), y - row.ascent(),
|
||||
pi.pain.fillRectangle(max(row_x, 0), y - row.ascent(),
|
||||
width(), row.height(), pi.background_color);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user