From 5410e2f0507177833ea33b5e2a3d3bcbcb384c24 Mon Sep 17 00:00:00 2001 From: LuoZhihao Date: Sun, 11 Aug 2024 23:58:40 +0800 Subject: [PATCH] ThemeDB: expose method for making a copy of the default theme --- doc/classes/ThemeDB.xml | 6 ++++++ scene/theme/theme_db.cpp | 34 ++++++++++++++++++++++++++++++++++ scene/theme/theme_db.h | 2 ++ 3 files changed, 42 insertions(+) diff --git a/doc/classes/ThemeDB.xml b/doc/classes/ThemeDB.xml index 106d011c434..94d0c165eb6 100644 --- a/doc/classes/ThemeDB.xml +++ b/doc/classes/ThemeDB.xml @@ -10,6 +10,12 @@ + + + + Returns a new copy of the default engine [Theme]. Unlike [method get_default_theme], this theme resource can be overridden. + + diff --git a/scene/theme/theme_db.cpp b/scene/theme/theme_db.cpp index 7249fd7ba82..90615658470 100644 --- a/scene/theme/theme_db.cpp +++ b/scene/theme/theme_db.cpp @@ -123,6 +123,39 @@ Ref ThemeDB::get_default_theme() { return default_theme; } +Ref ThemeDB::generate_default_theme() { + Ref t; + t.instantiate(); + + float default_scale = default_theme->get_default_base_scale(); + Ref default_font = default_theme->get_default_font(); + + Ref default_icon; + Ref default_style; + + Ref bold_font; + Ref bold_italics_font; + Ref italics_font; + + if (default_font.is_valid()) { + bold_font.instantiate(); + bold_font->set_base_font(default_font); + bold_font->set_variation_embolden(1.2); + + bold_italics_font.instantiate(); + bold_italics_font->set_base_font(default_font); + bold_italics_font->set_variation_embolden(1.2); + bold_italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0)); + + italics_font.instantiate(); + italics_font->set_base_font(default_font); + italics_font->set_variation_transform(Transform2D(1.0, 0.2, 0.0, 1.0, 0.0, 0.0)); + } + + fill_default_theme(t, default_font, Ref(), Ref(), Ref(), default_icon, default_style, default_scale); + return t; +} + void ThemeDB::set_project_theme(const Ref &p_project_default) { project_theme = p_project_default; } @@ -417,6 +450,7 @@ void ThemeDB::_sort_theme_items() { void ThemeDB::_bind_methods() { ClassDB::bind_method(D_METHOD("get_default_theme"), &ThemeDB::get_default_theme); ClassDB::bind_method(D_METHOD("get_project_theme"), &ThemeDB::get_project_theme); + ClassDB::bind_method(D_METHOD("generate_default_theme"), &ThemeDB::generate_default_theme); ClassDB::bind_method(D_METHOD("set_fallback_base_scale", "base_scale"), &ThemeDB::set_fallback_base_scale); ClassDB::bind_method(D_METHOD("get_fallback_base_scale"), &ThemeDB::get_fallback_base_scale); diff --git a/scene/theme/theme_db.h b/scene/theme/theme_db.h index f403c1ef20a..53bbd74a5b8 100644 --- a/scene/theme/theme_db.h +++ b/scene/theme/theme_db.h @@ -134,6 +134,8 @@ public: void set_default_theme(const Ref &p_default); Ref get_default_theme(); + Ref generate_default_theme(); + void set_project_theme(const Ref &p_project_default); Ref get_project_theme();