aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/cru/theme_builder/ThemeResources.xml16
-rw-r--r--include/cru/ui/ThemeResourceDictionary.h11
-rw-r--r--include/cru/ui/controls/Container.h15
-rw-r--r--src/theme_builder/CMakeLists.txt1
-rw-r--r--src/theme_builder/components/properties/ColorPropertyEditor.cpp7
-rw-r--r--src/theme_builder/main.cpp10
6 files changed, 57 insertions, 3 deletions
diff --git a/assets/cru/theme_builder/ThemeResources.xml b/assets/cru/theme_builder/ThemeResources.xml
new file mode 100644
index 00000000..544f6908
--- /dev/null
+++ b/assets/cru/theme_builder/ThemeResources.xml
@@ -0,0 +1,16 @@
+<Theme>
+ <Resource key="cru.theme_builder.color_cube.style">
+ <StyleRuleSet>
+ <StyleRule>
+ <NoCondition />
+ <PreferredSizeStyler width="20" height="20" />
+ <BorderStyler>
+ <BorderStyle>
+ <Color value="black" />
+ <Thickness value="1" />
+ </BorderStyle>
+ </BorderStyler>
+ </StyleRule>
+ </StyleRuleSet>
+ </Resource>
+</Theme>
diff --git a/include/cru/ui/ThemeResourceDictionary.h b/include/cru/ui/ThemeResourceDictionary.h
index 26f7ec8d..a303b466 100644
--- a/include/cru/ui/ThemeResourceDictionary.h
+++ b/include/cru/ui/ThemeResourceDictionary.h
@@ -7,6 +7,7 @@
#include "style/StyleRuleSet.h"
#include <any>
+#include <filesystem>
#include <typeindex>
#include <typeinfo>
@@ -25,9 +26,15 @@ class CRU_UI_API ThemeResourceDictionary : public Object {
CRU_DEFINE_CLASS_LOG_TAG(u"ThemeResources");
public:
- static std::unique_ptr<ThemeResourceDictionary> FromFile(const String& file_path);
+ static std::unique_ptr<ThemeResourceDictionary> FromFile(
+ const String& file_path);
+ static std::unique_ptr<ThemeResourceDictionary> FromFile(
+ std::filesystem::path file_path) {
+ return FromFile(String::FromStdPath(file_path));
+ }
- explicit ThemeResourceDictionary(xml::XmlElementNode* xml_root, bool clone = true);
+ explicit ThemeResourceDictionary(xml::XmlElementNode* xml_root,
+ bool clone = true);
CRU_DELETE_COPY(ThemeResourceDictionary)
CRU_DELETE_MOVE(ThemeResourceDictionary)
diff --git a/include/cru/ui/controls/Container.h b/include/cru/ui/controls/Container.h
index 98958b3b..c8bf3f32 100644
--- a/include/cru/ui/controls/Container.h
+++ b/include/cru/ui/controls/Container.h
@@ -2,10 +2,12 @@
#include "SingleChildControl.h"
#include "../render/BorderRenderObject.h"
+#include "IBorderControl.h"
namespace cru::ui::controls {
class CRU_UI_API Container
- : public SingleChildControl<render::BorderRenderObject> {
+ : public SingleChildControl<render::BorderRenderObject>,
+ public virtual IBorderControl {
static constexpr StringView kControlType = u"Container";
public:
@@ -16,6 +18,13 @@ class CRU_UI_API Container
~Container() override;
public:
+ bool IsBorderEnabled() const {
+ return GetContainerRenderObject()->IsBorderEnabled();
+ }
+ void SetBorderEnabled(bool enabled) {
+ GetContainerRenderObject()->SetBorderEnabled(enabled);
+ }
+
std::shared_ptr<platform::graphics::IBrush> GetForegroundBrush() const {
return GetContainerRenderObject()->GetForegroundBrush();
}
@@ -32,6 +41,10 @@ class CRU_UI_API Container
GetContainerRenderObject()->SetBackgroundBrush(brush);
}
+ void ApplyBorderStyle(const style::ApplyBorderStyleInfo& style) override {
+ GetContainerRenderObject()->ApplyBorderStyle(style);
+ }
+
public:
String GetControlType() const final { return kControlType.ToString(); }
};
diff --git a/src/theme_builder/CMakeLists.txt b/src/theme_builder/CMakeLists.txt
index dff58874..709c4d76 100644
--- a/src/theme_builder/CMakeLists.txt
+++ b/src/theme_builder/CMakeLists.txt
@@ -34,4 +34,5 @@ if(APPLE)
endif()
target_add_resources(cru_theme_builder cru/ui)
+target_add_resources(cru_theme_builder cru/theme_builder)
target_link_libraries(cru_theme_builder PRIVATE cru_platform_bootstrap cru_ui)
diff --git a/src/theme_builder/components/properties/ColorPropertyEditor.cpp b/src/theme_builder/components/properties/ColorPropertyEditor.cpp
index 49911f77..89b145a7 100644
--- a/src/theme_builder/components/properties/ColorPropertyEditor.cpp
+++ b/src/theme_builder/components/properties/ColorPropertyEditor.cpp
@@ -1,6 +1,7 @@
#include "ColorPropertyEditor.h"
#include "cru/platform/graphics/Factory.h"
#include "cru/ui/Base.h"
+#include "cru/ui/ThemeManager.h"
namespace cru::theme_builder::components::properties {
ColorPropertyEditor::ColorPropertyEditor() {
@@ -8,9 +9,15 @@ ColorPropertyEditor::ColorPropertyEditor() {
container_.AddChild(&color_cube_);
container_.AddChild(&color_text_);
+ color_cube_.SetBorderEnabled(true);
+ color_cube_.GetStyleRuleSet()->SetParent(
+ ui::ThemeManager::GetInstance()->GetResourceStyleRuleSet(
+ u"cru.theme_builder.color_cube.style"));
+
color_cube_brush_ = platform::gui::IUiApplication::GetInstance()
->GetGraphicsFactory()
->CreateSolidColorBrush(color_);
+
color_cube_.SetForegroundBrush(color_cube_brush_);
color_text_.SetText(color_.ToString());
diff --git a/src/theme_builder/main.cpp b/src/theme_builder/main.cpp
index 7e7faa3d..df03b379 100644
--- a/src/theme_builder/main.cpp
+++ b/src/theme_builder/main.cpp
@@ -1,8 +1,18 @@
#include "components/MainWindow.h"
+#include "cru/common/io/Resource.h"
#include "cru/platform/bootstrap/Bootstrap.h"
+#include "cru/ui/ThemeManager.h"
+#include "cru/ui/ThemeResourceDictionary.h"
int main() {
using namespace cru::theme_builder;
+ using namespace cru::ui;
+
+ auto resource_dir = cru::io::GetResourceDir();
+
+ ThemeManager::GetInstance()->PrependThemeResourceDictionary(
+ ThemeResourceDictionary::FromFile(resource_dir /
+ "cru/theme_builder/ThemeResources.xml"));
std::unique_ptr<cru::platform::gui::IUiApplication> application(
cru::platform::bootstrap::CreateUiApplication());