diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-11-30 15:40:08 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-11-30 15:40:08 +0800 |
| commit | a9e3b3ee511f563d1abb67cbe042c3aeb0eca5db (patch) | |
| tree | 0e222bf6853badb18a20e1f747ceb27c850881f6 | |
| parent | 7d20efa165289db22c7ff620f1c59f422a025820 (diff) | |
| download | cru-a9e3b3ee511f563d1abb67cbe042c3aeb0eca5db.tar.gz cru-a9e3b3ee511f563d1abb67cbe042c3aeb0eca5db.tar.bz2 cru-a9e3b3ee511f563d1abb67cbe042c3aeb0eca5db.zip | |
Impl sdl clipboard.
| -rw-r--r-- | include/cru/platform/gui/sdl/Base.h | 3 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/Clipboard.h | 12 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/Cursor.h | 1 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/InputMethod.h | 1 | ||||
| -rw-r--r-- | include/cru/platform/gui/sdl/UiApplication.h | 9 | ||||
| -rw-r--r-- | src/platform/gui/sdl/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/platform/gui/sdl/Clipboard.cpp | 18 | ||||
| -rw-r--r-- | src/platform/gui/sdl/UiApplication.cpp | 12 |
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; } |
