aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-29 21:07:48 +0800
committercrupest <crupest@outlook.com>2022-01-29 21:07:48 +0800
commit30060773b06d93ae08a8c6fa5836c81e595594ed (patch)
treef333e807eef86442eff0b489bb2460bfbf99e794
parent90261a333f251cc241f186f0ee6ed8e12787cc02 (diff)
downloadcru-30060773b06d93ae08a8c6fa5836c81e595594ed.tar.gz
cru-30060773b06d93ae08a8c6fa5836c81e595594ed.tar.bz2
cru-30060773b06d93ae08a8c6fa5836c81e595594ed.zip
...
-rw-r--r--include/cru/osx/gui/Window.hpp2
-rw-r--r--include/cru/platform/gui/Window.hpp2
-rw-r--r--src/osx/gui/Window.mm6
-rw-r--r--src/theme_builder/CMakeLists.txt5
-rw-r--r--src/theme_builder/components/MainWindow.cpp19
-rw-r--r--src/theme_builder/components/MainWindow.hpp22
-rw-r--r--src/theme_builder/main.cpp8
7 files changed, 62 insertions, 2 deletions
diff --git a/include/cru/osx/gui/Window.hpp b/include/cru/osx/gui/Window.hpp
index 4606aa84..904a0188 100644
--- a/include/cru/osx/gui/Window.hpp
+++ b/include/cru/osx/gui/Window.hpp
@@ -60,6 +60,8 @@ class OsxWindow : public OsxGuiResource, public INativeWindow {
void SetCursor(std::shared_ptr<ICursor> cursor) override;
+ void SetToForeground() override;
+
void RequestRepaint() override;
std::unique_ptr<graphics::IPainter> BeginPaint() override;
diff --git a/include/cru/platform/gui/Window.hpp b/include/cru/platform/gui/Window.hpp
index 0de5127e..c163bc14 100644
--- a/include/cru/platform/gui/Window.hpp
+++ b/include/cru/platform/gui/Window.hpp
@@ -83,6 +83,8 @@ struct INativeWindow : virtual IPlatformResource {
virtual void SetCursor(std::shared_ptr<ICursor> cursor) = 0;
+ virtual void SetToForeground() = 0;
+
virtual void RequestRepaint() = 0;
// Remember to call EndDraw on return value and destroy it.
diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm
index 3bea5543..6ed53701 100644
--- a/src/osx/gui/Window.mm
+++ b/src/osx/gui/Window.mm
@@ -375,6 +375,12 @@ void OsxWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
}
}
+void OsxWindow::SetToForeground() {
+ if (!p_->window_) return;
+ [p_->window_ makeMainWindow];
+ [p_->window_ orderFrontRegardless];
+}
+
IEvent<std::nullptr_t>* OsxWindow::CreateEvent() { return &p_->create_event_; }
IEvent<std::nullptr_t>* OsxWindow::DestroyEvent() { return &p_->destroy_event_; }
IEvent<std::nullptr_t>* OsxWindow::PaintEvent() { return &p_->paint_event_; }
diff --git a/src/theme_builder/CMakeLists.txt b/src/theme_builder/CMakeLists.txt
index 3190f6fa..e6ef1873 100644
--- a/src/theme_builder/CMakeLists.txt
+++ b/src/theme_builder/CMakeLists.txt
@@ -1,4 +1,7 @@
-add_executable(cru_theme_builder main.cpp)
+add_executable(cru_theme_builder
+ main.cpp
+ components/MainWindow.cpp
+)
if(APPLE)
set_target_properties(cru_theme_builder PROPERTIES
diff --git a/src/theme_builder/components/MainWindow.cpp b/src/theme_builder/components/MainWindow.cpp
new file mode 100644
index 00000000..3d521d44
--- /dev/null
+++ b/src/theme_builder/components/MainWindow.cpp
@@ -0,0 +1,19 @@
+#include "MainWindow.hpp"
+
+namespace cru::theme_builder {
+using namespace cru::ui;
+using namespace cru::ui::controls;
+using namespace cru::platform::gui;
+
+MainWindow::MainWindow() {
+ window_ = Window::Create();
+ window_->GetNativeWindow()->SetTitle(u"CruUI Theme Builder");
+}
+
+MainWindow::~MainWindow() { delete window_; }
+
+void MainWindow::Show() {
+ window_->GetNativeWindow()->SetVisibility(WindowVisibilityType::Show);
+ window_->GetNativeWindow()->SetToForeground();
+}
+} // namespace cru::theme_builder
diff --git a/src/theme_builder/components/MainWindow.hpp b/src/theme_builder/components/MainWindow.hpp
new file mode 100644
index 00000000..fd7f7996
--- /dev/null
+++ b/src/theme_builder/components/MainWindow.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include "cru/ui/components/Component.hpp"
+#include "cru/ui/controls/Window.hpp"
+
+namespace cru::theme_builder {
+class MainWindow : public ui::components::Component {
+ public:
+ MainWindow();
+
+ CRU_DELETE_COPY(MainWindow)
+ CRU_DELETE_MOVE(MainWindow)
+
+ ~MainWindow() override;
+
+ ui::controls::Control* GetRootControl() override { return window_; }
+
+ void Show();
+
+ private:
+ ui::controls::Window* window_;
+};
+} // namespace cru::theme_builder
diff --git a/src/theme_builder/main.cpp b/src/theme_builder/main.cpp
index 4ba2a28a..8c79f2c0 100644
--- a/src/theme_builder/main.cpp
+++ b/src/theme_builder/main.cpp
@@ -1,9 +1,15 @@
+#include "components/MainWindow.hpp"
#include "cru/platform/bootstrap/Bootstrap.hpp"
-#include "cru/platform/gui/UiApplication.hpp"
int main() {
+ using namespace cru::theme_builder;
+
std::unique_ptr<cru::platform::gui::IUiApplication> application(
cru::platform::bootstrap::CreateUiApplication());
+ auto main_window = std::make_unique<MainWindow>();
+
+ main_window->Show();
+
return application->Run();
}