diff options
author | Neil <nyamatongwe@gmail.com> | 2014-07-18 12:01:14 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2014-07-18 12:01:14 +1000 |
commit | 7124ef7839ecba143e3a6fa7b30cee13bf6458b5 (patch) | |
tree | 7ba3d4171cc100068d76acaf853c21c4e810ebb0 /src/EditView.h | |
parent | c6959a0ab03e5942d815a77f6566ea8611173c06 (diff) | |
download | scintilla-mirror-7124ef7839ecba143e3a6fa7b30cee13bf6458b5.tar.gz |
Allow extreme ascenders and descenders to overlap into adjacent lines with
multiple phase drawing option.
Diffstat (limited to 'src/EditView.h')
-rw-r--r-- | src/EditView.h | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/src/EditView.h b/src/EditView.h index f7705458b..2775dac59 100644 --- a/src/EditView.h +++ b/src/EditView.h @@ -20,6 +20,29 @@ struct PrintParameters { }; /** +* The view may be drawn in separate phases. +*/ +enum DrawPhase { + drawBack = 0x1, + drawIndicatorsBack = 0x2, + drawText = 0x4, + drawIndentationGuides = 0x8, + drawIndicatorsFore = 0x10, + drawSelectionTranslucent = 0x20, + drawLineTranslucent = 0x40, + drawFoldLines = 0x80, + drawCarets = 0x100, + drawAll = 0x1FF, +}; + +bool ValidStyledText(const ViewStyle &vs, size_t styleOffset, const StyledText &st); +int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, const StyledText &st); +void DrawTextNoClipPhase(Surface *surface, PRectangle rc, const Style &style, XYPOSITION ybase, + const char *s, int len, DrawPhase phase); +void DrawStyledText(Surface *surface, const ViewStyle &vs, int styleOffset, PRectangle rcText, + const StyledText &st, size_t start, size_t length, DrawPhase phase); + +/** * EditView draws the main text area. */ class EditView { @@ -32,9 +55,13 @@ public: /** In bufferedDraw mode, graphics operations are drawn to a pixmap and then copied to * the screen. This avoids flashing but is about 30% slower. */ bool bufferedDraw; - /** In twoPhaseDraw mode, drawing is performed in two phases, first the background - * and then the foreground. This avoids chopping off characters that overlap the next run. */ - bool twoPhaseDraw; + /** In phasesTwo mode, drawing is performed in two phases, first the background + * and then the foreground. This avoids chopping off characters that overlap the next run. + * In multiPhaseDraw mode, drawing is performed in multiple phases with each phase drawing + * one feature over the whole drawing area, instead of within one line. This allows text to + * overlap from one line to the next. */ + enum PhasesDraw { phasesOne, phasesTwo, phasesMultiple }; + PhasesDraw phasesDraw; int lineWidthMaxSeen; @@ -50,6 +77,10 @@ public: EditView(); + bool SetTwoPhaseDraw(bool twoPhaseDraw); + bool SetPhasesDraw(int phases); + bool LinesOverlap() const; + void DropGraphics(bool freeObjects); void AllocateGraphics(const ViewStyle &vsDraw); void RefreshPixMaps(Surface *surfaceWindow, WindowID wid, const ViewStyle &vsDraw); @@ -70,7 +101,7 @@ public: int line, int lineEnd, int xStart, int subLine, XYACCUMULATOR subLineStart, ColourOptional background); void DrawAnnotation(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, - int line, int xStart, PRectangle rcLine, int subLine); + int line, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); void DrawCarets(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line, int xStart, PRectangle rcLine, int subLine) const; void DrawBackground(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine, @@ -82,7 +113,7 @@ public: void DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line, int lineVisible, PRectangle rcLine, int xStart, int subLine); void DrawLine(Surface *surface, const EditModel &model, const ViewStyle &vsDraw, const LineLayout *ll, int line, - int lineVisible, int xStart, PRectangle rcLine, int subLine); + int lineVisible, int xStart, PRectangle rcLine, int subLine, DrawPhase phase); void PaintText(Surface *surfaceWindow, const EditModel &model, PRectangle rcArea, PRectangle rcClient, const ViewStyle &vsDraw); long FormatRange(bool draw, Sci_RangeToFormat *pfr, Surface *surface, Surface *surfaceMeasure, |