X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.C;h=2cb5b6311abefe4f6583f6b4b3edc2924fd5e762;hb=0657a91fd08e9c31d7f9e6be26055cc5050e5f8b;hp=51d448fd6535bda99025a3af0c76873fb0d946b6;hpb=b2126408cfeaa251bc966e3df49a7000a202add3;p=lyx.git diff --git a/src/rowpainter.C b/src/rowpainter.C index 51d448fd65..2cb5b6311a 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -138,8 +138,6 @@ RowPainter::RowPainter(PainterInfo & pi, erased_(pi.erased_), xo_(x), yo_(y), width_(text_metrics_.width()) { - Buffer const & buffer = *bv_.buffer(); - int const right_margin = text_metrics_.rightMargin(pm_); RowMetrics m = text_metrics_.computeRowMetrics(pit_, row_); x_ = m.x + xo_; @@ -825,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) { @@ -901,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, @@ -930,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. @@ -997,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) @@ -1020,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); }