X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.C;h=2cb5b6311abefe4f6583f6b4b3edc2924fd5e762;hb=e5a46922e916a06ad1b958d5895cc3cfb4f13d2c;hp=9cfae9d44aa6c963f28958abbb9b9d5dc42629ac;hpb=ad84c0ce5d6d2e9eab9672a1a3ff26f16893196d;p=lyx.git diff --git a/src/rowpainter.C b/src/rowpainter.C index 9cfae9d44a..2cb5b6311a 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -823,20 +823,6 @@ void RowPainter::paintText() } -size_type calculateRowSignature(Row const & row, Paragraph const & par, - int x, int y) -{ - boost::crc_32_type crc; - for (pos_type i = row.pos(); i < row.endpos(); ++i) { - char_type const b[] = { par.getChar(i) }; - crc.process_bytes(b, 1); - } - char_type const b[] = { x, y, row.width() }; - crc.process_bytes(b, 3); - return crc.checksum(); -} - - bool CursorOnRow(PainterInfo & pi, pit_type const pit, RowList::const_iterator rit, LyXText const & text) { @@ -899,8 +885,7 @@ void paintPar bool tmp = refreshInside; // Row signature; has row changed since last paint? - size_type const row_sig = calculateRowSignature(*rit, par, x, y); - bool row_has_changed = pm.rowSignature()[rowno] != row_sig; + bool row_has_changed = pm.rowChangeStatus()[rowno]; bool cursor_on_row = CursorOnRow(pi, pit, rit, text); bool in_inset_alone_on_row = innerCursorOnRow(pi, pit, rit, @@ -928,9 +913,6 @@ void paintPar // from cache, or cursor is inside an inset _on this row_, // then paint the row if (repaintAll || row_has_changed || cursor_on_row) { - // Add to row signature cache - pm.rowSignature()[rowno] = row_sig; - bool const inside = (y + rit->descent() >= 0 && y - rit->ascent() < ww); // it is not needed to draw on screen if we are not inside. @@ -995,7 +977,10 @@ void paintText(BufferView & bv, PainterInfo pi(const_cast(&bv), pain); // Should the whole screen, including insets, be refreshed? - bool repaintAll = select || !vi.singlepar; + // FIXME: We should also distinguish DecorationUpdate to avoid text + // drawing if possible. This is not possible to do easily right now + // because of the single backing pixmap. + bool repaintAll = select || vi.update_strategy != SingleParUpdate; if (repaintAll) { // Clear background (if not delegated to rows) @@ -1018,12 +1003,12 @@ void paintText(BufferView & bv, // and grey out above (should not happen later) // lyxerr << "par ascent: " << text.getPar(vi.p1).ascent() << endl; - if (vi.y1 > 0 && !vi.singlepar) + if (vi.y1 > 0 && vi.update_strategy != SingleParUpdate) pain.fillRectangle(0, 0, bv.workWidth(), vi.y1, LColor::bottomarea); // and possibly grey out below // lyxerr << "par descent: " << text.getPar(vi.p1).ascent() << endl; - if (vi.y2 < bv.workHeight() && !vi.singlepar) + if (vi.y2 < bv.workHeight() && vi.update_strategy != SingleParUpdate) pain.fillRectangle(0, vi.y2, bv.workWidth(), bv.workHeight() - vi.y2, LColor::bottomarea); }