aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ThemeBuilder/components/StyleRuleSetEditor.cpp19
-rw-r--r--src/ThemeBuilder/components/StyleRuleSetEditor.h6
-rw-r--r--src/ThemeBuilder/components/conditions/CompoundConditionEditor.cpp6
-rw-r--r--src/ThemeBuilder/components/conditions/CompoundConditionEditor.h2
-rw-r--r--src/ThemeBuilder/components/stylers/CompoundStylerEditor.cpp6
-rw-r--r--src/ThemeBuilder/components/stylers/CompoundStylerEditor.h4
-rw-r--r--src/platform/gui/UiApplication.cpp18
-rw-r--r--src/platform/gui/win/UiApplication.cpp6
-rw-r--r--src/ui/CMakeLists.txt1
-rw-r--r--src/ui/DeleteLater.cpp23
10 files changed, 44 insertions, 47 deletions
diff --git a/src/ThemeBuilder/components/StyleRuleSetEditor.cpp b/src/ThemeBuilder/components/StyleRuleSetEditor.cpp
index fd159a44..9159e966 100644
--- a/src/ThemeBuilder/components/StyleRuleSetEditor.cpp
+++ b/src/ThemeBuilder/components/StyleRuleSetEditor.cpp
@@ -1,5 +1,5 @@
#include "StyleRuleSetEditor.h"
-#include "cru/ui/DeleteLater.h"
+#include "cru/platform/gui/DeleteLater.h"
#include "cru/ui/ThemeManager.h"
#include "cru/ui/controls/FlexLayout.h"
#include "cru/ui/model/IListChangeNotify.h"
@@ -49,11 +49,11 @@ void StyleRuleSetEditor::BindStyleRuleSet(
}
Index StyleRuleSetEditor::IndexOfRuleEditor(StyleRuleEditor* editor) {
- auto iter =
- std::find_if(style_rule_editors_.cbegin(), style_rule_editors_.cend(),
- [editor](const ui::DeleteLaterPtr<StyleRuleEditor>& p) {
- return p.get() == editor;
- });
+ auto iter = std::find_if(
+ style_rule_editors_.cbegin(), style_rule_editors_.cend(),
+ [editor](const platform::gui::DeleteLaterPtr<StyleRuleEditor>& p) {
+ return p.get() == editor;
+ });
return iter - style_rule_editors_.cbegin();
}
@@ -66,7 +66,8 @@ void StyleRuleSetEditor::UpdateView(
for (auto i = change->position; i < change->position + change->count;
++i) {
const auto& rule = style_rule_set->GetStyleRule(i);
- auto style_rule_editor = ui::MakeDeleteLater<StyleRuleEditor>();
+ auto style_rule_editor =
+ platform::gui::MakeDeleteLater<StyleRuleEditor>();
style_rule_editor->SetValue(rule, false);
style_rule_editor->RemoveEvent()->AddSpyOnlyHandler(
[this, editor = style_rule_editor.get()] {
@@ -80,8 +81,8 @@ void StyleRuleSetEditor::UpdateView(
});
style_rule_editors_.insert(style_rule_editors_.cbegin() + i,
std::move(style_rule_editor));
- rules_layout_.InsertChildAt(style_rule_editors_.back()->GetRootControl(),
- i);
+ rules_layout_.InsertChildAt(
+ style_rule_editors_.back()->GetRootControl(), i);
}
break;
}
diff --git a/src/ThemeBuilder/components/StyleRuleSetEditor.h b/src/ThemeBuilder/components/StyleRuleSetEditor.h
index 03148889..36ac8626 100644
--- a/src/ThemeBuilder/components/StyleRuleSetEditor.h
+++ b/src/ThemeBuilder/components/StyleRuleSetEditor.h
@@ -1,8 +1,8 @@
#pragma once
#include "StyleRuleEditor.h"
-#include "cru/ui/DeleteLater.h"
+#include "cru/platform/gui/DeleteLater.h"
#include "cru/ui/components/Component.h"
-#include "cru/ui/controls/Button.h"
+#include "cru/ui/controls/IconButton.h"
#include "cru/ui/controls/Control.h"
#include "cru/ui/controls/FlexLayout.h"
#include "cru/ui/controls/ScrollView.h"
@@ -36,7 +36,7 @@ class StyleRuleSetEditor : public ui::components::Component {
ui::controls::ScrollView scroll_view_;
ui::controls::FlexLayout container_;
ui::controls::FlexLayout rules_layout_;
- std::vector<ui::DeleteLaterPtr<StyleRuleEditor>> style_rule_editors_;
+ std::vector<platform::gui::DeleteLaterPtr<StyleRuleEditor>> style_rule_editors_;
ui::controls::IconButton add_button_;
bool suppress_next_set_ = false;
diff --git a/src/ThemeBuilder/components/conditions/CompoundConditionEditor.cpp b/src/ThemeBuilder/components/conditions/CompoundConditionEditor.cpp
index d7324350..8501d7cd 100644
--- a/src/ThemeBuilder/components/conditions/CompoundConditionEditor.cpp
+++ b/src/ThemeBuilder/components/conditions/CompoundConditionEditor.cpp
@@ -7,7 +7,7 @@
#include "cru/base/ClonePtr.h"
#include "cru/platform/Color.h"
#include "cru/ui/Base.h"
-#include "cru/ui/DeleteLater.h"
+#include "cru/platform/gui/DeleteLater.h"
#include "cru/ui/ThemeManager.h"
#include "cru/ui/controls/FlexLayout.h"
#include "cru/ui/style/Condition.h"
@@ -69,7 +69,7 @@ CompoundConditionEditor::CompoundConditionEditor() {
this->children_container_.RemoveChildAt(index);
RaiseChangeEvent();
});
- children_.push_back(ui::ToDeleteLaterPtr(std::move(editor)));
+ children_.push_back(platform::gui::ToDeleteLaterPtr(std::move(editor)));
children_container_.AddChild(children_.back()->GetRootControl());
RaiseChangeEvent();
}
@@ -100,7 +100,7 @@ void CompoundConditionEditor::SetChildren(
this->children_container_.RemoveChildAt(index);
RaiseChangeEvent();
});
- children_.push_back(ui::ToDeleteLaterPtr(std::move(editor)));
+ children_.push_back(platform::gui::ToDeleteLaterPtr(std::move(editor)));
children_container_.AddChild(children_.back()->GetRootControl());
}
if (trigger_change) {
diff --git a/src/ThemeBuilder/components/conditions/CompoundConditionEditor.h b/src/ThemeBuilder/components/conditions/CompoundConditionEditor.h
index af632758..c0f0891a 100644
--- a/src/ThemeBuilder/components/conditions/CompoundConditionEditor.h
+++ b/src/ThemeBuilder/components/conditions/CompoundConditionEditor.h
@@ -23,7 +23,7 @@ class CompoundConditionEditor : public ConditionEditor {
private:
ui::components::PopupMenuIconButton add_child_button_;
ui::controls::FlexLayout children_container_;
- std::vector<ui::DeleteLaterPtr<ConditionEditor>> children_;
+ std::vector<platform::gui::DeleteLaterPtr<ConditionEditor>> children_;
};
class AndConditionEditor : public CompoundConditionEditor {
diff --git a/src/ThemeBuilder/components/stylers/CompoundStylerEditor.cpp b/src/ThemeBuilder/components/stylers/CompoundStylerEditor.cpp
index 90d19a68..698cc699 100644
--- a/src/ThemeBuilder/components/stylers/CompoundStylerEditor.cpp
+++ b/src/ThemeBuilder/components/stylers/CompoundStylerEditor.cpp
@@ -7,7 +7,7 @@
#include "PaddingStylerEditor.h"
#include "PreferredSizeStylerEditor.h"
#include "cru/base/ClonePtr.h"
-#include "cru/ui/DeleteLater.h"
+#include "cru/platform/gui/DeleteLater.h"
#include "cru/ui/ThemeManager.h"
#include "cru/ui/style/Styler.h"
@@ -71,7 +71,7 @@ CompoundStylerEditor::CompoundStylerEditor() {
this->children_container_.RemoveChildAt(index);
RaiseChangeEvent();
});
- children_.push_back(ui::ToDeleteLaterPtr(std::move(editor)));
+ children_.push_back(platform::gui::ToDeleteLaterPtr(std::move(editor)));
children_container_.AddChild(editor->GetRootControl());
RaiseChangeEvent();
}
@@ -100,7 +100,7 @@ void CompoundStylerEditor::SetValue(ui::style::CompoundStyler* value,
this->children_container_.RemoveChildAt(index);
RaiseChangeEvent();
});
- children_.push_back(ui::ToDeleteLaterPtr(std::move(editor)));
+ children_.push_back(platform::gui::ToDeleteLaterPtr(std::move(editor)));
children_container_.AddChild(children_.back()->GetRootControl());
}
}
diff --git a/src/ThemeBuilder/components/stylers/CompoundStylerEditor.h b/src/ThemeBuilder/components/stylers/CompoundStylerEditor.h
index f9265fbf..454b3622 100644
--- a/src/ThemeBuilder/components/stylers/CompoundStylerEditor.h
+++ b/src/ThemeBuilder/components/stylers/CompoundStylerEditor.h
@@ -1,7 +1,7 @@
#pragma once
#include "StylerEditor.h"
#include "cru/base/ClonePtr.h"
-#include "cru/ui/DeleteLater.h"
+#include "cru/platform/gui/DeleteLater.h"
#include "cru/ui/components/PopupButton.h"
#include "cru/ui/controls/FlexLayout.h"
#include "cru/ui/style/Styler.h"
@@ -24,7 +24,7 @@ class CompoundStylerEditor : public StylerEditor {
private:
ui::controls::FlexLayout children_container_;
- std::vector<ui::DeleteLaterPtr<StylerEditor>> children_;
+ std::vector<platform::gui::DeleteLaterPtr<StylerEditor>> children_;
ui::components::PopupMenuIconButton add_child_button_;
};
} // namespace cru::theme_builder::components::stylers
diff --git a/src/platform/gui/UiApplication.cpp b/src/platform/gui/UiApplication.cpp
index f035224f..56570125 100644
--- a/src/platform/gui/UiApplication.cpp
+++ b/src/platform/gui/UiApplication.cpp
@@ -1,9 +1,23 @@
#include "cru/platform/gui/UiApplication.h"
-
#include "cru/base/Base.h"
+#include <unordered_set>
+
namespace cru::platform::gui {
+void DeleteLaterPool::Add(Object* object) { pool_.push_back(object); }
+
+void DeleteLaterPool::Clean() {
+ std::unordered_set<Object*> deleted;
+ for (auto object : pool_) {
+ if (!deleted.contains(object)) {
+ deleted.insert(object);
+ delete object;
+ }
+ }
+ pool_.clear();
+}
+
namespace {
IUiApplication* instance = nullptr;
}
@@ -12,7 +26,7 @@ IUiApplication* IUiApplication::GetInstance() { return instance; }
IUiApplication::IUiApplication() {
if (instance) {
- throw std::runtime_error("An ui application has already been created.");
+ throw Exception("A ui application has already been created.");
}
instance = this;
diff --git a/src/platform/gui/win/UiApplication.cpp b/src/platform/gui/win/UiApplication.cpp
index eb85ef90..e1c21d59 100644
--- a/src/platform/gui/win/UiApplication.cpp
+++ b/src/platform/gui/win/UiApplication.cpp
@@ -71,6 +71,8 @@ int WinUiApplication::Run() {
break;
}
}
+
+ delete_later_pool_.Clean();
}
for (const auto& handler : quit_handlers_) handler();
@@ -103,6 +105,10 @@ long long WinUiApplication::SetInterval(std::chrono::milliseconds milliseconds,
void WinUiApplication::CancelTimer(long long id) { timers_.Remove(id); }
+void WinUiApplication::DeleteLater(Object* object) {
+ delete_later_pool_.Add(object);
+}
+
std::vector<INativeWindow*> WinUiApplication::GetAllWindow() {
std::vector<INativeWindow*> result;
for (const auto w : windows_) {
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index e931b678..d2188e0b 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -1,5 +1,4 @@
add_library(CruUi
- DeleteLater.cpp
Helper.cpp
ThemeManager.cpp
ThemeResourceDictionary.cpp
diff --git a/src/ui/DeleteLater.cpp b/src/ui/DeleteLater.cpp
deleted file mode 100644
index 90b07b71..00000000
--- a/src/ui/DeleteLater.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "cru/ui/DeleteLater.h"
-
-#include "Helper.h"
-#include "cru/base/log/Logger.h"
-#include "cru/platform/gui/UiApplication.h"
-
-namespace cru::ui {
-
-DeleteLaterImpl::DeleteLaterImpl() : delete_later_scheduled_(false) {}
-
-DeleteLaterImpl::~DeleteLaterImpl() {
- CRU_LOG_TAG_DEBUG("Delete later object being deleted {}.",
- static_cast<void*>(this));
-}
-
-void DeleteLaterImpl::DeleteLater() {
- if (!delete_later_scheduled_) {
- CRU_LOG_TAG_DEBUG("Schedule delete later {}.", static_cast<void*>(this));
- GetUiApplication()->SetImmediate([this] { delete this; });
- delete_later_scheduled_ = true;
- }
-}
-} // namespace cru::ui