aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/EditView.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-07-31 15:51:53 +1000
committerNeil <nyamatongwe@gmail.com>2022-07-31 15:51:53 +1000
commit926cb6f7d228b347db16a45e1f2632da475da1f0 (patch)
tree6263662cb8c023502d61b61eed34baa93ed35843 /src/EditView.cxx
parent535e20189d5a2dd9b43a6ea0a74749a50678d631 (diff)
downloadscintilla-mirror-926cb6f7d228b347db16a45e1f2632da475da1f0.tar.gz
Added change history which can display document changes (modified, saved, ...)
in the margin or in the text.
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r--src/EditView.cxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx
index c3709f25b..c4768a2a3 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -1326,6 +1326,45 @@ static void DrawIndicators(Surface *surface, const EditModel &model, const ViewS
}
}
}
+
+ if (FlagSet(model.changeHistoryOption, ChangeHistoryOption::Indicators)) {
+ // Draw editions
+ const int indexHistory = static_cast<int>(IndicatorNumbers::HistoryRevertedToOriginInsertion);
+ {
+ // Draw insertions
+ Sci::Position startPos = posLineStart + lineStart;
+ while (startPos < posLineEnd) {
+ const Range rangeRun(startPos, model.pdoc->EditionEndRun(startPos));
+ const Sci::Position endPos = std::min(rangeRun.end, posLineEnd);
+ const int edition = model.pdoc->EditionAt(startPos);
+ if (edition != 0) {
+ const int indicator = (edition - 1) * 2 + indexHistory;
+ const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1);
+ DrawIndicator(indicator, startPos - posLineStart, endPos - posLineStart,
+ surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, Indicator::State::normal,
+ 1, model.BidirectionalEnabled(), tabWidthMinimumPixels);
+ }
+ startPos = endPos;
+ }
+ }
+ {
+ // Draw deletions
+ Sci::Position startPos = posLineStart + lineStart;
+ while (startPos <= posLineEnd) {
+ const unsigned int editions = model.pdoc->EditionDeletesAt(startPos);
+ const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(startPos + 1, 1);
+ for (unsigned int edition=0; edition<4; edition++) {
+ if (editions & (1 << edition)) {
+ const int indicator = edition * 2 + indexHistory + 1;
+ DrawIndicator(indicator, startPos - posLineStart, posSecond - posLineStart,
+ surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, Indicator::State::normal,
+ 1, model.BidirectionalEnabled(), tabWidthMinimumPixels);
+ }
+ }
+ startPos = model.pdoc->EditionNextDelete(startPos);
+ }
+ }
+ }
}
void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll,