aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/gui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-08-12 21:44:32 +0800
committercrupest <crupest@outlook.com>2021-08-12 21:44:32 +0800
commit2e379441f69c4fd3049d186f76b25457e6250282 (patch)
tree893771e5103ca9f3a34bb622251aaacb024cf1c2 /include/cru/platform/gui
parentd718b0f576aeae1fa853124caefc8b0078f1deed (diff)
downloadcru-2e379441f69c4fd3049d186f76b25457e6250282.tar.gz
cru-2e379441f69c4fd3049d186f76b25457e6250282.tar.bz2
cru-2e379441f69c4fd3049d186f76b25457e6250282.zip
...
Diffstat (limited to 'include/cru/platform/gui')
-rw-r--r--include/cru/platform/gui/Base.hpp33
-rw-r--r--include/cru/platform/gui/Cursor.hpp4
-rw-r--r--include/cru/platform/gui/InputMethod.hpp2
-rw-r--r--include/cru/platform/gui/Keyboard.hpp7
-rw-r--r--include/cru/platform/gui/TimerHelper.hpp69
-rw-r--r--include/cru/platform/gui/UiApplication.hpp68
-rw-r--r--include/cru/platform/gui/Window.hpp26
7 files changed, 112 insertions, 97 deletions
diff --git a/include/cru/platform/gui/Base.hpp b/include/cru/platform/gui/Base.hpp
index fd9d265c..4c2a8034 100644
--- a/include/cru/platform/gui/Base.hpp
+++ b/include/cru/platform/gui/Base.hpp
@@ -1,11 +1,20 @@
#pragma once
-#include "Keyboard.hpp"
#include "cru/common/Base.hpp"
#include "cru/common/Bitmask.hpp"
#include "cru/platform/graphics/Base.hpp"
#include "../Resource.hpp"
+#ifdef CRU_PLATFORM_WINDOWS
+#ifdef CRU_PLATFORM_GUI_EXPORT_API
+#define CRU_PLATFORM_GUI_API __declspec(dllexport)
+#else
+#define CRU_PLATFORM_GUI_API __declspec(dllimport)
+#endif
+#else
+#define CRU_PLATFORM_GUI_API
+#endif
+
namespace cru::platform::gui {
struct ICursor;
struct ICursorManager;
@@ -24,26 +33,4 @@ constexpr MouseButton left{0b1};
constexpr MouseButton middle{0b10};
constexpr MouseButton right{0b100};
} // namespace mouse_buttons
-
-struct NativeMouseButtonEventArgs {
- MouseButton button;
- Point point;
- KeyModifier modifier;
-};
-
-struct NativeMouseWheelEventArgs {
- // Positive means down. Negative means up.
- float delta;
- Point point;
- KeyModifier modifier;
-};
-
-struct NativeKeyEventArgs {
- KeyCode key;
- KeyModifier modifier;
-};
-
-enum class FocusChangeType { Gain, Lost };
-
-enum class MouseEnterLeaveType { Enter, Leave };
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Cursor.hpp b/include/cru/platform/gui/Cursor.hpp
index 316496a0..abc8b064 100644
--- a/include/cru/platform/gui/Cursor.hpp
+++ b/include/cru/platform/gui/Cursor.hpp
@@ -6,9 +6,9 @@
namespace cru::platform::gui {
enum class SystemCursorType { Arrow, Hand, IBeam };
-struct ICursor : virtual INativeResource {};
+struct ICursor : virtual IPlatformResource {};
-struct ICursorManager : virtual INativeResource {
+struct ICursorManager : virtual IPlatformResource {
virtual std::shared_ptr<ICursor> GetSystemCursor(SystemCursorType type) = 0;
// TODO: Add method to create cursor.
diff --git a/include/cru/platform/gui/InputMethod.hpp b/include/cru/platform/gui/InputMethod.hpp
index 9d090eab..9b07959c 100644
--- a/include/cru/platform/gui/InputMethod.hpp
+++ b/include/cru/platform/gui/InputMethod.hpp
@@ -22,7 +22,7 @@ struct CompositionText {
TextRange selection;
};
-struct IInputMethodContext : virtual INativeResource {
+struct IInputMethodContext : virtual IPlatformResource {
// Return true if you should draw composition text manually. Return false if
// system will take care of that for you.
virtual bool ShouldManuallyDrawCompositionText() = 0;
diff --git a/include/cru/platform/gui/Keyboard.hpp b/include/cru/platform/gui/Keyboard.hpp
index 6c29239b..b93b44fa 100644
--- a/include/cru/platform/gui/Keyboard.hpp
+++ b/include/cru/platform/gui/Keyboard.hpp
@@ -1,5 +1,6 @@
#pragma once
#include "cru/common/Bitmask.hpp"
+#include "cru/platform/gui/Base.hpp"
#include <string>
#include <string_view>
@@ -122,7 +123,7 @@ struct KeyModifiers {
static constexpr KeyModifier alt{0b100};
};
-std::u16string_view ToString(KeyCode key_code);
-std::u16string ToString(KeyModifier key_modifier,
- std::u16string_view separator = u"+");
+CRU_PLATFORM_GUI_API std::u16string_view ToString(KeyCode key_code);
+CRU_PLATFORM_GUI_API std::u16string ToString(
+ KeyModifier key_modifier, std::u16string_view separator = u"+");
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/TimerHelper.hpp b/include/cru/platform/gui/TimerHelper.hpp
new file mode 100644
index 00000000..a61d2f04
--- /dev/null
+++ b/include/cru/platform/gui/TimerHelper.hpp
@@ -0,0 +1,69 @@
+#pragma once
+#include "UiApplication.hpp"
+
+namespace cru::platform::gui {
+
+class TimerAutoCanceler {
+ public:
+ TimerAutoCanceler() : id_(0) {}
+ explicit TimerAutoCanceler(long long id) : id_(id) {}
+
+ CRU_DELETE_COPY(TimerAutoCanceler)
+
+ TimerAutoCanceler(TimerAutoCanceler&& other) : id_(other.id_) {
+ other.id_ = 0;
+ }
+
+ TimerAutoCanceler& operator=(TimerAutoCanceler&& other) {
+ if (&other == this) {
+ return *this;
+ }
+ Reset(other.id_);
+ other.id_ = 0;
+ return *this;
+ }
+
+ TimerAutoCanceler& operator=(long long other) {
+ return this->operator=(TimerAutoCanceler(other));
+ }
+
+ ~TimerAutoCanceler() { Reset(); }
+
+ long long Release() {
+ auto temp = id_;
+ id_ = 0;
+ return temp;
+ }
+
+ void Reset(long long id = 0) {
+ if (id_ > 0) IUiApplication::GetInstance()->CancelTimer(id_);
+ id_ = id;
+ }
+
+ explicit operator bool() const { return id_; }
+
+ private:
+ long long id_;
+};
+
+class TimerListAutoCanceler {
+ public:
+ TimerListAutoCanceler() = default;
+ CRU_DELETE_COPY(TimerListAutoCanceler)
+ CRU_DEFAULT_MOVE(TimerListAutoCanceler)
+ ~TimerListAutoCanceler() = default;
+
+ TimerListAutoCanceler& operator+=(long long id) {
+ list_.push_back(TimerAutoCanceler(id));
+ return *this;
+ }
+
+ void Clear() { list_.clear(); }
+
+ bool IsEmpty() const { return list_.empty(); }
+
+ private:
+ std::vector<TimerAutoCanceler> list_;
+};
+
+} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/UiApplication.hpp b/include/cru/platform/gui/UiApplication.hpp
index 5a5b0b13..407e4fa1 100644
--- a/include/cru/platform/gui/UiApplication.hpp
+++ b/include/cru/platform/gui/UiApplication.hpp
@@ -20,7 +20,7 @@ struct CreateWindowFlags {
};
// The entry point of a ui application.
-struct IUiApplication : public virtual INativeResource {
+struct CRU_PLATFORM_GUI_API IUiApplication : public virtual IPlatformResource {
public:
static IUiApplication* GetInstance() { return instance; }
@@ -66,70 +66,4 @@ struct IUiApplication : public virtual INativeResource {
virtual ICursorManager* GetCursorManager() = 0;
};
-
-class TimerAutoCanceler {
- public:
- TimerAutoCanceler() : id_(0) {}
- explicit TimerAutoCanceler(long long id) : id_(id) {}
-
- CRU_DELETE_COPY(TimerAutoCanceler)
-
- TimerAutoCanceler(TimerAutoCanceler&& other) : id_(other.id_) {
- other.id_ = 0;
- }
-
- TimerAutoCanceler& operator=(TimerAutoCanceler&& other) {
- if (&other == this) {
- return *this;
- }
- Reset(other.id_);
- other.id_ = 0;
- return *this;
- }
-
- TimerAutoCanceler& operator=(long long other) {
- return this->operator=(TimerAutoCanceler(other));
- }
-
- ~TimerAutoCanceler() { Reset(); }
-
- long long Release() {
- auto temp = id_;
- id_ = 0;
- return temp;
- }
-
- void Reset(long long id = 0) {
- if (id_ > 0) IUiApplication::GetInstance()->CancelTimer(id_);
- id_ = id;
- }
-
- explicit operator bool() const { return id_; }
-
- private:
- long long id_;
-};
-
-class TimerListAutoCanceler {
- public:
- TimerListAutoCanceler() = default;
- CRU_DELETE_COPY(TimerListAutoCanceler)
- CRU_DEFAULT_MOVE(TimerListAutoCanceler)
- ~TimerListAutoCanceler() = default;
-
- TimerListAutoCanceler& operator+=(long long id) {
- list_.push_back(TimerAutoCanceler(id));
- return *this;
- }
-
- void Clear() { list_.clear(); }
-
- bool IsEmpty() const { return list_.empty(); }
-
- private:
- std::vector<TimerAutoCanceler> list_;
-};
-
-// Bootstrap from this.
-std::unique_ptr<IUiApplication> CreateUiApplication();
} // namespace cru::platform::gui
diff --git a/include/cru/platform/gui/Window.hpp b/include/cru/platform/gui/Window.hpp
index b2129322..3502868a 100644
--- a/include/cru/platform/gui/Window.hpp
+++ b/include/cru/platform/gui/Window.hpp
@@ -1,14 +1,38 @@
#pragma once
#include "Base.hpp"
+#include "Keyboard.hpp"
+
#include "cru/common/Event.hpp"
#include <string_view>
namespace cru::platform::gui {
+enum class FocusChangeType { Gain, Lost };
+
+enum class MouseEnterLeaveType { Enter, Leave };
+
+struct NativeMouseButtonEventArgs {
+ MouseButton button;
+ Point point;
+ KeyModifier modifier;
+};
+
+struct NativeMouseWheelEventArgs {
+ // Positive means down. Negative means up.
+ float delta;
+ Point point;
+ KeyModifier modifier;
+};
+
+struct NativeKeyEventArgs {
+ KeyCode key;
+ KeyModifier modifier;
+};
+
// Represents a native window, which exposes some low-level events and
// operations.
-struct INativeWindow : virtual INativeResource {
+struct INativeWindow : virtual IPlatformResource {
virtual void Close() = 0;
virtual INativeWindow* GetParent() = 0;