aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/ViewStyle.cxx224
-rw-r--r--src/ViewStyle.h3
2 files changed, 112 insertions, 115 deletions
diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx
index 8d8755093..68cb5e74d 100644
--- a/src/ViewStyle.cxx
+++ b/src/ViewStyle.cxx
@@ -87,118 +87,11 @@ void FontRealised::Realise(Surface &surface, int zoomLevel, Technology technolog
}
}
-ViewStyle::ViewStyle() : markers(MarkerMax + 1), indicators(static_cast<size_t>(IndicatorNumbers::Max) + 1) {
- Init();
-}
-
-// Copy constructor only called when printing copies the screen ViewStyle so it can be
-// modified for printing styles.
-ViewStyle::ViewStyle(const ViewStyle &source) : markers(MarkerMax + 1), indicators(static_cast<size_t>(IndicatorNumbers::Max) + 1) {
- Init(source.styles.size());
- styles = source.styles;
- for (Style &style : styles) {
- // Can't just copy fontName as its lifetime is relative to its owning ViewStyle
- style.fontName = fontNames.Save(style.fontName);
- }
- nextExtendedStyle = source.nextExtendedStyle;
- markers = source.markers;
- CalcLargestMarkerHeight();
-
- indicators = source.indicators;
-
- indicatorsDynamic = source.indicatorsDynamic;
- indicatorsSetFore = source.indicatorsSetFore;
-
- selection = source.selection;
-
- foldmarginColour = source.foldmarginColour;
- foldmarginHighlightColour = source.foldmarginHighlightColour;
-
- hotspotUnderline = source.hotspotUnderline;
-
- controlCharSymbol = source.controlCharSymbol;
- controlCharWidth = source.controlCharWidth;
- selbar = source.selbar;
- selbarlight = source.selbarlight;
- caret = source.caret;
- caretLine = source.caretLine;
- someStylesProtected = false;
- someStylesForceCase = false;
- leftMarginWidth = source.leftMarginWidth;
- rightMarginWidth = source.rightMarginWidth;
- ms = source.ms;
- maskInLine = source.maskInLine;
- maskDrawInText = source.maskDrawInText;
- fixedColumnWidth = source.fixedColumnWidth;
- marginInside = source.marginInside;
- textStart = source.textStart;
- zoomLevel = source.zoomLevel;
- viewWhitespace = source.viewWhitespace;
- tabDrawMode = source.tabDrawMode;
- whitespaceSize = source.whitespaceSize;
- viewIndentationGuides = source.viewIndentationGuides;
- viewEOL = source.viewEOL;
- extraFontFlag = source.extraFontFlag;
- extraAscent = source.extraAscent;
- extraDescent = source.extraDescent;
- marginStyleOffset = source.marginStyleOffset;
- annotationVisible = source.annotationVisible;
- annotationStyleOffset = source.annotationStyleOffset;
- eolAnnotationVisible = source.eolAnnotationVisible;
- eolAnnotationStyleOffset = source.eolAnnotationStyleOffset;
- braceHighlightIndicatorSet = source.braceHighlightIndicatorSet;
- braceHighlightIndicator = source.braceHighlightIndicator;
- braceBadLightIndicatorSet = source.braceBadLightIndicatorSet;
- braceBadLightIndicator = source.braceBadLightIndicator;
-
- edgeState = source.edgeState;
- theEdge = source.theEdge;
- theMultiEdge = source.theMultiEdge;
-
- marginNumberPadding = source.marginNumberPadding;
- ctrlCharPadding = source.ctrlCharPadding;
- lastSegItalicsOffset = source.lastSegItalicsOffset;
-
- wrap = source.wrap;
-
- localeName = source.localeName;
-}
-
-ViewStyle::~ViewStyle() {
- styles.clear();
- fonts.clear();
-}
-
-void ViewStyle::CalculateMarginWidthAndMask() noexcept {
- fixedColumnWidth = marginInside ? leftMarginWidth : 0;
- maskInLine = 0xffffffff;
- int maskDefinedMarkers = 0;
- for (const MarginStyle &m : ms) {
- fixedColumnWidth += m.width;
- if (m.width > 0)
- maskInLine &= ~m.mask;
- maskDefinedMarkers |= m.mask;
- }
- maskDrawInText = 0;
- for (int markBit = 0; markBit < 32; markBit++) {
- const int maskBit = 1U << markBit;
- switch (markers[markBit].markType) {
- case MarkerSymbol::Empty:
- maskInLine &= ~maskBit;
- break;
- case MarkerSymbol::Background:
- case MarkerSymbol::Underline:
- maskInLine &= ~maskBit;
- maskDrawInText |= maskDefinedMarkers & maskBit;
- break;
- default: // Other marker types do not affect the masks
- break;
- }
- }
-}
+ViewStyle::ViewStyle(size_t stylesSize_) :
+ styles(stylesSize_),
+ markers(MarkerMax + 1),
+ indicators(static_cast<size_t>(IndicatorNumbers::Max) + 1) {
-void ViewStyle::Init(size_t stylesSize_) {
- AllocStyles(stylesSize_);
nextExtendedStyle = 256;
fontNames.Clear();
ResetDefaultStyle();
@@ -241,7 +134,7 @@ void ViewStyle::Init(size_t stylesSize_) {
Element::SelectionInactiveText,
Element::SelectionBack,
Element::SelectionInactiveBack,
- });
+ });
selection.layer = Layer::Base;
selection.eolFilled = false;
@@ -260,7 +153,7 @@ void ViewStyle::Init(size_t stylesSize_) {
elementAllowsTranslucent.insert({
Element::Caret,
Element::CaretAdditional,
- });
+ });
caret.style = CaretStyle::Line;
caret.width = 1;
@@ -325,6 +218,111 @@ void ViewStyle::Init(size_t stylesSize_) {
localeName = localeNameDefault;
}
+// Copy constructor only called when printing copies the screen ViewStyle so it can be
+// modified for printing styles.
+ViewStyle::ViewStyle(const ViewStyle &source) : ViewStyle(source.styles.size()) {
+ styles = source.styles;
+ for (Style &style : styles) {
+ // Can't just copy fontName as its lifetime is relative to its owning ViewStyle
+ style.fontName = fontNames.Save(style.fontName);
+ }
+ nextExtendedStyle = source.nextExtendedStyle;
+ markers = source.markers;
+ CalcLargestMarkerHeight();
+
+ indicators = source.indicators;
+
+ indicatorsDynamic = source.indicatorsDynamic;
+ indicatorsSetFore = source.indicatorsSetFore;
+
+ selection = source.selection;
+
+ foldmarginColour = source.foldmarginColour;
+ foldmarginHighlightColour = source.foldmarginHighlightColour;
+
+ hotspotUnderline = source.hotspotUnderline;
+
+ controlCharSymbol = source.controlCharSymbol;
+ controlCharWidth = source.controlCharWidth;
+ selbar = source.selbar;
+ selbarlight = source.selbarlight;
+ caret = source.caret;
+ caretLine = source.caretLine;
+ someStylesProtected = false;
+ someStylesForceCase = false;
+ leftMarginWidth = source.leftMarginWidth;
+ rightMarginWidth = source.rightMarginWidth;
+ ms = source.ms;
+ maskInLine = source.maskInLine;
+ maskDrawInText = source.maskDrawInText;
+ fixedColumnWidth = source.fixedColumnWidth;
+ marginInside = source.marginInside;
+ textStart = source.textStart;
+ zoomLevel = source.zoomLevel;
+ viewWhitespace = source.viewWhitespace;
+ tabDrawMode = source.tabDrawMode;
+ whitespaceSize = source.whitespaceSize;
+ viewIndentationGuides = source.viewIndentationGuides;
+ viewEOL = source.viewEOL;
+ extraFontFlag = source.extraFontFlag;
+ extraAscent = source.extraAscent;
+ extraDescent = source.extraDescent;
+ marginStyleOffset = source.marginStyleOffset;
+ annotationVisible = source.annotationVisible;
+ annotationStyleOffset = source.annotationStyleOffset;
+ eolAnnotationVisible = source.eolAnnotationVisible;
+ eolAnnotationStyleOffset = source.eolAnnotationStyleOffset;
+ braceHighlightIndicatorSet = source.braceHighlightIndicatorSet;
+ braceHighlightIndicator = source.braceHighlightIndicator;
+ braceBadLightIndicatorSet = source.braceBadLightIndicatorSet;
+ braceBadLightIndicator = source.braceBadLightIndicator;
+
+ edgeState = source.edgeState;
+ theEdge = source.theEdge;
+ theMultiEdge = source.theMultiEdge;
+
+ marginNumberPadding = source.marginNumberPadding;
+ ctrlCharPadding = source.ctrlCharPadding;
+ lastSegItalicsOffset = source.lastSegItalicsOffset;
+
+ wrap = source.wrap;
+
+ localeName = source.localeName;
+}
+
+ViewStyle::~ViewStyle() {
+ styles.clear();
+ fonts.clear();
+}
+
+void ViewStyle::CalculateMarginWidthAndMask() noexcept {
+ fixedColumnWidth = marginInside ? leftMarginWidth : 0;
+ maskInLine = 0xffffffff;
+ int maskDefinedMarkers = 0;
+ for (const MarginStyle &m : ms) {
+ fixedColumnWidth += m.width;
+ if (m.width > 0)
+ maskInLine &= ~m.mask;
+ maskDefinedMarkers |= m.mask;
+ }
+ maskDrawInText = 0;
+ for (int markBit = 0; markBit < 32; markBit++) {
+ const int maskBit = 1U << markBit;
+ switch (markers[markBit].markType) {
+ case MarkerSymbol::Empty:
+ maskInLine &= ~maskBit;
+ break;
+ case MarkerSymbol::Background:
+ case MarkerSymbol::Underline:
+ maskInLine &= ~maskBit;
+ maskDrawInText |= maskDefinedMarkers & maskBit;
+ break;
+ default: // Other marker types do not affect the masks
+ break;
+ }
+ }
+}
+
void ViewStyle::Refresh(Surface &surface, int tabInChars) {
fonts.clear();
diff --git a/src/ViewStyle.h b/src/ViewStyle.h
index f6d1bdbb4..70e34acaf 100644
--- a/src/ViewStyle.h
+++ b/src/ViewStyle.h
@@ -187,7 +187,7 @@ public:
std::string localeName;
- ViewStyle();
+ ViewStyle(size_t stylesSize_=256);
ViewStyle(const ViewStyle &source);
ViewStyle(ViewStyle &&) = delete;
// Can only be copied through copy constructor which ensures font names initialised correctly
@@ -195,7 +195,6 @@ public:
ViewStyle &operator=(ViewStyle &&) = delete;
~ViewStyle();
void CalculateMarginWidthAndMask() noexcept;
- void Init(size_t stylesSize_=256);
void Refresh(Surface &surface, int tabInChars);
void ReleaseAllExtendedStyles() noexcept;
int AllocateExtendedStyles(int numberStyles);