diff options
author | Neil <nyamatongwe@gmail.com> | 2021-05-10 17:40:27 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-05-10 17:40:27 +1000 |
commit | 8497317864816c0f7a4b5baf3229c7a3336f55d8 (patch) | |
tree | e0ddd75f8457358ed89d73d86fb00e770eaf9d05 /src/ViewStyle.cxx | |
parent | e44364e1f30eb482cbf1502d6345a8d146c9be42 (diff) | |
download | scintilla-mirror-8497317864816c0f7a4b5baf3229c7a3336f55d8.tar.gz |
Change the way that selections and carets are drawn to use the element APIs.
Diffstat (limited to 'src/ViewStyle.cxx')
-rw-r--r-- | src/ViewStyle.cxx | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index 16701983e..ed08ad6ce 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -196,13 +196,17 @@ void ViewStyle::Init(size_t stylesSize_) { spaceWidth = 8; tabWidth = spaceWidth * 8; - selection.colours.fore.reset(); - selection.colours.back = ColourAlpha(0xc0, 0xc0, 0xc0); - selection.additionalForeground = ColourAlpha(0xff, 0, 0); - selection.additionalBackground = ColourAlpha(0xd7, 0xd7, 0xd7); - selection.background2 = ColourAlpha(0xb0, 0xb0, 0xb0); - selection.alpha = SC_ALPHA_NOALPHA; - selection.additionalAlpha = SC_ALPHA_NOALPHA; + // Default is for no selection foregrounds + elementColours.erase(SC_ELEMENT_SELECTION_TEXT); + elementColours.erase(SC_ELEMENT_SELECTION_ADDITIONAL_TEXT); + elementColours.erase(SC_ELEMENT_SELECTION_SECONDARY_TEXT); + elementColours.erase(SC_ELEMENT_SELECTION_NO_FOCUS_TEXT); + // Shades of grey for selection backgrounds + elementBaseColours[SC_ELEMENT_SELECTION_BACK] = ColourAlpha(0xc0, 0xc0, 0xc0, 0xff); + elementBaseColours[SC_ELEMENT_SELECTION_ADDITIONAL_BACK] = ColourAlpha(0xd7, 0xd7, 0xd7, 0xff); + elementBaseColours[SC_ELEMENT_SELECTION_SECONDARY_BACK] = ColourAlpha(0xb0, 0xb0, 0xb0, 0xff); + elementBaseColours[SC_ELEMENT_SELECTION_NO_FOCUS_BACK] = ColourAlpha(0x80, 0x80, 0x80, 0x3f); + selection.layer = Layer::base; selection.eolFilled = false; foldmarginColour.reset(); @@ -217,8 +221,9 @@ void ViewStyle::Init(size_t stylesSize_) { styles[STYLE_LINENUMBER].fore = ColourAlpha(0, 0, 0); styles[STYLE_LINENUMBER].back = Platform::Chrome(); - caret.colour = ColourAlpha(0, 0, 0); - caret.additionalColour = ColourAlpha(0x7f, 0x7f, 0x7f); + elementBaseColours[SC_ELEMENT_CARET] = ColourAlpha(0, 0, 0); + elementBaseColours[SC_ELEMENT_CARET_ADDITIONAL] = ColourAlpha(0x7f, 0x7f, 0x7f); + elementBaseColours[SC_ELEMENT_CARET_SECONDARY] = ColourAlpha(0, 0, 0, 0x40); caret.style = CARETSTYLE_LINE; caret.width = 1; @@ -483,12 +488,15 @@ std::optional<ColourAlpha> ViewStyle::Background(int marksOfLine, bool caretActi } bool ViewStyle::SelectionBackgroundDrawn() const noexcept { - return selection.colours.back && - ((selection.alpha == SC_ALPHA_NOALPHA) || (selection.additionalAlpha == SC_ALPHA_NOALPHA)); + return selection.layer == Layer::base; } bool ViewStyle::SelectionTextDrawn() const { - return selection.colours.fore.has_value(); + return + ElementIsSet(SC_ELEMENT_SELECTION_TEXT) || + ElementIsSet(SC_ELEMENT_SELECTION_ADDITIONAL_TEXT) || + ElementIsSet(SC_ELEMENT_SELECTION_SECONDARY_TEXT) || + ElementIsSet(SC_ELEMENT_SELECTION_NO_FOCUS_TEXT); } bool ViewStyle::WhitespaceBackgroundDrawn() const noexcept { @@ -540,6 +548,16 @@ void ViewStyle::ResetElement(int element) { elementColours.erase(element); } +void ViewStyle::SetElementRGB(int element, int rgb) { + const ColourAlpha current = ElementColour(element).value_or(ColourAlpha(0, 0, 0, 0)); + elementColours[element] = ColourAlpha(ColourAlpha(rgb), current.GetAlpha()); +} + +void ViewStyle::SetElementAlpha(int element, int alpha) { + const ColourAlpha current = ElementColour(element).value_or(ColourAlpha(0, 0, 0, 0)); + elementColours[element] = ColourAlpha(current, std::min(alpha, 0xff)); +} + bool ViewStyle::ElementIsSet(int element) const { ElementMap::const_iterator search = elementColours.find(element); if (search != elementColours.end()) { |