You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-11 13:10:58 +00:00
Support extension icons in ScriptCreateDialog
Attempt to grab the icon for a script type from the theme first, then ask the extension for the icon.
This commit is contained in:
@@ -45,6 +45,7 @@
|
|||||||
#include "editor/themes/editor_scale.h"
|
#include "editor/themes/editor_scale.h"
|
||||||
#include "scene/gui/grid_container.h"
|
#include "scene/gui/grid_container.h"
|
||||||
#include "scene/gui/line_edit.h"
|
#include "scene/gui/line_edit.h"
|
||||||
|
#include "scene/theme/theme_db.h"
|
||||||
|
|
||||||
static String _get_parent_class_of_script(const String &p_path) {
|
static String _get_parent_class_of_script(const String &p_path) {
|
||||||
if (!ResourceLoader::exists(p_path, "Script")) {
|
if (!ResourceLoader::exists(p_path, "Script")) {
|
||||||
@@ -128,8 +129,23 @@ void ScriptCreateDialog::_notification(int p_what) {
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
const int icon_size = get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor));
|
||||||
|
|
||||||
|
EditorData &ed = EditorNode::get_editor_data();
|
||||||
|
|
||||||
for (int i = 0; i < ScriptServer::get_language_count(); i++) {
|
for (int i = 0; i < ScriptServer::get_language_count(); i++) {
|
||||||
Ref<Texture2D> language_icon = get_editor_theme_icon(ScriptServer::get_language(i)->get_type());
|
// Check if the extension has an icon first.
|
||||||
|
String script_type = ScriptServer::get_language(i)->get_type();
|
||||||
|
Ref<Texture2D> language_icon = get_editor_theme_icon(script_type);
|
||||||
|
if (language_icon.is_null() || language_icon == ThemeDB::get_singleton()->get_fallback_icon()) {
|
||||||
|
// The theme doesn't have an icon for this language, ask the extensions.
|
||||||
|
Ref<Texture2D> extension_language_icon = ed.extension_class_get_icon(script_type);
|
||||||
|
if (extension_language_icon.is_valid()) {
|
||||||
|
language_menu->get_popup()->set_item_icon_max_width(i, icon_size);
|
||||||
|
language_icon = extension_language_icon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (language_icon.is_valid()) {
|
if (language_icon.is_valid()) {
|
||||||
language_menu->set_item_icon(i, language_icon);
|
language_menu->set_item_icon(i, language_icon);
|
||||||
}
|
}
|
||||||
@@ -850,6 +866,7 @@ ScriptCreateDialog::ScriptCreateDialog() {
|
|||||||
|
|
||||||
language_menu = memnew(OptionButton);
|
language_menu = memnew(OptionButton);
|
||||||
language_menu->set_custom_minimum_size(Size2(350, 0) * EDSCALE);
|
language_menu->set_custom_minimum_size(Size2(350, 0) * EDSCALE);
|
||||||
|
language_menu->set_expand_icon(true);
|
||||||
language_menu->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
language_menu->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||||
gc->add_child(memnew(Label(TTR("Language:"))));
|
gc->add_child(memnew(Label(TTR("Language:"))));
|
||||||
gc->add_child(language_menu);
|
gc->add_child(language_menu);
|
||||||
|
|||||||
Reference in New Issue
Block a user