From b36983d5f4550bb14afe0e557831b9004dad7409 Mon Sep 17 00:00:00 2001
From: Neil
Date: Wed, 17 Mar 2021 10:49:00 +1100
Subject: Extract geometry and colour definitions from Platform.h into
src/Geometry.h.
---
cocoa/PlatCocoa.h | 1 +
cocoa/PlatCocoa.mm | 1 +
cocoa/ScintillaCocoa.mm | 1 +
cocoa/ScintillaView.mm | 1 +
doc/Design.html | 2 +-
gtk/PlatGTK.cxx | 1 +
gtk/ScintillaGTK.cxx | 1 +
gtk/ScintillaGTKAccessible.cxx | 1 +
gtk/deps.mak | 24 ++++
qt/ScintillaEdit/ScintillaDocument.cpp | 1 +
qt/ScintillaEditBase/PlatQt.h | 1 +
qt/ScintillaEditBase/ScintillaEditBase.h | 1 +
qt/ScintillaEditBase/ScintillaEditBase.pro | 1 +
qt/ScintillaEditBase/ScintillaQt.h | 1 +
scripts/HeaderOrder.txt | 3 +-
src/AutoComplete.cxx | 1 +
src/CallTip.cxx | 1 +
src/CellBuffer.cxx | 1 +
src/ContractionState.cxx | 1 +
src/Decoration.cxx | 1 +
src/Document.cxx | 1 +
src/EditModel.cxx | 1 +
src/EditView.cxx | 1 +
src/Editor.cxx | 1 +
src/Geometry.h | 209 +++++++++++++++++++++++++++++
src/Indicator.cxx | 1 +
src/KeyMap.cxx | 1 +
src/LineMarker.cxx | 1 +
src/MarginView.cxx | 1 +
src/PerLine.cxx | 1 +
src/Platform.h | 194 --------------------------
src/PositionCache.cxx | 1 +
src/RunStyles.cxx | 1 +
src/ScintillaBase.cxx | 1 +
src/Selection.cxx | 1 +
src/Style.cxx | 1 +
src/ViewStyle.cxx | 1 +
src/XPM.cxx | 1 +
test/unit/UnitTester.cxx | 1 +
test/unit/testCellBuffer.cxx | 1 +
test/unit/testCharClassify.cxx | 1 +
test/unit/testContractionState.cxx | 1 +
test/unit/testDecoration.cxx | 1 +
test/unit/testPartitioning.cxx | 1 +
test/unit/testPerLine.cxx | 1 +
test/unit/testRunStyles.cxx | 1 +
test/unit/testSparseVector.cxx | 1 +
test/unit/testSplitVector.cxx | 1 +
test/unit/testUniConversion.cxx | 1 +
test/unit/unitTest.cxx | 1 +
win32/PlatWin.cxx | 1 +
win32/ScintillaWin.cxx | 1 +
win32/deps.mak | 24 ++++
win32/nmdeps.mak | 24 ++++
54 files changed, 331 insertions(+), 196 deletions(-)
create mode 100644 src/Geometry.h
diff --git a/cocoa/PlatCocoa.h b/cocoa/PlatCocoa.h
index 6133b3a25..c19ac8bca 100644
--- a/cocoa/PlatCocoa.h
+++ b/cocoa/PlatCocoa.h
@@ -17,6 +17,7 @@
#include
+#include "Geometry.h"
#include "Platform.h"
#include "Scintilla.h"
diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm
index ff1e3d013..82dd3b030 100644
--- a/cocoa/PlatCocoa.mm
+++ b/cocoa/PlatCocoa.mm
@@ -32,6 +32,7 @@
#import
+#import "Geometry.h"
#import "Platform.h"
#include "XPM.h"
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index 6c975beb3..f826b3565 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -26,6 +26,7 @@
#import
#import
+#import "Geometry.h"
#import "Platform.h"
#import "ScintillaView.h"
#import "ScintillaCocoa.h"
diff --git a/cocoa/ScintillaView.mm b/cocoa/ScintillaView.mm
index 9657886e2..81d8c7a71 100644
--- a/cocoa/ScintillaView.mm
+++ b/cocoa/ScintillaView.mm
@@ -15,6 +15,7 @@
#include
#include
+#import "Geometry.h"
#import "Platform.h"
#import "ScintillaView.h"
#import "ScintillaCocoa.h"
diff --git a/doc/Design.html b/doc/Design.html
index d08c01d96..cc9994678 100644
--- a/doc/Design.html
+++ b/doc/Design.html
@@ -66,7 +66,7 @@
This is a fairly small and thin layer over the platform's native capabilities.
- The portability library is defined in Platform.h and is implemented once for each platform.
+ The portability library is defined in Geometry.h and Platform.h and is implemented once for each platform.
PlatWin.cxx defines the Windows variants of the methods and PlatGTK.cxx the GTK variants.
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx
index 5ea2af191..29946646e 100755
--- a/gtk/PlatGTK.cxx
+++ b/gtk/PlatGTK.cxx
@@ -23,6 +23,7 @@
#include
#include
+#include "Geometry.h"
#include "Platform.h"
#include "Scintilla.h"
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index d52016f4b..5373f3ea6 100755
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -36,6 +36,7 @@
#include
#endif
+#include "Geometry.h"
#include "Platform.h"
#include "ILoader.h"
diff --git a/gtk/ScintillaGTKAccessible.cxx b/gtk/ScintillaGTKAccessible.cxx
index 8b5670669..207f657d9 100644
--- a/gtk/ScintillaGTKAccessible.cxx
+++ b/gtk/ScintillaGTKAccessible.cxx
@@ -87,6 +87,7 @@
#endif
// ScintillaGTK.h and stuff it needs
+#include "Geometry.h"
#include "Platform.h"
#include "ILoader.h"
diff --git a/gtk/deps.mak b/gtk/deps.mak
index ee48fd53e..3d7d28fbf 100644
--- a/gtk/deps.mak
+++ b/gtk/deps.mak
@@ -1,6 +1,7 @@
# Created by DepGen.py. To recreate, run DepGen.py.
PlatGTK.o: \
PlatGTK.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -11,6 +12,7 @@ PlatGTK.o: \
Converter.h
ScintillaGTK.o: \
ScintillaGTK.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -51,6 +53,7 @@ ScintillaGTK.o: \
Converter.h
ScintillaGTKAccessible.o: \
ScintillaGTKAccessible.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -89,6 +92,7 @@ ScintillaGTKAccessible.o: \
ScintillaGTKAccessible.h
AutoComplete.o: \
../src/AutoComplete.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -97,6 +101,7 @@ AutoComplete.o: \
../src/AutoComplete.h
CallTip.o: \
../src/CallTip.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -113,6 +118,7 @@ CaseFolder.o: \
../src/CaseConvert.h
CellBuffer.o: \
../src/CellBuffer.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -133,6 +139,7 @@ CharClassify.o: \
../src/CharClassify.h
ContractionState.o: \
../src/ContractionState.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../src/Position.h \
../src/UniqueString.h \
@@ -146,6 +153,7 @@ DBCS.o: \
../src/DBCS.h
Decoration.o: \
../src/Decoration.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -156,6 +164,7 @@ Decoration.o: \
../src/Decoration.h
Document.o: \
../src/Document.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -178,6 +187,7 @@ Document.o: \
../src/ElapsedPeriod.h
EditModel.o: \
../src/EditModel.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -206,6 +216,7 @@ EditModel.o: \
../src/EditModel.h
Editor.o: \
../src/Editor.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -240,6 +251,7 @@ Editor.o: \
../src/ElapsedPeriod.h
EditView.o: \
../src/EditView.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -274,6 +286,7 @@ EditView.o: \
../src/ElapsedPeriod.h
Indicator.o: \
../src/Indicator.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -282,12 +295,14 @@ Indicator.o: \
../src/XPM.h
KeyMap.o: \
../src/KeyMap.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
../src/KeyMap.h
LineMarker.o: \
../src/LineMarker.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -296,6 +311,7 @@ LineMarker.o: \
../src/LineMarker.h
MarginView.o: \
../src/MarginView.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -327,6 +343,7 @@ MarginView.o: \
../src/EditView.h
PerLine.o: \
../src/PerLine.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -337,6 +354,7 @@ PerLine.o: \
../src/PerLine.h
PositionCache.o: \
../src/PositionCache.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -369,6 +387,7 @@ RESearch.o: \
../src/RESearch.h
RunStyles.o: \
../src/RunStyles.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -378,6 +397,7 @@ RunStyles.o: \
../src/RunStyles.h
ScintillaBase.o: \
../src/ScintillaBase.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/ILoader.h \
../include/Sci_Position.h \
@@ -411,6 +431,7 @@ ScintillaBase.o: \
../src/ScintillaBase.h
Selection.o: \
../src/Selection.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -418,6 +439,7 @@ Selection.o: \
../src/Selection.h
Style.o: \
../src/Style.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -430,6 +452,7 @@ UniqueString.o: \
../src/UniqueString.h
ViewStyle.o: \
../src/ViewStyle.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../include/Scintilla.h \
../include/Sci_Position.h \
@@ -442,5 +465,6 @@ ViewStyle.o: \
../src/ViewStyle.h
XPM.o: \
../src/XPM.cxx \
+ ../src/Geometry.h \
../src/Platform.h \
../src/XPM.h
diff --git a/qt/ScintillaEdit/ScintillaDocument.cpp b/qt/ScintillaEdit/ScintillaDocument.cpp
index 9c87224ff..87db014ca 100644
--- a/qt/ScintillaEdit/ScintillaDocument.cpp
+++ b/qt/ScintillaEdit/ScintillaDocument.cpp
@@ -10,6 +10,7 @@
#include "ScintillaDocument.h"
+#include "Geometry.h"
#include "Platform.h"
#include "ILoader.h"
diff --git a/qt/ScintillaEditBase/PlatQt.h b/qt/ScintillaEditBase/PlatQt.h
index 054f55bd3..63364a3d7 100644
--- a/qt/ScintillaEditBase/PlatQt.h
+++ b/qt/ScintillaEditBase/PlatQt.h
@@ -17,6 +17,7 @@
#include
#include
+#include "Geometry.h"
#include "Platform.h"
#include
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.h b/qt/ScintillaEditBase/ScintillaEditBase.h
index 49ce8b890..dda1c6563 100644
--- a/qt/ScintillaEditBase/ScintillaEditBase.h
+++ b/qt/ScintillaEditBase/ScintillaEditBase.h
@@ -18,6 +18,7 @@
#include
#include
+#include "Geometry.h"
#include "Platform.h"
#include "Scintilla.h"
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.pro b/qt/ScintillaEditBase/ScintillaEditBase.pro
index 8b7a5000a..c39b0f1f6 100644
--- a/qt/ScintillaEditBase/ScintillaEditBase.pro
+++ b/qt/ScintillaEditBase/ScintillaEditBase.pro
@@ -69,6 +69,7 @@ HEADERS += \
../../src/LineMarker.h \
../../src/KeyMap.h \
../../src/Indicator.h \
+ ../../src/Geometry.h \
../../src/FontQuality.h \
../../src/Editor.h \
../../src/Document.h \
diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h
index 7f69b2b54..d06fbc090 100644
--- a/qt/ScintillaEditBase/ScintillaQt.h
+++ b/qt/ScintillaEditBase/ScintillaQt.h
@@ -28,6 +28,7 @@
#include
#include "Scintilla.h"
+#include "Geometry.h"
#include "Platform.h"
#include "ILoader.h"
#include "ILexer.h"
diff --git a/scripts/HeaderOrder.txt b/scripts/HeaderOrder.txt
index 23aaad9f8..e560bce88 100644
--- a/scripts/HeaderOrder.txt
+++ b/scripts/HeaderOrder.txt
@@ -88,7 +88,8 @@
// Non-platform-specific headers
-// include
+// src platform interface
+#include "Geometry.h"
#include "Platform.h"
#include "Sci_Position.h"
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
#include
+#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
#include
+#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
#include
+#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
#include
+#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
#include
+#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
#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
#include
+#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
#include
+#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
#include
+#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
+// 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(x_), static_cast(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(left_), static_cast(top_),
+ static_cast(right_), static_cast(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
#include
+#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