aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/Platform.h1
-rw-r--r--src/PositionCache.cxx4
-rw-r--r--src/PositionCache.h1
3 files changed, 6 insertions, 0 deletions
diff --git a/include/Platform.h b/include/Platform.h
index 8c5032596..30f05d88a 100644
--- a/include/Platform.h
+++ b/include/Platform.h
@@ -328,6 +328,7 @@ public:
virtual XYPOSITION TabWidthMinimumPixels() const = 0;
virtual const Font *FontOfPosition(size_t position) const = 0;
virtual XYPOSITION RepresentationWidth(size_t position) const = 0;
+ virtual XYPOSITION TabPositionAfter(XYPOSITION xPosition) const = 0;
};
struct Interval {
diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx
index 44f9caa0c..599a697db 100644
--- a/src/PositionCache.cxx
+++ b/src/PositionCache.cxx
@@ -346,6 +346,10 @@ XYPOSITION ScreenLine::RepresentationWidth(size_t position) const {
return ll->bidiData->widthReprs[start + position];
}
+XYPOSITION ScreenLine::TabPositionAfter(XYPOSITION xPosition) const {
+ return (floor((xPosition + TabWidthMinimumPixels()) / TabWidth()) + 1) * TabWidth();
+}
+
LineLayoutCache::LineLayoutCache() :
level(0),
allInvalidated(false), styleClock(-1), useCount(0) {
diff --git a/src/PositionCache.h b/src/PositionCache.h
index 5657b667c..1723e0b2f 100644
--- a/src/PositionCache.h
+++ b/src/PositionCache.h
@@ -142,6 +142,7 @@ struct ScreenLine : public IScreenLine {
XYPOSITION TabWidthMinimumPixels() const override;
const Font *FontOfPosition(size_t position) const override;
XYPOSITION RepresentationWidth(size_t position) const override;
+ XYPOSITION TabPositionAfter(XYPOSITION xPosition) const override;
};
/**