aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AutoComplete.cxx1
-rw-r--r--src/CallTip.cxx1
-rw-r--r--src/CellBuffer.cxx1
-rw-r--r--src/ContractionState.cxx1
-rw-r--r--src/Decoration.cxx1
-rw-r--r--src/Document.cxx1
-rw-r--r--src/EditModel.cxx1
-rw-r--r--src/EditView.cxx1
-rw-r--r--src/Editor.cxx1
-rw-r--r--src/Geometry.h209
-rw-r--r--src/Indicator.cxx1
-rw-r--r--src/KeyMap.cxx1
-rw-r--r--src/LineMarker.cxx1
-rw-r--r--src/MarginView.cxx1
-rw-r--r--src/PerLine.cxx1
-rw-r--r--src/Platform.h194
-rw-r--r--src/PositionCache.cxx1
-rw-r--r--src/RunStyles.cxx1
-rw-r--r--src/ScintillaBase.cxx1
-rw-r--r--src/Selection.cxx1
-rw-r--r--src/Style.cxx1
-rw-r--r--src/ViewStyle.cxx1
-rw-r--r--src/XPM.cxx1
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"