diff options
author | Neil <nyamatongwe@gmail.com> | 2021-03-17 10:49:00 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-03-17 10:49:00 +1100 |
commit | b36983d5f4550bb14afe0e557831b9004dad7409 (patch) | |
tree | 8ad9ba58bb73414ba3e2266b4b64341ce26e7f3d /src | |
parent | 7f5b292b12975f58ced1e445a41c4b21a350ab9b (diff) | |
download | scintilla-mirror-b36983d5f4550bb14afe0e557831b9004dad7409.tar.gz |
Extract geometry and colour definitions from Platform.h into src/Geometry.h.
Diffstat (limited to 'src')
-rw-r--r-- | src/AutoComplete.cxx | 1 | ||||
-rw-r--r-- | src/CallTip.cxx | 1 | ||||
-rw-r--r-- | src/CellBuffer.cxx | 1 | ||||
-rw-r--r-- | src/ContractionState.cxx | 1 | ||||
-rw-r--r-- | src/Decoration.cxx | 1 | ||||
-rw-r--r-- | src/Document.cxx | 1 | ||||
-rw-r--r-- | src/EditModel.cxx | 1 | ||||
-rw-r--r-- | src/EditView.cxx | 1 | ||||
-rw-r--r-- | src/Editor.cxx | 1 | ||||
-rw-r--r-- | src/Geometry.h | 209 | ||||
-rw-r--r-- | src/Indicator.cxx | 1 | ||||
-rw-r--r-- | src/KeyMap.cxx | 1 | ||||
-rw-r--r-- | src/LineMarker.cxx | 1 | ||||
-rw-r--r-- | src/MarginView.cxx | 1 | ||||
-rw-r--r-- | src/PerLine.cxx | 1 | ||||
-rw-r--r-- | src/Platform.h | 194 | ||||
-rw-r--r-- | src/PositionCache.cxx | 1 | ||||
-rw-r--r-- | src/RunStyles.cxx | 1 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 1 | ||||
-rw-r--r-- | src/Selection.cxx | 1 | ||||
-rw-r--r-- | src/Style.cxx | 1 | ||||
-rw-r--r-- | src/ViewStyle.cxx | 1 | ||||
-rw-r--r-- | src/XPM.cxx | 1 |
23 files changed, 230 insertions, 194 deletions
diff --git a/src/AutoComplete.cxx b/src/AutoComplete.cxx index 7a8b6b201..9baf0ab67 100644 --- a/src/AutoComplete.cxx +++ b/src/AutoComplete.cxx @@ -18,6 +18,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/CallTip.cxx b/src/CallTip.cxx index d9c6bc9b5..667e41c96 100644 --- a/src/CallTip.cxx +++ b/src/CallTip.cxx @@ -19,6 +19,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx index 636f9d2a7..4ddbfb718 100644 --- a/src/CellBuffer.cxx +++ b/src/CellBuffer.cxx @@ -19,6 +19,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/ContractionState.cxx b/src/ContractionState.cxx index 81fefdfeb..ace6ef4ef 100644 --- a/src/ContractionState.cxx +++ b/src/ContractionState.cxx @@ -15,6 +15,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Position.h" diff --git a/src/Decoration.cxx b/src/Decoration.cxx index ff6493f67..ce9e29d07 100644 --- a/src/Decoration.cxx +++ b/src/Decoration.cxx @@ -16,6 +16,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/Document.cxx b/src/Document.cxx index f4f124887..f7f58bd13 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -25,6 +25,7 @@ #include <regex> #endif +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/EditModel.cxx b/src/EditModel.cxx index 3f9874358..51d077aee 100644 --- a/src/EditModel.cxx +++ b/src/EditModel.cxx @@ -19,6 +19,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/EditView.cxx b/src/EditView.cxx index e4acdec58..87d8134c6 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -23,6 +23,7 @@ #include <memory> #include <chrono> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/Editor.cxx b/src/Editor.cxx index 01ab6f0a5..f9bf5a582 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -23,6 +23,7 @@ #include <memory> #include <chrono> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/Geometry.h b/src/Geometry.h new file mode 100644 index 000000000..cee76498e --- /dev/null +++ b/src/Geometry.h @@ -0,0 +1,209 @@ +// Scintilla source code edit control +/** @file Geometry.h + ** Classes and functions for geometric and colour calculations. + **/ +// Copyright 2020 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef GEOMETRY_H +#define GEOMETRY_H + +namespace Scintilla { + +typedef float XYPOSITION; +typedef double XYACCUMULATOR; + +/** + * A geometric point class. + * Point is similar to the Win32 POINT and GTK+ GdkPoint types. + */ +class Point { +public: + XYPOSITION x; + XYPOSITION y; + + constexpr explicit Point(XYPOSITION x_=0, XYPOSITION y_=0) noexcept : x(x_), y(y_) { + } + + static constexpr Point FromInts(int x_, int y_) noexcept { + return Point(static_cast<XYPOSITION>(x_), static_cast<XYPOSITION>(y_)); + } + + constexpr bool operator!=(Point other) const noexcept { + return (x != other.x) || (y != other.y); + } + + constexpr Point operator+(Point other) const noexcept { + return Point(x + other.x, y + other.y); + } + + constexpr Point operator-(Point other) const noexcept { + return Point(x - other.x, y - other.y); + } + + // Other automatically defined methods (assignment, copy constructor, destructor) are fine +}; + +struct Interval { + XYPOSITION left; + XYPOSITION right; +}; + +/** + * A geometric rectangle class. + * PRectangle is similar to Win32 RECT. + * PRectangles contain their top and left sides, but not their right and bottom sides. + */ +class PRectangle { +public: + XYPOSITION left; + XYPOSITION top; + XYPOSITION right; + XYPOSITION bottom; + + constexpr explicit PRectangle(XYPOSITION left_=0, XYPOSITION top_=0, XYPOSITION right_=0, XYPOSITION bottom_ = 0) noexcept : + left(left_), top(top_), right(right_), bottom(bottom_) { + } + + static constexpr PRectangle FromInts(int left_, int top_, int right_, int bottom_) noexcept { + return PRectangle(static_cast<XYPOSITION>(left_), static_cast<XYPOSITION>(top_), + static_cast<XYPOSITION>(right_), static_cast<XYPOSITION>(bottom_)); + } + + // Other automatically defined methods (assignment, copy constructor, destructor) are fine + + constexpr bool operator==(const PRectangle &rc) const noexcept { + return (rc.left == left) && (rc.right == right) && + (rc.top == top) && (rc.bottom == bottom); + } + constexpr bool Contains(Point pt) const noexcept { + return (pt.x >= left) && (pt.x <= right) && + (pt.y >= top) && (pt.y <= bottom); + } + constexpr bool ContainsWholePixel(Point pt) const noexcept { + // Does the rectangle contain all of the pixel to left/below the point + return (pt.x >= left) && ((pt.x+1) <= right) && + (pt.y >= top) && ((pt.y+1) <= bottom); + } + constexpr bool Contains(PRectangle rc) const noexcept { + return (rc.left >= left) && (rc.right <= right) && + (rc.top >= top) && (rc.bottom <= bottom); + } + constexpr bool Intersects(PRectangle other) const noexcept { + return (right > other.left) && (left < other.right) && + (bottom > other.top) && (top < other.bottom); + } + void Move(XYPOSITION xDelta, XYPOSITION yDelta) noexcept { + left += xDelta; + top += yDelta; + right += xDelta; + bottom += yDelta; + } + constexpr XYPOSITION Width() const noexcept { return right - left; } + constexpr XYPOSITION Height() const noexcept { return bottom - top; } + constexpr bool Empty() const noexcept { + return (Height() <= 0) || (Width() <= 0); + } +}; + +/** + * Holds an RGB colour with 8 bits for each component. + */ +constexpr const float componentMaximum = 255.0f; +class ColourDesired { + int co; +public: + constexpr explicit ColourDesired(int co_=0) noexcept : co(co_) { + } + + constexpr ColourDesired(unsigned int red, unsigned int green, unsigned int blue) noexcept : + co(red | (green << 8) | (blue << 16)) { + } + + constexpr bool operator==(const ColourDesired &other) const noexcept { + return co == other.co; + } + + constexpr int AsInteger() const noexcept { + return co; + } + + // Red, green and blue values as bytes 0..255 + constexpr unsigned char GetRed() const noexcept { + return co & 0xff; + } + constexpr unsigned char GetGreen() const noexcept { + return (co >> 8) & 0xff; + } + constexpr unsigned char GetBlue() const noexcept { + return (co >> 16) & 0xff; + } + + // Red, green and blue values as float 0..1.0 + constexpr float GetRedComponent() const noexcept { + return GetRed() / componentMaximum; + } + constexpr float GetGreenComponent() const noexcept { + return GetGreen() / componentMaximum; + } + constexpr float GetBlueComponent() const noexcept { + return GetBlue() / componentMaximum; + } +}; + +/** +* Holds an RGBA colour. +*/ +class ColourAlpha : public ColourDesired { +public: + constexpr explicit ColourAlpha(int co_ = 0) noexcept : ColourDesired(co_) { + } + + constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue) noexcept : + ColourDesired(red | (green << 8) | (blue << 16)) { + } + + constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue, unsigned int alpha) noexcept : + ColourDesired(red | (green << 8) | (blue << 16) | (alpha << 24)) { + } + + constexpr ColourAlpha(ColourDesired cd, unsigned int alpha) noexcept : + ColourDesired(cd.AsInteger() | (alpha << 24)) { + } + + constexpr ColourDesired GetColour() const noexcept { + return ColourDesired(AsInteger() & 0xffffff); + } + + constexpr unsigned char GetAlpha() const noexcept { + return (AsInteger() >> 24) & 0xff; + } + + constexpr float GetAlphaComponent() const noexcept { + return GetAlpha() / componentMaximum; + } + + constexpr ColourAlpha MixedWith(ColourAlpha other) const noexcept { + const unsigned int red = (GetRed() + other.GetRed()) / 2; + const unsigned int green = (GetGreen() + other.GetGreen()) / 2; + const unsigned int blue = (GetBlue() + other.GetBlue()) / 2; + const unsigned int alpha = (GetAlpha() + other.GetAlpha()) / 2; + return ColourAlpha(red, green, blue, alpha); + } +}; + +/** +* Holds an element of a gradient with an RGBA colour and a relative position. +*/ +class ColourStop { +public: + float position; + ColourAlpha colour; + ColourStop(float position_, ColourAlpha colour_) noexcept : + position(position_), colour(colour_) { + } +}; + +} + +#endif diff --git a/src/Indicator.cxx b/src/Indicator.cxx index fda979242..91540e14e 100644 --- a/src/Indicator.cxx +++ b/src/Indicator.cxx @@ -14,6 +14,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/KeyMap.cxx b/src/KeyMap.cxx index 1e873dbfc..938d98997 100644 --- a/src/KeyMap.cxx +++ b/src/KeyMap.cxx @@ -13,6 +13,7 @@ #include <map> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx index 6c61d6d51..286f334f5 100644 --- a/src/LineMarker.cxx +++ b/src/LineMarker.cxx @@ -16,6 +16,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/MarginView.cxx b/src/MarginView.cxx index 8fc24496f..d2fb5f77d 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -20,6 +20,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/PerLine.cxx b/src/PerLine.cxx index c7204e31a..e42844602 100644 --- a/src/PerLine.cxx +++ b/src/PerLine.cxx @@ -16,6 +16,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/Platform.h b/src/Platform.h index 19898a1c4..64c5610c4 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -78,9 +78,6 @@ namespace Scintilla { -typedef float XYPOSITION; -typedef double XYACCUMULATOR; - // Underlying the implementation of the platform classes are platform specific types. // Sometimes these need to be passed around by client code so they are defined here @@ -93,192 +90,6 @@ typedef void *Function; typedef void *IdlerID; /** - * A geometric point class. - * Point is similar to the Win32 POINT and GTK+ GdkPoint types. - */ -class Point { -public: - XYPOSITION x; - XYPOSITION y; - - constexpr explicit Point(XYPOSITION x_=0, XYPOSITION y_=0) noexcept : x(x_), y(y_) { - } - - static constexpr Point FromInts(int x_, int y_) noexcept { - return Point(static_cast<XYPOSITION>(x_), static_cast<XYPOSITION>(y_)); - } - - constexpr bool operator!=(Point other) const noexcept { - return (x != other.x) || (y != other.y); - } - - constexpr Point operator+(Point other) const noexcept { - return Point(x + other.x, y + other.y); - } - - constexpr Point operator-(Point other) const noexcept { - return Point(x - other.x, y - other.y); - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine -}; - -/** - * A geometric rectangle class. - * PRectangle is similar to Win32 RECT. - * PRectangles contain their top and left sides, but not their right and bottom sides. - */ -class PRectangle { -public: - XYPOSITION left; - XYPOSITION top; - XYPOSITION right; - XYPOSITION bottom; - - constexpr explicit PRectangle(XYPOSITION left_=0, XYPOSITION top_=0, XYPOSITION right_=0, XYPOSITION bottom_ = 0) noexcept : - left(left_), top(top_), right(right_), bottom(bottom_) { - } - - static constexpr PRectangle FromInts(int left_, int top_, int right_, int bottom_) noexcept { - return PRectangle(static_cast<XYPOSITION>(left_), static_cast<XYPOSITION>(top_), - static_cast<XYPOSITION>(right_), static_cast<XYPOSITION>(bottom_)); - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine - - constexpr bool operator==(const PRectangle &rc) const noexcept { - return (rc.left == left) && (rc.right == right) && - (rc.top == top) && (rc.bottom == bottom); - } - constexpr bool Contains(Point pt) const noexcept { - return (pt.x >= left) && (pt.x <= right) && - (pt.y >= top) && (pt.y <= bottom); - } - constexpr bool ContainsWholePixel(Point pt) const noexcept { - // Does the rectangle contain all of the pixel to left/below the point - return (pt.x >= left) && ((pt.x+1) <= right) && - (pt.y >= top) && ((pt.y+1) <= bottom); - } - constexpr bool Contains(PRectangle rc) const noexcept { - return (rc.left >= left) && (rc.right <= right) && - (rc.top >= top) && (rc.bottom <= bottom); - } - constexpr bool Intersects(PRectangle other) const noexcept { - return (right > other.left) && (left < other.right) && - (bottom > other.top) && (top < other.bottom); - } - void Move(XYPOSITION xDelta, XYPOSITION yDelta) noexcept { - left += xDelta; - top += yDelta; - right += xDelta; - bottom += yDelta; - } - constexpr XYPOSITION Width() const noexcept { return right - left; } - constexpr XYPOSITION Height() const noexcept { return bottom - top; } - constexpr bool Empty() const noexcept { - return (Height() <= 0) || (Width() <= 0); - } -}; - -/** - * Holds an RGB colour with 8 bits for each component. - */ -constexpr const float componentMaximum = 255.0f; -class ColourDesired { - int co; -public: - constexpr explicit ColourDesired(int co_=0) noexcept : co(co_) { - } - - constexpr ColourDesired(unsigned int red, unsigned int green, unsigned int blue) noexcept : - co(red | (green << 8) | (blue << 16)) { - } - - constexpr bool operator==(const ColourDesired &other) const noexcept { - return co == other.co; - } - - constexpr int AsInteger() const noexcept { - return co; - } - - // Red, green and blue values as bytes 0..255 - constexpr unsigned char GetRed() const noexcept { - return co & 0xff; - } - constexpr unsigned char GetGreen() const noexcept { - return (co >> 8) & 0xff; - } - constexpr unsigned char GetBlue() const noexcept { - return (co >> 16) & 0xff; - } - - // Red, green and blue values as float 0..1.0 - constexpr float GetRedComponent() const noexcept { - return GetRed() / componentMaximum; - } - constexpr float GetGreenComponent() const noexcept { - return GetGreen() / componentMaximum; - } - constexpr float GetBlueComponent() const noexcept { - return GetBlue() / componentMaximum; - } -}; - -/** -* Holds an RGBA colour. -*/ -class ColourAlpha : public ColourDesired { -public: - constexpr explicit ColourAlpha(int co_ = 0) noexcept : ColourDesired(co_) { - } - - constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue) noexcept : - ColourDesired(red | (green << 8) | (blue << 16)) { - } - - constexpr ColourAlpha(unsigned int red, unsigned int green, unsigned int blue, unsigned int alpha) noexcept : - ColourDesired(red | (green << 8) | (blue << 16) | (alpha << 24)) { - } - - constexpr ColourAlpha(ColourDesired cd, unsigned int alpha) noexcept : - ColourDesired(cd.AsInteger() | (alpha << 24)) { - } - - constexpr ColourDesired GetColour() const noexcept { - return ColourDesired(AsInteger() & 0xffffff); - } - - constexpr unsigned char GetAlpha() const noexcept { - return (AsInteger() >> 24) & 0xff; - } - - constexpr float GetAlphaComponent() const noexcept { - return GetAlpha() / componentMaximum; - } - - constexpr ColourAlpha MixedWith(ColourAlpha other) const noexcept { - const unsigned int red = (GetRed() + other.GetRed()) / 2; - const unsigned int green = (GetGreen() + other.GetGreen()) / 2; - const unsigned int blue = (GetBlue() + other.GetBlue()) / 2; - const unsigned int alpha = (GetAlpha() + other.GetAlpha()) / 2; - return ColourAlpha(red, green, blue, alpha); - } -}; - -/** -* Holds an element of a gradient with an RGBA colour and a relative position. -*/ -class ColourStop { -public: - float position; - ColourAlpha colour; - ColourStop(float position_, ColourAlpha colour_) noexcept : - position(position_), colour(colour_) { - } -}; - -/** * Font management. */ @@ -348,11 +159,6 @@ public: virtual XYPOSITION TabPositionAfter(XYPOSITION xPosition) const = 0; }; -struct Interval { - XYPOSITION left; - XYPOSITION right; -}; - class IScreenLineLayout { public: virtual ~IScreenLineLayout() = default; diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index ca676ef6e..55af2dabb 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -19,6 +19,7 @@ #include <iterator> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/RunStyles.cxx b/src/RunStyles.cxx index 2bcf20892..c61e3ca41 100644 --- a/src/RunStyles.cxx +++ b/src/RunStyles.cxx @@ -18,6 +18,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 32bc6bf7a..4830357ed 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -18,6 +18,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "ILoader.h" diff --git a/src/Selection.cxx b/src/Selection.cxx index 4274b190c..261fa81c5 100644 --- a/src/Selection.cxx +++ b/src/Selection.cxx @@ -14,6 +14,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/Style.cxx b/src/Style.cxx index ff2b49bc2..5a3628e8f 100644 --- a/src/Style.cxx +++ b/src/Style.cxx @@ -10,6 +10,7 @@ #include <vector> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index f34eb13e8..d05e82749 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -16,6 +16,7 @@ #include <algorithm> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "Scintilla.h" diff --git a/src/XPM.cxx b/src/XPM.cxx index 364523dd8..2ad21377a 100644 --- a/src/XPM.cxx +++ b/src/XPM.cxx @@ -16,6 +16,7 @@ #include <iterator> #include <memory> +#include "Geometry.h" #include "Platform.h" #include "XPM.h" |