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_;
}
-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)
{
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,
// 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.