diff options
-rw-r--r-- | include/Platform.h | 1 | ||||
-rw-r--r-- | src/PositionCache.cxx | 4 | ||||
-rw-r--r-- | src/PositionCache.h | 1 |
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; }; /** |