aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/native/ui_application.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/platform/native/ui_application.hpp')
-rw-r--r--include/cru/platform/native/ui_application.hpp35
1 files changed, 13 insertions, 22 deletions
diff --git a/include/cru/platform/native/ui_application.hpp b/include/cru/platform/native/ui_application.hpp
index 923fbaf7..6d2ab659 100644
--- a/include/cru/platform/native/ui_application.hpp
+++ b/include/cru/platform/native/ui_application.hpp
@@ -1,45 +1,36 @@
#pragma once
#include "../native_resource.hpp"
-#include "cursor.hpp"
-
#include <chrono>
#include <functional>
#include <vector>
namespace cru::platform::native {
-class NativeWindow;
+struct INativeWindow;
+struct ICursorManager;
// The entry point of a ui application.
// It will call IGraphFactory::CreateInstance during its creation
// and set graph factory to be auto deleted. If you want to keep
// the graph factory then you should manually set it to false after
// creating the ui application.
-class UiApplication : public NativeResource {
+struct IUiApplication : public virtual INativeResource {
public:
// Create a platform-specific instance and save it as the global instance.
// Do not create the instance twice. Implements should assert for that.
// After creating, get the instance by GetInstance.
- static UiApplication* CreateInstance();
+ static IUiApplication* CreateInstance();
// Get the global instance. If it is not created, then return nullptr.
- static UiApplication* GetInstance();
-
- protected:
- UiApplication() = default;
-
- public:
- UiApplication(const UiApplication& other) = delete;
- UiApplication& operator=(const UiApplication& other) = delete;
-
- UiApplication(UiApplication&& other) = delete;
- UiApplication& operator=(UiApplication&& other) = delete;
-
- ~UiApplication() override = default;
+ static IUiApplication* GetInstance();
public:
+ // Block current thread and run the message loop. Return the exit code when
+ // message loop gets a quit message (possibly posted by method RequestQuit).
virtual int Run() = 0;
- virtual void Quit(int quite_code) = 0;
+
+ // Post a quit message with given quit code.
+ virtual void RequestQuit(int quit_code) = 0;
virtual void AddOnQuitHandler(const std::function<void()>& handler) = 0;
@@ -50,9 +41,9 @@ class UiApplication : public NativeResource {
const std::function<void()>& action) = 0;
virtual void CancelTimer(unsigned long id) = 0;
- virtual std::vector<NativeWindow*> GetAllWindow() = 0;
- virtual NativeWindow* CreateWindow(NativeWindow* parent) = 0;
+ virtual std::vector<INativeWindow*> GetAllWindow() = 0;
+ virtual INativeWindow* CreateWindow(INativeWindow* parent) = 0;
- virtual CursorManager* GetCursorManager() = 0;
+ virtual ICursorManager* GetCursorManager() = 0;
};
} // namespace cru::platform::native