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()) { | 
