aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/sdl/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/gui/sdl/Window.cpp')
-rw-r--r--src/platform/gui/sdl/Window.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/platform/gui/sdl/Window.cpp b/src/platform/gui/sdl/Window.cpp
index 3ab8cf4d..77cec606 100644
--- a/src/platform/gui/sdl/Window.cpp
+++ b/src/platform/gui/sdl/Window.cpp
@@ -1,10 +1,12 @@
#include "cru/platform/gui/sdl/Window.h"
#include "cru/base/Base.h"
+#include "cru/platform/Base.h"
#include "cru/platform/GraphicsBase.h"
#include "cru/platform/graphics/NullPainter.h"
#include "cru/platform/graphics/Painter.h"
#include "cru/platform/gui/Window.h"
#include "cru/platform/gui/sdl/Base.h"
+#include "cru/platform/gui/sdl/Cursor.h"
#include "cru/platform/gui/sdl/Input.h"
#include "cru/platform/gui/sdl/UiApplication.h"
@@ -155,8 +157,10 @@ bool SdlWindow::ReleaseMouse() {
}
void SdlWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
- if (!sdl_window_) return;
- NotImplemented();
+ cursor_ = std::move(cursor);
+ if (sdl_window_) {
+ DoUpdateCursor();
+ }
}
void SdlWindow::SetToForeground() {
@@ -225,9 +229,9 @@ void SdlWindow::DoCreateWindow() {
CheckSdlReturn(
SDL_SetWindowPosition(sdl_window_, client_rect_.left, client_rect_.top));
- CheckSdlReturn(SDL_SetWindowParent(
- sdl_window_, parent_ == nullptr ? nullptr : parent_->sdl_window_));
- CheckSdlReturn(SDL_SyncWindow(sdl_window_));
+
+ DoUpdateParent();
+ DoUpdateCursor();
}
void SdlWindow::DoUpdateClientRect() {
@@ -259,6 +263,13 @@ void SdlWindow::DoUpdateTitle() {
CheckSdlReturn(SDL_SyncWindow(sdl_window_));
}
+void SdlWindow::DoUpdateCursor() {
+ assert(sdl_window_);
+ auto cursor = CheckPlatform<SdlCursor>(cursor_, GetPlatformId());
+ CheckSdlReturn(SDL_SetCursor(cursor->GetSdlCursor()));
+ CheckSdlReturn(SDL_SyncWindow(sdl_window_));
+}
+
namespace {
NativeMouseButtonEventArgs ConvertMouseButtonEvent(
const SDL_MouseButtonEvent& event) {