Update Scintilla to 3.6.6
[TortoiseGit.git] / ext / scintilla / src / EditView.h
blobabb8835eb02eb4aad01bec237e88713a2add0fdc
1 // Scintilla source code edit control
2 /** @file EditView.h
3 ** Defines the appearance of the main text area of the editor window.
4 **/
5 // Copyright 1998-2014 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
8 #ifndef EDITVIEW_H
9 #define EDITVIEW_H
11 #ifdef SCI_NAMESPACE
12 namespace Scintilla {
13 #endif
15 struct PrintParameters {
16 int magnification;
17 int colourMode;
18 WrapMode wrapState;
19 PrintParameters();
22 /**
23 * The view may be drawn in separate phases.
25 enum DrawPhase {
26 drawBack = 0x1,
27 drawIndicatorsBack = 0x2,
28 drawText = 0x4,
29 drawIndentationGuides = 0x8,
30 drawIndicatorsFore = 0x10,
31 drawSelectionTranslucent = 0x20,
32 drawLineTranslucent = 0x40,
33 drawFoldLines = 0x80,
34 drawCarets = 0x100,
35 drawAll = 0x1FF
38 bool ValidStyledText(const ViewStyle &vs, size_t styleOffset, const StyledText &st);
39 int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, const StyledText &st);
40 void DrawTextNoClipPhase(Surface *surface, PRectangle rc, const Style &style, XYPOSITION ybase,
41 const char *s, int len, DrawPhase phase);
42 void DrawStyledText(Surface *surface, const ViewStyle &vs, int styleOffset, PRectangle rcText,
43 const StyledText &st, size_t start, size_t length, DrawPhase phase);
45 typedef void (*DrawTabArrowFn)(Surface *surface, PRectangle rcTab, int ymid);
47 /**
48 * EditView draws the main text area.
50 class EditView {
51 public:
52 PrintParameters printParameters;
53 PerLine *ldTabstops;
54 int tabWidthMinimumPixels;
56 bool hideSelection;
57 bool drawOverstrikeCaret;
59 /** In bufferedDraw mode, graphics operations are drawn to a pixmap and then copied to
60 * the screen. This avoids flashing but is about 30% slower. */
61 bool bufferedDraw;
62 /** In phasesTwo mode, drawing is performed in two phases, first the background
63 * and then the foreground. This avoids chopping off characters that overlap the next run.
64 * In multiPhaseDraw mode, drawing is performed in multiple phases with each phase drawing
65 * one feature over the whole drawing area, instead of within one line. This allows text to
66 * overlap from one line to the next. */
67 enum PhasesDraw { phasesOne, phasesTwo, phasesMultiple };
68 PhasesDraw phasesDraw;
70 int lineWidthMaxSeen;
72 bool additionalCaretsBlink;
73 bool additionalCaretsVisible;
75 bool imeCaretBlockOverride;
77 Surface *pixmapLine;
78 Surface *pixmapIndentGuide;
79 Surface *pixmapIndentGuideHighlight;
81 LineLayoutCache llc;
82 PositionCache posCache;
84 int tabArrowHeight; // draw arrow heads this many pixels above/below line midpoint
85 /** Some platforms, notably PLAT_CURSES, do not support Scintilla's native
86 * DrawTabArrow function for drawing tab characters. Allow those platforms to
87 * override it instead of creating a new method in the Surface class that
88 * existing platforms must implement as empty. */
89 DrawTabArrowFn customDrawTabArrow;
90 DrawWrapMarkerFn customDrawWrapMarker;
92 EditView();
93 virtual ~EditView();
95 bool SetTwoPhaseDraw(bool twoPhaseDraw);
96 bool SetPhasesDraw(int phases);
97 bool LinesOverlap() const;
99 void ClearAllTabstops();
100 XYPOSITION NextTabstopPos(int line, XYPOSITION x, XYPOSITION tabWidth) const;
101 bool ClearTabstops(int line);
102 bool AddTabstop(int line, int x);
103 int GetNextTabstop(int line, int x) const;
104 void LinesAddedOrRemoved(int lineOfPos, int linesAdded);
106 void DropGraphics(bool freeObjects);
107 void AllocateGraphics(const ViewStyle &vsDraw);
108 void RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewStyle &vsDraw);
110 LineLayout *RetrieveLineLayout(int lineNumber, const EditModel &model);
111 void LayoutLine(const EditModel &model, int line, Surface *surface, const ViewStyle &vstyle,
112 LineLayout *ll, int width = LineLayout::wrapWidthInfinite);
114 Point LocationFromPosition(Surface *surface, const EditModel &model, SelectionPosition pos, int topLine, const ViewStyle &vs);
115 SelectionPosition SPositionFromLocation(Surface *surface, const EditModel &model, Point pt, bool canReturnInvalid,
116 bool charPosition, bool virtualSpace, const ViewStyle &vs);
117 SelectionPosition SPositionFromLineX(Surface *surface, const EditModel &model, int lineDoc, int x, const ViewStyle &vs);
118 int DisplayFromPosition(Surface *surface, const EditModel &model, int pos, const ViewStyle &vs);
119 int StartEndDisplayLine(Surface *surface, const EditModel &model, int pos, bool start, const ViewStyle &vs);
121 void DrawIndentGuide(Surface *surface, int lineVisible, int lineHeight, int start, PRectangle rcSegment, bool highlight);
122 void DrawEOL(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine,
123 int line, int lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart,
124 ColourOptional background);
125 void DrawAnnotation(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll,
126 int line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase);
127 void DrawCarets(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line,
128 int xStart, PRectangle rcLine, int subLine) const;
129 void DrawBackground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine,
130 Range lineRange, int posLineStart, int xStart,
131 int subLine, ColourOptional background) const;
132 void DrawForeground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int lineVisible,
133 PRectangle rcLine, Range lineRange, int posLineStart, int xStart,
134 int subLine, ColourOptional background);
135 void DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll,
136 int line, int lineVisible, PRectangle rcLine, int xStart, int subLine);
137 void DrawLine(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line,
138 int lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase);
139 void PaintText(Surface *surfaceWindow, const EditModel &model, PRectangle rcArea, PRectangle rcClient,
140 const ViewStyle &vsDraw);
141 long FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, Surface *surfaceMeasure,
142 const EditModel &model, const ViewStyle &vs);
146 * Convenience class to ensure LineLayout objects are always disposed.
148 class AutoLineLayout {
149 LineLayoutCache &llc;
150 LineLayout *ll;
151 AutoLineLayout &operator=(const AutoLineLayout &);
152 public:
153 AutoLineLayout(LineLayoutCache &llc_, LineLayout *ll_) : llc(llc_), ll(ll_) {}
154 ~AutoLineLayout() {
155 llc.Dispose(ll);
156 ll = 0;
158 LineLayout *operator->() const {
159 return ll;
161 operator LineLayout *() const {
162 return ll;
164 void Set(LineLayout *ll_) {
165 llc.Dispose(ll);
166 ll = ll_;
170 #ifdef SCI_NAMESPACE
172 #endif
174 #endif