diff options
Diffstat (limited to 'src/MarginView.cxx')
| -rw-r--r-- | src/MarginView.cxx | 142 | 
1 files changed, 72 insertions, 70 deletions
| diff --git a/src/MarginView.cxx b/src/MarginView.cxx index 68c599b1f..20bc78a4e 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -22,14 +22,16 @@  #include <algorithm>  #include <memory> +#include "ScintillaTypes.h" +#include "ScintillaMessages.h" +#include "ScintillaStructures.h" +#include "ILoader.h" +#include "ILexer.h" +  #include "Debugging.h"  #include "Geometry.h"  #include "Platform.h" -#include "ILoader.h" -#include "ILexer.h" -#include "Scintilla.h" -  #include "CharacterCategoryMap.h"  #include "Position.h"  #include "UniqueString.h" @@ -56,12 +58,12 @@  using namespace Scintilla; -namespace Scintilla { +namespace Scintilla::Internal {  void DrawWrapMarker(Surface *surface, PRectangle rcPlace,  	bool isEndMarker, ColourRGBA wrapColour) { -	const XYPOSITION extraFinalPixel = surface->Supports(SC_SUPPORTS_LINE_DRAWS_FINAL) ? 0.0f : 1.0f; +	const XYPOSITION extraFinalPixel = surface->SupportsFeature(Supports::LineDrawsFinal) ? 0.0f : 1.0f;  	const PRectangle rcAligned = PixelAlignOutside(rcPlace, surface->PixelDivisions()); @@ -164,8 +166,8 @@ void MarginView::RefreshPixMaps(Surface *surfaceWindow, const ViewStyle &vsDraw)  	}  } -static int SubstituteMarkerIfEmpty(int markerCheck, int markerDefault, const ViewStyle &vs) noexcept { -	if (vs.markers[markerCheck].markType == SC_MARK_EMPTY) +static MarkerOutline SubstituteMarkerIfEmpty(MarkerOutline markerCheck, MarkerOutline markerDefault, const ViewStyle &vs) noexcept { +	if (vs.markers[static_cast<size_t>(markerCheck)].markType == MarkerSymbol::Empty)  		return markerDefault;  	return markerCheck;  } @@ -179,14 +181,14 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  		rcSelMargin.bottom = rc.bottom;  	const Point ptOrigin = model.GetVisibleOriginInMain(); -	const Font *fontLineNumber = vs.styles[STYLE_LINENUMBER].font.get(); +	const Font *fontLineNumber = vs.styles[StyleLineNumber].font.get();  	for (size_t margin = 0; margin < vs.ms.size(); margin++) {  		if (vs.ms[margin].width > 0) {  			rcSelMargin.left = rcSelMargin.right;  			rcSelMargin.right = rcSelMargin.left + vs.ms[margin].width; -			if (vs.ms[margin].style != SC_MARGIN_NUMBER) { +			if (vs.ms[margin].style != MarginType::Number) {  				if (vs.ms[margin].ShowsFolding()) {  					// Required because of special way brush is created for selection margin  					// Ensure patterns line up when scrolling with separate margin view @@ -197,23 +199,23 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  				} else {  					ColourRGBA colour;  					switch (vs.ms[margin].style) { -					case SC_MARGIN_BACK: -						colour = vs.styles[STYLE_DEFAULT].back; +					case MarginType::Back: +						colour = vs.styles[StyleDefault].back;  						break; -					case SC_MARGIN_FORE: -						colour = vs.styles[STYLE_DEFAULT].fore; +					case MarginType::Fore: +						colour = vs.styles[StyleDefault].fore;  						break; -					case SC_MARGIN_COLOUR: +					case MarginType::Colour:  						colour = vs.ms[margin].back;  						break;  					default: -						colour = vs.styles[STYLE_LINENUMBER].back; +						colour = vs.styles[StyleLineNumber].back;  						break;  					}  					surface->FillRectangle(rcSelMargin, colour);  				}  			} else { -				surface->FillRectangle(rcSelMargin, vs.styles[STYLE_LINENUMBER].back); +				surface->FillRectangle(rcSelMargin, vs.styles[StyleLineNumber].back);  			}  			const Sci::Line lineStartPaint = static_cast<Sci::Line>(rcMargin.top + ptOrigin.y) / vs.lineHeight; @@ -224,13 +226,13 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  			// be displayed until the last of a sequence of whitespace.  			bool needWhiteClosure = false;  			if (vs.ms[margin].ShowsFolding()) { -				const int level = model.pdoc->GetLevel(model.pcs->DocFromDisplay(visibleLine)); +				const FoldLevel level = model.pdoc->GetFoldLevel(model.pcs->DocFromDisplay(visibleLine));  				if (LevelIsWhitespace(level)) {  					Sci::Line lineBack = model.pcs->DocFromDisplay(visibleLine); -					int levelPrev = level; +					FoldLevel levelPrev = level;  					while ((lineBack > 0) && LevelIsWhitespace(levelPrev)) {  						lineBack--; -						levelPrev = model.pdoc->GetLevel(lineBack); +						levelPrev = model.pdoc->GetFoldLevel(lineBack);  					}  					if (!LevelIsHeader(levelPrev)) {  						if (LevelNumber(level) < LevelNumber(levelPrev)) @@ -245,10 +247,10 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  			}  			// Old code does not know about new markers needed to distinguish all cases -			const int folderOpenMid = SubstituteMarkerIfEmpty(SC_MARKNUM_FOLDEROPENMID, -				SC_MARKNUM_FOLDEROPEN, vs); -			const int folderEnd = SubstituteMarkerIfEmpty(SC_MARKNUM_FOLDEREND, -				SC_MARKNUM_FOLDER, vs); +			const MarkerOutline folderOpenMid = SubstituteMarkerIfEmpty(MarkerOutline::FolderOpenMid, +				MarkerOutline::FolderOpen, vs); +			const MarkerOutline folderEnd = SubstituteMarkerIfEmpty(MarkerOutline::FolderEnd, +				MarkerOutline::Folder, vs);  			while ((visibleLine < model.pcs->LinesDisplayed()) && yposScreen < rc.bottom) { @@ -268,42 +270,42 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  				if (vs.ms[margin].ShowsFolding()) {  					// Decide which fold indicator should be displayed -					const int level = model.pdoc->GetLevel(lineDoc); -					const int levelNext = model.pdoc->GetLevel(lineDoc + 1); -					const int levelNum = LevelNumber(level); -					const int levelNextNum = LevelNumber(levelNext); +					const FoldLevel level = model.pdoc->GetFoldLevel(lineDoc); +					const FoldLevel levelNext = model.pdoc->GetFoldLevel(lineDoc + 1); +					const FoldLevel levelNum = LevelNumberPart(level); +					const FoldLevel levelNextNum = LevelNumberPart(levelNext);  					if (LevelIsHeader(level)) {  						if (firstSubLine) {  							if (levelNum < levelNextNum) {  								if (model.pcs->GetExpanded(lineDoc)) { -									if (levelNum == SC_FOLDLEVELBASE) -										marks |= 1 << SC_MARKNUM_FOLDEROPEN; +									if (levelNum == FoldLevel::Base) +										marks |= 1 << MarkerOutline::FolderOpen;  									else  										marks |= 1 << folderOpenMid;  								} else { -									if (levelNum == SC_FOLDLEVELBASE) -										marks |= 1 << SC_MARKNUM_FOLDER; +									if (levelNum == FoldLevel::Base) +										marks |= 1 << MarkerOutline::Folder;  									else  										marks |= 1 << folderEnd;  								} -							} else if (levelNum > SC_FOLDLEVELBASE) { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; +							} else if (levelNum > FoldLevel::Base) { +								marks |= 1 << MarkerOutline::FolderSub;  							}  						} else {  							if (levelNum < levelNextNum) {  								if (model.pcs->GetExpanded(lineDoc)) { -									marks |= 1 << SC_MARKNUM_FOLDERSUB; -								} else if (levelNum > SC_FOLDLEVELBASE) { -									marks |= 1 << SC_MARKNUM_FOLDERSUB; +									marks |= 1 << MarkerOutline::FolderSub; +								} else if (levelNum > FoldLevel::Base) { +									marks |= 1 << MarkerOutline::FolderSub;  								} -							} else if (levelNum > SC_FOLDLEVELBASE) { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; +							} else if (levelNum > FoldLevel::Base) { +								marks |= 1 << MarkerOutline::FolderSub;  							}  						}  						needWhiteClosure = false;  						const Sci::Line firstFollowupLine = model.pcs->DocFromDisplay(model.pcs->DisplayFromDoc(lineDoc + 1)); -						const int firstFollowupLineLevel = model.pdoc->GetLevel(firstFollowupLine); -						const int secondFollowupLineLevelNum = LevelNumber(model.pdoc->GetLevel(firstFollowupLine + 1)); +						const FoldLevel firstFollowupLineLevel = model.pdoc->GetFoldLevel(firstFollowupLine); +						const FoldLevel secondFollowupLineLevelNum = LevelNumberPart(model.pdoc->GetFoldLevel(firstFollowupLine + 1));  						if (!model.pcs->GetExpanded(lineDoc)) {  							if (LevelIsWhitespace(firstFollowupLineLevel) &&  								(levelNum > secondFollowupLineLevelNum)) @@ -315,42 +317,42 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  					} else if (LevelIsWhitespace(level)) {  						if (needWhiteClosure) {  							if (LevelIsWhitespace(levelNext)) { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; -							} else if (levelNextNum > SC_FOLDLEVELBASE) { -								marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; +								marks |= 1 << MarkerOutline::FolderSub; +							} else if (levelNextNum > FoldLevel::Base) { +								marks |= 1 << MarkerOutline::FolderMidTail;  								needWhiteClosure = false;  							} else { -								marks |= 1 << SC_MARKNUM_FOLDERTAIL; +								marks |= 1 << MarkerOutline::FolderTail;  								needWhiteClosure = false;  							} -						} else if (levelNum > SC_FOLDLEVELBASE) { +						} else if (levelNum > FoldLevel::Base) {  							if (levelNextNum < levelNum) { -								if (levelNextNum > SC_FOLDLEVELBASE) { -									marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; +								if (levelNextNum > FoldLevel::Base) { +									marks |= 1 << MarkerOutline::FolderMidTail;  								} else { -									marks |= 1 << SC_MARKNUM_FOLDERTAIL; +									marks |= 1 << MarkerOutline::FolderTail;  								}  							} else { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; +								marks |= 1 << MarkerOutline::FolderSub;  							}  						} -					} else if (levelNum > SC_FOLDLEVELBASE) { +					} else if (levelNum > FoldLevel::Base) {  						if (levelNextNum < levelNum) {  							needWhiteClosure = false;  							if (LevelIsWhitespace(levelNext)) { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; +								marks |= 1 << MarkerOutline::FolderSub;  								needWhiteClosure = true;  							} else if (lastSubLine) { -								if (levelNextNum > SC_FOLDLEVELBASE) { -									marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; +								if (levelNextNum > FoldLevel::Base) { +									marks |= 1 << MarkerOutline::FolderMidTail;  								} else { -									marks |= 1 << SC_MARKNUM_FOLDERTAIL; +									marks |= 1 << MarkerOutline::FolderTail;  								}  							} else { -								marks |= 1 << SC_MARKNUM_FOLDERSUB; +								marks |= 1 << MarkerOutline::FolderSub;  							}  						} else { -							marks |= 1 << SC_MARKNUM_FOLDERSUB; +							marks |= 1 << MarkerOutline::FolderSub;  						}  					}  				} @@ -362,21 +364,21 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  					static_cast<XYPOSITION>(yposScreen),  					rcSelMargin.right,  					static_cast<XYPOSITION>(yposScreen + vs.lineHeight)); -				if (vs.ms[margin].style == SC_MARGIN_NUMBER) { +				if (vs.ms[margin].style == MarginType::Number) {  					if (firstSubLine) {  						std::string sNumber;  						if (lineDoc >= 0) {  							sNumber = std::to_string(lineDoc + 1);  						} -						if (model.foldFlags & (SC_FOLDFLAG_LEVELNUMBERS | SC_FOLDFLAG_LINESTATE)) { +						if (FlagSet(model.foldFlags, FoldFlag::LevelNumbers | FoldFlag::LineState)) {  							char number[100] = ""; -							if (model.foldFlags & SC_FOLDFLAG_LEVELNUMBERS) { -								const int lev = model.pdoc->GetLevel(lineDoc); +							if (FlagSet(model.foldFlags, FoldFlag::LevelNumbers)) { +								const FoldLevel lev = model.pdoc->GetFoldLevel(lineDoc);  								sprintf(number, "%c%c %03X %03X",  									LevelIsHeader(lev) ? 'H' : '_',  									LevelIsWhitespace(lev) ? 'W' : '_',  									LevelNumber(lev), -									lev >> 16 +									static_cast<int>(lev) >> 16  									);  							} else {  								const int state = model.pdoc->GetLineState(lineDoc); @@ -389,26 +391,26 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  						const XYPOSITION width = surface->WidthText(fontLineNumber, sNumber);  						const XYPOSITION xpos = rcNumber.right - width - vs.marginNumberPadding;  						rcNumber.left = xpos; -						DrawTextNoClipPhase(surface, rcNumber, vs.styles[STYLE_LINENUMBER], +						DrawTextNoClipPhase(surface, rcNumber, vs.styles[StyleLineNumber],  							rcNumber.top + vs.maxAscent, sNumber, DrawPhase::all); -					} else if (vs.wrap.visualFlags & SC_WRAPVISUALFLAG_MARGIN) { +					} else if (FlagSet(vs.wrap.visualFlags, WrapVisualFlag::Margin)) {  						PRectangle rcWrapMarker = rcMarker;  						rcWrapMarker.right -= wrapMarkerPaddingRight; -						rcWrapMarker.left = rcWrapMarker.right - vs.styles[STYLE_LINENUMBER].aveCharWidth; +						rcWrapMarker.left = rcWrapMarker.right - vs.styles[StyleLineNumber].aveCharWidth;  						if (!customDrawWrapMarker) { -							DrawWrapMarker(surface, rcWrapMarker, false, vs.styles[STYLE_LINENUMBER].fore); +							DrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore);  						} else { -							customDrawWrapMarker(surface, rcWrapMarker, false, vs.styles[STYLE_LINENUMBER].fore); +							customDrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore);  						}  					} -				} else if (vs.ms[margin].style == SC_MARGIN_TEXT || vs.ms[margin].style == SC_MARGIN_RTEXT) { +				} else if (vs.ms[margin].style == MarginType::Text || vs.ms[margin].style == MarginType::RText) {  					const StyledText stMargin = model.pdoc->MarginStyledText(lineDoc);  					if (stMargin.text && ValidStyledText(vs, vs.marginStyleOffset, stMargin)) {  						if (firstSubLine) {  							surface->FillRectangle(rcMarker,  								vs.styles[stMargin.StyleAt(0) + vs.marginStyleOffset].back);  							PRectangle rcText = rcMarker; -							if (vs.ms[margin].style == SC_MARGIN_RTEXT) { +							if (vs.ms[margin].style == MarginType::RText) {  								const int width = WidestLineWidth(surface, vs, vs.marginStyleOffset, stMargin);  								rcText.left = rcText.right - width - 3;  							} @@ -459,7 +461,7 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  	PRectangle rcBlankMargin = rcMargin;  	rcBlankMargin.left = rcSelMargin.right; -	surface->FillRectangle(rcBlankMargin, vs.styles[STYLE_DEFAULT].back); +	surface->FillRectangle(rcBlankMargin, vs.styles[StyleDefault].back);  }  } | 
