aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6102_e12538e52567.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla_backports/6102_e12538e52567.patch')
-rw-r--r--src/scintilla_backports/6102_e12538e52567.patch61
1 files changed, 0 insertions, 61 deletions
diff --git a/src/scintilla_backports/6102_e12538e52567.patch b/src/scintilla_backports/6102_e12538e52567.patch
deleted file mode 100644
index 4078bf5f..00000000
--- a/src/scintilla_backports/6102_e12538e52567.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-# HG changeset patch
-# User Colomban Wendling <ban@herbesfolles.org>
-# Date 1487712605 -3600
-# Node ID e12538e52567bc5fc011448f42689ac52434f1fd
-# Parent b82fe8d33961050a7905d6588eef858b85ca804c
-Bug [#1910]. GTK a11y: Speed up converting byte offsets to character offsets
-
-Use a per-line cache to avoid re-computing the offset from the start of
-the buffer each time. This dramatically speeds up multiple replacements
-on large files.
-
-diff -r b82fe8d33961 -r e12538e52567 gtk/ScintillaGTKAccessible.cxx
---- a/gtk/ScintillaGTKAccessible.cxx Thu Mar 02 09:41:01 2017 +1100
-+++ b/gtk/ScintillaGTKAccessible.cxx Tue Feb 21 22:30:05 2017 +0100
-@@ -856,6 +856,13 @@
- void ScintillaGTKAccessible::Notify(GtkWidget *, gint, SCNotification *nt) {
- switch (nt->nmhdr.code) {
- case SCN_MODIFIED: {
-+ if (nt->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) {
-+ // invalidate character offset cache if applicable
-+ const Position line = sci->pdoc->LineFromPosition(nt->position);
-+ if (character_offsets.size() > static_cast<size_t>(line + 1)) {
-+ character_offsets.resize(line + 1);
-+ }
-+ }
- if (nt->modificationType & SC_MOD_INSERTTEXT) {
- int startChar = CharacterOffsetFromByteOffset(nt->position);
- int lengthChar = sci->pdoc->CountCharacters(nt->position, nt->position + nt->length);
-diff -r b82fe8d33961 -r e12538e52567 gtk/ScintillaGTKAccessible.h
---- a/gtk/ScintillaGTKAccessible.h Thu Mar 02 09:41:01 2017 +1100
-+++ b/gtk/ScintillaGTKAccessible.h Tue Feb 21 22:30:05 2017 +0100
-@@ -20,6 +20,9 @@
- GtkAccessible *accessible;
- ScintillaGTK *sci;
-
-+ // cache holding character offset for each line start, see CharacterOffsetFromByteOffset()
-+ std::vector<Position> character_offsets;
-+
- // cached length of the deletion, in characters (see Notify())
- int deletionLengthChar;
- // local state for comparing
-@@ -52,7 +55,18 @@
- }
-
- int CharacterOffsetFromByteOffset(Position byteOffset) {
-- return sci->pdoc->CountCharacters(0, byteOffset);
-+ const Position line = sci->pdoc->LineFromPosition(byteOffset);
-+ if (character_offsets.size() <= static_cast<size_t>(line)) {
-+ if (character_offsets.empty())
-+ character_offsets.push_back(0);
-+ for (Position i = character_offsets.size(); i <= line; i++) {
-+ const Position start = sci->pdoc->LineStart(i - 1);
-+ const Position end = sci->pdoc->LineStart(i);
-+ character_offsets.push_back(character_offsets[i - 1] + sci->pdoc->CountCharacters(start, end));
-+ }
-+ }
-+ const Position lineStart = sci->pdoc->LineStart(line);
-+ return character_offsets[line] + sci->pdoc->CountCharacters(lineStart, byteOffset);
- }
-
- void CharacterRangeFromByteRange(Position startByte, Position endByte, int *startChar, int *endChar) {