aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/platform/gui/sdl/Base.h3
-rw-r--r--include/cru/platform/gui/sdl/Clipboard.h12
-rw-r--r--include/cru/platform/gui/sdl/Cursor.h1
-rw-r--r--include/cru/platform/gui/sdl/InputMethod.h1
-rw-r--r--include/cru/platform/gui/sdl/UiApplication.h9
-rw-r--r--src/platform/gui/sdl/CMakeLists.txt1
-rw-r--r--src/platform/gui/sdl/Clipboard.cpp18
-rw-r--r--src/platform/gui/sdl/UiApplication.cpp12
8 files changed, 49 insertions, 8 deletions
diff --git a/include/cru/platform/gui/sdl/Base.h b/include/cru/platform/gui/sdl/Base.h
index bd53fb51..74e4d8ce 100644
--- a/include/cru/platform/gui/sdl/Base.h
+++ b/include/cru/platform/gui/sdl/Base.h
@@ -1,7 +1,6 @@
-
#pragma once
-#include <cru/platform/Base.h>
+#include <cru/platform/gui/Base.h>
namespace cru::platform::gui::sdl {
class SdlResource : public Object, public virtual IPlatformResource {
diff --git a/include/cru/platform/gui/sdl/Clipboard.h b/include/cru/platform/gui/sdl/Clipboard.h
new file mode 100644
index 00000000..e5235a2d
--- /dev/null
+++ b/include/cru/platform/gui/sdl/Clipboard.h
@@ -0,0 +1,12 @@
+#pragma once
+#include "Base.h"
+
+#include <cru/platform/gui/Clipboard.h>
+
+namespace cru::platform::gui::sdl {
+class SdlClipboard : public SdlResource, public virtual IClipboard {
+ public:
+ std::string GetText() override;
+ void SetText(std::string text) override;
+};
+} // namespace cru::platform::gui::sdl
diff --git a/include/cru/platform/gui/sdl/Cursor.h b/include/cru/platform/gui/sdl/Cursor.h
index 2af99850..b2986b4f 100644
--- a/include/cru/platform/gui/sdl/Cursor.h
+++ b/include/cru/platform/gui/sdl/Cursor.h
@@ -1,5 +1,4 @@
#pragma once
-
#include "Base.h"
#include <cru/platform/gui/Cursor.h>
diff --git a/include/cru/platform/gui/sdl/InputMethod.h b/include/cru/platform/gui/sdl/InputMethod.h
index 77a78999..2a521112 100644
--- a/include/cru/platform/gui/sdl/InputMethod.h
+++ b/include/cru/platform/gui/sdl/InputMethod.h
@@ -1,5 +1,4 @@
#pragma once
-
#include "Base.h"
#include <cru/platform/gui/InputMethod.h>
diff --git a/include/cru/platform/gui/sdl/UiApplication.h b/include/cru/platform/gui/sdl/UiApplication.h
index 776a4d80..5cb8276e 100644
--- a/include/cru/platform/gui/sdl/UiApplication.h
+++ b/include/cru/platform/gui/sdl/UiApplication.h
@@ -1,19 +1,21 @@
-
#pragma once
-#include "../UiApplication.h"
#include "Base.h"
#include <cru/base/Timer.h>
#include <cru/platform/graphics/Factory.h>
+#include <cru/platform/gui/UiApplication.h>
#include <SDL3/SDL_events.h>
#include <atomic>
#include <chrono>
#include <cstdint>
#include <functional>
+#include <memory>
namespace cru::platform::gui::sdl {
class SdlWindow;
+class SdlCursorManager;
+class SdlClipboard;
class SdlUiApplication : public SdlResource, public virtual IUiApplication {
friend SdlWindow;
@@ -77,5 +79,8 @@ class SdlUiApplication : public SdlResource, public virtual IUiApplication {
bool is_quit_on_all_window_closed_;
std::vector<SdlWindow*> windows_;
+
+ std::unique_ptr<SdlCursorManager> cursor_manager_;
+ std::unique_ptr<SdlClipboard> clipboard_;
};
} // namespace cru::platform::gui::sdl
diff --git a/src/platform/gui/sdl/CMakeLists.txt b/src/platform/gui/sdl/CMakeLists.txt
index c01e8bbf..eadc3bac 100644
--- a/src/platform/gui/sdl/CMakeLists.txt
+++ b/src/platform/gui/sdl/CMakeLists.txt
@@ -1,5 +1,6 @@
add_library(CruPlatformGuiSdl
Base.cpp
+ Clipboard.cpp
Cursor.cpp
Input.cpp
InputMethod.cpp
diff --git a/src/platform/gui/sdl/Clipboard.cpp b/src/platform/gui/sdl/Clipboard.cpp
new file mode 100644
index 00000000..019c93d0
--- /dev/null
+++ b/src/platform/gui/sdl/Clipboard.cpp
@@ -0,0 +1,18 @@
+#include "cru/platform/gui/sdl/Clipboard.h"
+#include "cru/platform/gui/sdl/Base.h"
+
+#include <SDL3/SDL_clipboard.h>
+
+namespace cru::platform::gui::sdl {
+std::string SdlClipboard::GetText() {
+ auto text = SDL_GetClipboardText();
+ std::string result(text);
+ SDL_free(text);
+ return result;
+}
+
+void SdlClipboard::SetText(std::string text) {
+ CheckSdlReturn(SDL_SetClipboardText(text.c_str()));
+}
+
+} // namespace cru::platform::gui::sdl
diff --git a/src/platform/gui/sdl/UiApplication.cpp b/src/platform/gui/sdl/UiApplication.cpp
index 6d52b5f7..42c50f4d 100644
--- a/src/platform/gui/sdl/UiApplication.cpp
+++ b/src/platform/gui/sdl/UiApplication.cpp
@@ -3,6 +3,8 @@
#include "cru/base/Base.h"
#include "cru/platform/graphics/Factory.h"
#include "cru/platform/gui/sdl/Base.h"
+#include "cru/platform/gui/sdl/Clipboard.h"
+#include "cru/platform/gui/sdl/Cursor.h"
#include "cru/platform/gui/sdl/Window.h"
#include <SDL3/SDL_events.h>
@@ -11,6 +13,7 @@
#include <algorithm>
#include <chrono>
#include <functional>
+#include <memory>
#include <optional>
namespace cru::platform::gui::sdl {
@@ -21,6 +24,9 @@ SdlUiApplication::SdlUiApplication(graphics::IGraphicsFactory* graphics_factory,
quit_code_(0) {
CheckSdlReturn(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS));
empty_event_type_ = SDL_RegisterEvents(1);
+
+ cursor_manager_ = std::make_unique<SdlCursorManager>();
+ clipboard_ = std::make_unique<SdlClipboard>();
}
SdlUiApplication::~SdlUiApplication() {
@@ -117,9 +123,11 @@ SdlUiApplication::GetGraphicsFactory() {
return graphics_factory_;
}
-ICursorManager* SdlUiApplication::GetCursorManager() { NotImplemented(); }
+ICursorManager* SdlUiApplication::GetCursorManager() {
+ return cursor_manager_.get();
+}
-IClipboard* SdlUiApplication::GetClipboard() { NotImplemented(); }
+IClipboard* SdlUiApplication::GetClipboard() { return clipboard_.get(); }
IMenu* SdlUiApplication::GetApplicationMenu() { return nullptr; }