diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..d132e41
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "deps/SFML"]
+ path = deps/SFML
+ url = git@github.com:SFML/SFML.git
diff --git a/GlosSITarget/CMakeLists.txt b/GlosSITarget/CMakeLists.txt
new file mode 100644
index 0000000..1726f7d
--- /dev/null
+++ b/GlosSITarget/CMakeLists.txt
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.7.2)
+
+project(
+ GlosSITarget
+ VERSION 1.0
+ LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+
+
+add_executable( GlosSITarget
+ main.cpp
+ SteamTarget.cpp
+)
\ No newline at end of file
diff --git a/GlosSITarget/GlosSITarget.vcxproj b/GlosSITarget/GlosSITarget.vcxproj
index f4f3760..0f65b15 100644
--- a/GlosSITarget/GlosSITarget.vcxproj
+++ b/GlosSITarget/GlosSITarget.vcxproj
@@ -72,15 +72,23 @@
true
+ ..\deps\SFML\include;$(ExternalIncludePath)
false
+ ..\deps\SFML\include;$(ExternalIncludePath)
true
+ ..\deps\SFML\include;$(ExternalIncludePath)
+ ..\deps\SFML\out\build\x64-Debug\lib;$(LibraryPath)
+ false
+ true
false
+ ..\deps\SFML\include;$(ExternalIncludePath)
+ ..\deps\SFML\out\build\x64-Release\lib;$(LibraryPath)
@@ -116,10 +124,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
+ stdcpp20
Console
true
+ sfml-window-d.lib;sfml-system-d.lib;sfml-graphics-d.lib;dwmapi.lib;%(AdditionalDependencies)
@@ -130,6 +140,7 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
+ stdcpp20
Console
@@ -141,9 +152,22 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ true
+
diff --git a/GlosSITarget/GlosSITarget.vcxproj.filters b/GlosSITarget/GlosSITarget.vcxproj.filters
index 46eb0ea..45e16d3 100644
--- a/GlosSITarget/GlosSITarget.vcxproj.filters
+++ b/GlosSITarget/GlosSITarget.vcxproj.filters
@@ -21,10 +21,21 @@
Source Files
+
+ Source Files
+
Header Files
+
+ Header Files
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GlosSITarget/SteamTarget.cpp b/GlosSITarget/SteamTarget.cpp
index 3ab4755..19de660 100644
--- a/GlosSITarget/SteamTarget.cpp
+++ b/GlosSITarget/SteamTarget.cpp
@@ -2,10 +2,15 @@
#include
-SteamTarget::SteamTarget(int argc, char* argv[]) {
+SteamTarget::SteamTarget(int argc, char* argv[]) : window_([this] { run_ = false; }) {
}
int SteamTarget::run() {
+ run_ = true;
+ window_.setFpsLimit(90);
+ while (run_) {
+ window_.update();
+ }
return 1;
-}
\ No newline at end of file
+}
diff --git a/GlosSITarget/SteamTarget.h b/GlosSITarget/SteamTarget.h
index 22574df..a3ec8eb 100644
--- a/GlosSITarget/SteamTarget.h
+++ b/GlosSITarget/SteamTarget.h
@@ -1,8 +1,15 @@
#pragma once
+
+#include "TargetWindow.h"
+
class SteamTarget
{
public:
explicit SteamTarget(int argc, char* argv[]);
int run();
+
+private:
+ bool run_ = false;
+ TargetWindow window_;
};
diff --git a/GlosSITarget/TargetWindow.cpp b/GlosSITarget/TargetWindow.cpp
new file mode 100644
index 0000000..268c321
--- /dev/null
+++ b/GlosSITarget/TargetWindow.cpp
@@ -0,0 +1,64 @@
+#include "TargetWindow.h"
+
+#include
+
+#include
+
+#ifdef _WIN32
+#include
+#include
+#endif
+
+
+TargetWindow::TargetWindow(std::function on_close) : on_close_(std::move(on_close))
+{
+ window_.create(sf::VideoMode::getDesktopMode(), "GlosSITarget", sf::Style::None);
+ window_.setActive(true);
+#ifdef _WIN32
+ HWND hwnd = window_.getSystemHandle();
+ MARGINS margins;
+ margins.cxLeftWidth = -1;
+ DwmExtendFrameIntoClientArea(hwnd, &margins);
+
+ // window clickthough.
+ SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST);
+
+ // always on top
+ SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+
+
+#endif
+}
+
+void TargetWindow::setFpsLimit(unsigned int fps_limit)
+{
+ window_.setFramerateLimit(fps_limit);
+}
+
+void TargetWindow::setClickThrough(bool click_through)
+{
+
+}
+
+
+void TargetWindow::update()
+{
+ sf::Event event{};
+ while (window_.pollEvent(event))
+ {
+ if (event.type == sf::Event::Closed)
+ {
+ window_.close();
+ on_close_();
+ }
+ }
+ window_.clear(sf::Color::Transparent);
+ //window_.clear(sf::Color(255,0,0,1));
+ window_.display();
+}
+
+void TargetWindow::close()
+{
+ window_.close();
+ on_close_();
+}
diff --git a/GlosSITarget/TargetWindow.h b/GlosSITarget/TargetWindow.h
new file mode 100644
index 0000000..1ebbdeb
--- /dev/null
+++ b/GlosSITarget/TargetWindow.h
@@ -0,0 +1,20 @@
+#pragma once
+#include
+
+#include
+
+class TargetWindow
+{
+public:
+ explicit TargetWindow(std::function on_close = [](){});
+
+ void setFpsLimit(unsigned int fps_limit);
+ void setClickThrough(bool click_through);
+ void update();
+ void close();
+
+private:
+ const std::function on_close_;
+ sf::RenderWindow window_;
+};
+
diff --git a/GlosSITarget/main.cpp b/GlosSITarget/main.cpp
index 1471764..337b0e5 100644
--- a/GlosSITarget/main.cpp
+++ b/GlosSITarget/main.cpp
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
#ifdef _WIN32
+#define NOMINMAX
#include
#endif
diff --git a/deps/SFML b/deps/SFML
new file mode 160000
index 0000000..3b1ff12
--- /dev/null
+++ b/deps/SFML
@@ -0,0 +1 @@
+Subproject commit 3b1ff125b06e010ec1acf1bbec113adc0c8c57cd