aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/platform/gui/Base.hpp5
-rw-r--r--include/cru/platform/gui/Cursor.hpp2
-rw-r--r--include/cru/win/gui/Cursor.hpp1
-rw-r--r--src/ui/controls/TextControlService.hpp5
-rw-r--r--src/win/gui/Cursor.cpp5
5 files changed, 12 insertions, 6 deletions
diff --git a/include/cru/platform/gui/Base.hpp b/include/cru/platform/gui/Base.hpp
index fb196f02..7a9d1889 100644
--- a/include/cru/platform/gui/Base.hpp
+++ b/include/cru/platform/gui/Base.hpp
@@ -25,11 +25,6 @@ constexpr MouseButton middle{0b10};
constexpr MouseButton right{0b100};
} // namespace mouse_buttons
-enum class SystemCursorType {
- Arrow,
- Hand,
-};
-
struct NativeMouseButtonEventArgs {
MouseButton button;
Point point;
diff --git a/include/cru/platform/gui/Cursor.hpp b/include/cru/platform/gui/Cursor.hpp
index 3f1679e4..316496a0 100644
--- a/include/cru/platform/gui/Cursor.hpp
+++ b/include/cru/platform/gui/Cursor.hpp
@@ -4,6 +4,8 @@
#include <memory>
namespace cru::platform::gui {
+enum class SystemCursorType { Arrow, Hand, IBeam };
+
struct ICursor : virtual INativeResource {};
struct ICursorManager : virtual INativeResource {
diff --git a/include/cru/win/gui/Cursor.hpp b/include/cru/win/gui/Cursor.hpp
index cd13ded7..e7c76879 100644
--- a/include/cru/win/gui/Cursor.hpp
+++ b/include/cru/win/gui/Cursor.hpp
@@ -45,5 +45,6 @@ class WinCursorManager : public WinNativeResource,
private:
std::shared_ptr<WinCursor> sys_arrow_;
std::shared_ptr<WinCursor> sys_hand_;
+ std::shared_ptr<WinCursor> sys_ibeam_;
};
} // namespace cru::platform::gui::win
diff --git a/src/ui/controls/TextControlService.hpp b/src/ui/controls/TextControlService.hpp
index 8ad95dec..92a66f5e 100644
--- a/src/ui/controls/TextControlService.hpp
+++ b/src/ui/controls/TextControlService.hpp
@@ -4,6 +4,7 @@
#include "cru/common/StringUtil.hpp"
#include "cru/platform/graphics/Font.hpp"
#include "cru/platform/graphics/Painter.hpp"
+#include "cru/platform/gui/Cursor.hpp"
#include "cru/platform/gui/InputMethod.hpp"
#include "cru/platform/gui/UiApplication.hpp"
#include "cru/platform/gui/Window.hpp"
@@ -50,10 +51,14 @@ class TextControlService : public Object {
if (this->caret_visible_) {
this->SetupCaret();
}
+ this->control_->SetCursor(
+ GetUiApplication()->GetCursorManager()->GetSystemCursor(
+ platform::gui::SystemCursorType::IBeam));
} else {
this->AbortSelection();
this->TearDownHandlers();
this->TearDownCaret();
+ this->control_->SetCursor(nullptr);
}
}
diff --git a/src/win/gui/Cursor.cpp b/src/win/gui/Cursor.cpp
index 5f3086fa..80e8a749 100644
--- a/src/win/gui/Cursor.cpp
+++ b/src/win/gui/Cursor.cpp
@@ -35,7 +35,8 @@ WinCursor* LoadWinCursor(const wchar_t* name) {
WinCursorManager::WinCursorManager()
: sys_arrow_(LoadWinCursor(IDC_ARROW)),
- sys_hand_(LoadWinCursor(IDC_HAND)) {}
+ sys_hand_(LoadWinCursor(IDC_HAND)),
+ sys_ibeam_(LoadWinCursor(IDC_IBEAM)) {}
std::shared_ptr<WinCursor> WinCursorManager::GetSystemWinCursor(
SystemCursorType type) {
@@ -44,6 +45,8 @@ std::shared_ptr<WinCursor> WinCursorManager::GetSystemWinCursor(
return sys_arrow_;
case SystemCursorType::Hand:
return sys_hand_;
+ case SystemCursorType::IBeam:
+ return sys_ibeam_;
default:
throw std::runtime_error("Unknown system cursor value.");
}