aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/PositionCache.h
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2011-05-13 10:27:30 +1000
committernyamatongwe <devnull@localhost>2011-05-13 10:27:30 +1000
commit15bfd9c723b0753dcf2b6e85f6b9be351af00378 (patch)
tree14707aa7cea073ecb62849d09697a02ca38e9375 /src/PositionCache.h
parent3166c901c7d071f2083a1a29ca710171fd7cf699 (diff)
downloadscintilla-mirror-15bfd9c723b0753dcf2b6e85f6b9be351af00378.tar.gz
Break measurement of text into reasonable sized segments similar
to drawing. Drawing will now always be broken up at a character boundary even when there is a large number of alphabetic characters. Fixes bug #3165743.
Diffstat (limited to 'src/PositionCache.h')
-rw-r--r--src/PositionCache.h17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/PositionCache.h b/src/PositionCache.h
index a76da574c..8bd4f1b43 100644
--- a/src/PositionCache.h
+++ b/src/PositionCache.h
@@ -117,16 +117,10 @@ public:
// Class to break a line of text into shorter runs at sensible places.
class BreakFinder {
- // If a whole run is longer than lengthStartSubdivision then subdivide
- // into smaller runs at spaces or punctuation.
- enum { lengthStartSubdivision = 300 };
- // Try to make each subdivided run lengthEachSubdivision or shorter.
- enum { lengthEachSubdivision = 100 };
LineLayout *ll;
int lineStart;
int lineEnd;
int posLineStart;
- bool utf8;
int nextBreak;
int *selAndEdge;
unsigned int saeSize;
@@ -134,9 +128,16 @@ class BreakFinder {
unsigned int saeCurrentPos;
int saeNext;
int subBreak;
+ Document *pdoc;
void Insert(int val);
public:
- BreakFinder(LineLayout *ll_, int lineStart_, int lineEnd_, int posLineStart_, bool utf8_, int xStart, bool breakForSelection);
+ // If a whole run is longer than lengthStartSubdivision then subdivide
+ // into smaller runs at spaces or punctuation.
+ enum { lengthStartSubdivision = 300 };
+ // Try to make each subdivided run lengthEachSubdivision or shorter.
+ enum { lengthEachSubdivision = 100 };
+ BreakFinder(LineLayout *ll_, int lineStart_, int lineEnd_, int posLineStart_,
+ int xStart, bool breakForSelection, Document *pdoc_);
~BreakFinder();
int First() const;
int Next();
@@ -154,7 +155,7 @@ public:
void SetSize(size_t size_);
int GetSize() const { return size; }
void MeasureWidths(Surface *surface, ViewStyle &vstyle, unsigned int styleNumber,
- const char *s, unsigned int len, int *positions);
+ const char *s, unsigned int len, int *positions, Document *pdoc);
};
inline bool IsSpaceOrTab(int ch) {