diff options
Diffstat (limited to 'src/ViewStyle.cxx')
-rw-r--r-- | src/ViewStyle.cxx | 224 |
1 files changed, 111 insertions, 113 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(); |