Take Track-Change into account when calculating row signature.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19876 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-08-28 22:44:09 +00:00
parent c16a1874e2
commit a40d6cd7bc
3 changed files with 12 additions and 6 deletions

View File

@ -94,18 +94,24 @@ void ParagraphMetrics::reset(Paragraph const & par)
}
size_type ParagraphMetrics::calculateRowSignature(Row const & row)
size_type ParagraphMetrics::calculateRowSignature(Row const & row,
BufferParams const & bparams)
{
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);
if (bparams.trackChanges) {
Change change = par_->lookupChange(i);
char_type const b[] = { change.type };
crc.process_bytes(b, 1);
}
}
return crc.checksum();
}
void ParagraphMetrics::updateRowChangeStatus()
void ParagraphMetrics::updateRowChangeStatus(BufferParams const & bparams)
{
size_t const size = rows_.size();
row_change_status_.resize(size);
@ -113,7 +119,7 @@ void ParagraphMetrics::updateRowChangeStatus()
for (size_t i = 0; i != size; ++i) {
// Row signature; has row changed since last update?
size_type const row_sig = calculateRowSignature(rows_[i]);
size_type const row_sig = calculateRowSignature(rows_[i], bparams);
row_change_status_[i] = row_signature_[i] != row_sig;
row_signature_[i] = row_sig;
}

View File

@ -73,7 +73,7 @@ public:
std::vector<bool> const & rowChangeStatus() const
{ return row_change_status_; }
///
void updateRowChangeStatus();
void updateRowChangeStatus(BufferParams const & bparams);
///
int rightMargin(Buffer const & buffer) const;
///
@ -86,7 +86,7 @@ private:
///
typedef std::vector<size_type> RowSignature;
///
size_type calculateRowSignature(Row const &);
size_type calculateRowSignature(Row const &, BufferParams const & bparams);
///
mutable RowList rows_;
///

View File

@ -268,7 +268,7 @@ bool TextMetrics::redoParagraph(pit_type const pit)
// Update the row change statuses. The painter will need that info
// in order to know which row has to be repainted.
pm.updateRowChangeStatus();
pm.updateRowChangeStatus(bv_->buffer().params());
return changed;
}