aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cru/base/Base.h7
-rw-r--r--include/cru/base/Event.h7
-rw-r--r--include/cru/platform/gui/Window.h21
-rw-r--r--include/cru/platform/gui/win/Window.h50
4 files changed, 36 insertions, 49 deletions
diff --git a/include/cru/base/Base.h b/include/cru/base/Base.h
index fda45f66..3cd04f8c 100644
--- a/include/cru/base/Base.h
+++ b/include/cru/base/Base.h
@@ -137,12 +137,17 @@ class CRU_BASE_API Exception : public std::exception {
std::shared_ptr<std::exception> inner_;
};
+class CRU_BASE_API NotImplementedException : public Exception {
+ public:
+ using Exception::Exception; // inherit constructors
+};
+
class CRU_BASE_API PlatformException : public Exception {
public:
using Exception::Exception; // inherit constructors
};
-class ErrnoException : public Exception {
+class CRU_BASE_API ErrnoException : public Exception {
public:
ErrnoException();
explicit ErrnoException(int error_code);
diff --git a/include/cru/base/Event.h b/include/cru/base/Event.h
index bdaf3ea6..71c0ac6b 100644
--- a/include/cru/base/Event.h
+++ b/include/cru/base/Event.h
@@ -141,6 +141,13 @@ class Event : public EventBase, public IEvent<TEventArgs> {
public: \
::cru::IEvent<arg_type>* name##Event() { return &name##Event_; }
+#define CRU_DEFINE_EVENT_OVERRIDE(name, arg_type) \
+ private: \
+ ::cru::Event<arg_type> name##Event_; \
+ \
+ public: \
+ ::cru::IEvent<arg_type>* name##Event() override { return &name##Event_; }
+
namespace details {
struct EventHandlerRevokerCaller {
void operator()(const EventHandlerRevoker& revoker) { revoker(); }
diff --git a/include/cru/platform/gui/Window.h b/include/cru/platform/gui/Window.h
index b8973c5a..e04db448 100644
--- a/include/cru/platform/gui/Window.h
+++ b/include/cru/platform/gui/Window.h
@@ -23,6 +23,10 @@ struct WindowStyleFlags {
enum class WindowVisibilityType { Show, Hide, Minimize };
+struct NativePaintEventArgs {
+ Rect repaint_area;
+};
+
enum class FocusChangeType { Gain, Lose };
enum class MouseEnterLeaveType { Enter, Leave };
@@ -100,6 +104,7 @@ struct CRU_PLATFORM_GUI_API INativeWindow : virtual IPlatformResource {
virtual IEvent<std::nullptr_t>* CreateEvent() = 0;
virtual IEvent<std::nullptr_t>* DestroyEvent() = 0;
virtual IEvent<std::nullptr_t>* PaintEvent() = 0;
+ virtual IEvent<const NativePaintEventArgs&>* Paint1Event();
virtual IEvent<WindowVisibilityType>* VisibilityChangeEvent() = 0;
virtual IEvent<const Size&>* ResizeEvent() = 0;
@@ -116,3 +121,19 @@ struct CRU_PLATFORM_GUI_API INativeWindow : virtual IPlatformResource {
virtual IInputMethodContext* GetInputMethodContext() = 0;
};
} // namespace cru::platform::gui
+
+#define CRU_DEFINE_CRU_PLATFORM_GUI_I_NATIVE_WINDOW_OVERRIDE_EVENTS() \
+ CRU_DEFINE_EVENT_OVERRIDE(Create, std::nullptr_t) \
+ CRU_DEFINE_EVENT_OVERRIDE(Destroy, std::nullptr_t) \
+ CRU_DEFINE_EVENT_OVERRIDE(Paint, std::nullptr_t) \
+ CRU_DEFINE_EVENT_OVERRIDE(Paint1, const NativePaintEventArgs&) \
+ CRU_DEFINE_EVENT_OVERRIDE(VisibilityChange, WindowVisibilityType) \
+ CRU_DEFINE_EVENT_OVERRIDE(Resize, const Size&) \
+ CRU_DEFINE_EVENT_OVERRIDE(Focus, FocusChangeType) \
+ CRU_DEFINE_EVENT_OVERRIDE(MouseEnterLeave, MouseEnterLeaveType) \
+ CRU_DEFINE_EVENT_OVERRIDE(MouseMove, const Point&) \
+ CRU_DEFINE_EVENT_OVERRIDE(MouseDown, const NativeMouseButtonEventArgs&) \
+ CRU_DEFINE_EVENT_OVERRIDE(MouseUp, const NativeMouseButtonEventArgs&) \
+ CRU_DEFINE_EVENT_OVERRIDE(MouseWheel, const NativeMouseWheelEventArgs&) \
+ CRU_DEFINE_EVENT_OVERRIDE(KeyDown, const NativeKeyEventArgs&) \
+ CRU_DEFINE_EVENT_OVERRIDE(KeyUp, const NativeKeyEventArgs&)
diff --git a/include/cru/platform/gui/win/Window.h b/include/cru/platform/gui/win/Window.h
index c7d48ea9..e690ad4e 100644
--- a/include/cru/platform/gui/win/Window.h
+++ b/include/cru/platform/gui/win/Window.h
@@ -61,38 +61,8 @@ class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource,
void SetToForeground() override;
- IEvent<std::nullptr_t>* CreateEvent() override { return &create_event_; }
- IEvent<std::nullptr_t>* DestroyEvent() override { return &destroy_event_; }
- IEvent<std::nullptr_t>* PaintEvent() override { return &paint_event_; }
- IEvent<WindowVisibilityType>* VisibilityChangeEvent() override {
- return &visibility_change_event_;
- }
- IEvent<const Size&>* ResizeEvent() override { return &resize_event_; }
- IEvent<FocusChangeType>* FocusEvent() override { return &focus_event_; }
- IEvent<MouseEnterLeaveType>* MouseEnterLeaveEvent() override {
- return &mouse_enter_leave_event_;
- }
- IEvent<const Point&>* MouseMoveEvent() override { return &mouse_move_event_; }
- IEvent<const NativeMouseButtonEventArgs&>* MouseDownEvent() override {
- return &mouse_down_event_;
- }
- IEvent<const NativeMouseButtonEventArgs&>* MouseUpEvent() override {
- return &mouse_up_event_;
- }
- IEvent<const NativeMouseWheelEventArgs&>* MouseWheelEvent() override {
- return &mouse_wheel_event_;
- }
-
- IEvent<const NativeKeyEventArgs&>* KeyDownEvent() override {
- return &key_down_event_;
- }
- IEvent<const NativeKeyEventArgs&>* KeyUpEvent() override {
- return &key_up_event_;
- }
-
- IEvent<WindowNativeMessageEventArgs&>* NativeMessageEvent() {
- return &native_message_event_;
- }
+ CRU_DEFINE_CRU_PLATFORM_GUI_I_NATIVE_WINDOW_OVERRIDE_EVENTS()
+ CRU_DEFINE_EVENT(NativeMessage, WindowNativeMessageEventArgs&)
IInputMethodContext* GetInputMethodContext() override;
@@ -193,21 +163,5 @@ class CRU_WIN_GUI_API WinNativeWindow : public WinNativeResource,
std::shared_ptr<WinCursor> cursor_;
std::unique_ptr<WinInputMethodContext> input_method_context_;
-
- Event<std::nullptr_t> create_event_;
- Event<std::nullptr_t> destroy_event_;
- Event<std::nullptr_t> paint_event_;
- Event<const Size&> resize_event_;
- Event<WindowVisibilityType> visibility_change_event_;
- Event<FocusChangeType> focus_event_;
- Event<MouseEnterLeaveType> mouse_enter_leave_event_;
- Event<const Point&> mouse_move_event_;
- Event<const NativeMouseButtonEventArgs&> mouse_down_event_;
- Event<const NativeMouseButtonEventArgs&> mouse_up_event_;
- Event<const NativeMouseWheelEventArgs&> mouse_wheel_event_;
- Event<const NativeKeyEventArgs&> key_down_event_;
- Event<const NativeKeyEventArgs&> key_up_event_;
-
- Event<WindowNativeMessageEventArgs&> native_message_event_;
};
} // namespace cru::platform::gui::win