aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/PositionCache.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/PositionCache.h')
-rw-r--r--src/PositionCache.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/PositionCache.h b/src/PositionCache.h
index 7f50c4dec..512ec13f5 100644
--- a/src/PositionCache.h
+++ b/src/PositionCache.h
@@ -40,6 +40,13 @@ enum PointEnd {
peSubLineEnd = 0x2
};
+class BidiData {
+public:
+ std::vector<FontAlias> stylesFonts;
+ std::vector<XYPOSITION> widthReprs;
+ void Resize(size_t maxLineLength_);
+};
+
/**
*/
class LineLayout {
@@ -66,6 +73,8 @@ public:
std::unique_ptr<XYPOSITION[]> positions;
char bracePreviousStyles[2];
+ std::unique_ptr<BidiData> bidiData;
+
// Hotspot support
Range hotspot;
@@ -82,13 +91,16 @@ public:
void operator=(LineLayout &&) = delete;
virtual ~LineLayout();
void Resize(int maxLineLength_);
+ void EnsureBidiData();
void Free();
void Invalidate(validLevel validity_);
int LineStart(int line) const;
+ int LineLength(int line) const;
enum class Scope { visibleOnly, includeEnd };
int LineLastVisible(int line, Scope scope) const;
Range SubLineRange(int subLine, Scope scope) const;
bool InLine(int offset, int line) const;
+ int SubLineFromPosition(int posInLine, PointEnd pe) const;
void SetLineStart(int line, int start);
void SetBracesHighlight(Range rangeLine, const Sci::Position braces[],
char bracesMatchStyle, int xHighlight, bool ignoreStyle);
@@ -99,6 +111,30 @@ public:
int EndLineStyle() const;
};
+struct ScreenLine : public IScreenLine {
+ const LineLayout *ll;
+ size_t start;
+ size_t len;
+ XYPOSITION width;
+ XYPOSITION height;
+ int ctrlCharPadding;
+ XYPOSITION tabWidth;
+ int tabWidthMinimumPixels;
+
+ ScreenLine(const LineLayout *ll_, int subLine, const ViewStyle &vs, XYPOSITION width_, int tabWidthMinimumPixels_);
+ virtual ~ScreenLine();
+
+ std::string_view Text() const override;
+ size_t Length() const override;
+ size_t RepresentationCount() const override;
+ XYPOSITION Width() const override;
+ XYPOSITION Height() const override;
+ XYPOSITION TabWidth() const override;
+ XYPOSITION TabWidthMinimumPixels() const override;
+ const Font *FontOfPosition(size_t position) const override;
+ XYPOSITION RepresentationWidth(size_t position) const override;
+};
+
/**
*/
class LineLayoutCache {