diff --git a/Source/Overlay.cc b/Source/Overlay.cc new file mode 100644 index 0000000..6973f08 --- /dev/null +++ b/Source/Overlay.cc @@ -0,0 +1,533 @@ +//////////////////////////////////////////////////////////////////////////////// +// -------------------------------------------------------------------------- // +// // +// (C) 2010-2017 Robot Developers // +// See LICENSE for licensing info // +// // +// -------------------------------------------------------------------------- // +//////////////////////////////////////////////////////////////////////////////// + +//----------------------------------------------------------------------------// +// Prefaces // +//----------------------------------------------------------------------------// + +#include "Overlay.h" +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +ROBOT_NS_BEGIN + + + +//----------------------------------------------------------------------------// +// Classes Overlay // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +struct Overlay::Data +{ + // TODO: +}; + + + +//----------------------------------------------------------------------------// +// Constructors Overlay // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +Overlay::Overlay (const Bounds& bounds) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +Overlay::Overlay (int32 x, int32 y, + int32 w, int32 h) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + + + +//----------------------------------------------------------------------------// +// Functions Overlay // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::IsValid (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return false; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::Create (const Bounds& bounds) +{ + return Create (bounds.X, bounds.Y, + bounds.W, bounds.H); +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::Create (int32 x, + int32 y, int32 w, int32 h) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return false; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Destroy (void) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::IsTopMost (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return false; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::SetTopMost (bool state) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +real32 Overlay::GetOpacity (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return 0; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return 0; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return 0; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::SetOpacity (real32 opacity) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::IsVisible (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return false; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return false; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::SetVisible (bool visible) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +uintptr Overlay::GetHandle (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return 0; + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return 0; + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return 0; + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +Bounds Overlay::GetClient (void) const +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + return Bounds(); + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + return Bounds(); + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + return Bounds(); + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::SetClient (const Bounds& bounds) +{ + SetClient (bounds.X, bounds.Y, + bounds.W, bounds.H); +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::SetClient (int32 x, + int32 y, int32 w, int32 h) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +Point Overlay::MapToClient (const Point& point) const +{ + // Check if the overlay is valid + if (!IsValid()) return Point(); + return point - GetClient().GetPoint(); +} + +//////////////////////////////////////////////////////////////////////////////// + +Point Overlay::MapToScreen (const Point& point) const +{ + // Check if the overlay is valid + if (!IsValid()) return Point(); + return point + GetClient().GetPoint(); +} + +//////////////////////////////////////////////////////////////////////////////// + +Bounds Overlay::MapToClient (const Bounds& bounds) const +{ + // Check if the overlay is valid + if (!IsValid()) return Bounds(); + return Bounds (bounds.GetPoint() - GetClient().GetPoint(), bounds.GetSize()); +} + +//////////////////////////////////////////////////////////////////////////////// + +Bounds Overlay::MapToScreen (const Bounds& bounds) const +{ + // Check if the overlay is valid + if (!IsValid()) return Bounds(); + return Bounds (bounds.GetPoint() + GetClient().GetPoint(), bounds.GetSize()); +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Clear (const Color& color) +{ + auto bounds = GetClient(); + Clear (bounds.X, bounds.Y, + bounds.W, bounds.H, color); +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Clear (const Bounds& bounds, + const Color & color) +{ + Clear (bounds.X, bounds.Y, + bounds.W, bounds.H, color); +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Clear (int32 x, int32 y, + int32 w, int32 h, + const Color& color) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Render (const Image& image, + const Point& target) +{ +#ifdef ROBOT_OS_LINUX + + // TODO: + +#endif +#ifdef ROBOT_OS_MAC + + // TODO: + +#endif +#ifdef ROBOT_OS_WIN + + // TODO: + +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void Overlay::Render (const Image & image, + const Bounds& source, + const Point & target) +{ + // TODO: Requires merging #82 +} + + + +//----------------------------------------------------------------------------// +// Operators Overlay // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::operator == (const Overlay& overlay) const +{ + return GetHandle() == overlay.GetHandle(); +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::operator != (const Overlay& overlay) const +{ + return GetHandle() != overlay.GetHandle(); +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::operator == (uintptr handle) const +{ + return GetHandle() == handle; +} + +//////////////////////////////////////////////////////////////////////////////// + +bool Overlay::operator != (uintptr handle) const +{ + return GetHandle() != handle; +} + +ROBOT_NS_END diff --git a/Source/Overlay.h b/Source/Overlay.h new file mode 100644 index 0000000..6004d44 --- /dev/null +++ b/Source/Overlay.h @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////////////////////////// +// -------------------------------------------------------------------------- // +// // +// (C) 2010-2017 Robot Developers // +// See LICENSE for licensing info // +// // +// -------------------------------------------------------------------------- // +//////////////////////////////////////////////////////////////////////////////// + +//----------------------------------------------------------------------------// +// Prefaces // +//----------------------------------------------------------------------------// + +#pragma once + +#include "Types.h" +#include + +ROBOT_NS_BEGIN + +#ifdef ROBOT_OS_WIN + #pragma warning (push) + // Ignore the VS C4251 warning + #pragma warning (disable:4251) +#endif + + + +//----------------------------------------------------------------------------// +// Classes // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +class ROBOT_EXPORT Overlay +{ +public: + explicit Overlay (const Bounds& b); + explicit Overlay (int32 x, int32 y, + int32 w, int32 h); + +public: + bool IsValid (void) const; + + bool Create (const Bounds& b); + bool Create (int32 x, int32 y, + int32 w, int32 h); + void Destroy (void); + + bool IsTopMost (void) const; + void SetTopMost (bool state); + + real32 GetOpacity (void) const; + void SetOpacity (real32 opacity); + + bool IsVisible (void) const; + void SetVisible (bool visible); + + uintptr GetHandle (void) const; + + Bounds GetClient (void) const; + void SetClient (const Bounds& b); + void SetClient (int32 x, int32 y, + int32 w, int32 h); + + Point MapToClient (const Point& point) const; + Point MapToScreen (const Point& point) const; + Bounds MapToClient (const Bounds& bounds) const; + Bounds MapToScreen (const Bounds& bounds) const; + + void Clear (const Color& color = 0); + + void Clear (const Bounds& b, + const Color & color = 0); + + void Clear (int32 x, int32 y, + int32 w, int32 h, + const Color& color = 0); + + void Render (const Image& image, + const Point& target = 0); + + void Render (const Image & image, + const Bounds& source, + const Point & target = 0); + +public: + bool operator == (const Overlay& overlay) const; + bool operator != (const Overlay& overlay) const; + + bool operator == (uintptr handle) const; + bool operator != (uintptr handle) const; + +private: + struct Data; + std::shared_ptr mData; // Shared information +}; + +#ifdef ROBOT_OS_WIN + #pragma warning (pop) +#endif + +ROBOT_NS_END diff --git a/Source/Robot.h b/Source/Robot.h index 800d974..c96faae 100644 --- a/Source/Robot.h +++ b/Source/Robot.h @@ -23,5 +23,7 @@ #include "Window.h" #include "Screen.h" +#include "Overlay.h" + #include "Timer.h" #include "Clipboard.h" diff --git a/Source/Robot.vs12.vcxproj b/Source/Robot.vs12.vcxproj index 8218f1e..2230bc8 100644 --- a/Source/Robot.vs12.vcxproj +++ b/Source/Robot.vs12.vcxproj @@ -46,6 +46,7 @@ + @@ -67,6 +68,7 @@ + diff --git a/Source/Robot.vs12.vcxproj.filters b/Source/Robot.vs12.vcxproj.filters index 114f2ac..343dd3c 100644 --- a/Source/Robot.vs12.vcxproj.filters +++ b/Source/Robot.vs12.vcxproj.filters @@ -44,6 +44,9 @@ Native + + Native + Types @@ -103,6 +106,9 @@ Native + + Native + Types diff --git a/Source/Robot.vs13.vcxproj b/Source/Robot.vs13.vcxproj index f42b1ba..25790f6 100644 --- a/Source/Robot.vs13.vcxproj +++ b/Source/Robot.vs13.vcxproj @@ -46,6 +46,7 @@ + @@ -67,6 +68,7 @@ + diff --git a/Source/Robot.vs13.vcxproj.filters b/Source/Robot.vs13.vcxproj.filters index 114f2ac..343dd3c 100644 --- a/Source/Robot.vs13.vcxproj.filters +++ b/Source/Robot.vs13.vcxproj.filters @@ -44,6 +44,9 @@ Native + + Native + Types @@ -103,6 +106,9 @@ Native + + Native + Types diff --git a/Source/Robot.vs15.vcxproj b/Source/Robot.vs15.vcxproj index e57682f..2c3b99d 100644 --- a/Source/Robot.vs15.vcxproj +++ b/Source/Robot.vs15.vcxproj @@ -46,6 +46,7 @@ + @@ -67,6 +68,7 @@ + diff --git a/Source/Robot.vs15.vcxproj.filters b/Source/Robot.vs15.vcxproj.filters index 114f2ac..343dd3c 100644 --- a/Source/Robot.vs15.vcxproj.filters +++ b/Source/Robot.vs15.vcxproj.filters @@ -44,6 +44,9 @@ Native + + Native + Types @@ -103,6 +106,9 @@ Native + + Native + Types diff --git a/Test/Main.cc b/Test/Main.cc index 31b3101..c7d4058 100644 --- a/Test/Main.cc +++ b/Test/Main.cc @@ -76,7 +76,8 @@ int main (int argc, const char* argv[]) << " 7: Window \n" << " 8: Memory \n" << " 9: Screen \n" - << " 10: Clipboard\n\n"; + << " 10: Overlay \n" + << " 11: Clipboard\n\n"; // Ask the user to make a selection cout << "Enter component(s) to test: "; @@ -98,7 +99,8 @@ int main (int argc, const char* argv[]) case 6: result = TestProcess (); break; case 7: result = TestWindow (); break; case 9: result = TestScreen (); break; - case 10: result = TestClipboard(); break; + case 10: result = TestOverlay (); break; + case 11: result = TestClipboard(); break; case 8: cout << uppercase; diff --git a/Test/Overlay.cc b/Test/Overlay.cc new file mode 100644 index 0000000..bceba96 --- /dev/null +++ b/Test/Overlay.cc @@ -0,0 +1,43 @@ +//////////////////////////////////////////////////////////////////////////////// +// -------------------------------------------------------------------------- // +// // +// (C) 2010-2017 Robot Developers // +// See LICENSE for licensing info // +// // +// -------------------------------------------------------------------------- // +//////////////////////////////////////////////////////////////////////////////// + +//----------------------------------------------------------------------------// +// Prefaces // +//----------------------------------------------------------------------------// + +#include "Test.h" + + + +//----------------------------------------------------------------------------// +// Locals // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +static bool TestGeneric (void) +{ + return true; +} + + + +//----------------------------------------------------------------------------// +// Functions // +//----------------------------------------------------------------------------// + +//////////////////////////////////////////////////////////////////////////////// + +bool TestOverlay (void) +{ + cout << "TEST OVERLAY\n" + << "------------------------------\n"; + + return TestGeneric(); +} diff --git a/Test/Test.h b/Test/Test.h index 0e3dd13..d0e3765 100644 --- a/Test/Test.h +++ b/Test/Test.h @@ -179,7 +179,8 @@ bool TestTimer (void); bool TestKeyboard (void); bool TestMouse (void); bool TestProcess (void); -bool TestWindow (void); bool TestMemory (void); +bool TestWindow (void); bool TestScreen (void); +bool TestOverlay (void); bool TestClipboard (void); diff --git a/Test/Test.vs12.vcxproj b/Test/Test.vs12.vcxproj index 95d0d69..66a7c67 100644 --- a/Test/Test.vs12.vcxproj +++ b/Test/Test.vs12.vcxproj @@ -44,6 +44,7 @@ + diff --git a/Test/Test.vs12.vcxproj.filters b/Test/Test.vs12.vcxproj.filters index dc10fa9..347afdb 100644 --- a/Test/Test.vs12.vcxproj.filters +++ b/Test/Test.vs12.vcxproj.filters @@ -23,6 +23,9 @@ Tests + + Tests + Tests diff --git a/Test/Test.vs13.vcxproj b/Test/Test.vs13.vcxproj index 14cf8bd..b6b12a5 100644 --- a/Test/Test.vs13.vcxproj +++ b/Test/Test.vs13.vcxproj @@ -44,6 +44,7 @@ + diff --git a/Test/Test.vs13.vcxproj.filters b/Test/Test.vs13.vcxproj.filters index dc10fa9..347afdb 100644 --- a/Test/Test.vs13.vcxproj.filters +++ b/Test/Test.vs13.vcxproj.filters @@ -23,6 +23,9 @@ Tests + + Tests + Tests diff --git a/Test/Test.vs15.vcxproj b/Test/Test.vs15.vcxproj index 67d7994..60c980f 100644 --- a/Test/Test.vs15.vcxproj +++ b/Test/Test.vs15.vcxproj @@ -44,6 +44,7 @@ + diff --git a/Test/Test.vs15.vcxproj.filters b/Test/Test.vs15.vcxproj.filters index dc10fa9..347afdb 100644 --- a/Test/Test.vs15.vcxproj.filters +++ b/Test/Test.vs15.vcxproj.filters @@ -23,6 +23,9 @@ Tests + + Tests + Tests