Theme code refactoring

- Move GDScript-exposed function definitions from header to source file
- Add null check to functions taking list pointers as parameters
- Call clear() in copy_theme() if null is passed
This commit is contained in:
SeleckyErik 2019-10-23 03:08:23 +01:00
parent 72dfa67dd3
commit fa59defb53
2 changed files with 122 additions and 65 deletions

View file

@ -37,6 +37,97 @@ void Theme::_emit_theme_changed() {
emit_changed();
}
PoolVector<String> Theme::_get_icon_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_icon_list(p_type, &il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_stylebox_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_stylebox_list(p_type, &il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_stylebox_types(void) const {
PoolVector<String> ilret;
List<StringName> il;
get_stylebox_types(&il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_font_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_font_list(p_type, &il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_color_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_color_list(p_type, &il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_constant_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_constant_list(p_type, &il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> Theme::_get_type_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_type_list(&il);
ilret.resize(il.size());
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
bool Theme::_set(const StringName &p_name, const Variant &p_value) {
String sname = p_name;
@ -300,6 +391,8 @@ void Theme::clear_icon(const StringName &p_name, const StringName &p_type) {
void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!icon_map.has(p_type))
return;
@ -344,6 +437,9 @@ void Theme::clear_shader(const StringName &p_name, const StringName &p_type) {
}
void Theme::get_shader_list(const StringName &p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!shader_map.has(p_type))
return;
@ -408,6 +504,8 @@ void Theme::clear_stylebox(const StringName &p_name, const StringName &p_type) {
void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!style_map.has(p_type))
return;
@ -420,6 +518,8 @@ void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const
}
void Theme::get_stylebox_types(List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
const StringName *key = NULL;
while ((key = style_map.next(key))) {
p_list->push_back(*key);
@ -478,6 +578,8 @@ void Theme::clear_font(const StringName &p_name, const StringName &p_type) {
void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!font_map.has(p_type))
return;
@ -526,6 +628,8 @@ void Theme::clear_color(const StringName &p_name, const StringName &p_type) {
void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!color_map.has(p_type))
return;
@ -574,6 +678,8 @@ void Theme::clear_constant(const StringName &p_name, const StringName &p_type) {
void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
if (!constant_map.has(p_type))
return;
@ -637,6 +743,12 @@ void Theme::copy_default_theme() {
void Theme::copy_theme(const Ref<Theme> &p_other) {
if (p_other.is_null()) {
clear();
return;
}
//these need reconnecting, so add normally
{
const StringName *K = NULL;
@ -680,8 +792,9 @@ void Theme::copy_theme(const Ref<Theme> &p_other) {
void Theme::get_type_list(List<StringName> *p_list) const {
Set<StringName> types;
ERR_FAIL_NULL(p_list);
Set<StringName> types;
const StringName *key = NULL;
while ((key = icon_map.next(key))) {

View file

@ -52,6 +52,14 @@ class Theme : public Resource {
HashMap<StringName, HashMap<StringName, Color> > color_map;
HashMap<StringName, HashMap<StringName, int> > constant_map;
PoolVector<String> _get_icon_list(const String &p_type) const;
PoolVector<String> _get_stylebox_list(const String &p_type) const;
PoolVector<String> _get_stylebox_types(void) const;
PoolVector<String> _get_font_list(const String &p_type) const;
PoolVector<String> _get_color_list(const String &p_type) const;
PoolVector<String> _get_constant_list(const String &p_type) const;
PoolVector<String> _get_type_list(const String &p_type) const;
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
@ -65,70 +73,6 @@ protected:
Ref<Font> default_theme_font;
PoolVector<String> _get_icon_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_icon_list(p_type, &il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_stylebox_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_stylebox_list(p_type, &il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_stylebox_types(void) const {
PoolVector<String> ilret;
List<StringName> il;
get_stylebox_types(&il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_font_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_font_list(p_type, &il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_color_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_color_list(p_type, &il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_constant_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_constant_list(p_type, &il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
PoolVector<String> _get_type_list(const String &p_type) const {
PoolVector<String> ilret;
List<StringName> il;
get_type_list(&il);
for (List<StringName>::Element *E = il.front(); E; E = E->next()) {
ilret.push_back(E->get());
}
return ilret;
}
static void _bind_methods();
public: