diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index 48d60a1cf5..4c393c9152 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -1840,6 +1840,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
@@ -4336,6 +4337,7 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
index 470450b0ce..9f04bfd065 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
@@ -2132,6 +2132,9 @@
true
+
+ true
+
true
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
index 5ec3094dc5..016f39545f 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
@@ -2881,6 +2881,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index 73f73f0de7..a99b40d601 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -2132,6 +2132,9 @@
true
+
+ true
+
true
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index a406b70e15..5869ebb31e 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -2881,6 +2881,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index bb22be11a5..7c2866a07c 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -2132,6 +2132,9 @@
true
+
+ true
+
true
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index 3dacfcc93f..4a8b95ff58 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -2881,6 +2881,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index dfab116b91..60cac35a1a 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -1602,6 +1602,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
@@ -3780,6 +3781,7 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index 13eaac485d..21e38471dd 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -1825,6 +1825,9 @@
true
+
+ true
+
true
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index c21a5fb549..308c120ec4 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -2425,6 +2425,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index 3480c79f14..08696309f0 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -1732,6 +1732,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
@@ -4063,6 +4064,7 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
index b671307ed1..2853c7fb37 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
@@ -1959,6 +1959,9 @@
true
+
+ true
+
true
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
index 8c6f069a3a..be308e9786 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
@@ -2632,6 +2632,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 81ca1234d4..1f9eb56139 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -1959,6 +1959,9 @@
true
+
+ true
+
true
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index a292c2ed5e..45760539fb 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -2632,6 +2632,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index 6ba5be41be..ef9100de71 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -1959,6 +1959,9 @@
true
+
+ true
+
true
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index 164d80dfdf..ac20556c15 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -2632,6 +2632,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index e06bb633a4..c20ebfa6c5 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -1621,6 +1621,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
@@ -3879,6 +3880,7 @@ set_source_files_properties(
"../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"
"../../../../../modules/juce_graphics/geometry/juce_Line.h"
"../../../../../modules/juce_graphics/geometry/juce_Parallelogram.h"
+ "../../../../../modules/juce_graphics/geometry/juce_Parallelogram_test.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.cpp"
"../../../../../modules/juce_graphics/geometry/juce_Path.h"
"../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index 782e2ff0bd..50ace81780 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -1846,6 +1846,9 @@
true
+
+ true
+
true
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index 8c75d8c006..64d712a014 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -2479,6 +2479,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
index 8a0dcd6fd3..9c58274290 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
@@ -1028,6 +1028,9 @@
true
+
+ true
+
true
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
index 4afdbb74b7..057a7c1d17 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
@@ -1423,6 +1423,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 5a95bf893b..a4b6f2b89b 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -1028,6 +1028,9 @@
true
+
+ true
+
true
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index 6b17fd3496..456c389778 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -1423,6 +1423,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index 79dcdea15c..7ef37203b1 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -1028,6 +1028,9 @@
true
+
+ true
+
true
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index 31635c9d15..9b659e8580 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -1423,6 +1423,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
index 9d30fa240e..99243189d0 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
@@ -1967,6 +1967,9 @@
true
+
+ true
+
true
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
index d7f24e70d1..0491187ce6 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -2653,6 +2653,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index 7d083e9e14..07b149efcf 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -1967,6 +1967,9 @@
true
+
+ true
+
true
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index e30b11dead..abc9640153 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -2653,6 +2653,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index 9440bacc4d..44949d1f77 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -1967,6 +1967,9 @@
true
+
+ true
+
true
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index b0818c6f51..89a70a0f51 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -2653,6 +2653,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index 31f1069025..de89bb8e70 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -1845,6 +1845,9 @@
true
+
+ true
+
true
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
index 0b69cd7a7b..70954c5b39 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
@@ -2476,6 +2476,9 @@
JUCE Modules\juce_graphics\geometry
+
+ JUCE Modules\juce_graphics\geometry
+
JUCE Modules\juce_graphics\geometry
diff --git a/modules/juce_graphics/geometry/juce_Parallelogram.h b/modules/juce_graphics/geometry/juce_Parallelogram.h
index 82123c8f99..8d0266b8cf 100644
--- a/modules/juce_graphics/geometry/juce_Parallelogram.h
+++ b/modules/juce_graphics/geometry/juce_Parallelogram.h
@@ -76,8 +76,8 @@ public:
~Parallelogram() = default;
//==============================================================================
- /** Returns true if the parallelogram has a width or height of more than zero. */
- bool isEmpty() const noexcept { return topLeft != topRight || topLeft != bottomLeft; }
+ /** Returns true if the parallelogram has an area of zero. */
+ bool isEmpty() const noexcept { return topLeft == topRight || topLeft == bottomLeft || topRight == bottomLeft; }
/** Returns true if the parallelogram's coordinates are all finite numbers, i.e. not NaN or infinity. */
inline bool isFinite() const noexcept { return topLeft.isFinite() && topRight.isFinite() && bottomLeft.isFinite(); }
@@ -135,7 +135,7 @@ public:
/** Moves this parallelogram by a given amount. */
Parallelogram& operator-= (Point deltaPosition) noexcept
{
- return operator-= (-deltaPosition);
+ return operator+= (-deltaPosition);
}
/** Returns a parallelogram that has been scaled by the given amount, centred around the origin. */
diff --git a/modules/juce_graphics/geometry/juce_Parallelogram_test.cpp b/modules/juce_graphics/geometry/juce_Parallelogram_test.cpp
new file mode 100644
index 0000000000..ae4888ca9c
--- /dev/null
+++ b/modules/juce_graphics/geometry/juce_Parallelogram_test.cpp
@@ -0,0 +1,75 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE framework.
+ Copyright (c) Raw Material Software Limited
+
+ JUCE is an open source framework subject to commercial or open source
+ licensing.
+
+ By downloading, installing, or using the JUCE framework, or combining the
+ JUCE framework with any other source code, object code, content or any other
+ copyrightable work, you agree to the terms of the JUCE End User Licence
+ Agreement, and all incorporated terms including the JUCE Privacy Policy and
+ the JUCE Website Terms of Service, as applicable, which will bind you. If you
+ do not agree to the terms of these agreements, we will not license the JUCE
+ framework to you, and you must discontinue the installation or download
+ process and cease use of the JUCE framework.
+
+ JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
+ JUCE Privacy Policy: https://juce.com/juce-privacy-policy
+ JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
+
+ Or:
+
+ You may also use this code under the terms of the AGPLv3:
+ https://www.gnu.org/licenses/agpl-3.0.en.html
+
+ THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
+ WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
+
+ ==============================================================================
+*/
+
+namespace juce
+{
+
+class ParallelogramTest : public UnitTest
+{
+public:
+ ParallelogramTest() : UnitTest ("Parallelogram", UnitTestCategories::graphics) {}
+
+ void runTest() override
+ {
+ beginTest ("isEmpty");
+ {
+ expect (! Parallelogram (Rectangle (10, 10, 20, 20)).isEmpty());
+ expect (Parallelogram (Rectangle (10, 10, 0, 20)).isEmpty());
+ expect (Parallelogram (Rectangle (10, 10, 20, 0)).isEmpty());
+
+ expect (! Parallelogram (Point (0, 0), Point (10, 10), Point (20, 0)).isEmpty());
+ expect (Parallelogram (Point (0, 0), Point (0, 0), Point (20, 0)).isEmpty());
+ expect (Parallelogram (Point (0, 0), Point (10, 10), Point (10, 10)).isEmpty());
+ expect (Parallelogram (Point (20, 0), Point (10, 10), Point (20, 0)).isEmpty());
+ }
+
+ beginTest ("operators");
+ {
+ Parallelogram p (Rectangle (10, 10, 20, 20));
+ p += Point (5, 10);
+ expect (p.topLeft == Point (15, 20));
+ expect (p.topRight == Point (35, 20));
+ expect (p.bottomLeft == Point (15, 40));
+
+ p -= Point (10, 5);
+ expect (p.topLeft == Point (5, 15));
+ expect (p.topRight == Point (25, 15));
+ expect (p.bottomLeft == Point (5, 35));
+ }
+ }
+};
+
+static ParallelogramTest parallelogramTest;
+
+} // namespace juce
diff --git a/modules/juce_graphics/juce_graphics.cpp b/modules/juce_graphics/juce_graphics.cpp
index 3c30c91eeb..d1a0a85d6b 100644
--- a/modules/juce_graphics/juce_graphics.cpp
+++ b/modules/juce_graphics/juce_graphics.cpp
@@ -191,6 +191,7 @@
#include "effects/juce_GlowEffect.cpp"
#if JUCE_UNIT_TESTS
+ #include "geometry/juce_Parallelogram_test.cpp"
#include "geometry/juce_Rectangle_test.cpp"
#endif