diff options
1529 files changed, 9757 insertions, 5967 deletions
diff --git a/.editorconfig b/.editorconfig index 92ee947a82..523ff71307 100644 --- a/.editorconfig +++ b/.editorconfig @@ -21,3 +21,6 @@ indent_size = 4 [*.{yml,yaml}] indent_style = space indent_size = 2 + +[*.svg] +insert_final_newline = false diff --git a/.github/actions/upload-artifact/action.yml b/.github/actions/upload-artifact/action.yml index 8033839a7c..80c680103d 100644 --- a/.github/actions/upload-artifact/action.yml +++ b/.github/actions/upload-artifact/action.yml @@ -16,4 +16,5 @@ runs: with: name: ${{ inputs.name }} path: ${{ inputs.path }} - retention-days: 14 + # Default is 90 days. + retention-days: 60 diff --git a/.github/workflows/android_builds.yml b/.github/workflows/android_builds.yml index 9a488bd095..f99a31179e 100644 --- a/.github/workflows/android_builds.yml +++ b/.github/workflows/android_builds.yml @@ -13,9 +13,30 @@ concurrency: cancel-in-progress: true jobs: - android-template: + build-android: runs-on: "ubuntu-20.04" - name: Template (target=template_release) + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor (target=editor) + cache-name: android-editor + target: editor + tests: false + sconsflags: arch=arm64 production=yes + + - name: Template arm32 (target=template_release, arch=arm32) + cache-name: android-template-arm32 + target: template_release + tests: false + sconsflags: arch=arm32 + + - name: Template arm64 (target=template_release, arch=arm64) + cache-name: android-template-arm64 + target: template_release + tests: false + sconsflags: arch=arm64 steps: - uses: actions/checkout@v4 @@ -30,33 +51,38 @@ jobs: - name: Setup Godot build cache uses: ./.github/actions/godot-cache + with: + cache-name: ${{ matrix.cache-name }} continue-on-error: true - name: Setup Python and SCons uses: ./.github/actions/godot-deps - - name: Compilation (arm32) - uses: ./.github/actions/godot-build - with: - sconsflags: ${{ env.SCONSFLAGS }} arch=arm32 - platform: android - target: template_release - tests: false - - - name: Compilation (arm64) + - name: Compilation uses: ./.github/actions/godot-build with: - sconsflags: ${{ env.SCONSFLAGS }} arch=arm64 + sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: android - target: template_release - tests: false + target: ${{ matrix.target }} + tests: ${{ matrix.tests }} - name: Generate Godot templates + if: matrix.target == 'template_release' run: | cd platform/android/java ./gradlew generateGodotTemplates cd ../../.. ls -l bin/ + - name: Generate Godot editor + if: matrix.target == 'editor' + run: | + cd platform/android/java + ./gradlew generateGodotEditor + cd ../../.. + ls -l bin/android_editor_builds/ + - name: Upload artifact uses: ./.github/actions/upload-artifact + with: + name: ${{ matrix.cache-name }} diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml index 0c2d7d2e62..9a8a4a8f19 100644 --- a/.github/workflows/static_checks.yml +++ b/.github/workflows/static_checks.yml @@ -37,7 +37,7 @@ jobs: fi echo "$files" >> changed.txt cat changed.txt - files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "./{}"' | tr '\n' ' ') + files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "\"./{}\""' | tr '\n' ' ') echo "CHANGED_FILES=$files" >> $GITHUB_ENV # This needs to happen before Python and npm execution; it must happen before any extra files are written. diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cf10acfa79..46f29d0d5f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -118,6 +118,14 @@ repos: pass_filenames: false additional_dependencies: ['jsdoc@^4.0.3'] + - id: svgo + name: svgo + language: node + entry: svgo + files: \.svg$ + args: [--quiet, --config, misc/utility/svgo.config.mjs] + additional_dependencies: ["svgo@3.3.2"] + - id: copyright-headers name: copyright-headers language: python diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4c76101ebc..a698343f2a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -113,10 +113,11 @@ specify the engine area affected by the commit. Some examples: - Core: Fix `Object::has_method()` for script static methods If your commit fixes a reported issue, please include it in the _description_ -of the commit (not in the title) using one of the +of the PR (not in the title, or the commit message) using one of the [GitHub closing keywords](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) such as "Fixes #1234". This will cause the issue to be closed automatically if -the PR is merged. +the PR is merged. Adding it to the commit message is easier, but adds a lot of +unnecessary updates in the issue distracting from the thread. Here's an example of a well-formatted commit message (note how the extended description is also manually wrapped at 80 chars for readability): @@ -131,8 +132,6 @@ unwanted side effects in the physics engine. By fixing the regulation system via an added binding to the internal feature, this commit now ensures that Godot will not go past the ebullition temperature of cooking oil under normal atmospheric conditions. - -Fixes #1340. ``` **Note:** When using the GitHub online editor or its drag-and-drop diff --git a/SConstruct b/SConstruct index f4b8f03519..8e9a536bdc 100644 --- a/SConstruct +++ b/SConstruct @@ -200,7 +200,10 @@ opts.Add(EnumVariable("arch", "CPU architecture", "auto", ["auto"] + architectur opts.Add(BoolVariable("dev_build", "Developer build with dev-only debugging code (DEV_ENABLED)", False)) opts.Add( EnumVariable( - "optimize", "Optimization level", "speed_trace", ("none", "custom", "debug", "speed", "speed_trace", "size") + "optimize", + "Optimization level (by default inferred from 'target' and 'dev_build')", + "auto", + ("auto", "none", "custom", "debug", "speed", "speed_trace", "size"), ) ) opts.Add(BoolVariable("debug_symbols", "Build with debugging symbols", False)) @@ -466,14 +469,15 @@ env.editor_build = env["target"] == "editor" env.dev_build = env["dev_build"] env.debug_features = env["target"] in ["editor", "template_debug"] -if env.dev_build: - opt_level = "none" -elif env.debug_features: - opt_level = "speed_trace" -else: # Release - opt_level = "speed" +if env["optimize"] == "auto": + if env.dev_build: + opt_level = "none" + elif env.debug_features: + opt_level = "speed_trace" + else: # Release + opt_level = "speed" + env["optimize"] = ARGUMENTS.get("optimize", opt_level) -env["optimize"] = ARGUMENTS.get("optimize", opt_level) env["debug_symbols"] = methods.get_cmdline_bool("debug_symbols", env.dev_build) if env.editor_build: @@ -566,7 +570,7 @@ if env["build_profile"] != "": import json try: - ft = json.load(open(env["build_profile"])) + ft = json.load(open(env["build_profile"], "r", encoding="utf-8")) if "disabled_classes" in ft: env.disabled_classes = ft["disabled_classes"] if "disabled_build_options" in ft: diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 768540a0fa..eac1a66be7 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1515,6 +1515,7 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "display/window/stretch/scale_mode", PROPERTY_HINT_ENUM, "fractional,integer"), "fractional"); GLOBAL_DEF(PropertyInfo(Variant::INT, "debug/settings/profiler/max_functions", PROPERTY_HINT_RANGE, "128,65535,1"), 16384); + GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "debug/settings/profiler/max_timestamp_query_elements", PROPERTY_HINT_RANGE, "256,65535,1"), 256); GLOBAL_DEF(PropertyInfo(Variant::BOOL, "compression/formats/zstd/long_distance_matching"), Compression::zstd_long_distance_matching); GLOBAL_DEF(PropertyInfo(Variant::INT, "compression/formats/zstd/compression_level", PROPERTY_HINT_RANGE, "1,22,1"), Compression::zstd_level); diff --git a/core/input/input.cpp b/core/input/input.cpp index 56f616fac4..ec0303df06 100644 --- a/core/input/input.cpp +++ b/core/input/input.cpp @@ -758,12 +758,13 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em bool was_pressed = action_state.cache.pressed; _update_action_cache(E.key, action_state); + // As input may come in part way through a physics tick, the earliest we can react to it is the next physics tick. if (action_state.cache.pressed && !was_pressed) { - action_state.pressed_physics_frame = Engine::get_singleton()->get_physics_frames(); + action_state.pressed_physics_frame = Engine::get_singleton()->get_physics_frames() + 1; action_state.pressed_process_frame = Engine::get_singleton()->get_process_frames(); } if (!action_state.cache.pressed && was_pressed) { - action_state.released_physics_frame = Engine::get_singleton()->get_physics_frames(); + action_state.released_physics_frame = Engine::get_singleton()->get_physics_frames() + 1; action_state.released_process_frame = Engine::get_singleton()->get_process_frames(); } } diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp index 178d02b987..ddeee9d765 100644 --- a/core/input/input_map.cpp +++ b/core/input/input_map.cpp @@ -636,6 +636,7 @@ const HashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() { inputs = List<Ref<InputEvent>>(); inputs.push_back(InputEventKey::create_reference(Key::A | KeyModifierMask::CTRL)); inputs.push_back(InputEventKey::create_reference(Key::LEFT | KeyModifierMask::CMD_OR_CTRL)); + inputs.push_back(InputEventKey::create_reference(Key::HOME)); default_builtin_cache.insert("ui_text_caret_line_start.macos", inputs); inputs = List<Ref<InputEvent>>(); @@ -645,6 +646,7 @@ const HashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() { inputs = List<Ref<InputEvent>>(); inputs.push_back(InputEventKey::create_reference(Key::E | KeyModifierMask::CTRL)); inputs.push_back(InputEventKey::create_reference(Key::RIGHT | KeyModifierMask::CMD_OR_CTRL)); + inputs.push_back(InputEventKey::create_reference(Key::END)); default_builtin_cache.insert("ui_text_caret_line_end.macos", inputs); // Text Caret Movement Page Up/Down @@ -665,6 +667,7 @@ const HashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() { inputs = List<Ref<InputEvent>>(); inputs.push_back(InputEventKey::create_reference(Key::UP | KeyModifierMask::CMD_OR_CTRL)); + inputs.push_back(InputEventKey::create_reference(Key::HOME | KeyModifierMask::CMD_OR_CTRL)); default_builtin_cache.insert("ui_text_caret_document_start.macos", inputs); inputs = List<Ref<InputEvent>>(); @@ -673,6 +676,7 @@ const HashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() { inputs = List<Ref<InputEvent>>(); inputs.push_back(InputEventKey::create_reference(Key::DOWN | KeyModifierMask::CMD_OR_CTRL)); + inputs.push_back(InputEventKey::create_reference(Key::END | KeyModifierMask::CMD_OR_CTRL)); default_builtin_cache.insert("ui_text_caret_document_end.macos", inputs); // Text Caret Addition Below/Above diff --git a/core/io/dir_access.cpp b/core/io/dir_access.cpp index 5df67b1103..2f3fe4deeb 100644 --- a/core/io/dir_access.cpp +++ b/core/io/dir_access.cpp @@ -339,6 +339,8 @@ String DirAccess::get_full_path(const String &p_path, AccessType p_access) { } Error DirAccess::copy(const String &p_from, const String &p_to, int p_chmod_flags) { + ERR_FAIL_COND_V_MSG(p_from == p_to, ERR_INVALID_PARAMETER, "Source and destination path are equal."); + //printf("copy %s -> %s\n",p_from.ascii().get_data(),p_to.ascii().get_data()); Error err; { diff --git a/core/io/logger.cpp b/core/io/logger.cpp index 1476b8ccac..a24277fe72 100644 --- a/core/io/logger.cpp +++ b/core/io/logger.cpp @@ -212,7 +212,7 @@ void RotatedFileLogger::logv(const char *p_format, va_list p_list, bool p_err) { // Strip ANSI escape codes (such as those inserted by `print_rich()`) // before writing to file, as text editors cannot display those // correctly. - file->store_string(strip_ansi_regex->sub(String(buf), "", true)); + file->store_string(strip_ansi_regex->sub(String::utf8(buf), "", true)); #else file->store_buffer((uint8_t *)buf, len); #endif // MODULE_REGEX_ENABLED diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index ab460c5f4c..f71257fa76 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -749,44 +749,54 @@ Error ResourceLoaderBinary::load() { String t = get_unicode_string(); Ref<Resource> res; + Resource *r = nullptr; - if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && ResourceCache::has(path)) { - //use the existing one - Ref<Resource> cached = ResourceCache::get_ref(path); - if (cached->get_class() == t) { - cached->reset_state(); - res = cached; - } + MissingResource *missing_resource = nullptr; + + if (main) { + res = ResourceLoader::get_resource_ref_override(local_path); + r = res.ptr(); } + if (!r) { + if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && ResourceCache::has(path)) { + //use the existing one + Ref<Resource> cached = ResourceCache::get_ref(path); + if (cached->get_class() == t) { + cached->reset_state(); + res = cached; + } + } - MissingResource *missing_resource = nullptr; + if (res.is_null()) { + //did not replace + + Object *obj = ClassDB::instantiate(t); + if (!obj) { + if (ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) { + //create a missing resource + missing_resource = memnew(MissingResource); + missing_resource->set_original_class(t); + missing_resource->set_recording_properties(true); + obj = missing_resource; + } else { + error = ERR_FILE_CORRUPT; + ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, local_path + ":Resource of unrecognized type in file: " + t + "."); + } + } - if (res.is_null()) { - //did not replace - - Object *obj = ClassDB::instantiate(t); - if (!obj) { - if (ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) { - //create a missing resource - missing_resource = memnew(MissingResource); - missing_resource->set_original_class(t); - missing_resource->set_recording_properties(true); - obj = missing_resource; - } else { + r = Object::cast_to<Resource>(obj); + if (!r) { + String obj_class = obj->get_class(); error = ERR_FILE_CORRUPT; - ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, local_path + ":Resource of unrecognized type in file: " + t + "."); + memdelete(obj); //bye + ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, local_path + ":Resource type in resource field not a resource, type is: " + obj_class + "."); } - } - Resource *r = Object::cast_to<Resource>(obj); - if (!r) { - String obj_class = obj->get_class(); - error = ERR_FILE_CORRUPT; - memdelete(obj); //bye - ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, local_path + ":Resource type in resource field not a resource, type is: " + obj_class + "."); + res = Ref<Resource>(r); } + } - res = Ref<Resource>(r); + if (r) { if (!path.is_empty()) { if (cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) { r->set_path(path, cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE); // If got here because the resource with same path has different type, replace it. diff --git a/core/io/resource_importer.cpp b/core/io/resource_importer.cpp index 4c16650439..9e6f3ba314 100644 --- a/core/io/resource_importer.cpp +++ b/core/io/resource_importer.cpp @@ -118,9 +118,21 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy } #endif - if (r_path_and_type.path.is_empty() || r_path_and_type.type.is_empty()) { + if (r_path_and_type.type.is_empty()) { return ERR_FILE_CORRUPT; } + if (r_path_and_type.path.is_empty()) { + // Some importers may not write files to the .godot folder, so the path can be empty. + if (r_path_and_type.importer.is_empty()) { + return ERR_FILE_CORRUPT; + } + + // It's only invalid if the extension for the importer is not empty. + Ref<ResourceImporter> importer = get_importer_by_name(r_path_and_type.importer); + if (importer.is_null() || !importer->get_save_extension().is_empty()) { + return ERR_FILE_CORRUPT; + } + } return OK; } diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 0dcde5509a..20dd192da1 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -40,6 +40,7 @@ #include "core/string/print_string.h" #include "core/string/translation.h" #include "core/variant/variant_parser.h" +#include "servers/rendering_server.h" #ifdef DEBUG_LOAD_THREADED #define print_lt(m_text) print_line(m_text) @@ -272,6 +273,7 @@ Ref<Resource> ResourceLoader::_load(const String &p_path, const String &p_origin } load_paths_stack->resize(load_paths_stack->size() - 1); + res_ref_overrides.erase(load_nesting); load_nesting--; if (!res.is_null()) { @@ -302,9 +304,10 @@ void ResourceLoader::_thread_load_function(void *p_userdata) { thread_load_mutex.unlock(); // Thread-safe either if it's the current thread or a brand new one. - bool mq_override_present = false; + thread_local bool mq_override_present = false; CallQueue *own_mq_override = nullptr; if (load_nesting == 0) { + mq_override_present = false; load_paths_stack = memnew(Vector<String>); if (!load_task.dependent_path.is_empty()) { @@ -324,10 +327,6 @@ void ResourceLoader::_thread_load_function(void *p_userdata) { } // -- - if (!Thread::is_main_thread()) { - set_current_thread_safe_for_nodes(true); - } - Ref<Resource> res = _load(load_task.remapped_path, load_task.remapped_path != load_task.local_path ? load_task.local_path : String(), load_task.type_hint, load_task.cache_mode, &load_task.error, load_task.use_sub_threads, &load_task.progress); if (mq_override_present) { MessageQueue::get_singleton()->flush(); @@ -463,25 +462,23 @@ Ref<Resource> ResourceLoader::load(const String &p_path, const String &p_type_hi Ref<ResourceLoader::LoadToken> ResourceLoader::_load_start(const String &p_path, const String &p_type_hint, LoadThreadMode p_thread_mode, ResourceFormatLoader::CacheMode p_cache_mode) { String local_path = _validate_local_path(p_path); + bool ignoring_cache = p_cache_mode == ResourceFormatLoader::CACHE_MODE_IGNORE || p_cache_mode == ResourceFormatLoader::CACHE_MODE_IGNORE_DEEP; + Ref<LoadToken> load_token; - bool must_not_register = false; ThreadLoadTask unregistered_load_task; // Once set, must be valid up to the call to do the load. ThreadLoadTask *load_task_ptr = nullptr; bool run_on_current_thread = false; { MutexLock thread_load_lock(thread_load_mutex); - if (thread_load_tasks.has(local_path)) { + if (!ignoring_cache && thread_load_tasks.has(local_path)) { load_token = Ref<LoadToken>(thread_load_tasks[local_path].load_token); if (!load_token.is_valid()) { // The token is dying (reached 0 on another thread). // Ensure it's killed now so the path can be safely reused right away. thread_load_tasks[local_path].load_token->clear(); - } else { - if (p_cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) { - return load_token; - } } + return load_token; } load_token.instantiate(); @@ -509,19 +506,19 @@ Ref<ResourceLoader::LoadToken> ResourceLoader::_load_start(const String &p_path, } } - // If we want to ignore cache, but there's another task loading it, we can't add this one to the map and we also have to finish unconditionally synchronously. - must_not_register = thread_load_tasks.has(local_path) && p_cache_mode == ResourceFormatLoader::CACHE_MODE_IGNORE; - if (must_not_register) { + // Cache-ignoring tasks aren't registered in the map and so must finish within scope. + if (ignoring_cache) { load_token->local_path.clear(); unregistered_load_task = load_task; + load_task_ptr = &unregistered_load_task; } else { - thread_load_tasks[local_path] = load_task; + DEV_ASSERT(!thread_load_tasks.has(local_path)); + HashMap<String, ResourceLoader::ThreadLoadTask>::Iterator E = thread_load_tasks.insert(local_path, load_task); + load_task_ptr = &E->value; } - - load_task_ptr = must_not_register ? &unregistered_load_task : &thread_load_tasks[local_path]; } - run_on_current_thread = must_not_register || p_thread_mode == LOAD_THREAD_FROM_CURRENT; + run_on_current_thread = ignoring_cache || p_thread_mode == LOAD_THREAD_FROM_CURRENT; if (run_on_current_thread) { load_task_ptr->thread_id = Thread::get_caller_id(); @@ -532,7 +529,7 @@ Ref<ResourceLoader::LoadToken> ResourceLoader::_load_start(const String &p_path, if (run_on_current_thread) { _thread_load_function(load_task_ptr); - if (must_not_register) { + if (ignoring_cache) { load_token->res_if_unregistered = load_task_ptr->resource; } } @@ -586,6 +583,16 @@ ResourceLoader::ThreadLoadStatus ResourceLoader::load_threaded_get_status(const *r_progress = _dependency_get_progress(local_path); } + // Support userland polling in a loop on the main thread. + if (Thread::is_main_thread() && status == THREAD_LOAD_IN_PROGRESS) { + uint64_t frame = Engine::get_singleton()->get_process_frames(); + if (frame == load_task.last_progress_check_main_thread_frame) { + _ensure_load_progress(); + } else { + load_task.last_progress_check_main_thread_frame = frame; + } + } + return status; } @@ -614,6 +621,21 @@ Ref<Resource> ResourceLoader::load_threaded_get(const String &p_path, Error *r_e } return Ref<Resource>(); } + + // Support userland requesting on the main thread before the load is reported to be complete. + if (Thread::is_main_thread() && !load_token->local_path.is_empty()) { + const ThreadLoadTask &load_task = thread_load_tasks[load_token->local_path]; + while (load_task.status == THREAD_LOAD_IN_PROGRESS) { + if (!_ensure_load_progress()) { + // This local poll loop is not needed. + break; + } + thread_load_lock.~MutexLock(); + OS::get_singleton()->delay_usec(1000); + new (&thread_load_lock) MutexLock(thread_load_mutex); + } + } + res = _load_complete_inner(*load_token, r_error, thread_load_lock); if (load_token->unreference()) { memdelete(load_token); @@ -666,6 +688,7 @@ Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Erro Error wtp_task_err = FAILED; if (loader_is_wtp) { // Loading thread is in the worker pool. + load_task.awaited = true; thread_load_mutex.unlock(); wtp_task_err = WorkerThreadPool::get_singleton()->wait_for_task_completion(load_task.task_id); } @@ -690,7 +713,6 @@ Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Erro } else { DEV_ASSERT(wtp_task_err == OK); thread_load_mutex.lock(); - load_task.awaited = true; } } else { // Loading thread is main or user thread. @@ -732,6 +754,51 @@ Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Erro } } +bool ResourceLoader::_ensure_load_progress() { + // Some servers may need a new engine iteration to allow the load to progress. + // Since the only known one is the rendering server (in single thread mode), let's keep it simple and just sync it. + // This may be refactored in the future to support other servers and have less coupling. + if (OS::get_singleton()->get_render_thread_mode() == OS::RENDER_SEPARATE_THREAD) { + return false; // Not needed. + } + RenderingServer::get_singleton()->sync(); + return true; +} + +Ref<Resource> ResourceLoader::ensure_resource_ref_override_for_outer_load(const String &p_path, const String &p_res_type) { + ERR_FAIL_COND_V(load_nesting == 0, Ref<Resource>()); // It makes no sense to use this from nesting level 0. + const String &local_path = _validate_local_path(p_path); + HashMap<String, Ref<Resource>> &overrides = res_ref_overrides[load_nesting - 1]; + HashMap<String, Ref<Resource>>::Iterator E = overrides.find(local_path); + if (E) { + return E->value; + } else { + Object *obj = ClassDB::instantiate(p_res_type); + ERR_FAIL_NULL_V(obj, Ref<Resource>()); + Ref<Resource> res(obj); + if (!res.is_valid()) { + memdelete(obj); + ERR_FAIL_V(Ref<Resource>()); + } + overrides[local_path] = res; + return res; + } +} + +Ref<Resource> ResourceLoader::get_resource_ref_override(const String &p_path) { + DEV_ASSERT(p_path == _validate_local_path(p_path)); + HashMap<int, HashMap<String, Ref<Resource>>>::Iterator E = res_ref_overrides.find(load_nesting); + if (!E) { + return nullptr; + } + HashMap<String, Ref<Resource>>::Iterator F = E->value.find(p_path); + if (!F) { + return nullptr; + } + + return F->value; +} + bool ResourceLoader::exists(const String &p_path, const String &p_type_hint) { String local_path = _validate_local_path(p_path); @@ -1224,6 +1291,7 @@ bool ResourceLoader::timestamp_on_load = false; thread_local int ResourceLoader::load_nesting = 0; thread_local WorkerThreadPool::TaskID ResourceLoader::caller_task_id = 0; thread_local Vector<String> *ResourceLoader::load_paths_stack; +thread_local HashMap<int, HashMap<String, Ref<Resource>>> ResourceLoader::res_ref_overrides; template <> thread_local uint32_t SafeBinaryMutex<ResourceLoader::BINARY_MUTEX_TAG>::count = 0; diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index 11abb4dc18..46df79ea22 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -174,6 +174,7 @@ private: String type_hint; float progress = 0.0f; float max_reported_progress = 0.0f; + uint64_t last_progress_check_main_thread_frame = UINT64_MAX; ThreadLoadStatus status = THREAD_LOAD_IN_PROGRESS; ResourceFormatLoader::CacheMode cache_mode = ResourceFormatLoader::CACHE_MODE_REUSE; Error error = OK; @@ -187,6 +188,7 @@ private: static thread_local int load_nesting; static thread_local WorkerThreadPool::TaskID caller_task_id; + static thread_local HashMap<int, HashMap<String, Ref<Resource>>> res_ref_overrides; // Outermost key is nesting level. static thread_local Vector<String> *load_paths_stack; // A pointer to avoid broken TLS implementations from double-running the destructor. static SafeBinaryMutex<BINARY_MUTEX_TAG> thread_load_mutex; static HashMap<String, ThreadLoadTask> thread_load_tasks; @@ -196,6 +198,8 @@ private: static float _dependency_get_progress(const String &p_path); + static bool _ensure_load_progress(); + public: static Error load_threaded_request(const String &p_path, const String &p_type_hint = "", bool p_use_sub_threads = false, ResourceFormatLoader::CacheMode p_cache_mode = ResourceFormatLoader::CACHE_MODE_REUSE); static ThreadLoadStatus load_threaded_get_status(const String &p_path, float *r_progress = nullptr); @@ -272,6 +276,9 @@ public: static void set_create_missing_resources_if_class_unavailable(bool p_enable); _FORCE_INLINE_ static bool is_creating_missing_resources_if_class_unavailable_enabled() { return create_missing_resources_if_class_unavailable; } + static Ref<Resource> ensure_resource_ref_override_for_outer_load(const String &p_path, const String &p_res_type); + static Ref<Resource> get_resource_ref_override(const String &p_path); + static bool is_cleaning_tasks(); static void initialize(); diff --git a/core/math/a_star_grid_2d.cpp b/core/math/a_star_grid_2d.cpp index f272407869..984bb1c9c1 100644 --- a/core/math/a_star_grid_2d.cpp +++ b/core/math/a_star_grid_2d.cpp @@ -122,6 +122,10 @@ AStarGrid2D::CellShape AStarGrid2D::get_cell_shape() const { } void AStarGrid2D::update() { + if (!dirty) { + return; + } + points.clear(); const int32_t end_x = region.get_end().x; diff --git a/core/math/aabb.h b/core/math/aabb.h index 9a74266ff7..cb358ca7ef 100644 --- a/core/math/aabb.h +++ b/core/math/aabb.h @@ -41,7 +41,7 @@ class Variant; -struct _NO_DISCARD_ AABB { +struct [[nodiscard]] AABB { Vector3 position; Vector3 size; diff --git a/core/math/basis.h b/core/math/basis.h index 918cbc18d4..5c1a5fbdda 100644 --- a/core/math/basis.h +++ b/core/math/basis.h @@ -34,7 +34,7 @@ #include "core/math/quaternion.h" #include "core/math/vector3.h" -struct _NO_DISCARD_ Basis { +struct [[nodiscard]] Basis { Vector3 rows[3] = { Vector3(1, 0, 0), Vector3(0, 1, 0), diff --git a/core/math/color.h b/core/math/color.h index 65d7377c1c..e17b8c9fd7 100644 --- a/core/math/color.h +++ b/core/math/color.h @@ -35,7 +35,7 @@ class String; -struct _NO_DISCARD_ Color { +struct [[nodiscard]] Color { union { struct { float r; diff --git a/core/math/face3.h b/core/math/face3.h index 3dd47d0226..519dcb6414 100644 --- a/core/math/face3.h +++ b/core/math/face3.h @@ -36,7 +36,7 @@ #include "core/math/transform_3d.h" #include "core/math/vector3.h" -struct _NO_DISCARD_ Face3 { +struct [[nodiscard]] Face3 { enum Side { SIDE_OVER, SIDE_UNDER, diff --git a/core/math/plane.h b/core/math/plane.h index 8159f25342..6529fea60a 100644 --- a/core/math/plane.h +++ b/core/math/plane.h @@ -35,7 +35,7 @@ class Variant; -struct _NO_DISCARD_ Plane { +struct [[nodiscard]] Plane { Vector3 normal; real_t d = 0; diff --git a/core/math/projection.h b/core/math/projection.h index f3ed9d7b1c..5af43561c0 100644 --- a/core/math/projection.h +++ b/core/math/projection.h @@ -43,7 +43,7 @@ struct Rect2; struct Transform3D; struct Vector2; -struct _NO_DISCARD_ Projection { +struct [[nodiscard]] Projection { enum Planes { PLANE_NEAR, PLANE_FAR, diff --git a/core/math/quaternion.h b/core/math/quaternion.h index 868a2916f5..655e55e0a2 100644 --- a/core/math/quaternion.h +++ b/core/math/quaternion.h @@ -35,7 +35,7 @@ #include "core/math/vector3.h" #include "core/string/ustring.h" -struct _NO_DISCARD_ Quaternion { +struct [[nodiscard]] Quaternion { union { struct { real_t x; diff --git a/core/math/rect2.h b/core/math/rect2.h index b4069ae86a..9cb341b689 100644 --- a/core/math/rect2.h +++ b/core/math/rect2.h @@ -38,7 +38,7 @@ class String; struct Rect2i; struct Transform2D; -struct _NO_DISCARD_ Rect2 { +struct [[nodiscard]] Rect2 { Point2 position; Size2 size; diff --git a/core/math/rect2i.h b/core/math/rect2i.h index a1338da0bb..5f3a3d54f5 100644 --- a/core/math/rect2i.h +++ b/core/math/rect2i.h @@ -37,7 +37,7 @@ class String; struct Rect2; -struct _NO_DISCARD_ Rect2i { +struct [[nodiscard]] Rect2i { Point2i position; Size2i size; diff --git a/core/math/transform_2d.h b/core/math/transform_2d.h index 4ec2dc119c..476577508f 100644 --- a/core/math/transform_2d.h +++ b/core/math/transform_2d.h @@ -38,7 +38,7 @@ class String; -struct _NO_DISCARD_ Transform2D { +struct [[nodiscard]] Transform2D { // Warning #1: basis of Transform2D is stored differently from Basis. In terms of columns array, the basis matrix looks like "on paper": // M = (columns[0][0] columns[1][0]) // (columns[0][1] columns[1][1]) diff --git a/core/math/transform_3d.h b/core/math/transform_3d.h index 7d89b86c75..b1de233445 100644 --- a/core/math/transform_3d.h +++ b/core/math/transform_3d.h @@ -36,7 +36,7 @@ #include "core/math/plane.h" #include "core/templates/vector.h" -struct _NO_DISCARD_ Transform3D { +struct [[nodiscard]] Transform3D { Basis basis; Vector3 origin; diff --git a/core/math/transform_interpolator.cpp b/core/math/transform_interpolator.cpp index 7cfe880b5a..6a564b0ca7 100644 --- a/core/math/transform_interpolator.cpp +++ b/core/math/transform_interpolator.cpp @@ -33,44 +33,14 @@ #include "core/math/transform_2d.h" void TransformInterpolator::interpolate_transform_2d(const Transform2D &p_prev, const Transform2D &p_curr, Transform2D &r_result, real_t p_fraction) { - // Extract parameters. - Vector2 p1 = p_prev.get_origin(); - Vector2 p2 = p_curr.get_origin(); - // Special case for physics interpolation, if flipping, don't interpolate basis. // If the determinant polarity changes, the handedness of the coordinate system changes. if (_sign(p_prev.determinant()) != _sign(p_curr.determinant())) { r_result.columns[0] = p_curr.columns[0]; r_result.columns[1] = p_curr.columns[1]; - r_result.set_origin(p1.lerp(p2, p_fraction)); + r_result.set_origin(p_prev.get_origin().lerp(p_curr.get_origin(), p_fraction)); return; } - real_t r1 = p_prev.get_rotation(); - real_t r2 = p_curr.get_rotation(); - - Size2 s1 = p_prev.get_scale(); - Size2 s2 = p_curr.get_scale(); - - // Slerp rotation. - Vector2 v1(Math::cos(r1), Math::sin(r1)); - Vector2 v2(Math::cos(r2), Math::sin(r2)); - - real_t dot = v1.dot(v2); - - dot = CLAMP(dot, -1, 1); - - Vector2 v; - - if (dot > 0.9995f) { - v = v1.lerp(v2, p_fraction).normalized(); // Linearly interpolate to avoid numerical precision issues. - } else { - real_t angle = p_fraction * Math::acos(dot); - Vector2 v3 = (v2 - v1 * dot).normalized(); - v = v1 * Math::cos(angle) + v3 * Math::sin(angle); - } - - // Construct matrix. - r_result = Transform2D(Math::atan2(v.y, v.x), p1.lerp(p2, p_fraction)); - r_result.scale_basis(s1.lerp(s2, p_fraction)); + r_result = p_prev.interpolate_with(p_curr, p_fraction); } diff --git a/core/math/vector2.h b/core/math/vector2.h index 8851942cdd..edb47db6fd 100644 --- a/core/math/vector2.h +++ b/core/math/vector2.h @@ -37,7 +37,7 @@ class String; struct Vector2i; -struct _NO_DISCARD_ Vector2 { +struct [[nodiscard]] Vector2 { static const int AXIS_COUNT = 2; enum Axis { diff --git a/core/math/vector2i.h b/core/math/vector2i.h index aca9ae8272..fff9b0a658 100644 --- a/core/math/vector2i.h +++ b/core/math/vector2i.h @@ -37,7 +37,7 @@ class String; struct Vector2; -struct _NO_DISCARD_ Vector2i { +struct [[nodiscard]] Vector2i { static const int AXIS_COUNT = 2; enum Axis { diff --git a/core/math/vector3.h b/core/math/vector3.h index 2313eb557a..14bc44c4e7 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -39,7 +39,7 @@ struct Basis; struct Vector2; struct Vector3i; -struct _NO_DISCARD_ Vector3 { +struct [[nodiscard]] Vector3 { static const int AXIS_COUNT = 3; enum Axis { diff --git a/core/math/vector3i.h b/core/math/vector3i.h index 035cfcf9e2..40d0700bf7 100644 --- a/core/math/vector3i.h +++ b/core/math/vector3i.h @@ -37,7 +37,7 @@ class String; struct Vector3; -struct _NO_DISCARD_ Vector3i { +struct [[nodiscard]] Vector3i { static const int AXIS_COUNT = 3; enum Axis { diff --git a/core/math/vector4.h b/core/math/vector4.h index f69b4752bb..8632f69f57 100644 --- a/core/math/vector4.h +++ b/core/math/vector4.h @@ -38,7 +38,7 @@ class String; struct Vector4i; -struct _NO_DISCARD_ Vector4 { +struct [[nodiscard]] Vector4 { static const int AXIS_COUNT = 4; enum Axis { diff --git a/core/math/vector4i.h b/core/math/vector4i.h index 8a9c580bc1..a9036d684a 100644 --- a/core/math/vector4i.h +++ b/core/math/vector4i.h @@ -37,7 +37,7 @@ class String; struct Vector4; -struct _NO_DISCARD_ Vector4i { +struct [[nodiscard]] Vector4i { static const int AXIS_COUNT = 4; enum Axis { diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp index fe4345aa0d..24cf0a29c5 100644 --- a/core/object/class_db.cpp +++ b/core/object/class_db.cpp @@ -76,6 +76,21 @@ class PlaceholderExtensionInstance { StringName class_name; HashMap<StringName, Variant> properties; + // Checks if a property is from a runtime class, and not a non-runtime base class. + bool is_runtime_property(const StringName &p_property_name) { + StringName current_class_name = class_name; + + while (ClassDB::is_class_runtime(current_class_name)) { + if (ClassDB::has_property(current_class_name, p_property_name, true)) { + return true; + } + + current_class_name = ClassDB::get_parent_class(current_class_name); + } + + return false; + } + public: PlaceholderExtensionInstance(const StringName &p_class_name) { class_name = p_class_name; @@ -83,27 +98,24 @@ public: ~PlaceholderExtensionInstance() {} - void set(const StringName &p_name, const Variant &p_value) { - bool is_default_valid = false; - Variant default_value = ClassDB::class_get_default_property_value(class_name, p_name, &is_default_valid); - - // If there's a default value, then we know it's a valid property. - if (is_default_valid) { + void set(const StringName &p_name, const Variant &p_value, bool &r_valid) { + r_valid = is_runtime_property(p_name); + if (r_valid) { properties[p_name] = p_value; } } - Variant get(const StringName &p_name) { + Variant get(const StringName &p_name, bool &r_valid) { const Variant *value = properties.getptr(p_name); Variant ret; if (value) { ret = *value; + r_valid = true; } else { - bool is_default_valid = false; - Variant default_value = ClassDB::class_get_default_property_value(class_name, p_name, &is_default_valid); - if (is_default_valid) { - ret = default_value; + r_valid = is_runtime_property(p_name); + if (r_valid) { + ret = ClassDB::class_get_default_property_value(class_name, p_name); } } @@ -115,10 +127,10 @@ public: const StringName &name = *(StringName *)p_name; const Variant &value = *(const Variant *)p_value; - self->set(name, value); + bool valid = false; + self->set(name, value, valid); - // We have to return true so Godot doesn't try to call the real setter function. - return true; + return valid; } static GDExtensionBool placeholder_instance_get(GDExtensionClassInstancePtr p_instance, GDExtensionConstStringNamePtr p_name, GDExtensionVariantPtr r_ret) { @@ -126,10 +138,10 @@ public: const StringName &name = *(StringName *)p_name; Variant *value = (Variant *)r_ret; - *value = self->get(name); + bool valid = false; + *value = self->get(name, valid); - // We have to return true so Godot doesn't try to call the real getter function. - return true; + return valid; } static const GDExtensionPropertyInfo *placeholder_instance_get_property_list(GDExtensionClassInstancePtr p_instance, uint32_t *r_count) { @@ -172,9 +184,9 @@ public: static GDExtensionObjectPtr placeholder_class_create_instance(void *p_class_userdata) { ClassDB::ClassInfo *ti = (ClassDB::ClassInfo *)p_class_userdata; - // Find the closest native parent. + // Find the closest native parent, that isn't a runtime class. ClassDB::ClassInfo *native_parent = ti->inherits_ptr; - while (native_parent->gdextension) { + while (native_parent->gdextension || native_parent->is_runtime) { native_parent = native_parent->inherits_ptr; } ERR_FAIL_NULL_V(native_parent->creation_func, nullptr); @@ -1952,6 +1964,14 @@ bool ClassDB::is_class_reloadable(const StringName &p_class) { return ti->reloadable; } +bool ClassDB::is_class_runtime(const StringName &p_class) { + OBJTYPE_RLOCK; + + ClassInfo *ti = classes.getptr(p_class); + ERR_FAIL_NULL_V_MSG(ti, false, "Cannot get class '" + String(p_class) + "'."); + return ti->is_runtime; +} + void ClassDB::add_resource_base_extension(const StringName &p_extension, const StringName &p_class) { if (resource_base_extensions.has(p_extension)) { return; @@ -2063,6 +2083,11 @@ void ClassDB::register_extension_class(ObjectGDExtension *p_extension) { ClassInfo *parent = classes.getptr(p_extension->parent_class_name); +#ifdef TOOLS_ENABLED + // @todo This is a limitation of the current implementation, but it should be possible to remove. + ERR_FAIL_COND_MSG(p_extension->is_runtime && parent->gdextension && !parent->is_runtime, "Extension runtime class " + String(p_extension->class_name) + " cannot descend from " + parent->name + " which isn't also a runtime class"); +#endif + ClassInfo c; c.api = p_extension->editor_class ? API_EDITOR_EXTENSION : API_EXTENSION; c.gdextension = p_extension; diff --git a/core/object/class_db.h b/core/object/class_db.h index 37a864c109..fb671bdc84 100644 --- a/core/object/class_db.h +++ b/core/object/class_db.h @@ -460,6 +460,7 @@ public: static bool is_class_exposed(const StringName &p_class); static bool is_class_reloadable(const StringName &p_class); + static bool is_class_runtime(const StringName &p_class); static void add_resource_base_extension(const StringName &p_extension, const StringName &p_class); static void get_resource_base_extensions(List<String> *p_extensions); diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp index eb7d560a5d..0b528e908a 100644 --- a/core/object/script_language.cpp +++ b/core/object/script_language.cpp @@ -697,7 +697,13 @@ bool PlaceHolderScriptInstance::has_method(const StringName &p_method) const { } if (script.is_valid()) { - return script->has_method(p_method); + Ref<Script> scr = script; + while (scr.is_valid()) { + if (scr->has_method(p_method)) { + return true; + } + scr = scr->get_base_script(); + } } return false; } diff --git a/core/object/worker_thread_pool.cpp b/core/object/worker_thread_pool.cpp index a7c0a0353e..caf4ed3835 100644 --- a/core/object/worker_thread_pool.cpp +++ b/core/object/worker_thread_pool.cpp @@ -33,7 +33,6 @@ #include "core/object/script_language.h" #include "core/os/os.h" #include "core/os/thread_safe.h" -#include "core/templates/command_queue_mt.h" WorkerThreadPool::Task *const WorkerThreadPool::ThreadData::YIELDING = (Task *)1; @@ -46,7 +45,9 @@ void WorkerThreadPool::Task::free_template_userdata() { WorkerThreadPool *WorkerThreadPool::singleton = nullptr; -thread_local CommandQueueMT *WorkerThreadPool::flushing_cmd_queue = nullptr; +#ifdef THREADS_ENABLED +thread_local uintptr_t WorkerThreadPool::unlockable_mutexes[MAX_UNLOCKABLE_MUTEXES] = {}; +#endif void WorkerThreadPool::_process_task(Task *p_task) { #ifdef THREADS_ENABLED @@ -419,6 +420,34 @@ Error WorkerThreadPool::wait_for_task_completion(TaskID p_task_id) { return OK; } +void WorkerThreadPool::_lock_unlockable_mutexes() { +#ifdef THREADS_ENABLED + for (uint32_t i = 0; i < MAX_UNLOCKABLE_MUTEXES; i++) { + if (unlockable_mutexes[i]) { + if ((((uintptr_t)unlockable_mutexes[i]) & 1) == 0) { + ((Mutex *)unlockable_mutexes[i])->lock(); + } else { + ((BinaryMutex *)(unlockable_mutexes[i] & ~1))->lock(); + } + } + } +#endif +} + +void WorkerThreadPool::_unlock_unlockable_mutexes() { +#ifdef THREADS_ENABLED + for (uint32_t i = 0; i < MAX_UNLOCKABLE_MUTEXES; i++) { + if (unlockable_mutexes[i]) { + if ((((uintptr_t)unlockable_mutexes[i]) & 1) == 0) { + ((Mutex *)unlockable_mutexes[i])->unlock(); + } else { + ((BinaryMutex *)(unlockable_mutexes[i] & ~1))->unlock(); + } + } + } +#endif +} + void WorkerThreadPool::_wait_collaboratively(ThreadData *p_caller_pool_thread, Task *p_task) { // Keep processing tasks until the condition to stop waiting is met. @@ -426,6 +455,7 @@ void WorkerThreadPool::_wait_collaboratively(ThreadData *p_caller_pool_thread, T while (true) { Task *task_to_process = nullptr; + bool relock_unlockables = false; { MutexLock lock(task_mutex); bool was_signaled = p_caller_pool_thread->signaled; @@ -463,13 +493,9 @@ void WorkerThreadPool::_wait_collaboratively(ThreadData *p_caller_pool_thread, T if (!task_to_process) { p_caller_pool_thread->awaited_task = p_task; - if (flushing_cmd_queue) { - flushing_cmd_queue->unlock(); - } + _unlock_unlockable_mutexes(); + relock_unlockables = true; p_caller_pool_thread->cond_var.wait(lock); - if (flushing_cmd_queue) { - flushing_cmd_queue->lock(); - } DEV_ASSERT(exit_threads || p_caller_pool_thread->signaled || IS_WAIT_OVER); p_caller_pool_thread->awaited_task = nullptr; @@ -477,6 +503,10 @@ void WorkerThreadPool::_wait_collaboratively(ThreadData *p_caller_pool_thread, T } } + if (relock_unlockables) { + _lock_unlockable_mutexes(); + } + if (task_to_process) { _process_task(task_to_process); } @@ -603,13 +633,9 @@ void WorkerThreadPool::wait_for_group_task_completion(GroupID p_group) { { Group *group = *groupp; - if (flushing_cmd_queue) { - flushing_cmd_queue->unlock(); - } + _unlock_unlockable_mutexes(); group->done_semaphore.wait(); - if (flushing_cmd_queue) { - flushing_cmd_queue->lock(); - } + _lock_unlockable_mutexes(); uint32_t max_users = group->tasks_used + 1; // Add 1 because the thread waiting for it is also user. Read before to avoid another thread freeing task after increment. uint32_t finished_users = group->finished.increment(); // fetch happens before inc, so increment later. @@ -633,16 +659,41 @@ int WorkerThreadPool::get_thread_index() { return singleton->thread_ids.has(tid) ? singleton->thread_ids[tid] : -1; } -void WorkerThreadPool::thread_enter_command_queue_mt_flush(CommandQueueMT *p_queue) { - ERR_FAIL_COND(flushing_cmd_queue != nullptr); - flushing_cmd_queue = p_queue; +#ifdef THREADS_ENABLED +uint32_t WorkerThreadPool::thread_enter_unlock_allowance_zone(Mutex *p_mutex) { + return _thread_enter_unlock_allowance_zone(p_mutex, false); +} + +uint32_t WorkerThreadPool::thread_enter_unlock_allowance_zone(BinaryMutex *p_mutex) { + return _thread_enter_unlock_allowance_zone(p_mutex, true); } -void WorkerThreadPool::thread_exit_command_queue_mt_flush() { - ERR_FAIL_NULL(flushing_cmd_queue); - flushing_cmd_queue = nullptr; +uint32_t WorkerThreadPool::_thread_enter_unlock_allowance_zone(void *p_mutex, bool p_is_binary) { + for (uint32_t i = 0; i < MAX_UNLOCKABLE_MUTEXES; i++) { + if (unlikely(unlockable_mutexes[i] == (uintptr_t)p_mutex)) { + // Already registered in the current thread. + return UINT32_MAX; + } + if (!unlockable_mutexes[i]) { + unlockable_mutexes[i] = (uintptr_t)p_mutex; + if (p_is_binary) { + unlockable_mutexes[i] |= 1; + } + return i; + } + } + ERR_FAIL_V_MSG(UINT32_MAX, "No more unlockable mutex slots available. Engine bug."); } +void WorkerThreadPool::thread_exit_unlock_allowance_zone(uint32_t p_zone_id) { + if (p_zone_id == UINT32_MAX) { + return; + } + DEV_ASSERT(unlockable_mutexes[p_zone_id]); + unlockable_mutexes[p_zone_id] = 0; +} +#endif + void WorkerThreadPool::init(int p_thread_count, float p_low_priority_task_ratio) { ERR_FAIL_COND(threads.size() > 0); if (p_thread_count < 0) { diff --git a/core/object/worker_thread_pool.h b/core/object/worker_thread_pool.h index a9cf260a0f..8774143abf 100644 --- a/core/object/worker_thread_pool.h +++ b/core/object/worker_thread_pool.h @@ -41,8 +41,6 @@ #include "core/templates/rid.h" #include "core/templates/safe_refcount.h" -class CommandQueueMT; - class WorkerThreadPool : public Object { GDCLASS(WorkerThreadPool, Object) public: @@ -163,7 +161,10 @@ private: static WorkerThreadPool *singleton; - static thread_local CommandQueueMT *flushing_cmd_queue; +#ifdef THREADS_ENABLED + static const uint32_t MAX_UNLOCKABLE_MUTEXES = 2; + static thread_local uintptr_t unlockable_mutexes[MAX_UNLOCKABLE_MUTEXES]; +#endif TaskID _add_task(const Callable &p_callable, void (*p_func)(void *), void *p_userdata, BaseTemplateUserdata *p_template_userdata, bool p_high_priority, const String &p_description); GroupID _add_group_task(const Callable &p_callable, void (*p_func)(void *, uint32_t), void *p_userdata, BaseTemplateUserdata *p_template_userdata, int p_elements, int p_tasks, bool p_high_priority, const String &p_description); @@ -190,6 +191,13 @@ private: void _wait_collaboratively(ThreadData *p_caller_pool_thread, Task *p_task); +#ifdef THREADS_ENABLED + static uint32_t _thread_enter_unlock_allowance_zone(void *p_mutex, bool p_is_binary); +#endif + + void _lock_unlockable_mutexes(); + void _unlock_unlockable_mutexes(); + protected: static void _bind_methods(); @@ -232,8 +240,14 @@ public: static WorkerThreadPool *get_singleton() { return singleton; } static int get_thread_index(); - static void thread_enter_command_queue_mt_flush(CommandQueueMT *p_queue); - static void thread_exit_command_queue_mt_flush(); +#ifdef THREADS_ENABLED + static uint32_t thread_enter_unlock_allowance_zone(Mutex *p_mutex); + static uint32_t thread_enter_unlock_allowance_zone(BinaryMutex *p_mutex); + static void thread_exit_unlock_allowance_zone(uint32_t p_zone_id); +#else + static uint32_t thread_enter_unlock_allowance_zone(void *p_mutex) { return UINT32_MAX; } + static void thread_exit_unlock_allowance_zone(uint32_t p_zone_id) {} +#endif void init(int p_thread_count = -1, float p_low_priority_task_ratio = 0.3); void finish(); diff --git a/core/os/midi_driver.cpp b/core/os/midi_driver.cpp index 6870c84b49..6c748b1498 100644 --- a/core/os/midi_driver.cpp +++ b/core/os/midi_driver.cpp @@ -38,88 +38,167 @@ MIDIDriver *MIDIDriver::get_singleton() { return singleton; } -void MIDIDriver::set_singleton() { +MIDIDriver::MIDIDriver() { singleton = this; } -void MIDIDriver::receive_input_packet(int device_index, uint64_t timestamp, uint8_t *data, uint32_t length) { - Ref<InputEventMIDI> event; - event.instantiate(); - event->set_device(device_index); - uint32_t param_position = 1; - - if (length >= 1) { - if (data[0] >= 0xF0) { - // channel does not apply to system common messages - event->set_channel(0); - event->set_message(MIDIMessage(data[0])); - last_received_message = data[0]; - } else if ((data[0] & 0x80) == 0x00) { - // running status - event->set_channel(last_received_message & 0xF); - event->set_message(MIDIMessage(last_received_message >> 4)); - param_position = 0; +MIDIDriver::MessageCategory MIDIDriver::Parser::category(uint8_t p_midi_fragment) { + if (p_midi_fragment >= 0xf8) { + return MessageCategory::RealTime; + } else if (p_midi_fragment >= 0xf0) { + // System Exclusive begin/end are specified as System Common Category + // messages, but we separate them here and give them their own categories + // as their behavior is significantly different. + if (p_midi_fragment == 0xf0) { + return MessageCategory::SysExBegin; + } else if (p_midi_fragment == 0xf7) { + return MessageCategory::SysExEnd; + } + return MessageCategory::SystemCommon; + } else if (p_midi_fragment >= 0x80) { + return MessageCategory::Voice; + } + return MessageCategory::Data; +} + +MIDIMessage MIDIDriver::Parser::status_to_msg_enum(uint8_t p_status_byte) { + if (p_status_byte & 0x80) { + if (p_status_byte < 0xf0) { + return MIDIMessage(p_status_byte >> 4); } else { - event->set_channel(data[0] & 0xF); - event->set_message(MIDIMessage(data[0] >> 4)); - param_position = 1; - last_received_message = data[0]; + return MIDIMessage(p_status_byte); } } + return MIDIMessage::NONE; +} - switch (event->get_message()) { - case MIDIMessage::AFTERTOUCH: - if (length >= 2 + param_position) { - event->set_pitch(data[param_position]); - event->set_pressure(data[param_position + 1]); - } - break; +size_t MIDIDriver::Parser::expected_data(uint8_t p_status_byte) { + return expected_data(status_to_msg_enum(p_status_byte)); +} +size_t MIDIDriver::Parser::expected_data(MIDIMessage p_msg_type) { + switch (p_msg_type) { + case MIDIMessage::NOTE_OFF: + case MIDIMessage::NOTE_ON: + case MIDIMessage::AFTERTOUCH: case MIDIMessage::CONTROL_CHANGE: - if (length >= 2 + param_position) { - event->set_controller_number(data[param_position]); - event->set_controller_value(data[param_position + 1]); - } - break; + case MIDIMessage::PITCH_BEND: + case MIDIMessage::SONG_POSITION_POINTER: + return 2; + case MIDIMessage::PROGRAM_CHANGE: + case MIDIMessage::CHANNEL_PRESSURE: + case MIDIMessage::QUARTER_FRAME: + case MIDIMessage::SONG_SELECT: + return 1; + default: + return 0; + } +} - case MIDIMessage::NOTE_ON: +uint8_t MIDIDriver::Parser::channel(uint8_t p_status_byte) { + if (category(p_status_byte) == MessageCategory::Voice) { + return p_status_byte & 0x0f; + } + return 0; +} + +void MIDIDriver::send_event(int p_device_index, uint8_t p_status, + const uint8_t *p_data, size_t p_data_len) { + const MIDIMessage msg = Parser::status_to_msg_enum(p_status); + ERR_FAIL_COND(p_data_len < Parser::expected_data(msg)); + + Ref<InputEventMIDI> event; + event.instantiate(); + event->set_device(p_device_index); + event->set_channel(Parser::channel(p_status)); + event->set_message(msg); + switch (msg) { case MIDIMessage::NOTE_OFF: - if (length >= 2 + param_position) { - event->set_pitch(data[param_position]); - event->set_velocity(data[param_position + 1]); - } + case MIDIMessage::NOTE_ON: + event->set_pitch(p_data[0]); + event->set_velocity(p_data[1]); break; - - case MIDIMessage::PITCH_BEND: - if (length >= 2 + param_position) { - event->set_pitch((data[param_position + 1] << 7) | data[param_position]); - } + case MIDIMessage::AFTERTOUCH: + event->set_pitch(p_data[0]); + event->set_pressure(p_data[1]); + break; + case MIDIMessage::CONTROL_CHANGE: + event->set_controller_number(p_data[0]); + event->set_controller_value(p_data[1]); break; - case MIDIMessage::PROGRAM_CHANGE: - if (length >= 1 + param_position) { - event->set_instrument(data[param_position]); - } + event->set_instrument(p_data[0]); break; - case MIDIMessage::CHANNEL_PRESSURE: - if (length >= 1 + param_position) { - event->set_pressure(data[param_position]); - } + event->set_pressure(p_data[0]); + break; + case MIDIMessage::PITCH_BEND: + event->set_pitch((p_data[1] << 7) | p_data[0]); break; + // QUARTER_FRAME, SONG_POSITION_POINTER, and SONG_SELECT not yet implemented. default: break; } - - Input *id = Input::get_singleton(); - id->parse_input_event(event); + Input::get_singleton()->parse_input_event(event); } -PackedStringArray MIDIDriver::get_connected_inputs() { - PackedStringArray list; - return list; +void MIDIDriver::Parser::parse_fragment(uint8_t p_fragment) { + switch (category(p_fragment)) { + case MessageCategory::RealTime: + // Real-Time messages are single byte messages that can + // occur at any point and do not interrupt other messages. + // We pass them straight through. + MIDIDriver::send_event(device_index, p_fragment); + break; + + case MessageCategory::SysExBegin: + status_byte = p_fragment; + skipping_sys_ex = true; + break; + + case MessageCategory::SysExEnd: + status_byte = 0; + skipping_sys_ex = false; + break; + + case MessageCategory::Voice: + case MessageCategory::SystemCommon: + skipping_sys_ex = false; // If we were in SysEx, assume it was aborted. + received_data_len = 0; + status_byte = 0; + ERR_FAIL_COND(expected_data(p_fragment) > DATA_BUFFER_SIZE); + if (expected_data(p_fragment) == 0) { + // No data bytes needed, post it now. + MIDIDriver::send_event(device_index, p_fragment); + } else { + status_byte = p_fragment; + } + break; + + case MessageCategory::Data: + // We don't currently process SysEx messages, so ignore their data. + if (!skipping_sys_ex) { + const size_t expected = expected_data(status_byte); + if (received_data_len < expected) { + data_buffer[received_data_len] = p_fragment; + received_data_len++; + if (received_data_len == expected) { + MIDIDriver::send_event(device_index, status_byte, + data_buffer, expected); + received_data_len = 0; + // Voice messages can use 'running status', sending further + // messages without resending their status byte. + // For other messages types we clear the cached status byte. + if (category(status_byte) != MessageCategory::Voice) { + status_byte = 0; + } + } + } + } + break; + } } -MIDIDriver::MIDIDriver() { - set_singleton(); +PackedStringArray MIDIDriver::get_connected_inputs() const { + return connected_input_names; } diff --git a/core/os/midi_driver.h b/core/os/midi_driver.h index cad3d8189e..ddce63f9c8 100644 --- a/core/os/midi_driver.h +++ b/core/os/midi_driver.h @@ -42,19 +42,73 @@ class MIDIDriver { static MIDIDriver *singleton; static uint8_t last_received_message; +protected: + // Categories of message for parser logic. + enum class MessageCategory { + Data, + Voice, + SysExBegin, + SystemCommon, // excluding System Exclusive Begin/End + SysExEnd, + RealTime, + }; + + // Convert midi data to InputEventMIDI and send it to Input. + // p_data_len is the length of the buffer passed at p_data, this must be + // at least equal to the data required by the passed message type, but + // may be larger. Only the required data will be read. + static void send_event(int p_device_index, uint8_t p_status, + const uint8_t *p_data = nullptr, size_t p_data_len = 0); + + class Parser { + public: + Parser() = default; + Parser(int p_device_index) : + device_index{ p_device_index } {} + virtual ~Parser() = default; + + // Push a byte of MIDI stream. Any completed messages will be + // forwarded to MIDIDriver::send_event. + void parse_fragment(uint8_t p_fragment); + + static MessageCategory category(uint8_t p_midi_fragment); + + // If the byte is a Voice Message status byte return the contained + // channel number, otherwise zero. + static uint8_t channel(uint8_t p_status_byte); + + // If the byte is a status byte for a message with a fixed number of + // additional data bytes, return the number expected, otherwise zero. + static size_t expected_data(uint8_t p_status_byte); + static size_t expected_data(MIDIMessage p_msg_type); + + // If the fragment is a status byte return the message type + // represented, otherwise MIDIMessage::NONE. + static MIDIMessage status_to_msg_enum(uint8_t p_status_byte); + + private: + int device_index = 0; + + static constexpr size_t DATA_BUFFER_SIZE = 2; + + uint8_t status_byte = 0; + uint8_t data_buffer[DATA_BUFFER_SIZE] = { 0 }; + size_t received_data_len = 0; + bool skipping_sys_ex = false; + }; + + PackedStringArray connected_input_names; + public: static MIDIDriver *get_singleton(); - void set_singleton(); + + MIDIDriver(); + virtual ~MIDIDriver() = default; virtual Error open() = 0; virtual void close() = 0; - virtual PackedStringArray get_connected_inputs(); - - static void receive_input_packet(int device_index, uint64_t timestamp, uint8_t *data, uint32_t length); - - MIDIDriver(); - virtual ~MIDIDriver() {} + PackedStringArray get_connected_inputs() const; }; #endif // MIDI_DRIVER_H diff --git a/core/os/os.cpp b/core/os/os.cpp index fa7f23ded0..642de11a9f 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -247,7 +247,10 @@ String OS::get_safe_dir_name(const String &p_dir_name, bool p_allow_paths) const for (int i = 0; i < invalid_chars.size(); i++) { safe_dir_name = safe_dir_name.replace(invalid_chars[i], "-"); } - return safe_dir_name; + + // Trim trailing periods from the returned value as it's not valid for folder names on Windows. + // This check is still applied on non-Windows platforms so the returned value is consistent across platforms. + return safe_dir_name.rstrip("."); } // Path to data, config, cache, etc. OS-specific folders @@ -513,6 +516,10 @@ bool OS::has_feature(const String &p_feature) { if (p_feature == "threads") { return true; } +#else + if (p_feature == "nothreads") { + return true; + } #endif if (_check_internal_feature_support(p_feature)) { diff --git a/core/string/translation.cpp b/core/string/translation.cpp index 344fe42fa0..432016284a 100644 --- a/core/string/translation.cpp +++ b/core/string/translation.cpp @@ -752,10 +752,10 @@ StringName TranslationServer::tool_translate(const StringName &p_message, const if (tool_translation.is_valid()) { StringName r = tool_translation->get_message(p_message, p_context); if (r) { - return editor_pseudolocalization ? tool_pseudolocalize(r) : r; + return r; } } - return editor_pseudolocalization ? tool_pseudolocalize(p_message) : p_message; + return p_message; } StringName TranslationServer::tool_translate_plural(const StringName &p_message, const StringName &p_message_plural, int p_n, const StringName &p_context) const { @@ -856,10 +856,6 @@ void TranslationServer::set_pseudolocalization_enabled(bool p_enabled) { } } -void TranslationServer::set_editor_pseudolocalization(bool p_enabled) { - editor_pseudolocalization = p_enabled; -} - void TranslationServer::reload_pseudolocalization() { pseudolocalization_accents_enabled = GLOBAL_GET("internationalization/pseudolocalization/replace_with_accents"); pseudolocalization_double_vowels_enabled = GLOBAL_GET("internationalization/pseudolocalization/double_vowels"); diff --git a/core/string/translation.h b/core/string/translation.h index 78d6721347..0a7eacc45f 100644 --- a/core/string/translation.h +++ b/core/string/translation.h @@ -94,7 +94,6 @@ class TranslationServer : public Object { bool pseudolocalization_fake_bidi_enabled = false; bool pseudolocalization_override_enabled = false; bool pseudolocalization_skip_placeholders_enabled = false; - bool editor_pseudolocalization = false; float expansion_ratio = 0.0; String pseudolocalization_prefix; String pseudolocalization_suffix; @@ -170,7 +169,6 @@ public: bool is_pseudolocalization_enabled() const; void set_pseudolocalization_enabled(bool p_enabled); - void set_editor_pseudolocalization(bool p_enabled); void reload_pseudolocalization(); String standardize_locale(const String &p_locale) const; diff --git a/core/templates/command_queue_mt.h b/core/templates/command_queue_mt.h index 349404d75b..0748e9cb83 100644 --- a/core/templates/command_queue_mt.h +++ b/core/templates/command_queue_mt.h @@ -364,7 +364,7 @@ class CommandQueueMT { lock(); - WorkerThreadPool::thread_enter_command_queue_mt_flush(this); + uint32_t allowance_id = WorkerThreadPool::thread_enter_unlock_allowance_zone(&mutex); while (flush_read_ptr < command_mem.size()) { uint64_t size = *(uint64_t *)&command_mem[flush_read_ptr]; flush_read_ptr += 8; @@ -383,7 +383,7 @@ class CommandQueueMT { flush_read_ptr += size; } - WorkerThreadPool::thread_exit_command_queue_mt_flush(); + WorkerThreadPool::thread_exit_unlock_allowance_zone(allowance_id); command_mem.clear(); flush_read_ptr = 0; diff --git a/core/typedefs.h b/core/typedefs.h index 2b90a911cd..0de803293d 100644 --- a/core/typedefs.h +++ b/core/typedefs.h @@ -71,12 +71,7 @@ #endif #endif -// No discard allows the compiler to flag warnings if we don't use the return value of functions / classes -#ifndef _NO_DISCARD_ -#define _NO_DISCARD_ [[nodiscard]] -#endif - -// In some cases _NO_DISCARD_ will get false positives, +// In some cases [[nodiscard]] will get false positives, // we can prevent the warning in specific cases by preceding the call with a cast. #ifndef _ALLOW_DISCARD_ #define _ALLOW_DISCARD_ (void) diff --git a/core/variant/array.cpp b/core/variant/array.cpp index 3685515db5..54cd1eda2f 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -235,7 +235,7 @@ void Array::assign(const Array &p_array) { for (int i = 0; i < size; i++) { const Variant &element = source[i]; if (element.get_type() != Variant::NIL && (element.get_type() != Variant::OBJECT || !typed.validate_object(element, "assign"))) { - ERR_FAIL_MSG(vformat(R"(Unable to convert array index %i from "%s" to "%s".)", i, Variant::get_type_name(element.get_type()), Variant::get_type_name(typed.type))); + ERR_FAIL_MSG(vformat(R"(Unable to convert array index %d from "%s" to "%s".)", i, Variant::get_type_name(element.get_type()), Variant::get_type_name(typed.type))); } } _p->array = p_array._p->array; @@ -258,11 +258,11 @@ void Array::assign(const Array &p_array) { continue; } if (!Variant::can_convert_strict(value->get_type(), typed.type)) { - ERR_FAIL_MSG("Unable to convert array index " + itos(i) + " from '" + Variant::get_type_name(value->get_type()) + "' to '" + Variant::get_type_name(typed.type) + "'."); + ERR_FAIL_MSG(vformat(R"(Unable to convert array index %d from "%s" to "%s".)", i, Variant::get_type_name(value->get_type()), Variant::get_type_name(typed.type))); } Callable::CallError ce; Variant::construct(typed.type, data[i], &value, 1, ce); - ERR_FAIL_COND_MSG(ce.error, vformat(R"(Unable to convert array index %i from "%s" to "%s".)", i, Variant::get_type_name(value->get_type()), Variant::get_type_name(typed.type))); + ERR_FAIL_COND_MSG(ce.error, vformat(R"(Unable to convert array index %d from "%s" to "%s".)", i, Variant::get_type_name(value->get_type()), Variant::get_type_name(typed.type))); } } else if (Variant::can_convert_strict(source_typed.type, typed.type)) { // from primitives to different convertible primitives @@ -270,7 +270,7 @@ void Array::assign(const Array &p_array) { const Variant *value = source + i; Callable::CallError ce; Variant::construct(typed.type, data[i], &value, 1, ce); - ERR_FAIL_COND_MSG(ce.error, vformat(R"(Unable to convert array index %i from "%s" to "%s".)", i, Variant::get_type_name(value->get_type()), Variant::get_type_name(typed.type))); + ERR_FAIL_COND_MSG(ce.error, vformat(R"(Unable to convert array index %d from "%s" to "%s".)", i, Variant::get_type_name(value->get_type()), Variant::get_type_name(typed.type))); } } else { ERR_FAIL_MSG(vformat(R"(Cannot assign contents of "Array[%s]" to "Array[%s]".)", Variant::get_type_name(source_typed.type), Variant::get_type_name(typed.type))); diff --git a/core/variant/typed_array.h b/core/variant/typed_array.h index e00947ed1e..07bf8afa7b 100644 --- a/core/variant/typed_array.h +++ b/core/variant/typed_array.h @@ -46,10 +46,15 @@ public: _ref(p_array); } _FORCE_INLINE_ TypedArray(const Variant &p_variant) : - Array(Array(p_variant), Variant::OBJECT, T::get_class_static(), Variant()) { + TypedArray(Array(p_variant)) { } - _FORCE_INLINE_ TypedArray(const Array &p_array) : - Array(p_array, Variant::OBJECT, T::get_class_static(), Variant()) { + _FORCE_INLINE_ TypedArray(const Array &p_array) { + set_typed(Variant::OBJECT, T::get_class_static(), Variant()); + if (is_same_typed(p_array)) { + _ref(p_array); + } else { + assign(p_array); + } } _FORCE_INLINE_ TypedArray() { set_typed(Variant::OBJECT, T::get_class_static(), Variant()); @@ -78,10 +83,15 @@ struct VariantInternalAccessor<const TypedArray<T> &> { _ref(p_array); \ } \ _FORCE_INLINE_ TypedArray(const Variant &p_variant) : \ - Array(Array(p_variant), m_variant_type, StringName(), Variant()) { \ + TypedArray(Array(p_variant)) { \ } \ - _FORCE_INLINE_ TypedArray(const Array &p_array) : \ - Array(p_array, m_variant_type, StringName(), Variant()) { \ + _FORCE_INLINE_ TypedArray(const Array &p_array) { \ + set_typed(m_variant_type, StringName(), Variant()); \ + if (is_same_typed(p_array)) { \ + _ref(p_array); \ + } else { \ + assign(p_array); \ + } \ } \ _FORCE_INLINE_ TypedArray() { \ set_typed(m_variant_type, StringName(), Variant()); \ diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index 30a8facd67..c1ef31c784 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -951,7 +951,7 @@ bool Variant::is_zero() const { return *reinterpret_cast<const ::RID *>(_data._mem) == ::RID(); } case OBJECT: { - return get_validated_object() == nullptr; + return _get_obj().obj == nullptr; } case CALLABLE: { return reinterpret_cast<const Callable *>(_data._mem)->is_null(); diff --git a/core/variant/variant.h b/core/variant/variant.h index f352af24da..1cb3580c01 100644 --- a/core/variant/variant.h +++ b/core/variant/variant.h @@ -857,7 +857,7 @@ String vformat(const String &p_text, const VarArgs... p_args) { bool error = false; String fmt = p_text.sprintf(args_array, &error); - ERR_FAIL_COND_V_MSG(error, String(), fmt); + ERR_FAIL_COND_V_MSG(error, String(), String("Formatting error in string \"") + p_text + "\": " + fmt + "."); return fmt; } diff --git a/core/variant/variant_op.h b/core/variant/variant_op.h index 0b94d79a97..ac39a4135f 100644 --- a/core/variant/variant_op.h +++ b/core/variant/variant_op.h @@ -548,14 +548,14 @@ public: class OperatorEvaluatorEqualObject { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - const ObjectID &a = VariantInternal::get_object_id(&p_left); - const ObjectID &b = VariantInternal::get_object_id(&p_right); + const Object *a = p_left.get_validated_object(); + const Object *b = p_right.get_validated_object(); *r_ret = a == b; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - const ObjectID &a = VariantInternal::get_object_id(left); - const ObjectID &b = VariantInternal::get_object_id(right); + const Object *a = left->get_validated_object(); + const Object *b = right->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == b; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { @@ -567,12 +567,12 @@ public: class OperatorEvaluatorEqualObjectNil { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - const Object *a = p_left.operator Object *(); + const Object *a = p_left.get_validated_object(); *r_ret = a == nullptr; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - const Object *a = left->operator Object *(); + const Object *a = left->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = a == nullptr; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { @@ -584,12 +584,12 @@ public: class OperatorEvaluatorEqualNilObject { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - const Object *b = p_right.operator Object *(); + const Object *b = p_right.get_validated_object(); *r_ret = nullptr == b; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - const Object *b = right->operator Object *(); + const Object *b = right->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr == b; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { @@ -619,14 +619,14 @@ public: class OperatorEvaluatorNotEqualObject { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - const ObjectID &a = VariantInternal::get_object_id(&p_left); - const ObjectID &b = VariantInternal::get_object_id(&p_right); + Object *a = p_left.get_validated_object(); + Object *b = p_right.get_validated_object(); *r_ret = a != b; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - const ObjectID &a = VariantInternal::get_object_id(left); - const ObjectID &b = VariantInternal::get_object_id(right); + Object *a = left->get_validated_object(); + Object *b = right->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != b; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { @@ -638,12 +638,12 @@ public: class OperatorEvaluatorNotEqualObjectNil { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - Object *a = p_left.operator Object *(); + Object *a = p_left.get_validated_object(); *r_ret = a != nullptr; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - Object *a = left->operator Object *(); + Object *a = left->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = a != nullptr; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { @@ -655,12 +655,12 @@ public: class OperatorEvaluatorNotEqualNilObject { public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { - Object *b = p_right.operator Object *(); + Object *b = p_right.get_validated_object(); *r_ret = nullptr != b; r_valid = true; } static inline void validated_evaluate(const Variant *left, const Variant *right, Variant *r_ret) { - Object *b = right->operator Object *(); + Object *b = right->get_validated_object(); *VariantGetInternalPtr<bool>::get_ptr(r_ret) = nullptr != b; } static void ptr_evaluate(const void *left, const void *right, void *r_ret) { diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index 3b7a6e66fe..80fd52c684 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -560,7 +560,7 @@ <param index="0" name="track_idx" type="int" /> <param index="1" name="path" type="NodePath" /> <description> - Sets the path of a track. Paths must be valid scene-tree paths to a node and must be specified starting from the parent node of the node that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by [code]":"[/code]. + Sets the path of a track. Paths must be valid scene-tree paths to a node and must be specified starting from the [member AnimationMixer.root_node] that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by [code]":"[/code]. For example, [code]"character/skeleton:ankle"[/code] or [code]"character/mesh:transform/local"[/code]. </description> </method> diff --git a/doc/classes/AnimationMixer.xml b/doc/classes/AnimationMixer.xml index c635eba2ab..58ef118e46 100644 --- a/doc/classes/AnimationMixer.xml +++ b/doc/classes/AnimationMixer.xml @@ -27,6 +27,13 @@ <param index="1" name="library" type="AnimationLibrary" /> <description> Adds [param library] to the animation player, under the key [param name]. + AnimationMixer has a global library by default with an empty string as key. For adding an animation to the global library: + [codeblocks] + [gdscript] + var global_library = mixer.get_animation_library("") + global_library.add_animation("animation_name", animation_resource) + [/gdscript] + [/codeblocks] </description> </method> <method name="advance"> @@ -182,10 +189,10 @@ func _process(delta): if Input.is_action_just_pressed("animate"): state_machine.travel("Animate") - var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_Quaternion_accumulator() + var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_rotation_accumulator() var difference: Quaternion = prev_root_motion_rotation_accumulator.inverse() * current_root_motion_rotation_accumulator prev_root_motion_rotation_accumulator = current_root_motion_rotation_accumulator - transform.basis *= difference + transform.basis *= Basis(difference) [/gdscript] [/codeblocks] However, if the animation loops, an unintended discrete change may occur, so this is only useful for some simple use cases. @@ -297,8 +304,8 @@ This makes it more convenient to preview and edit animations in the editor, as changes to the scene will not be saved as long as they are set in the reset animation. </member> <member name="root_motion_track" type="NodePath" setter="set_root_motion_track" getter="get_root_motion_track" default="NodePath("")"> - The path to the Animation track used for root motion. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. To specify a track that controls properties or bones, append its name after the path, separated by [code]":"[/code]. For example, [code]"character/skeleton:ankle"[/code] or [code]"character/mesh:transform/local"[/code]. - If the track has type [constant Animation.TYPE_POSITION_3D], [constant Animation.TYPE_ROTATION_3D] or [constant Animation.TYPE_SCALE_3D] the transformation will be canceled visually, and the animation will appear to stay in place. See also [method get_root_motion_position], [method get_root_motion_rotation], [method get_root_motion_scale] and [RootMotionView]. + The path to the Animation track used for root motion. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. The [member root_motion_track] uses the same format as [method Animation.track_set_path], but note that a bone must be specified. + If the track has type [constant Animation.TYPE_POSITION_3D], [constant Animation.TYPE_ROTATION_3D], or [constant Animation.TYPE_SCALE_3D] the transformation will be canceled visually, and the animation will appear to stay in place. See also [method get_root_motion_position], [method get_root_motion_rotation], [method get_root_motion_scale], and [RootMotionView]. </member> <member name="root_node" type="NodePath" setter="set_root_node" getter="get_root_node" default="NodePath("..")"> The node which node path references will travel from. diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index 326b71c588..3731b8dcf1 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -4,41 +4,31 @@ A built-in data structure that holds a sequence of elements. </brief_description> <description> - An array data structure that can contain a sequence of elements of any type. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.). + An array data structure that can contain a sequence of elements of any [Variant] type. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.). [b]Example:[/b] [codeblocks] [gdscript] - var array = ["One", 2, 3, "Four"] - print(array[0]) # One. - print(array[2]) # 3. - print(array[-1]) # Four. - array[2] = "Three" - print(array[-2]) # Three. - [/gdscript] - [csharp] - var array = new Godot.Collections.Array{"One", 2, 3, "Four"}; - GD.Print(array[0]); // One. - GD.Print(array[2]); // 3. - GD.Print(array[array.Count - 1]); // Four. - array[2] = "Three"; - GD.Print(array[array.Count - 2]); // Three. - [/csharp] - [/codeblocks] - Arrays can be concatenated using the [code]+[/code] operator: - [codeblocks] - [gdscript] - var array1 = ["One", 2] - var array2 = [3, "Four"] - print(array1 + array2) # ["One", 2, 3, "Four"] + var array = ["First", 2, 3, "Last"] + print(array[0]) # Prints "First" + print(array[2]) # Prints 3 + print(array[-1]) # Prints "Last" + + array[1] = "Second" + print(array[1]) # Prints "Second" + print(array[-3]) # Prints "Second" [/gdscript] [csharp] - // Array concatenation is not possible with C# arrays, but is with Godot.Collections.Array. - var array1 = new Godot.Collections.Array{"One", 2}; - var array2 = new Godot.Collections.Array{3, "Four"}; - GD.Print(array1 + array2); // Prints [One, 2, 3, Four] + var array = new Godot.Collections.Array{"First", 2, 3, "Last"}; + GD.Print(array[0]); // Prints "First" + GD.Print(array[2]); // Prints 3 + GD.Print(array[array.Count - 1]); // Prints "Last" + + array[2] = "Second"; + GD.Print(array[1]); // Prints "Second" + GD.Print(array[array.Count - 3]); // Prints "Second" [/csharp] [/codeblocks] - [b]Note:[/b] Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use [method duplicate]. + [b]Note:[/b] Arrays are always passed by [b]reference[/b]. To get a copy of an array that can be modified independently of the original array, use [method duplicate]. [b]Note:[/b] Erasing elements while iterating over arrays is [b]not[/b] supported and will result in unpredictable behavior. [b]Differences between packed arrays, typed arrays, and untyped arrays:[/b] Packed arrays are generally faster to iterate on and modify compared to a typed array of the same type (e.g. [PackedInt64Array] versus [code]Array[int][/code]). Also, packed arrays consume less memory. As a downside, packed arrays are less flexible as they don't offer as many convenience methods such as [method Array.map]. Typed arrays are in turn faster to iterate on and modify than untyped arrays. </description> @@ -58,29 +48,32 @@ <param index="2" name="class_name" type="StringName" /> <param index="3" name="script" type="Variant" /> <description> - Creates a typed array from the [param base] array. All arguments are required. - - [param type] is the built-in type as a [enum Variant.Type] constant, for example [constant TYPE_INT]. - - [param class_name] is the [b]native[/b] class name, for example [Node]. If [param type] is not [constant TYPE_OBJECT], must be an empty string. - - [param script] is the associated script. Must be a [Script] instance or [code]null[/code]. - Examples: + Creates a typed array from the [param base] array. A typed array can only contain elements of the given type, or that inherit from the given class, as described by this constructor's parameters: + - [param type] is the built-in [Variant] type, as one the [enum Variant.Type] constants. + - [param class_name] is the built-in class name (see [method Object.get_class]). + - [param script] is the associated script. It must be a [Script] instance or [code]null[/code]. + If [param type] is not [constant TYPE_OBJECT], [param class_name] must be an empty [StringName] and [param script] must be [code]null[/code]. [codeblock] - class_name MyNode + class_name Sword extends Node - class MyClass: + class Stats: pass func _ready(): - var a = Array([], TYPE_INT, &"", null) # Array[int] - var b = Array([], TYPE_OBJECT, &"Node", null) # Array[Node] - var c = Array([], TYPE_OBJECT, &"Node", MyNode) # Array[MyNode] - var d = Array([], TYPE_OBJECT, &"RefCounted", MyClass) # Array[MyClass] + var a = Array([], TYPE_INT, "", null) # Array[int] + var b = Array([], TYPE_OBJECT, "Node", null) # Array[Node] + var c = Array([], TYPE_OBJECT, "Node", Sword) # Array[Sword] + var d = Array([], TYPE_OBJECT, "RefCounted", Stats) # Array[Stats] [/codeblock] - [b]Note:[/b] This constructor can be useful if you want to create a typed array on the fly, but you are not required to use it. In GDScript you can use a temporary variable with the static type you need and then pass it: + The [param base] array's elements are converted when necessary. If this is not possible or [param base] is already typed, this constructor fails and returns an empty [Array]. + In GDScript, this constructor is usually not necessary, as it is possible to create a typed array through static typing: [codeblock] - func _ready(): - var a: Array[int] = [] - some_func(a) + var numbers: Array[float] = [] + var children: Array[Node] = [$Node, $Sprite2D, $RigidBody3D] + + var integers: Array[int] = [0.2, 4.5, -2.0] + print(integers) # Prints [0, 4, -2] [/codeblock] </description> </constructor> @@ -167,20 +160,44 @@ <return type="bool" /> <param index="0" name="method" type="Callable" /> <description> - Calls the provided [Callable] on each element in the array and returns [code]true[/code] if the [Callable] returns [code]true[/code] for [i]all[/i] elements in the array. If the [Callable] returns [code]false[/code] for one array element or more, this method returns [code]false[/code]. - The callable's method should take one [Variant] parameter (the current array element) and return a boolean value. - [codeblock] + Calls the given [Callable] on each element in the array and returns [code]true[/code] if the [Callable] returns [code]true[/code] for [i]all[/i] elements in the array. If the [Callable] returns [code]false[/code] for one array element or more, this method returns [code]false[/code]. + The [param method] should take one [Variant] parameter (the current array element) and return a [bool]. + [codeblocks] + [gdscript] + func greater_than_5(number): + return number > 5 + func _ready(): - print([6, 10, 6].all(greater_than_5)) # Prints True (3/3 elements evaluate to `true`). - print([4, 10, 4].all(greater_than_5)) # Prints False (1/3 elements evaluate to `true`). - print([4, 4, 4].all(greater_than_5)) # Prints False (0/3 elements evaluate to `true`). - print([].all(greater_than_5)) # Prints True (0/0 elements evaluate to `true`). + print([6, 10, 6].all(greater_than_5)) # Prints true (3/3 elements evaluate to true). + print([4, 10, 4].all(greater_than_5)) # Prints false (1/3 elements evaluate to true). + print([4, 4, 4].all(greater_than_5)) # Prints false (0/3 elements evaluate to true). + print([].all(greater_than_5)) # Prints true (0/0 elements evaluate to true). + + # Same as the first line above, but using a lambda function. + print([6, 10, 6].all(func(element): return element > 5)) # Prints true + [/gdscript] + [csharp] + private static bool GreaterThan5(int number) + { + return number > 5; + } - print([6, 10, 6].all(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. + public override void _Ready() + { + // Prints true (3/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(GreaterThan5)); + // Prints false (1/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }.All(GreaterThan5)); + // Prints false (0/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }.All(GreaterThan5)); + // Prints true (0/0 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5)); - func greater_than_5(number): - return number > 5 - [/codeblock] + // Same as the first line above, but using a lambda function. + GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => element > 5)); // Prints true + } + [/csharp] + [/codeblocks] See also [method any], [method filter], [method map] and [method reduce]. [b]Note:[/b] Unlike relying on the size of an array returned by [method filter], this method will return as early as possible to improve performance (especially with large arrays). [b]Note:[/b] For an empty array, this method [url=https://en.wikipedia.org/wiki/Vacuous_truth]always[/url] returns [code]true[/code]. @@ -190,19 +207,20 @@ <return type="bool" /> <param index="0" name="method" type="Callable" /> <description> - Calls the provided [Callable] on each element in the array and returns [code]true[/code] if the [Callable] returns [code]true[/code] for [i]one or more[/i] elements in the array. If the [Callable] returns [code]false[/code] for all elements in the array, this method returns [code]false[/code]. - The callable's method should take one [Variant] parameter (the current array element) and return a boolean value. + Calls the given [Callable] on each element in the array and returns [code]true[/code] if the [Callable] returns [code]true[/code] for [i]one or more[/i] elements in the array. If the [Callable] returns [code]false[/code] for all elements in the array, this method returns [code]false[/code]. + The [param method] should take one [Variant] parameter (the current array element) and return a [bool]. [codeblock] - func _ready(): - print([6, 10, 6].any(greater_than_5)) # Prints True (3 elements evaluate to `true`). - print([4, 10, 4].any(greater_than_5)) # Prints True (1 elements evaluate to `true`). - print([4, 4, 4].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). - print([].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). - - print([6, 10, 6].any(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. - func greater_than_5(number): return number > 5 + + func _ready(): + print([6, 10, 6].any(greater_than_5)) # Prints true (3 elements evaluate to true). + print([4, 10, 4].any(greater_than_5)) # Prints true (1 elements evaluate to true). + print([4, 4, 4].any(greater_than_5)) # Prints false (0 elements evaluate to true). + print([].any(greater_than_5)) # Prints false (0 elements evaluate to true). + + # Same as the first line above, but using a lambda function. + print([6, 10, 6].any(func(number): return number > 5)) # Prints true [/codeblock] See also [method all], [method filter], [method map] and [method reduce]. [b]Note:[/b] Unlike relying on the size of an array returned by [method filter], this method will return as early as possible to improve performance (especially with large arrays). @@ -213,19 +231,19 @@ <return type="void" /> <param index="0" name="value" type="Variant" /> <description> - Appends an element at the end of the array (alias of [method push_back]). + Appends [param value] at the end of the array (alias of [method push_back]). </description> </method> <method name="append_array"> <return type="void" /> <param index="0" name="array" type="Array" /> <description> - Appends another array at the end of this array. + Appends another [param array] at the end of this array. [codeblock] - var array1 = [1, 2, 3] - var array2 = [4, 5, 6] - array1.append_array(array2) - print(array1) # Prints [1, 2, 3, 4, 5, 6]. + var numbers = [1, 2, 3] + var extra = [4, 5, 6] + numbers.append_array(extra) + print(nums) # Prints [1, 2, 3, 4, 5, 6] [/codeblock] </description> </method> @@ -239,8 +257,8 @@ <method name="back" qualifiers="const"> <return type="Variant" /> <description> - Returns the last element of the array. Prints an error and returns [code]null[/code] if the array is empty. - [b]Note:[/b] Calling this function is not the same as writing [code]array[-1][/code]. If the array is empty, accessing by index will pause project execution when running from the editor. + Returns the last element of the array. If the array is empty, fails and returns [code]null[/code]. See also [method front]. + [b]Note:[/b] Unlike with the [code][][/code] operator ([code]array[-1][/code]), an error is generated without stopping project execution. </description> </method> <method name="bsearch" qualifiers="const"> @@ -248,13 +266,20 @@ <param index="0" name="value" type="Variant" /> <param index="1" name="before" type="bool" default="true" /> <description> - Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search. Optionally, a [param before] specifier can be passed. If [code]false[/code], the returned index comes after all existing entries of the value in the array. + Returns the index of [param value] in the sorted array. If it cannot be found, returns where [param value] should be inserted to keep the array sorted. The algorithm used is [url=https://en.wikipedia.org/wiki/Binary_search_algorithm]binary search[/url]. + If [param before] is [code]true[/code] (as by default), the returned index comes before all existing elements equal to [param value] in the array. [codeblock] - var array = ["a", "b", "c", "c", "d", "e"] - print(array.bsearch("c", true)) # Prints 2, at the first matching element. - print(array.bsearch("c", false)) # Prints 4, after the last matching element, pointing to "d". + var numbers = [2, 4, 8, 10] + var idx = numbers.bsearch(7) + + numbers.insert(idx, 7) + print(numbers) # Prints [2, 4, 7, 8, 10] + + var fruits = ["Apple", "Lemon", "Lemon", "Orange"] + print(fruits.bsearch("Lemon", true)) # Prints 1, points at the first "Lemon". + print(fruits.bsearch("Lemon", false)) # Prints 3, points at "Orange". [/codeblock] - [b]Note:[/b] Calling [method bsearch] on an unsorted array results in unexpected behavior. + [b]Note:[/b] Calling [method bsearch] on an [i]unsorted[/i] array will result in unexpected behavior. Use [method sort] before calling this method. </description> </method> <method name="bsearch_custom" qualifiers="const"> @@ -263,15 +288,36 @@ <param index="1" name="func" type="Callable" /> <param index="2" name="before" type="bool" default="true" /> <description> - Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search and a custom comparison method. Optionally, a [param before] specifier can be passed. If [code]false[/code], the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return [code]true[/code] if the first argument is less than the second, and return [code]false[/code] otherwise. - [b]Note:[/b] The custom method must accept the two arguments in any order, you cannot rely on that the first argument will always be from the array. - [b]Note:[/b] Calling [method bsearch_custom] on an unsorted array results in unexpected behavior. + Returns the index of [param value] in the sorted array. If it cannot be found, returns where [param value] should be inserted to keep the array sorted (using [param func] for the comparisons). The algorithm used is [url=https://en.wikipedia.org/wiki/Binary_search_algorithm]binary search[/url]. + Similar to [method sort_custom], [param func] is called as many times as necessary, receiving one array element and [param value] as arguments. The function should return [code]true[/code] if the array element should be [i]behind[/i] [param value], otherwise it should return [code]false[/code]. + If [param before] is [code]true[/code] (as by default), the returned index comes before all existing elements equal to [param value] in the array. + [codeblock] + func sort_by_amount(a, b): + if a[1] < b[1]: + return true + return false + + func _ready(): + var my_items = [["Tomato", 2], ["Kiwi", 5], ["Rice", 9]] + + var apple = ["Apple", 5] + # "Apple" is inserted before "Kiwi". + my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple) + + var banana = ["Banana", 5] + # "Banana" is inserted after "Kiwi". + my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana) + + # Prints [["Tomato", 2], ["Apple", 5], ["Kiwi", 5], ["Banana", 5], ["Rice", 9]] + print(my_items) + [/codeblock] + [b]Note:[/b] Calling [method bsearch_custom] on an [i]unsorted[/i] array will result in unexpected behavior. Use [method sort_custom] with [param func] before calling this method. </description> </method> <method name="clear"> <return type="void" /> <description> - Clears the array. This is equivalent to using [method resize] with a size of [code]0[/code]. + Removes all elements from the array. This is equivalent to using [method resize] with a size of [code]0[/code]. </description> </method> <method name="count" qualifiers="const"> @@ -285,53 +331,57 @@ <return type="Array" /> <param index="0" name="deep" type="bool" default="false" /> <description> - Returns a copy of the array. - If [param deep] is [code]true[/code], a deep copy is performed: all nested arrays and dictionaries are duplicated and will not be shared with the original array. If [code]false[/code], a shallow copy is made and references to the original nested arrays and dictionaries are kept, so that modifying a sub-array or dictionary in the copy will also impact those referenced in the source array. Note that any [Object]-derived elements will be shallow copied regardless of the [param deep] setting. + Returns a new copy of the array. + By default, a [b]shallow[/b] copy is returned: all nested [Array] and [Dictionary] elements are shared with the original array. Modifying them in one array will also affect them in the other.[br]If [param deep] is [code]true[/code], a [b]deep[/b] copy is returned: all nested arrays and dictionaries are also duplicated (recursively). </description> </method> <method name="erase"> <return type="void" /> <param index="0" name="value" type="Variant" /> <description> - Removes the first occurrence of a value from the array. If the value does not exist in the array, nothing happens. To remove an element by index, use [method remove_at] instead. - [b]Note:[/b] This method acts in-place and doesn't return a modified array. - [b]Note:[/b] On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed. - [b]Note:[/b] Do not erase entries while iterating over the array. + Finds and removes the first occurrence of [param value] from the array. If [param value] does not exist in the array, nothing happens. To remove an element by index, use [method remove_at] instead. + [b]Note:[/b] This method shifts every element's index after the removed [param value] back, which may have a noticeable performance cost, especially on larger arrays. + [b]Note:[/b] Erasing elements while iterating over arrays is [b]not[/b] supported and will result in unpredictable behavior. </description> </method> <method name="fill"> <return type="void" /> <param index="0" name="value" type="Variant" /> <description> - Assigns the given value to all elements in the array. This can typically be used together with [method resize] to create an array with a given size and initialized elements: + Assigns the given [param value] to all elements in the array. + This method can often be combined with [method resize] to create an array with a given size and initialized elements: [codeblocks] [gdscript] var array = [] - array.resize(10) - array.fill(0) # Initialize the 10 elements to 0. + array.resize(5) + array.fill(2) + print(array) # Prints [2, 2, 2, 2, 2] [/gdscript] [csharp] var array = new Godot.Collections.Array(); - array.Resize(10); - array.Fill(0); // Initialize the 10 elements to 0. + array.Resize(5); + array.Fill(2); + GD.Print(array); // Prints [2, 2, 2, 2, 2] [/csharp] [/codeblocks] - [b]Note:[/b] If [param value] is of a reference type ([Object]-derived, [Array], [Dictionary], etc.) then the array is filled with the references to the same object, i.e. no duplicates are created. + [b]Note:[/b] If [param value] is a [Variant] passed by reference ([Object]-derived, [Array], [Dictionary], etc.), the array will be filled with references to the same [param value], which are not duplicates. </description> </method> <method name="filter" qualifiers="const"> <return type="Array" /> <param index="0" name="method" type="Callable" /> <description> - Calls the provided [Callable] on each element in the array and returns a new array with the elements for which the method returned [code]true[/code]. - The callable's method should take one [Variant] parameter (the current array element) and return a boolean value. + Calls the given [Callable] on each element in the array and returns a new, filtered [Array]. + The [param method] receives one of the array elements as an argument, and should return [code]true[/code] to add the element to the filtered array, or [code]false[/code] to exclude it. [codeblock] + func is_even(number): + return number % 2 == 0 + func _ready(): - print([1, 2, 3].filter(remove_1)) # Prints [2, 3]. - print([1, 2, 3].filter(func(number): return number != 1)) # Same as above, but using lambda function. + print([1, 4, 5, 8].filter(is_even)) # Prints [4, 8] - func remove_1(number): - return number != 1 + # Same as above, but using a lambda function. + print([1, 4, 5, 8].filter(func(number): return number % 2 == 0)) [/codeblock] See also [method any], [method all], [method map] and [method reduce]. </description> @@ -341,78 +391,70 @@ <param index="0" name="what" type="Variant" /> <param index="1" name="from" type="int" default="0" /> <description> - Searches the array for a value and returns its index or [code]-1[/code] if not found. Optionally, the initial search index can be passed. + Returns the index of the [b]first[/b] occurrence of [param what] in this array, or [code]-1[/code] if there are none. The search's start can be specified with [param from], continuing to the end of the array. + [b]Note:[/b] If you just want to know whether the array contains [param what], use [method has] ([code]Contains[/code] in C#). In GDScript, you may also use the [code]in[/code] operator. + [b]Note:[/b] For performance reasons, the search is affected by [param what]'s [enum Variant.Type]. For example, [code]7[/code] ([int]) and [code]7.0[/code] ([float]) are not considered equal for this method. </description> </method> <method name="front" qualifiers="const"> <return type="Variant" /> <description> - Returns the first element of the array. Prints an error and returns [code]null[/code] if the array is empty. - [b]Note:[/b] Calling this function is not the same as writing [code]array[0][/code]. If the array is empty, accessing by index will pause project execution when running from the editor. + Returns the first element of the array. If the array is empty, fails and returns [code]null[/code]. See also [method back]. + [b]Note:[/b] Unlike with the [code][][/code] operator ([code]array[0][/code]), an error is generated without stopping project execution. </description> </method> <method name="get_typed_builtin" qualifiers="const"> <return type="int" /> <description> - Returns the built-in type of the typed array as a [enum Variant.Type] constant. If the array is not typed, returns [constant TYPE_NIL]. + Returns the built-in [Variant] type of the typed array as a [enum Variant.Type] constant. If the array is not typed, returns [constant TYPE_NIL]. See also [method is_typed]. </description> </method> <method name="get_typed_class_name" qualifiers="const"> <return type="StringName" /> <description> - Returns the [b]native[/b] class name of the typed array if the built-in type is [constant TYPE_OBJECT]. Otherwise, this method returns an empty string. + Returns the [b]built-in[/b] class name of the typed array, if the built-in [Variant] type [constant TYPE_OBJECT]. Otherwise, returns an empty [StringName]. See also [method is_typed] and [method Object.get_class]. </description> </method> <method name="get_typed_script" qualifiers="const"> <return type="Variant" /> <description> - Returns the script associated with the typed array. This method returns a [Script] instance or [code]null[/code]. + Returns the [Script] instance associated with this typed array, or [code]null[/code] if it does not exist. See also [method is_typed]. </description> </method> <method name="has" qualifiers="const" keywords="includes, contains"> <return type="bool" /> <param index="0" name="value" type="Variant" /> <description> - Returns [code]true[/code] if the array contains the given value. + Returns [code]true[/code] if the array contains the given [param value]. [codeblocks] [gdscript] - print(["inside", 7].has("inside")) # True - print(["inside", 7].has("outside")) # False - print(["inside", 7].has(7)) # True - print(["inside", 7].has("7")) # False + print(["inside", 7].has("inside")) # Prints true + print(["inside", 7].has("outside")) # Prints false + print(["inside", 7].has(7)) # Prints true + print(["inside", 7].has("7")) # Prints false [/gdscript] [csharp] var arr = new Godot.Collections.Array { "inside", 7 }; - // has is renamed to Contains - GD.Print(arr.Contains("inside")); // True - GD.Print(arr.Contains("outside")); // False - GD.Print(arr.Contains(7)); // True - GD.Print(arr.Contains("7")); // False - [/csharp] - [/codeblocks] - [b]Note:[/b] This is equivalent to using the [code]in[/code] operator as follows: - [codeblocks] - [gdscript] - # Will evaluate to `true`. - if 2 in [2, 4, 6, 8]: - print("Contains!") - [/gdscript] - [csharp] - // As there is no "in" keyword in C#, you have to use Contains - var array = new Godot.Collections.Array { 2, 4, 6, 8 }; - if (array.Contains(2)) - { - GD.Print("Contains!"); - } + // By C# convention, this method is renamed to `Contains`. + GD.Print(arr.Contains("inside")); // Prints true + GD.Print(arr.Contains("outside")); // Prints false + GD.Print(arr.Contains(7)); // Prints true + GD.Print(arr.Contains("7")); // Prints false [/csharp] [/codeblocks] + In GDScript, this is equivalent to the [code]in[/code] operator: + [codeblock] + if 4 in [2, 4, 6, 8]: + print("4 is here!") # Will be printed. + [/codeblock] + [b]Note:[/b] For performance reasons, the search is affected by the [param value]'s [enum Variant.Type]. For example, [code]7[/code] ([int]) and [code]7.0[/code] ([float]) are not considered equal for this method. </description> </method> <method name="hash" qualifiers="const"> <return type="int" /> <description> Returns a hashed 32-bit integer value representing the array and its contents. - [b]Note:[/b] [Array]s with equal content will always produce identical hash values. However, the reverse is not true. Returning identical hash values does [i]not[/i] imply the arrays are equal, because different arrays can have identical hash values due to hash collisions. + [b]Note:[/b] Arrays with equal hash values are [i]not[/i] guaranteed to be the same, as a result of hash collisions. On the countrary, arrays with different hash values are guaranteed to be different. </description> </method> <method name="insert"> @@ -420,55 +462,64 @@ <param index="0" name="position" type="int" /> <param index="1" name="value" type="Variant" /> <description> - Inserts a new element at a given position in the array. The position must be valid, or at the end of the array ([code]pos == size()[/code]). Returns [constant OK] on success, or one of the other [enum Error] values if the operation failed. - [b]Note:[/b] This method acts in-place and doesn't return a modified array. - [b]Note:[/b] On large arrays, this method will be slower if the inserted element is close to the beginning of the array (index 0). This is because all elements placed after the newly inserted element have to be reindexed. + Inserts a new element ([param value]) at a given index ([param position]) in the array. [param position] should be between [code]0[/code] and the array's [method size]. + Returns [constant OK] on success, or one of the other [enum Error] constants if this method fails. + [b]Note:[/b] Every element's index after [param position] needs to be shifted forward, which may have a noticeable performance cost, especially on larger arrays. </description> </method> <method name="is_empty" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if the array is empty. + Returns [code]true[/code] if the array is empty ([code][][/code]). See also [method size]. </description> </method> <method name="is_read_only" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if the array is read-only. See [method make_read_only]. Arrays are automatically read-only if declared with [code]const[/code] keyword. + Returns [code]true[/code] if the array is read-only. See [method make_read_only]. + In GDScript, arrays are automatically read-only if declared with the [code]const[/code] keyword. </description> </method> <method name="is_same_typed" qualifiers="const"> <return type="bool" /> <param index="0" name="array" type="Array" /> <description> - Returns [code]true[/code] if the array is typed the same as [param array]. + Returns [code]true[/code] if this array is typed the same as the given [param array]. See also [method is_typed]. </description> </method> <method name="is_typed" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if the array is typed. Typed arrays can only store elements of their associated type and provide type safety for the [code][][/code] operator. Methods of typed array still return [Variant]. + Returns [code]true[/code] if the array is typed. Typed arrays can only contain elements of a specific type, as defined by the typed array constructor. The methods of a typed array are still expected to return a generic [Variant]. + In GDScript, it is possible to define a typed array with static typing: + [codeblock] + var numbers: Array[float] = [0.2, 4.2, -2.0] + print(numbers.is_typed()) # Prints true + [/codeblock] </description> </method> <method name="make_read_only"> <return type="void" /> <description> - Makes the array read-only, i.e. disabled modifying of the array's elements. Does not apply to nested content, e.g. content of nested arrays. + Makes the array read-only. The array's elements cannot be overridden with different values, and their order cannot change. Does not apply to nested elements, such as dictionaries. + In GDScript, arrays are automatically read-only if declared with the [code]const[/code] keyword. </description> </method> <method name="map" qualifiers="const"> <return type="Array" /> <param index="0" name="method" type="Callable" /> <description> - Calls the provided [Callable] for each element in the array and returns a new array filled with values returned by the method. - The callable's method should take one [Variant] parameter (the current array element) and can return any [Variant]. + Calls the given [Callable] for each element in the array and returns a new array filled with values returned by the [param method]. + The [param method] should take one [Variant] parameter (the current array element) and can return any [Variant]. [codeblock] + func double(number): + return number * 2 + func _ready(): - print([1, 2, 3].map(negate)) # Prints [-1, -2, -3]. - print([1, 2, 3].map(func(number): return -number)) # Same as above, but using lambda function. + print([1, 2, 3].map(double)) # Prints [2, 4, 6] - func negate(number): - return -number + # Same as above, but using a lambda function. + print([1, 2, 3].map(func(element): return element * 2)) [/codeblock] See also [method filter], [method reduce], [method any] and [method all]. </description> @@ -476,61 +527,52 @@ <method name="max" qualifiers="const"> <return type="Variant" /> <description> - Returns the maximum value contained in the array if all elements are of comparable types. If the elements can't be compared, [code]null[/code] is returned. - To find the maximum value using a custom comparator, you can use [method reduce]. In this example every array element is checked and the first maximum value is returned: - [codeblock] - func _ready(): - var arr = [Vector2(0, 1), Vector2(2, 0), Vector2(1, 1), Vector2(1, 0), Vector2(0, 2)] - # In this example we compare the lengths. - print(arr.reduce(func(max, val): return val if is_length_greater(val, max) else max)) - - func is_length_greater(a, b): - return a.length() > b.length() - [/codeblock] + Returns the maximum value contained in the array, if all elements can be compared. Otherwise, returns [code]null[/code]. See also [method min]. + To find the maximum value using a custom comparator, you can use [method reduce]. </description> </method> <method name="min" qualifiers="const"> <return type="Variant" /> <description> - Returns the minimum value contained in the array if all elements are of comparable types. If the elements can't be compared, [code]null[/code] is returned. - See also [method max] for an example of using a custom comparator. + Returns the minimum value contained in the array, if all elements can be compared. Otherwise, returns [code]null[/code]. See also [method max]. </description> </method> <method name="pick_random" qualifiers="const"> <return type="Variant" /> <description> - Returns a random value from the target array. Prints an error and returns [code]null[/code] if the array is empty. + Returns a random element from the array. Generates an error and returns [code]null[/code] if the array is empty. [codeblocks] [gdscript] - var array: Array[int] = [1, 2, 3, 4] - print(array.pick_random()) # Prints either of the four numbers. + # May print 1, 2, 3.25, or "Hi". + print([1, 2, 3.25, "Hi"].pick_random()) [/gdscript] [csharp] - var array = new Godot.Collections.Array { 1, 2, 3, 4 }; - GD.Print(array.PickRandom()); // Prints either of the four numbers. + var array = new Godot.Collections.Array { 1, 2, 3.25f, "Hi" }; + GD.Print(array.PickRandom()); // May print 1, 2, 3.25, or "Hi". [/csharp] [/codeblocks] + [b]Note:[/b] Like many similar functions in the engine (such as [method @GlobalScope.randi] or [method shuffle]), this method uses a common, global random seed. To get a predictable outcome from this method, see [method @GlobalScope.seed]. </description> </method> <method name="pop_at"> <return type="Variant" /> <param index="0" name="position" type="int" /> <description> - Removes and returns the element of the array at index [param position]. If negative, [param position] is considered relative to the end of the array. Leaves the array unchanged and returns [code]null[/code] if the array is empty or if it's accessed out of bounds. An error message is printed when the array is accessed out of bounds, but not when the array is empty. - [b]Note:[/b] On large arrays, this method can be slower than [method pop_back] as it will reindex the array's elements that are located after the removed element. The larger the array and the lower the index of the removed element, the slower [method pop_at] will be. + Removes and returns the element of the array at index [param position]. If negative, [param position] is considered relative to the end of the array. Returns [code]null[/code] if the array is empty. If [param position] is out of bounds, an error message is also generated. + [b]Note:[/b] This method shifts every element's index after [param position] back, which may have a noticeable performance cost, especially on larger arrays. </description> </method> <method name="pop_back"> <return type="Variant" /> <description> - Removes and returns the last element of the array. Returns [code]null[/code] if the array is empty, without printing an error message. See also [method pop_front]. + Removes and returns the last element of the array. Returns [code]null[/code] if the array is empty, without generating an error. See also [method pop_front]. </description> </method> <method name="pop_front"> <return type="Variant" /> <description> - Removes and returns the first element of the array. Returns [code]null[/code] if the array is empty, without printing an error message. See also [method pop_back]. - [b]Note:[/b] On large arrays, this method is much slower than [method pop_back] as it will reindex all the array's elements every time it's called. The larger the array, the slower [method pop_front] will be. + Removes and returns the first element of the array. Returns [code]null[/code] if the array is empty, without generating an error. See also [method pop_back]. + [b]Note:[/b] This method shifts every other element's index back, which may have a noticeable performance cost, especially on larger arrays. </description> </method> <method name="push_back"> @@ -545,7 +587,7 @@ <param index="0" name="value" type="Variant" /> <description> Adds an element at the beginning of the array. See also [method push_back]. - [b]Note:[/b] On large arrays, this method is much slower than [method push_back] as it will reindex all the array's elements every time it's called. The larger the array, the slower [method push_front] will be. + [b]Note:[/b] This method shifts every other element's index forward, which may have a noticeable performance cost, especially on larger arrays. </description> </method> <method name="reduce" qualifiers="const"> @@ -553,15 +595,29 @@ <param index="0" name="method" type="Callable" /> <param index="1" name="accum" type="Variant" default="null" /> <description> - Calls the provided [Callable] for each element in array and accumulates the result in [param accum]. - The callable's method takes two arguments: the current value of [param accum] and the current array element. If [param accum] is [code]null[/code] (default value), the iteration will start from the second element, with the first one used as initial value of [param accum]. + Calls the given [Callable] for each element in array, accumulates the result in [param accum], then returns it. + The [param method] takes two arguments: the current value of [param accum] and the current array element. If [param accum] is [code]null[/code] (as by default), the iteration will start from the second element, with the first one used as initial value of [param accum]. [codeblock] - func _ready(): - print([1, 2, 3].reduce(sum, 10)) # Prints 16. - print([1, 2, 3].reduce(func(accum, number): return accum + number, 10)) # Same as above, but using lambda function. - func sum(accum, number): return accum + number + + func _ready(): + print([1, 2, 3].reduce(sum, 0)) # Prints 6 + print([1, 2, 3].reduce(sum, 10)) # Prints 16 + + # Same as above, but using a lambda function. + print([1, 2, 3].reduce(func(accum, number): return accum + number, 10)) + [/codeblock] + If [method max] is not desirable, this method may also be used to implement a custom comparator: + [codeblock] + func _ready(): + var arr = [Vector2(5, 0), Vector2(3, 4), Vector2(1, 2)] + + var longest_vec = arr.reduce(func(max, vec): return vec if is_length_greater(vec, max) else max) + print(longest_vec) # Prints Vector2(3, 4). + + func is_length_greater(a, b): + return a.length() > b.length() [/codeblock] See also [method map], [method filter], [method any] and [method all]. </description> @@ -570,25 +626,25 @@ <return type="void" /> <param index="0" name="position" type="int" /> <description> - Removes an element from the array by index. If the index does not exist in the array, nothing happens. To remove an element by searching for its value, use [method erase] instead. - [b]Note:[/b] This method acts in-place and doesn't return a modified array. - [b]Note:[/b] On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed. - [b]Note:[/b] [param position] cannot be negative. To remove an element relative to the end of the array, use [code]arr.remove_at(arr.size() - (i + 1))[/code]. To remove the last element from the array without returning the value, use [code]arr.resize(arr.size() - 1)[/code]. + Removes the element from the array at the given index ([param position]). If the index is out of bounds, this method fails. + If you need to return the removed element, use [method pop_at]. To remove an element by value, use [method erase] instead. + [b]Note:[/b] This method shifts every element's index after [param position] back, which may have a noticeable performance cost, especially on larger arrays. + [b]Note:[/b] The [param position] cannot be negative. To remove an element relative to the end of the array, use [code]arr.remove_at(arr.size() - (i + 1))[/code]. To remove the last element from the array, use [code]arr.resize(arr.size() - 1)[/code]. </description> </method> <method name="resize"> <return type="int" /> <param index="0" name="size" type="int" /> <description> - Resizes the array to contain a different number of elements. If the array size is smaller, elements are cleared, if bigger, new elements are [code]null[/code]. Returns [constant OK] on success, or one of the other [enum Error] values if the operation failed. - Calling [method resize] once and assigning the new values is faster than adding new elements one by one. - [b]Note:[/b] This method acts in-place and doesn't return a modified array. + Sets the array's number of elements to [param size]. If [param size] is smaller than the array's current size, the elements at the end are removed. If [param size] is greater, new default elements (usually [code]null[/code]) are added, depending on the array's type. + Returns [constant OK] on success, or one of the other [enum Error] constants if this method fails. + [b]Note:[/b] Calling this method once and assigning the new values is faster than calling [method append] for every new element. </description> </method> <method name="reverse"> <return type="void" /> <description> - Reverses the order of the elements in the array. + Reverses the order of all elements in the array. </description> </method> <method name="rfind" qualifiers="const"> @@ -596,19 +652,20 @@ <param index="0" name="what" type="Variant" /> <param index="1" name="from" type="int" default="-1" /> <description> - Searches the array in reverse order. Optionally, a start search index can be passed. If negative, the start index is considered relative to the end of the array. + Returns the index of the [b]last[/b] occurrence of [param what] in this array, or [code]-1[/code] if there are none. The search's start can be specified with [param from], continuing to the beginning of the array. This method is the reverse of [method find]. </description> </method> <method name="shuffle"> <return type="void" /> <description> - Shuffles the array such that the items will have a random order. This method uses the global random number generator common to methods such as [method @GlobalScope.randi]. Call [method @GlobalScope.randomize] to ensure that a new seed will be used each time if you want non-reproducible shuffling. + Shuffles all elements of the array in a random order. + [b]Note:[/b] Like many similar functions in the engine (such as [method @GlobalScope.randi] or [method pick_random]), this method uses a common, global random seed. To get a predictable outcome from this method, see [method @GlobalScope.seed]. </description> </method> <method name="size" qualifiers="const"> <return type="int" /> <description> - Returns the number of elements in the array. + Returns the number of elements in the array. Empty arrays ([code][][/code]) always return [code]0[/code]. See also [method is_empty]. </description> </method> <method name="slice" qualifiers="const"> @@ -618,67 +675,71 @@ <param index="2" name="step" type="int" default="1" /> <param index="3" name="deep" type="bool" default="false" /> <description> - Returns the slice of the [Array], from [param begin] (inclusive) to [param end] (exclusive), as a new [Array]. - The absolute value of [param begin] and [param end] will be clamped to the array size, so the default value for [param end] makes it slice to the size of the array by default (i.e. [code]arr.slice(1)[/code] is a shorthand for [code]arr.slice(1, arr.size())[/code]). - If either [param begin] or [param end] are negative, they will be relative to the end of the array (i.e. [code]arr.slice(0, -2)[/code] is a shorthand for [code]arr.slice(0, arr.size() - 2)[/code]). - If specified, [param step] is the relative index between source elements. It can be negative, then [param begin] must be higher than [param end]. For example, [code][0, 1, 2, 3, 4, 5].slice(5, 1, -2)[/code] returns [code][5, 3][/code]. - If [param deep] is true, each element will be copied by value rather than by reference. - [b]Note:[/b] To include the first element when [param step] is negative, use [code]arr.slice(begin, -arr.size() - 1, step)[/code] (i.e. [code][0, 1, 2].slice(1, -4, -1)[/code] returns [code][1, 0][/code]). + Returns a new [Array] containing this array's elements, from index [param begin] (inclusive) to [param end] (exclusive), every [param step] elements. + If either [param begin] or [param end] are negative, their value is relative to the end of the array. + If [param step] is negative, this method iterates through the array in reverse, returning a slice ordered backwards. For this to work, [param begin] must be greater than [param end]. + If [param deep] is [code]true[/code], all nested [Array] and [Dictionary] elements in the slice are duplicated from the original, recursively. See also [method duplicate]). + [codeblock] + var letters = ["A", "B", "C", "D", "E", "F"] + + print(letters.slice(0, 2)) # Prints ["A", "B"] + print(letters.slice(2, -2)) # Prints ["C", "D"] + print(letters.slice(-2, 6)) # Prints ["E", "F"] + + print(letters.slice(0, 6, 2)) # Prints ["A", "C", "E"] + print(letters.slice(4, 1, -1)) # Prints ["E", "D", "C"] + [/codeblock] </description> </method> <method name="sort"> <return type="void" /> <description> - Sorts the array. - [b]Note:[/b] The sorting algorithm used is not [url=https://en.wikipedia.org/wiki/Sorting_algorithm#Stability]stable[/url]. This means that values considered equal may have their order changed when using [method sort]. - [b]Note:[/b] Strings are sorted in alphabetical order (as opposed to natural order). This may lead to unexpected behavior when sorting an array of strings ending with a sequence of numbers. Consider the following example: + Sorts the array in ascending order. The final order is dependent on the "less than" ([code]>[/code]) comparison between elements. [codeblocks] [gdscript] - var strings = ["string1", "string2", "string10", "string11"] - strings.sort() - print(strings) # Prints [string1, string10, string11, string2] + var numbers = [10, 5, 2.5, 8] + numbers.sort() + print(numbers) # Prints [2.5, 5, 8, 10] [/gdscript] [csharp] - var strings = new Godot.Collections.Array { "string1", "string2", "string10", "string11" }; - strings.Sort(); - GD.Print(strings); // Prints [string1, string10, string11, string2] + var numbers = new Godot.Collections.Array { 10, 5, 2.5, 8 }; + numbers.Sort(); + GD.Print(numbers); // Prints [2.5, 5, 8, 10] [/csharp] [/codeblocks] - To perform natural order sorting, you can use [method sort_custom] with [method String.naturalnocasecmp_to] as follows: - [codeblock] - var strings = ["string1", "string2", "string10", "string11"] - strings.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0) - print(strings) # Prints [string1, string2, string10, string11] - [/codeblock] + [b]Note:[/b] The sorting algorithm used is not [url=https://en.wikipedia.org/wiki/Sorting_algorithm#Stability]stable[/url]. This means that equivalent elements (such as [code]2[/code] and [code]2.0[/code]) may have their order changed when calling [method sort]. </description> </method> <method name="sort_custom"> <return type="void" /> <param index="0" name="func" type="Callable" /> <description> - Sorts the array using a custom method. The custom method receives two arguments (a pair of elements from the array) and must return either [code]true[/code] or [code]false[/code]. For two elements [code]a[/code] and [code]b[/code], if the given method returns [code]true[/code], element [code]b[/code] will be after element [code]a[/code] in the array. - [b]Note:[/b] The sorting algorithm used is not [url=https://en.wikipedia.org/wiki/Sorting_algorithm#Stability]stable[/url]. This means that values considered equal may have their order changed when using [method sort_custom]. - [b]Note:[/b] You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Randomizing the return value will result in unexpected behavior. - [codeblocks] - [gdscript] + Sorts the array using a custom [Callable]. + [param func] is called as many times as necessary, receiving two array elements as arguments. The function should return [code]true[/code] if the first element should be moved [i]behind[/i] the second one, otherwise it should return [code]false[/code]. + [codeblock] func sort_ascending(a, b): - if a[0] < b[0]: + if a[1] < b[1]: return true return false func _ready(): - var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]] + var my_items = [["Tomato", 5], ["Apple", 9], ["Rice", 4]] my_items.sort_custom(sort_ascending) - print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]]. + print(my_items) # Prints [["Rice", 4], ["Tomato", 5], ["Apple", 9]] - # Descending, lambda version. + # Sort descending, using a lambda function. my_items.sort_custom(func(a, b): return a[0] > b[0]) - print(my_items) # Prints [[9, Rice], [5, Potato], [4, Tomato]]. - [/gdscript] - [csharp] - // There is no custom sort support for Godot.Collections.Array - [/csharp] - [/codeblocks] + print(my_items) # Prints [["Apple", 9], ["Tomato", 5], ["Rice", 4]] + [/codeblock] + It may also be necessary to use this method to sort strings by natural order, with [method String.naturalnocasecmp_to], as in the following example: + [codeblock] + var files = ["newfile1", "newfile2", "newfile10", "newfile11"] + files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0) + print(files) # Prints ["newfile1", "newfile2", "newfile10", "newfile11"] + [/codeblock] + [b]Note:[/b] In C#, this method is not supported. + [b]Note:[/b] The sorting algorithm used is not [url=https://en.wikipedia.org/wiki/Sorting_algorithm#Stability]stable[/url]. This means that values considered equal may have their order changed when calling this method. + [b]Note:[/b] You should not randomize the return value of [param func], as the heapsort algorithm expects a consistent result. Randomizing the return value will result in unexpected behavior. </description> </method> </methods> @@ -687,28 +748,44 @@ <return type="bool" /> <param index="0" name="right" type="Array" /> <description> - Compares the left operand [Array] against the [param right] [Array]. Returns [code]true[/code] if the sizes or contents of the arrays are [i]not[/i] equal, [code]false[/code] otherwise. + Returns [code]true[/code] if the array's size or its elements are different than [param right]'s. </description> </operator> <operator name="operator +"> <return type="Array" /> <param index="0" name="right" type="Array" /> <description> - Concatenates two [Array]s together, with the [param right] [Array] being added to the end of the [Array] specified in the left operand. For example, [code][1, 2] + [3, 4][/code] results in [code][1, 2, 3, 4][/code]. + Appends the [param right] array to the left operand, creating a new [Array]. This is also known as an array concatenation. + [codeblocks] + [gdscript] + var array1 = ["One", 2] + var array2 = [3, "Four"] + print(array1 + array2) # Prints ["One", 2, 3, "Four"] + [/gdscript] + [csharp] + // Note that concatenation is not possible with C#'s native Array type. + var array1 = new Godot.Collections.Array{"One", 2}; + var array2 = new Godot.Collections.Array{3, "Four"}; + GD.Print(array1 + array2); // Prints ["One", 2, 3, "Four"] + [/csharp] + [/codeblocks] + [b]Note:[/b] For existing arrays, [method append_array] is much more efficient than concatenation and assignment with the [code]+=[/code] operator. </description> </operator> <operator name="operator <"> <return type="bool" /> <param index="0" name="right" type="Array" /> <description> - Performs a comparison for each index between the left operand [Array] and the [param right] [Array], considering the highest common index of both arrays for this comparison: Returns [code]true[/code] on the first occurrence of an element that is less, or [code]false[/code] if the element is greater. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns [code]false[/code] if the left operand [Array] has fewer elements, otherwise it returns [code]true[/code]. + Compares the elements of both arrays in order, starting from index [code]0[/code] and ending on the last index in common between both arrays. For each pair of elements, returns [code]true[/code] if this array's element is less than [param right]'s, [code]false[/code] if this element is greater. Otherwise, continues to the next pair. + If all searched elements are equal, returns [code]true[/code] if this array's size is less than [param right]'s, otherwise returns [code]false[/code]. </description> </operator> <operator name="operator <="> <return type="bool" /> <param index="0" name="right" type="Array" /> <description> - Performs a comparison for each index between the left operand [Array] and the [param right] [Array], considering the highest common index of both arrays for this comparison: Returns [code]true[/code] on the first occurrence of an element that is less, or [code]false[/code] if the element is greater. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns [code]true[/code] if the left operand [Array] has the same number of elements or fewer, otherwise it returns [code]false[/code]. + Compares the elements of both arrays in order, starting from index [code]0[/code] and ending on the last index in common between both arrays. For each pair of elements, returns [code]true[/code] if this array's element is less than [param right]'s, [code]false[/code] if this element is greater. Otherwise, continues to the next pair. + If all searched elements are equal, returns [code]true[/code] if this array's size is less or equal to [param right]'s, otherwise returns [code]false[/code]. </description> </operator> <operator name="operator =="> @@ -722,21 +799,23 @@ <return type="bool" /> <param index="0" name="right" type="Array" /> <description> - Performs a comparison for each index between the left operand [Array] and the [param right] [Array], considering the highest common index of both arrays for this comparison: Returns [code]true[/code] on the first occurrence of an element that is greater, or [code]false[/code] if the element is less. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns [code]true[/code] if the [param right] [Array] has more elements, otherwise it returns [code]false[/code]. + Compares the elements of both arrays in order, starting from index [code]0[/code] and ending on the last index in common between both arrays. For each pair of elements, returns [code]true[/code] if this array's element is greater than [param right]'s, [code]false[/code] if this element is less. Otherwise, continues to the next pair. + If all searched elements are equal, returns [code]true[/code] if this array's size is greater than [param right]'s, otherwise returns [code]false[/code]. </description> </operator> <operator name="operator >="> <return type="bool" /> <param index="0" name="right" type="Array" /> <description> - Performs a comparison for each index between the left operand [Array] and the [param right] [Array], considering the highest common index of both arrays for this comparison: Returns [code]true[/code] on the first occurrence of an element that is greater, or [code]false[/code] if the element is less. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns [code]true[/code] if the [param right] [Array] has more or the same number of elements, otherwise it returns [code]false[/code]. + Compares the elements of both arrays in order, starting from index [code]0[/code] and ending on the last index in common between both arrays. For each pair of elements, returns [code]true[/code] if this array's element is greater than [param right]'s, [code]false[/code] if this element is less. Otherwise, continues to the next pair. + If all searched elements are equal, returns [code]true[/code] if this array's size is greater or equal to [param right]'s, otherwise returns [code]false[/code]. </description> </operator> <operator name="operator []"> <return type="Variant" /> <param index="0" name="index" type="int" /> <description> - Returns a reference to the element of type [Variant] at the specified location. Arrays start at index 0. [param index] can be a zero or positive value to start from the beginning, or a negative value to start from the end. Out-of-bounds array access causes a run-time error, which will result in an error being printed and the project execution pausing if run from the editor. + Returns the [Variant] element at the specified [param index]. Arrays start at index 0. If [param index] is greater or equal to [code]0[/code], the element is fetched starting from the beginning of the array. If [param index] is a negative value, the element is fetched starting from the end. Accessing an array out-of-bounds will cause a run-time error, pausing the project execution if run from the editor. </description> </operator> </operators> diff --git a/doc/classes/AudioEffectSpectrumAnalyzer.xml b/doc/classes/AudioEffectSpectrumAnalyzer.xml index fbc0c2275f..b90f87ef5b 100644 --- a/doc/classes/AudioEffectSpectrumAnalyzer.xml +++ b/doc/classes/AudioEffectSpectrumAnalyzer.xml @@ -5,6 +5,7 @@ </brief_description> <description> This audio effect does not affect sound output, but can be used for real-time audio visualizations. + This resource configures an [AudioEffectSpectrumAnalyzerInstance], which performs the actual analysis at runtime. An instance can be acquired with [method AudioServer.get_bus_effect_instance]. See also [AudioStreamGenerator] for procedurally generating sounds. </description> <tutorials> diff --git a/doc/classes/AudioEffectSpectrumAnalyzerInstance.xml b/doc/classes/AudioEffectSpectrumAnalyzerInstance.xml index e8c6394073..184f80db2e 100644 --- a/doc/classes/AudioEffectSpectrumAnalyzerInstance.xml +++ b/doc/classes/AudioEffectSpectrumAnalyzerInstance.xml @@ -1,10 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectSpectrumAnalyzerInstance" inherits="AudioEffectInstance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Queryable instance of an [AudioEffectSpectrumAnalyzer]. </brief_description> <description> + The runtime part of an [AudioEffectSpectrumAnalyzer], which can be used to query the magnitude of a frequency range on its host bus. + An instance of this class can be acquired with [method AudioServer.get_bus_effect_instance]. </description> <tutorials> + <link title="Audio Spectrum Visualizer Demo">https://godotengine.org/asset-library/asset/2762</link> </tutorials> <methods> <method name="get_magnitude_for_frequency_range" qualifiers="const"> @@ -13,15 +17,17 @@ <param index="1" name="to_hz" type="float" /> <param index="2" name="mode" type="int" enum="AudioEffectSpectrumAnalyzerInstance.MagnitudeMode" default="1" /> <description> + Returns the magnitude of the frequencies from [param from_hz] to [param to_hz] in linear energy as a Vector2. The [code]x[/code] component of the return value represents the left stereo channel, and [code]y[/code] represents the right channel. + [param mode] determines how the frequency range will be processed. See [enum MagnitudeMode]. </description> </method> </methods> <constants> <constant name="MAGNITUDE_AVERAGE" value="0" enum="MagnitudeMode"> - Use the average value as magnitude. + Use the average value across the frequency range as magnitude. </constant> <constant name="MAGNITUDE_MAX" value="1" enum="MagnitudeMode"> - Use the maximum value as magnitude. + Use the maximum value of the frequency range as magnitude. </constant> </constants> </class> diff --git a/doc/classes/AudioStreamWAV.xml b/doc/classes/AudioStreamWAV.xml index 3df814cb7f..8a28514ed6 100644 --- a/doc/classes/AudioStreamWAV.xml +++ b/doc/classes/AudioStreamWAV.xml @@ -29,10 +29,10 @@ Audio format. See [enum Format] constants for values. </member> <member name="loop_begin" type="int" setter="set_loop_begin" getter="get_loop_begin" default="0"> - The loop start point (in number of samples, relative to the beginning of the sample). This information will be imported automatically from the WAV file if present. + The loop start point (in number of samples, relative to the beginning of the stream). This information will be imported automatically from the WAV file if present. </member> <member name="loop_end" type="int" setter="set_loop_end" getter="get_loop_end" default="0"> - The loop end point (in number of samples, relative to the beginning of the sample). This information will be imported automatically from the WAV file if present. + The loop end point (in number of samples, relative to the beginning of the stream). This information will be imported automatically from the WAV file if present. </member> <member name="loop_mode" type="int" setter="set_loop_mode" getter="get_loop_mode" enum="AudioStreamWAV.LoopMode" default="0"> The loop mode. This information will be imported automatically from the WAV file if present. See [enum LoopMode] constants for values. diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml index 41bda1033d..322d2ab9d4 100644 --- a/doc/classes/Basis.xml +++ b/doc/classes/Basis.xml @@ -8,7 +8,7 @@ A [Basis] is composed by 3 axis vectors, each representing a column of the matrix: [member x], [member y], and [member z]. The length of each axis ([method Vector3.length]) influences the basis's scale, while the direction of all axes influence the rotation. Usually, these axes are perpendicular to one another. However, when you rotate any axis individually, the basis becomes sheared. Applying a sheared basis to a 3D model will make the model appear distorted. A [Basis] is [b]orthogonal[/b] if its axes are perpendicular to each other. A basis is [b]normalized[/b] if the length of every axis is [code]1[/code]. A basis is [b]uniform[/b] if all axes share the same length (see [method get_scale]). A basis is [b]orthonormal[/b] if it is both orthogonal and normalized, which allows it to only represent rotations. A basis is [b]conformal[/b] if it is both orthogonal and uniform, which ensures it is not distorted. For a general introduction, see the [url=$DOCS_URL/tutorials/math/matrices_and_transforms.html]Matrices and transforms[/url] tutorial. - [b]Note:[/b] Godot uses a [url=https://en.wikipedia.org/wiki/Right-hand_rule]right-handed coordinate system[/url], which is a common standard. For directions, the convention for built-in types like [Camera3D] is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the [url=$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#d-asset-direction-conventions]Importing 3D Scenes[/url] tutorial. + [b]Note:[/b] Godot uses a [url=https://en.wikipedia.org/wiki/Right-hand_rule]right-handed coordinate system[/url], which is a common standard. For directions, the convention for built-in types like [Camera3D] is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the [url=$DOCS_URL/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.html#d-asset-direction-conventions]3D asset direction conventions[/url] tutorial. [b]Note:[/b] The basis matrices are exposed as [url=https://www.mindcontrol.org/~hplus/graphics/matrix-layout.html]column-major[/url] order, which is the same as OpenGL. However, they are stored internally in row-major order, which is the same as DirectX. </description> <tutorials> diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml index 98f25ed573..68fb918904 100644 --- a/doc/classes/Button.xml +++ b/doc/classes/Button.xml @@ -119,7 +119,7 @@ Icon modulate [Color] used when the [Button] is being pressed. </theme_item> <theme_item name="align_to_largest_stylebox" data_type="constant" type="int" default="0"> - This constant acts as a boolean. If [code]true[/code], text and icon are always aligned to the largest stylebox margins, otherwise it's aligned to the current button state stylebox margins. + This constant acts as a boolean. If [code]true[/code], the minimum size of the button and text/icon alignment is always based on the largest stylebox margins, otherwise it's based on the current button state stylebox margins. </theme_item> <theme_item name="h_separation" data_type="constant" type="int" default="4"> The horizontal space between [Button]'s icon and text. Negative values will be treated as [code]0[/code] when used. diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 207045b065..8bee6c3470 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -623,8 +623,8 @@ [b]Note:[/b] For controls that inherit [Popup], the correct way to make them visible is to call one of the multiple [code]popup*()[/code] functions instead. </member> <member name="y_sort_enabled" type="bool" setter="set_y_sort_enabled" getter="is_y_sort_enabled" default="false"> - If [code]true[/code], this and child [CanvasItem] nodes with a lower Y position are rendered in front of nodes with a higher Y position. If [code]false[/code], this and child [CanvasItem] nodes are rendered normally in scene tree order. - With Y-sorting enabled on a parent node ('A') but disabled on a child node ('B'), the child node ('B') is sorted but its children ('C1', 'C2', etc) render together on the same Y position as the child node 'B'. This allows you to organize the render order of a scene without changing the scene tree. + If [code]true[/code], this and child [CanvasItem] nodes with a higher Y position are rendered in front of nodes with a lower Y position. If [code]false[/code], this and child [CanvasItem] nodes are rendered normally in scene tree order. + With Y-sorting enabled on a parent node ('A') but disabled on a child node ('B'), the child node ('B') is sorted but its children ('C1', 'C2', etc) render together on the same Y position as the child node ('B'). This allows you to organize the render order of a scene without changing the scene tree. Nodes sort relative to each other only if they are on the same [member z_index]. </member> <member name="z_as_relative" type="bool" setter="set_z_as_relative" getter="is_z_relative" default="true"> diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml index 3e2b3ea111..9ef911a68d 100644 --- a/doc/classes/EditorExportPlugin.xml +++ b/doc/classes/EditorExportPlugin.xml @@ -17,7 +17,7 @@ <param index="1" name="features" type="PackedStringArray" /> <description> Return [code]true[/code] if this plugin will customize resources based on the platform and features used. - When enabled, [method _get_customization_configuration_hash], [method _customize_resource] and [method _customize_scene] will be called and must be implemented. + When enabled, [method _get_customization_configuration_hash] and [method _customize_resource] will be called and must be implemented. </description> </method> <method name="_begin_customize_scenes" qualifiers="virtual const"> @@ -25,7 +25,8 @@ <param index="0" name="platform" type="EditorExportPlatform" /> <param index="1" name="features" type="PackedStringArray" /> <description> - Return true if this plugin will customize scenes based on the platform and features used. + Return [code]true[/code] if this plugin will customize scenes based on the platform and features used. + When enabled, [method _get_customization_configuration_hash] and [method _customize_scene] will be called and must be implemented. </description> </method> <method name="_customize_resource" qualifiers="virtual"> @@ -81,7 +82,7 @@ <param index="1" name="type" type="String" /> <param index="2" name="features" type="PackedStringArray" /> <description> - Virtual method to be overridden by the user. Called for each exported file, providing arguments that can be used to identify the file. [param path] is the path of the file, [param type] is the [Resource] represented by the file (e.g. [PackedScene]) and [param features] is the list of features for the export. + Virtual method to be overridden by the user. Called for each exported file before [method _customize_resource] and [method _customize_scene]. The arguments can be used to identify the file. [param path] is the path of the file, [param type] is the [Resource] represented by the file (e.g. [PackedScene]), and [param features] is the list of features for the export. Calling [method skip] inside this callback will make the file not included in the export. </description> </method> @@ -231,6 +232,7 @@ <description> Adds a custom file to be exported. [param path] is the virtual path that can be used to load the file, [param file] is the binary data of the file. When called inside [method _export_file] and [param remap] is [code]true[/code], the current file will not be exported, but instead remapped to this custom file. [param remap] is ignored when called in other places. + [param file] will not be imported, so consider using [method _customize_resource] to remap imported resources. </description> </method> <method name="add_ios_bundle_file"> @@ -313,7 +315,7 @@ <method name="skip"> <return type="void" /> <description> - To be called inside [method _export_file], [method _customize_resource], or [method _customize_scene]. Skips the current file, so it's not included in the export. + To be called inside [method _export_file]. Skips the current file, so it's not included in the export. </description> </method> </methods> diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml index 89b9e7d6c2..c3ea440aea 100644 --- a/doc/classes/EditorPlugin.xml +++ b/doc/classes/EditorPlugin.xml @@ -444,7 +444,7 @@ <param index="2" name="script" type="Script" /> <param index="3" name="icon" type="Texture2D" /> <description> - Adds a custom type, which will appear in the list of nodes or resources. An icon can be optionally passed. + Adds a custom type, which will appear in the list of nodes or resources. When a given node or resource is selected, the base type will be instantiated (e.g. "Node3D", "Control", "Resource"), then the script will be loaded and set to this object. [b]Note:[/b] The base type is the base engine class which this type's class hierarchy inherits, not any custom type parent classes. You can use the virtual method [method _handles] to check if your custom object is being edited by checking the script or using the [code]is[/code] keyword. diff --git a/doc/classes/EditorScript.xml b/doc/classes/EditorScript.xml index 24480437fd..bd18852dbc 100644 --- a/doc/classes/EditorScript.xml +++ b/doc/classes/EditorScript.xml @@ -44,8 +44,7 @@ <return type="void" /> <param index="0" name="node" type="Node" /> <description> - Adds [param node] as a child of the root node in the editor context. - [b]Warning:[/b] The implementation of this method is currently disabled. + Makes [param node] root of the currently opened scene. Only works if the scene is empty. If the [param node] is a scene instance, an inheriting scene will be created. </description> </method> <method name="get_editor_interface" qualifiers="const" deprecated="[EditorInterface] is a global singleton and can be accessed directly by its name."> @@ -57,7 +56,7 @@ <method name="get_scene" qualifiers="const"> <return type="Node" /> <description> - Returns the Editor's currently active scene. + Returns the edited (current) scene's root [Node]. Equivalent of [method EditorInterface.get_edited_scene_root]. </description> </method> </methods> diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 90b8d07592..c7ff543b66 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -396,6 +396,10 @@ <member name="editors/animation/autorename_animation_tracks" type="bool" setter="" getter=""> If [code]true[/code], automatically updates animation tracks' target paths when renaming or reparenting nodes in the Scene tree dock. </member> + <member name="editors/animation/confirm_insert_track" type="bool" setter="" getter=""> + If [code]true[/code], display a confirmation dialog when adding a new track to an animation by pressing the "key" icon next to a property. Holding Shift will bypass the dialog. + If [code]false[/code], the behavior is reversed, i.e. the dialog only appears when Shift is held. + </member> <member name="editors/animation/default_create_bezier_tracks" type="bool" setter="" getter=""> If [code]true[/code], create a Bezier track instead of a standard track when pressing the "key" icon next to a property. Bezier tracks provide more control over animation curves, but are more difficult to adjust quickly. </member> @@ -623,10 +627,6 @@ The custom editor scale factor to use. This can be used for displays with very high DPI where a scale factor of 200% is not sufficient. [b]Note:[/b] Only effective if [member interface/editor/display_scale] is set to [b]Custom[/b]. </member> - <member name="interface/editor/debug/enable_pseudolocalization" type="bool" setter="" getter=""> - If [code]true[/code], lengthens the editor's localizable strings and replaces their characters with accented variants. This allows spotting non-localizable strings easily, while also ensuring the UI layout doesn't break when strings are made longer (as many languages require strings to be longer). - This is a debugging feature and should only be enabled when working on the editor itself. - </member> <member name="interface/editor/display_scale" type="int" setter="" getter=""> The display scale factor to use for the editor interface. Higher values are more suited to hiDPI/Retina displays. If set to [b]Auto[/b], the editor scale is automatically determined based on the screen resolution and reported display DPI. This heuristic is not always ideal, which means you can get better results by setting the editor scale manually. @@ -1047,6 +1047,9 @@ The indentation style to use (tabs or spaces). [b]Note:[/b] The [url=$DOCS_URL/tutorials/scripting/gdscript/gdscript_styleguide.html]GDScript style guide[/url] recommends using tabs for indentation. It is advised to change this setting only if you need to work on a project that currently uses spaces for indentation. </member> + <member name="text_editor/behavior/navigation/custom_word_separators" type="String" setter="" getter=""> + The characters to consider as word delimiters if [member text_editor/behavior/navigation/use_custom_word_separators] is [code]true[/code]. This is in addition to default characters if [member text_editor/behavior/navigation/use_default_word_separators] is [code]true[/code]. The characters should be defined without separation, for example [code]_♥=[/code]. + </member> <member name="text_editor/behavior/navigation/drag_and_drop_selection" type="bool" setter="" getter=""> If [code]true[/code], allows drag-and-dropping text in the script editor to move text. Disable this if you find yourself accidentally drag-and-dropping text in the script editor. </member> @@ -1066,6 +1069,12 @@ <member name="text_editor/behavior/navigation/stay_in_script_editor_on_node_selected" type="bool" setter="" getter=""> If [code]true[/code], prevents automatically switching between the Script and 2D/3D screens when selecting a node in the Scene tree dock. </member> + <member name="text_editor/behavior/navigation/use_custom_word_separators" type="bool" setter="" getter=""> + If [code]true[/code], uses the characters in [member text_editor/behavior/navigation/custom_word_separators] as word separators for word navigation and operations. This is in addition to the default characters if [member text_editor/behavior/navigation/use_default_word_separators] is also enabled. Word navigation and operations include double-clicking on a word or holding [kbd]Ctrl[/kbd] ([kbd]Cmd[/kbd] on macOS) while pressing [kbd]left[/kbd], [kbd]right[/kbd], [kbd]backspace[/kbd], or [kbd]delete[/kbd]. + </member> + <member name="text_editor/behavior/navigation/use_default_word_separators" type="bool" setter="" getter=""> + If [code]true[/code], uses the characters in [code]`!"#$%&'()*+,-./:;<=>?@[\]^`{|}~[/code], the Unicode General Punctuation table, and the Unicode CJK Punctuation table as word separators for word navigation and operations. If [code]false[/code], a subset of these characters are used and does not include the characters [code]<>$~^=+|[/code]. This is in addition to custom characters if [member text_editor/behavior/navigation/use_custom_word_separators] is also enabled. These characters are used to determine where a word stops. Word navigation and operations include double-clicking on a word or holding [kbd]Ctrl[/kbd] ([kbd]Cmd[/kbd] on macOS) while pressing [kbd]left[/kbd], [kbd]right[/kbd], [kbd]backspace[/kbd], or [kbd]delete[/kbd]. + </member> <member name="text_editor/behavior/navigation/v_scroll_speed" type="int" setter="" getter=""> The number of pixels to scroll with every mouse wheel increment. Higher values make the script scroll by faster when using the mouse wheel. [b]Note:[/b] You can hold down [kbd]Alt[/kbd] while using the mouse wheel to temporarily scroll 5 times faster. @@ -1086,7 +1095,7 @@ The delay in seconds after which autocompletion suggestions should be displayed when the user stops typing. </member> <member name="text_editor/completion/code_complete_enabled" type="bool" setter="" getter=""> - If [code]true[/code], code completion will be triggered automatically after [member text_editor/completion/code_complete_delay]. If [code]false[/code], you can still trigger completion manually by pressing [kbd]Ctrl + Space[/kbd] ([kbd]Cmd + Space[/kbd] on macOS). + If [code]true[/code], code completion will be triggered automatically after [member text_editor/completion/code_complete_delay]. Even if [code]false[/code], code completion can be triggered manually with the [code]ui_text_completion_query[/code] action (by default [kbd]Ctrl + Space[/kbd] or [kbd]Cmd + Space[/kbd] on macOS). </member> <member name="text_editor/completion/colorize_suggestions" type="bool" setter="" getter=""> If [code]true[/code] enables the coloring for some items in the autocompletion suggestions, like vector components. diff --git a/doc/classes/EditorUndoRedoManager.xml b/doc/classes/EditorUndoRedoManager.xml index 26580bbf06..5ac0d790a2 100644 --- a/doc/classes/EditorUndoRedoManager.xml +++ b/doc/classes/EditorUndoRedoManager.xml @@ -88,6 +88,13 @@ The way undo operation are ordered in actions is dictated by [param backward_undo_ops]. When [param backward_undo_ops] is [code]false[/code] undo option are ordered in the same order they were added. Which means the first operation to be added will be the first to be undone. </description> </method> + <method name="force_fixed_history"> + <return type="void" /> + <description> + Forces the next operation (e.g. [method add_do_method]) to use the action's history rather than guessing it from the object. This is sometimes needed when a history can't be correctly determined, like for a nested resource that doesn't have a path yet. + This method should only be used when absolutely necessary, otherwise it might cause invalid history state. For most of complex cases, the [code]custom_context[/code] parameter of [method create_action] is sufficient. + </description> + </method> <method name="get_history_undo_redo" qualifiers="const"> <return type="UndoRedo" /> <param index="0" name="id" type="int" /> diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index 001839d745..670df10a89 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -7,6 +7,7 @@ [GraphEdit] provides tools for creation, manipulation, and display of various graphs. Its main purpose in the engine is to power the visual programming systems, such as visual shaders, but it is also available for use in user projects. [GraphEdit] by itself is only an empty container, representing an infinite grid where [GraphNode]s can be placed. Each [GraphNode] represents a node in the graph, a single unit of data in the connected scheme. [GraphEdit], in turn, helps to control various interactions with nodes and between nodes. When the user attempts to connect, disconnect, or delete a [GraphNode], a signal is emitted in the [GraphEdit], but no action is taken by default. It is the responsibility of the programmer utilizing this control to implement the necessary logic to determine how each request should be handled. [b]Performance:[/b] It is greatly advised to enable low-processor usage mode (see [member OS.low_processor_usage_mode]) when using GraphEdits. + [b]Note:[/b] Keep in mind that [method Node.get_children] will also return the connection layer node named [code]_connection_layer[/code] due to technical limitations. This behavior may change in future releases. </description> <tutorials> </tutorials> diff --git a/doc/classes/HashingContext.xml b/doc/classes/HashingContext.xml index f2681ae7b3..b42acb2b99 100644 --- a/doc/classes/HashingContext.xml +++ b/doc/classes/HashingContext.xml @@ -20,8 +20,9 @@ # Open the file to hash. var file = FileAccess.open(path, FileAccess.READ) # Update the context after reading each chunk. - while not file.eof_reached(): - ctx.update(file.get_buffer(CHUNK_SIZE)) + while file.get_position() < file.get_length(): + var remaining = file.get_length() - file.get_position() + ctx.update(file.get_buffer(min(remaining, CHUNK_SIZE))) # Get the computed hash. var res = ctx.finish() # Print the result as hex string and array. @@ -43,9 +44,10 @@ // Open the file to hash. using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read); // Update the context after reading each chunk. - while (!file.EofReached()) + while (file.GetPosition() < file.GetLength()) { - ctx.Update(file.GetBuffer(ChunkSize)); + int remaining = (int)(file.GetLength() - file.GetPosition()); + ctx.Update(file.GetBuffer(Mathf.Min(remaining, ChunkSize))); } // Get the computed hash. byte[] res = ctx.Finish(); diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index 6f2e6aac20..a970f63c6e 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -77,10 +77,11 @@ Returns [code]true[/code] if this input event has been canceled. </description> </method> - <method name="is_echo" qualifiers="const"> + <method name="is_echo" qualifiers="const" keywords="is_repeat"> <return type="bool" /> <description> - Returns [code]true[/code] if this input event is an echo event (only for events of type [InputEventKey]). Any other event type returns [code]false[/code]. + Returns [code]true[/code] if this input event is an echo event (only for events of type [InputEventKey]). An echo event is a repeated key event sent when the user is holding down the key. Any other event type returns [code]false[/code]. + [b]Note:[/b] The rate at which echo events are sent is typically around 20 events per second (after holding down the key for roughly half a second). However, the key repeat delay/speed can be changed by the user or disabled entirely in the operating system settings. To ensure your project works correctly on all configurations, do not assume the user has a specific key repeat configuration in your project's behavior. </description> </method> <method name="is_match" qualifiers="const"> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index dc4872ba03..69c447ba01 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -59,8 +59,9 @@ </method> </methods> <members> - <member name="echo" type="bool" setter="set_echo" getter="is_echo" default="false"> - If [code]true[/code], the key was already pressed before this event. It means the user is holding the key down. + <member name="echo" type="bool" setter="set_echo" getter="is_echo" default="false" keywords="repeat"> + If [code]true[/code], the key was already pressed before this event. An echo event is a repeated key event sent when the user is holding down the key. + [b]Note:[/b] The rate at which echo events are sent is typically around 20 events per second (after holding down the key for roughly half a second). However, the key repeat delay/speed can be changed by the user or disabled entirely in the operating system settings. To ensure your project works correctly on all configurations, do not assume the user has a specific key repeat configuration in your project's behavior. </member> <member name="key_label" type="int" setter="set_key_label" getter="get_key_label" enum="Key" default="0"> Represents the localized label printed on the key in the current keyboard layout, which corresponds to one of the [enum Key] constants or any valid Unicode character. diff --git a/doc/classes/LightmapProbe.xml b/doc/classes/LightmapProbe.xml index 48584e50fd..f1b998789d 100644 --- a/doc/classes/LightmapProbe.xml +++ b/doc/classes/LightmapProbe.xml @@ -4,8 +4,9 @@ Represents a single manually placed probe for dynamic object lighting with [LightmapGI]. </brief_description> <description> - [LightmapProbe] represents the position of a single manually placed probe for dynamic object lighting with [LightmapGI]. + [LightmapProbe] represents the position of a single manually placed probe for dynamic object lighting with [LightmapGI]. Lightmap probes affect the lighting of [GeometryInstance3D]-derived nodes that have their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_DYNAMIC]. Typically, [LightmapGI] probes are placed automatically by setting [member LightmapGI.generate_probes_subdiv] to a value other than [constant LightmapGI.GENERATE_PROBES_DISABLED]. By creating [LightmapProbe] nodes before baking lightmaps, you can add more probes in specific areas for greater detail, or disable automatic generation and rely only on manually placed probes instead. + [b]Note:[/b] [LightmapProbe] nodes that are placed after baking lightmaps are ignored by dynamic objects. You must bake lightmaps again after creating or modifying [LightmapProbe]s for the probes to be effective. </description> <tutorials> </tutorials> diff --git a/doc/classes/Mesh.xml b/doc/classes/Mesh.xml index 6b5a50d97b..7f4dd5af37 100644 --- a/doc/classes/Mesh.xml +++ b/doc/classes/Mesh.xml @@ -223,6 +223,7 @@ </constant> <constant name="ARRAY_NORMAL" value="1" enum="ArrayType"> [PackedVector3Array] of vertex normals. + [b]Note:[/b] The array has to consist of normal vectors, otherwise they will be normalized by the engine, potentially causing visual discrepancies. </constant> <constant name="ARRAY_TANGENT" value="2" enum="ArrayType"> [PackedFloat32Array] of vertex tangents. Each element in groups of 4 floats, first 3 floats determine the tangent, and the last the binormal direction as -1 or 1. diff --git a/doc/classes/NodePath.xml b/doc/classes/NodePath.xml index b4969b8906..d0ec81ab45 100644 --- a/doc/classes/NodePath.xml +++ b/doc/classes/NodePath.xml @@ -23,11 +23,12 @@ [/codeblock] Despite their name, node paths may also point to a property: [codeblock] - ^"position" # Points to this object's position. - ^"position:x" # Points to this object's position in the x axis. + ^":position" # Points to this object's position. + ^":position:x" # Points to this object's position in the x axis. ^"Camera3D:rotation:y" # Points to the child Camera3D and its y rotation. ^"/root:size:x" # Points to the root Window and its width. [/codeblock] + In some situations, it's possible to omit the leading [code]:[/code] when pointing to an object's property. As an example, this is the case with [method Object.set_indexed] and [method Tween.tween_property], as those methods call [method NodePath.get_as_property_path] under the hood. However, it's generally recommended to keep the [code]:[/code] prefix. Node paths cannot check whether they are valid and may point to nodes or properties that do not exist. Their meaning depends entirely on the context in which they're used. You usually do not have to worry about the [NodePath] type, as strings are automatically converted to the type when necessary. There are still times when defining node paths is useful. For example, exported [NodePath] properties allow you to easily select any node within the currently edited scene. They are also automatically updated when moving, renaming or deleting nodes in the scene tree editor. See also [annotation @GDScript.@export_node_path]. See also [StringName], which is a similar type designed for optimized strings. diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 3d048e2f63..77caea9745 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -283,7 +283,7 @@ <return type="String" /> <description> Returns the file path to the current engine executable. - [b]Note:[/b] On macOS, always use [method create_instance] instead of relying on executable path. + [b]Note:[/b] On macOS, if you want to launch another instance of Godot, always use [method create_instance] instead of relying on the executable path. </description> </method> <method name="get_granted_permissions" qualifiers="const"> diff --git a/doc/classes/OccluderInstance3D.xml b/doc/classes/OccluderInstance3D.xml index 1c3477e4b2..6f45d72249 100644 --- a/doc/classes/OccluderInstance3D.xml +++ b/doc/classes/OccluderInstance3D.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<class name="OccluderInstance3D" inherits="Node3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> +<class name="OccluderInstance3D" inherits="VisualInstance3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> Provides occlusion culling for 3D nodes, which improves performance in closed areas. </brief_description> diff --git a/doc/classes/PhysicalBone3D.xml b/doc/classes/PhysicalBone3D.xml index bce1a80526..ca1948e8e1 100644 --- a/doc/classes/PhysicalBone3D.xml +++ b/doc/classes/PhysicalBone3D.xml @@ -5,6 +5,7 @@ </brief_description> <description> The [PhysicalBone3D] node is a physics body that can be used to make bones in a [Skeleton3D] react to physics. + [b]Note:[/b] In order to detect physical bones with raycasts, the [member SkeletonModifier3D.active] property of the parent [PhysicalBoneSimulator3D] must be [code]true[/code] and the [Skeleton3D]'s bone must be assigned to [PhysicalBone3D] correctly; it means that [method get_bone_id] should return a valid id ([code]>= 0[/code]). </description> <tutorials> </tutorials> diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml index 0f5687f091..004bbe2286 100644 --- a/doc/classes/PopupMenu.xml +++ b/doc/classes/PopupMenu.xml @@ -395,6 +395,12 @@ Returns [code]true[/code] if the specified item's shortcut is disabled. </description> </method> + <method name="is_native_menu" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if the system native menu is supported and currently used by this [PopupMenu]. + </description> + </method> <method name="is_system_menu" qualifiers="const"> <return type="bool" /> <description> @@ -636,6 +642,7 @@ </member> <member name="prefer_native_menu" type="bool" setter="set_prefer_native_menu" getter="is_prefer_native_menu" default="false"> If [code]true[/code], [MenuBar] will use native menu when supported. + [b]Note:[/b] If [PopupMenu] is linked to [StatusIndicator], [MenuBar], or another [PopupMenu] item it can use native menu regardless of this property, use [method is_native_menu] to check it. </member> <member name="submenu_popup_delay" type="float" setter="set_submenu_popup_delay" getter="get_submenu_popup_delay" default="0.3"> Sets the delay time in seconds for the submenu item to popup on mouse hovering. If the popup menu is added as a child of another (acting as a submenu), it will inherit the delay time of the parent menu item. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 2e219652ec..b0f421e932 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -271,6 +271,7 @@ <member name="application/config/custom_user_dir_name" type="String" setter="" getter="" default=""""> This user directory is used for storing persistent data ([code]user://[/code] filesystem). If a custom directory name is defined, this name will be appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]). The [member application/config/use_custom_user_dir] setting must be enabled for this to take effect. + [b]Note:[/b] If [member application/config/custom_user_dir_name] contains trailing periods, they will be stripped as folder names ending with a period are not allowed on Windows. </member> <member name="application/config/description" type="String" setter="" getter="" default=""""> The project's description, displayed as a tooltip in the Project Manager when hovering the project. @@ -344,7 +345,7 @@ This setting can be overridden using the [code]--frame-delay <ms;>[/code] command line argument. </member> <member name="application/run/low_processor_mode" type="bool" setter="" getter="" default="false"> - If [code]true[/code], enables low-processor usage mode. The screen is not redrawn if nothing changes visually. This is meant for writing applications and editors, but is pretty useless (and can hurt performance) in most games. + If [code]true[/code], enables low-processor usage mode. When enabled, the engine takes longer to redraw, but only redraws the screen if necessary. This may lower power consumption, and is intended for editors or mobile applications. For most games, because the screen needs to be redrawn every frame, it is recommended to keep this setting disabled. </member> <member name="application/run/low_processor_mode_sleep_usec" type="int" setter="" getter="" default="6900"> Amount of sleeping between frames when the low-processor usage mode is enabled (in microseconds). Higher values will result in lower CPU usage. @@ -476,6 +477,9 @@ <member name="debug/gdscript/warnings/assert_always_true" type="int" setter="" getter="" default="1"> When set to [code]warn[/code] or [code]error[/code], produces a warning or an error respectively when an [code]assert[/code] call always evaluates to true. </member> + <member name="debug/gdscript/warnings/confusable_capture_reassignment" type="int" setter="" getter="" default="1"> + When set to [code]warn[/code] or [code]error[/code], produces a warning or an error respectively when a local variable captured by a lambda is reassigned, since this does not modify the outer local variable. + </member> <member name="debug/gdscript/warnings/confusable_identifier" type="int" setter="" getter="" default="1"> When set to [code]warn[/code] or [code]error[/code], produces a warning or an error respectively when an identifier contains characters that can be confused with something else, like when mixing different alphabets. </member> @@ -629,6 +633,9 @@ <member name="debug/settings/profiler/max_functions" type="int" setter="" getter="" default="16384"> Maximum number of functions per frame allowed when profiling. </member> + <member name="debug/settings/profiler/max_timestamp_query_elements" type="int" setter="" getter="" default="256"> + Maximum number of timestamp query elements allowed per frame for visual profiling. + </member> <member name="debug/settings/stdout/print_fps" type="bool" setter="" getter="" default="false"> Print frames per second to standard output every second. </member> @@ -893,8 +900,8 @@ <member name="display/window/stretch/mode" type="String" setter="" getter="" default=""disabled""> Defines how the base size is stretched to fit the resolution of the window or screen. [b]"disabled"[/b]: No stretching happens. One unit in the scene corresponds to one pixel on the screen. In this mode, [member display/window/stretch/aspect] has no effect. Recommended for non-game applications. - [b]"canvas_items"[/b]: The base size specified in width and height in the project settings is stretched to cover the whole screen (taking [member display/window/stretch/aspect] into account). This means that everything is rendered directly at the target resolution. 3D is unaffected, while in 2D, there is no longer a 1:1 correspondence between sprite pixels and screen pixels, which may result in scaling artifacts. Recommended for most games that don't use a pixel art esthetic, although it is possible to use this stretch mode for pixel art games too (especially in 3D). - [b]"viewport"[/b]: The size of the root [Viewport] is set precisely to the base size specified in the Project Settings' Display section. The scene is rendered to this viewport first. Finally, this viewport is scaled to fit the screen (taking [member display/window/stretch/aspect] into account). Recommended for games that use a pixel art esthetic. + [b]"canvas_items"[/b]: The base size specified in width and height in the project settings is stretched to cover the whole screen (taking [member display/window/stretch/aspect] into account). This means that everything is rendered directly at the target resolution. 3D is unaffected, while in 2D, there is no longer a 1:1 correspondence between sprite pixels and screen pixels, which may result in scaling artifacts. Recommended for most games that don't use a pixel art aesthetic, although it is possible to use this stretch mode for pixel art games too (especially in 3D). + [b]"viewport"[/b]: The size of the root [Viewport] is set precisely to the base size specified in the Project Settings' Display section. The scene is rendered to this viewport first. Finally, this viewport is scaled to fit the screen (taking [member display/window/stretch/aspect] into account). Recommended for games that use a pixel art aesthetic. </member> <member name="display/window/stretch/scale" type="float" setter="" getter="" default="1.0"> The scale factor multiplier to use for 2D elements. This multiplies the final scale factor determined by [member display/window/stretch/mode]. If using the [b]Disabled[/b] stretch mode, this scale factor is applied as-is. This can be adjusted to make the UI easier to read on certain displays. @@ -927,8 +934,9 @@ Changing this value allows setting up a multi-project scenario where there are multiple [code].csproj[/code]. Keep in mind that the Godot project is considered one of the C# projects in the workspace and it's root directory should contain the [code]project.godot[/code] and [code].csproj[/code] next to each other. </member> <member name="editor/export/convert_text_resources_to_binary" type="bool" setter="" getter="" default="true"> - If [code]true[/code], text resources are converted to a binary format on export. This decreases file sizes and speeds up loading slightly. - [b]Note:[/b] If [member editor/export/convert_text_resources_to_binary] is [code]true[/code], [method @GDScript.load] will not be able to return the converted files in an exported project. Some file paths within the exported PCK will also change, such as [code]project.godot[/code] becoming [code]project.binary[/code]. If you rely on run-time loading of files present within the PCK, set [member editor/export/convert_text_resources_to_binary] to [code]false[/code]. + If [code]true[/code], text resource ([code]tres[/code]) and text scene ([code]tscn[/code]) files are converted to their corresponding binary format on export. This decreases file sizes and speeds up loading slightly. + [b]Note:[/b] Because a resource's file extension may change in an exported project, it is heavily recommended to use [method @GDScript.load] or [ResourceLoader] instead of [FileAccess] to load resources dynamically. + [b]Note:[/b] The project settings file ([code]project.godot[/code]) will always be converted to binary on export, regardless of this setting. </member> <member name="editor/import/atlas_max_width" type="int" setter="" getter="" default="2048"> The maximum width to use when importing textures as an atlas. The value will be rounded to the nearest power of two when used. Use this to prevent imported textures from growing too large in the other direction. @@ -1387,6 +1395,12 @@ Enabling this can greatly improve the responsiveness to input, specially in devices that need to run multiple physics frames per visible (process) frame, because they can't run at the target frame rate. [b]Note:[/b] Currently implemented only on Android. </member> + <member name="input_devices/buffering/android/use_accumulated_input" type="bool" setter="" getter="" default="true"> + If [code]true[/code], multiple input events will be accumulated into a single input event when possible. + </member> + <member name="input_devices/buffering/android/use_input_buffering" type="bool" setter="" getter="" default="true"> + If [code]true[/code], input events will be buffered prior to being dispatched. + </member> <member name="input_devices/compatibility/legacy_just_pressed_behavior" type="bool" setter="" getter="" default="false"> If [code]true[/code], [method Input.is_action_just_pressed] and [method Input.is_action_just_released] will only return [code]true[/code] if the action is still in the respective state, i.e. an action that is pressed [i]and[/i] released on the same frame will be missed. If [code]false[/code], no input will be lost. @@ -2351,7 +2365,6 @@ </member> <member name="rendering/anti_aliasing/quality/msaa_3d" type="int" setter="" getter="" default="0"> Sets the number of MSAA samples to use for 3D rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. See also [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive. This has no effect on shader-induced aliasing or texture aliasing. - [b]Note:[/b] MSAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility. </member> <member name="rendering/anti_aliasing/quality/screen_space_aa" type="int" setter="" getter="" default="0"> Sets the screen-space antialiasing mode for the default screen [Viewport]. Screen-space antialiasing works by selectively blurring edges in a post-process shader. It differs from MSAA which takes multiple coverage samples while rendering objects. Screen-space AA methods are typically faster than MSAA and will smooth out specular aliasing, but tend to make scenes appear blurry. The blurriness is partially counteracted by automatically using a negative mipmap LOD bias (see [member rendering/textures/default_filters/texture_mipmap_bias]). @@ -2923,11 +2936,11 @@ </member> <member name="xr/openxr/foveation_dynamic" type="bool" setter="" getter="" default="false"> If true and foveation is supported, will automatically adjust foveation level based on framerate up to the level set on [member xr/openxr/foveation_level]. - [b]Note:[/b] Only works on compatibility renderer. + [b]Note:[/b] Only works on the Compatibility rendering method. </member> <member name="xr/openxr/foveation_level" type="int" setter="" getter="" default=""0""> Applied foveation level if supported: 0 = off, 1 = low, 2 = medium, 3 = high. - [b]Note:[/b] Only works on compatibility renderer. + [b]Note:[/b] Only works on the Compatibility rendering method. On platforms other than Android, if [member rendering/anti_aliasing/quality/msaa_3d] is enabled, this feature will be disabled. </member> <member name="xr/openxr/reference_space" type="int" setter="" getter="" default=""1""> Specify the default reference space. diff --git a/doc/classes/ResourceImporterWAV.xml b/doc/classes/ResourceImporterWAV.xml index d3dafb03b6..8f118ace03 100644 --- a/doc/classes/ResourceImporterWAV.xml +++ b/doc/classes/ResourceImporterWAV.xml @@ -17,10 +17,10 @@ [b]QOA ([url=https://qoaformat.org/]Quite OK Audio[/url]):[/b] Performs lossy compression on import. CPU cost is slightly higher than IMA-ADPCM, but quality is much higher. </member> <member name="edit/loop_begin" type="int" setter="" getter="" default="0"> - The begin loop point to use when [member edit/loop_mode] is [b]Forward[/b], [b]Ping-Pong[/b] or [b]Backward[/b]. This is set in seconds after the beginning of the audio file. + The begin loop point to use when [member edit/loop_mode] is [b]Forward[/b], [b]Ping-Pong[/b], or [b]Backward[/b]. This is set in samples after the beginning of the audio file. </member> <member name="edit/loop_end" type="int" setter="" getter="" default="-1"> - The end loop point to use when [member edit/loop_mode] is [b]Forward[/b], [b]Ping-Pong[/b] or [b]Backward[/b]. This is set in seconds after the beginning of the audio file. A value of [code]-1[/code] uses the end of the audio file as the end loop point. + The end loop point to use when [member edit/loop_mode] is [b]Forward[/b], [b]Ping-Pong[/b], or [b]Backward[/b]. This is set in samples after the beginning of the audio file. A value of [code]-1[/code] uses the end of the audio file as the end loop point. </member> <member name="edit/loop_mode" type="int" setter="" getter="" default="0"> Controls how audio should loop. This is automatically read from the WAV metadata on import. diff --git a/doc/classes/ResourceLoader.xml b/doc/classes/ResourceLoader.xml index 1961ca2b0e..cb0db46595 100644 --- a/doc/classes/ResourceLoader.xml +++ b/doc/classes/ResourceLoader.xml @@ -87,7 +87,7 @@ <param index="0" name="path" type="String" /> <description> Returns the resource loaded by [method load_threaded_request]. - If this is called before the loading thread is done (i.e. [method load_threaded_get_status] is not [constant THREAD_LOAD_LOADED]), the calling thread will be blocked until the resource has finished loading. + If this is called before the loading thread is done (i.e. [method load_threaded_get_status] is not [constant THREAD_LOAD_LOADED]), the calling thread will be blocked until the resource has finished loading. However, it's recommended to use [method load_threaded_get_status] to known when the load has actually completed. </description> </method> <method name="load_threaded_get_status"> @@ -97,6 +97,7 @@ <description> Returns the status of a threaded loading operation started with [method load_threaded_request] for the resource at [param path]. See [enum ThreadLoadStatus] for possible return values. An array variable can optionally be passed via [param progress], and will return a one-element array containing the percentage of completion of the threaded loading. + [b]Note:[/b] The recommended way of using this method is to call it during different frames (e.g., in [method Node._process], instead of a loop). </description> </method> <method name="load_threaded_request"> diff --git a/doc/classes/ScriptEditorBase.xml b/doc/classes/ScriptEditorBase.xml index 403608355a..638bc921d6 100644 --- a/doc/classes/ScriptEditorBase.xml +++ b/doc/classes/ScriptEditorBase.xml @@ -72,7 +72,7 @@ </description> </signal> <signal name="request_save_previous_state"> - <param index="0" name="line" type="int" /> + <param index="0" name="state" type="Dictionary" /> <description> Emitted when the user changes current script or moves caret by 10 or more columns within the same script. </description> diff --git a/doc/classes/Skeleton3D.xml b/doc/classes/Skeleton3D.xml index 1167b70c8d..5829a787a1 100644 --- a/doc/classes/Skeleton3D.xml +++ b/doc/classes/Skeleton3D.xml @@ -243,6 +243,8 @@ <return type="void" /> <param index="0" name="enabled" type="bool" /> <description> + This method exists for compatibility with old structures in which the [Skeleton3D] does not have a [PhysicalBoneSimulator3D] as a child, but directly has [PhysicalBone3D]s as children. + In case you need to raycast to it without running [method physical_bones_start_simulation], call this method with [code]enabled == true[/code]. </description> </method> <method name="set_bone_enabled"> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index 75cad4d08b..f71601f9ae 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -1278,6 +1278,9 @@ <member name="context_menu_enabled" type="bool" setter="set_context_menu_enabled" getter="is_context_menu_enabled" default="true"> If [code]true[/code], a right-click displays the context menu. </member> + <member name="custom_word_separators" type="String" setter="set_custom_word_separators" getter="get_custom_word_separators" default=""""> + The characters to consider as word delimiters if [member use_custom_word_separators] is [code]true[/code]. The characters should be defined without separation, for example [code]#_![/code]. + </member> <member name="deselect_on_focus_loss_enabled" type="bool" setter="set_deselect_on_focus_loss_enabled" getter="is_deselect_on_focus_loss_enabled" default="true"> If [code]true[/code], the selected text will be deselected when focus is lost. </member> @@ -1363,6 +1366,12 @@ <member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0"> Base text writing direction. </member> + <member name="use_custom_word_separators" type="bool" setter="set_use_custom_word_separators" getter="is_custom_word_separators_enabled" default="false"> + If [code]false[/code], using [kbd]Ctrl + Left[/kbd] or [kbd]Ctrl + Right[/kbd] ([kbd]Cmd + Left[/kbd] or [kbd]Cmd + Right[/kbd] on macOS) bindings will use the behavior of [member use_default_word_separators]. If [code]true[/code], it will also stop the caret if a character within [member custom_word_separators] is detected. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + </member> + <member name="use_default_word_separators" type="bool" setter="set_use_default_word_separators" getter="is_default_word_separators_enabled" default="true"> + If [code]false[/code], using [kbd]Ctrl + Left[/kbd] or [kbd]Ctrl + Right[/kbd] ([kbd]Cmd + Left[/kbd] or [kbd]Cmd + Right[/kbd] on macOS) bindings will stop moving caret only if a space or punctuation is detected. If [code]true[/code], it will also stop the caret if a character is part of [code]!"#$%&'()*+,-./:;<=>?@[\]^`{|}~[/code], the Unicode General Punctuation table, or the Unicode CJK Punctuation table. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + </member> <member name="virtual_keyboard_enabled" type="bool" setter="set_virtual_keyboard_enabled" getter="is_virtual_keyboard_enabled" default="true"> If [code]true[/code], the native virtual keyboard is shown when focused on platforms that support it. </member> diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml index 34137a18ef..4fa9700f9c 100644 --- a/doc/classes/TextServer.xml +++ b/doc/classes/TextServer.xml @@ -1739,8 +1739,9 @@ When [param chars_per_line] is greater than zero, line break boundaries are returned instead. [codeblock] var ts = TextServerManager.get_primary_interface() - print(ts.string_get_word_breaks("Godot Engine")) # Prints [0, 5, 6, 12] - print(ts.string_get_word_breaks("Godot Engine", "en", 5)) # Prints [0, 5, 6, 11, 11, 12] + print(ts.string_get_word_breaks("The Godot Engine, 4")) # Prints [0, 3, 4, 9, 10, 16, 18, 19], which corresponds to the following substrings: "The", "Godot", "Engine", "4" + print(ts.string_get_word_breaks("The Godot Engine, 4", "en", 5)) # Prints [0, 3, 4, 9, 10, 15, 15, 19], which corresponds to the following substrings: "The", "Godot", "Engin", "e, 4" + print(ts.string_get_word_breaks("The Godot Engine, 4", "en", 10)) # Prints [0, 9, 10, 19], which corresponds to the following substrings: "The Godot", "Engine, 4" [/codeblock] </description> </method> diff --git a/doc/classes/Transform3D.xml b/doc/classes/Transform3D.xml index 2a0bbc46af..30c141659a 100644 --- a/doc/classes/Transform3D.xml +++ b/doc/classes/Transform3D.xml @@ -6,7 +6,7 @@ <description> The [Transform3D] built-in [Variant] type is a 3×4 matrix representing a transformation in 3D space. It contains a [Basis], which on its own can represent rotation, scale, and shear. Additionally, combined with its own [member origin], the transform can also represent a translation. For a general introduction, see the [url=$DOCS_URL/tutorials/math/matrices_and_transforms.html]Matrices and transforms[/url] tutorial. - [b]Note:[/b] Godot uses a [url=https://en.wikipedia.org/wiki/Right-hand_rule]right-handed coordinate system[/url], which is a common standard. For directions, the convention for built-in types like [Camera3D] is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the [url=$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#d-asset-direction-conventions]Importing 3D Scenes[/url] tutorial. + [b]Note:[/b] Godot uses a [url=https://en.wikipedia.org/wiki/Right-hand_rule]right-handed coordinate system[/url], which is a common standard. For directions, the convention for built-in types like [Camera3D] is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the [url=$DOCS_URL/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.html#d-asset-direction-conventions]3D asset direction conventions[/url] tutorial. </description> <tutorials> <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link> diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po index 6e35f435f4..b01ca3ca79 100644 --- a/doc/translations/zh_CN.po +++ b/doc/translations/zh_CN.po @@ -1754,7 +1754,7 @@ msgid "" msgstr "" "使具有静态变量的脚本在所有引用丢失后不持久化。如果再次加载脚本,静态变量将恢复" "为默认值。\n" -"[b] 注意:[/b]当注释描述其主题时,[annotation@static_unload]注释必须放在类定义" +"[b] 注意:[/b]当注释描述其主题时,[annotation @static_unload]注释必须放在类定义" "和继承之前。\n" "[b] 警告:[/b]目前,由于一个错误,即使使用了[annotation @static_unload] 注释," "脚本也永远不会释放。" @@ -10916,8 +10916,8 @@ msgid "" msgstr "" "如果[code]true[/code],则在自动播放之前执行[method AnimationMixer.capture]。这" "意味着只使用默认参数执行[method play_with_capture],而不是[method play]。\n" -"[b] 注意:[/b]只有当动画包含捕捉轨迹时,才会执行捕捉插值。另请参见[常量动画." -"UPDATE_CAPTURE]。" +"[b] 注意:[/b]只有当动画包含捕捉轨迹时,才会执行捕捉插值。另请参见[constant " +"Animation.UPDATE_CAPTURE]。" msgid "" "See also [method play_with_capture] and [method AnimationMixer.capture].\n" @@ -11898,10 +11898,10 @@ msgid "" "[/codeblock]" msgstr "" "从[param base]数组创建类型化数组。所有参数都是必需的。\n" -"-[param type]是作为[enum Variant.type]常量的内置类型,例如[constant " -"type_INT]。\n" -"-[param class_name]是 [b]native[/b] 类名,例如[Node]。如果[参数类型]不是[常量" -"type_OBJECT],则必须是空字符串。\n" +"-[param type]是作为[enum Variant.Type]常量的内置类型,例如[constant " +"TYPE_INT]。\n" +"-[param class_name]是 [b]native[/b] 类名,例如[Node]。如果[param type]" +"不是[constant TYPE_OBJECT],则必须是空字符串。\n" "-[param script]是关联的脚本。必须是[Script]实例或[code]null[/code]。\n" "示例:\n" "[codeblock]\n" @@ -16730,7 +16730,7 @@ msgstr "" "以秒为单位返回最后播放的声音在 [AudioStream] 中的位置。如果没有正在播放的声" "音,将返回 [code]0.0[/code]。\n" "[b]注意:[/b]返回的位置不一定精准,因为[AudioServer]不会在每个处理的帧中混合音" -"频。要想得到更多准确的结果,请将[method AudioServer.get_time_sance_last_mix]添" +"频。要想得到更多准确的结果,请将[method AudioServer.get_time_since_last_mix]添" "加到返回的位置。" msgid "" @@ -73468,8 +73468,7 @@ msgstr "" "位或操作进行的组合,例如 [code]KEY_MASK_CTRL | KEY_A[/code]([kbd]Ctrl + A[/" "kbd])。\n" "[b]注意:[/b]单选菜单项只负责显示选中标记,并没有任何内置检查行为,必须手动进" -"行选中、取消选中的操作。关于如何进行控制的更多信息见 [method " -"global_menu_set_item_checked]。\n" +"行选中、取消选中的操作。关于如何进行控制的更多信息见 [method set_item_checked]。\n" "[b]注意:[/b][param callback] 和 [param key_callback] Callable 均只接受一个 " "Variant 参数,传入 Callable 的参数是传给 [param tag] 的参数。\n" "[b]注意:[/b]该方法在 macOS 和 Windows 上实现。\n" @@ -73568,8 +73567,7 @@ msgstr "" "位或操作进行的组合,例如 [code]KEY_MASK_CTRL | KEY_A[/code]([kbd]Ctrl + A[/" "kbd])。\n" "[b]注意:[/b]单选菜单项只负责显示选中标记,并没有任何内置检查行为,必须手动进" -"行选中、取消选中的操作。关于如何进行控制的更多信息见 [method " -"global_menu_set_item_checked]。\n" +"行选中、取消选中的操作。关于如何进行控制的更多信息见 [method set_item_checked]。\n" "[b]注意:[/b][param callback] 和 [param key_callback] Callable 均只接受一个 " "Variant 参数,传入 Callable 的参数是传给 [param tag] 的参数。\n" "[b]注意:[/b]该方法在 macOS 和 Windows 上实现。\n" @@ -134126,7 +134124,7 @@ msgid "" "Adds override for [method _font_is_language_supported]." msgstr "" "[b]可选。[/b]\n" -"为 [method font_is_language_supported] 添加覆盖。" +"为 [method _font_is_language_supported] 添加覆盖。" msgid "" "[b]Optional.[/b]\n" @@ -134178,7 +134176,7 @@ msgid "" "Adds override for [method _font_is_script_supported]." msgstr "" "[b]可选。[/b]\n" -"为 [method font_is_script_supported] 添加覆盖。" +"为 [method _font_is_script_supported] 添加覆盖。" msgid "" "[b]Optional.[/b]\n" diff --git a/drivers/alsamidi/midi_driver_alsamidi.cpp b/drivers/alsamidi/midi_driver_alsamidi.cpp index b87be69cc5..445fc4a993 100644 --- a/drivers/alsamidi/midi_driver_alsamidi.cpp +++ b/drivers/alsamidi/midi_driver_alsamidi.cpp @@ -37,137 +37,36 @@ #include <errno.h> -MIDIDriverALSAMidi::MessageCategory MIDIDriverALSAMidi::msg_category(uint8_t msg_part) { - if (msg_part >= 0xf8) { - return MessageCategory::RealTime; - } else if (msg_part >= 0xf0) { - // System Exclusive begin/end are specified as System Common Category messages, - // but we separate them here and give them their own categories as their - // behavior is significantly different. - if (msg_part == 0xf0) { - return MessageCategory::SysExBegin; - } else if (msg_part == 0xf7) { - return MessageCategory::SysExEnd; - } - return MessageCategory::SystemCommon; - } else if (msg_part >= 0x80) { - return MessageCategory::Voice; - } - return MessageCategory::Data; -} - -size_t MIDIDriverALSAMidi::msg_expected_data(uint8_t status_byte) { - if (msg_category(status_byte) == MessageCategory::Voice) { - // Voice messages have a channel number in the status byte, mask it out. - status_byte &= 0xf0; - } - - switch (status_byte) { - case 0x80: // Note Off - case 0x90: // Note On - case 0xA0: // Polyphonic Key Pressure (Aftertouch) - case 0xB0: // Control Change (CC) - case 0xE0: // Pitch Bend Change - case 0xF2: // Song Position Pointer - return 2; - - case 0xC0: // Program Change - case 0xD0: // Channel Pressure (Aftertouch) - case 0xF1: // MIDI Time Code Quarter Frame - case 0xF3: // Song Select - return 1; - } +MIDIDriverALSAMidi::InputConnection::InputConnection(int p_device_index, + snd_rawmidi_t *p_rawmidi) : + parser(p_device_index), rawmidi_ptr(p_rawmidi) {} - return 0; -} - -void MIDIDriverALSAMidi::InputConnection::parse_byte(uint8_t byte, MIDIDriverALSAMidi &driver, - uint64_t timestamp, int device_index) { - switch (msg_category(byte)) { - case MessageCategory::RealTime: - // Real-Time messages are single byte messages that can - // occur at any point. - // We pass them straight through. - driver.receive_input_packet(device_index, timestamp, &byte, 1); - break; - - case MessageCategory::Data: - // We don't currently forward System Exclusive messages so skip their data. - // Collect any expected data for other message types. - if (!skipping_sys_ex && expected_data > received_data) { - buffer[received_data + 1] = byte; - received_data++; - - // Forward a complete message and reset relevant state. - if (received_data == expected_data) { - driver.receive_input_packet(device_index, timestamp, buffer, received_data + 1); - received_data = 0; - - if (msg_category(buffer[0]) != MessageCategory::Voice) { - // Voice Category messages can be sent with "running status". - // This means they don't resend the status byte until it changes. - // For other categories, we reset expected data, to require a new status byte. - expected_data = 0; - } - } - } - break; - - case MessageCategory::SysExBegin: - buffer[0] = byte; - skipping_sys_ex = true; - break; - - case MessageCategory::SysExEnd: - expected_data = 0; - skipping_sys_ex = false; - break; - - case MessageCategory::Voice: - case MessageCategory::SystemCommon: - buffer[0] = byte; - received_data = 0; - expected_data = msg_expected_data(byte); - skipping_sys_ex = false; - if (expected_data == 0) { - driver.receive_input_packet(device_index, timestamp, &byte, 1); - } - break; - } -} - -int MIDIDriverALSAMidi::InputConnection::read_in(MIDIDriverALSAMidi &driver, uint64_t timestamp, int device_index) { - int ret; +void MIDIDriverALSAMidi::InputConnection::read() { + int read_count; do { - uint8_t byte = 0; - ret = snd_rawmidi_read(rawmidi_ptr, &byte, 1); + uint8_t buffer[32]; + read_count = snd_rawmidi_read(rawmidi_ptr, buffer, sizeof(buffer)); - if (ret < 0) { - if (ret != -EAGAIN) { - ERR_PRINT("snd_rawmidi_read error: " + String(snd_strerror(ret))); + if (read_count < 0) { + if (read_count != -EAGAIN) { + ERR_PRINT("snd_rawmidi_read error: " + String(snd_strerror(read_count))); } } else { - parse_byte(byte, driver, timestamp, device_index); + for (int i = 0; i < read_count; i++) { + parser.parse_fragment(buffer[i]); + } } - } while (ret > 0); - - return ret; + } while (read_count > 0); } void MIDIDriverALSAMidi::thread_func(void *p_udata) { MIDIDriverALSAMidi *md = static_cast<MIDIDriverALSAMidi *>(p_udata); - uint64_t timestamp = 0; while (!md->exit_thread.is_set()) { md->lock(); - - InputConnection *connections = md->connected_inputs.ptrw(); - size_t connection_count = md->connected_inputs.size(); - - for (size_t i = 0; i < connection_count; i++) { - connections[i].read_in(*md, timestamp, (int)i); + for (InputConnection &conn : md->connected_inputs) { + conn.read(); } - md->unlock(); OS::get_singleton()->delay_usec(1000); @@ -181,15 +80,25 @@ Error MIDIDriverALSAMidi::open() { return ERR_CANT_OPEN; } - int i = 0; - for (void **n = hints; *n != nullptr; n++) { - char *name = snd_device_name_get_hint(*n, "NAME"); + lock(); + int device_index = 0; + for (void **h = hints; *h != nullptr; h++) { + char *name = snd_device_name_get_hint(*h, "NAME"); if (name != nullptr) { snd_rawmidi_t *midi_in; int ret = snd_rawmidi_open(&midi_in, nullptr, name, SND_RAWMIDI_NONBLOCK); if (ret >= 0) { - connected_inputs.insert(i++, InputConnection(midi_in)); + // Get display name. + snd_rawmidi_info_t *info; + snd_rawmidi_info_malloc(&info); + snd_rawmidi_info(midi_in, info); + connected_input_names.push_back(snd_rawmidi_info_get_name(info)); + snd_rawmidi_info_free(info); + + connected_inputs.push_back(InputConnection(device_index, midi_in)); + // Only increment device_index for successfully connected devices. + device_index++; } } @@ -198,6 +107,7 @@ Error MIDIDriverALSAMidi::open() { } } snd_device_name_free_hint(hints); + unlock(); exit_thread.clear(); thread.start(MIDIDriverALSAMidi::thread_func, this); @@ -211,11 +121,12 @@ void MIDIDriverALSAMidi::close() { thread.wait_to_finish(); } - for (int i = 0; i < connected_inputs.size(); i++) { - snd_rawmidi_t *midi_in = connected_inputs[i].rawmidi_ptr; - snd_rawmidi_close(midi_in); + for (const InputConnection &conn : connected_inputs) { + snd_rawmidi_close(conn.rawmidi_ptr); } + connected_inputs.clear(); + connected_input_names.clear(); } void MIDIDriverALSAMidi::lock() const { @@ -226,24 +137,6 @@ void MIDIDriverALSAMidi::unlock() const { mutex.unlock(); } -PackedStringArray MIDIDriverALSAMidi::get_connected_inputs() { - PackedStringArray list; - - lock(); - for (int i = 0; i < connected_inputs.size(); i++) { - snd_rawmidi_t *midi_in = connected_inputs[i].rawmidi_ptr; - snd_rawmidi_info_t *info; - - snd_rawmidi_info_malloc(&info); - snd_rawmidi_info(midi_in, info); - list.push_back(snd_rawmidi_info_get_name(info)); - snd_rawmidi_info_free(info); - } - unlock(); - - return list; -} - MIDIDriverALSAMidi::MIDIDriverALSAMidi() { exit_thread.clear(); } diff --git a/drivers/alsamidi/midi_driver_alsamidi.h b/drivers/alsamidi/midi_driver_alsamidi.h index 95ded3b1c9..45811bec47 100644 --- a/drivers/alsamidi/midi_driver_alsamidi.h +++ b/drivers/alsamidi/midi_driver_alsamidi.h @@ -51,24 +51,15 @@ class MIDIDriverALSAMidi : public MIDIDriver { Thread thread; Mutex mutex; - class InputConnection { - public: + struct InputConnection { InputConnection() = default; - InputConnection(snd_rawmidi_t *midi_in) : - rawmidi_ptr{ midi_in } {} - - // Read in and parse available data, forwarding any complete messages through the driver. - int read_in(MIDIDriverALSAMidi &driver, uint64_t timestamp, int device_index); + InputConnection(int p_device_index, snd_rawmidi_t *p_rawmidi); + Parser parser; snd_rawmidi_t *rawmidi_ptr = nullptr; - private: - static const size_t MSG_BUFFER_SIZE = 3; - uint8_t buffer[MSG_BUFFER_SIZE] = { 0 }; - size_t expected_data = 0; - size_t received_data = 0; - bool skipping_sys_ex = false; - void parse_byte(uint8_t byte, MIDIDriverALSAMidi &driver, uint64_t timestamp, int device_index); + // Read in and parse available data, forwarding complete events to Input. + void read(); }; Vector<InputConnection> connected_inputs; @@ -77,30 +68,12 @@ class MIDIDriverALSAMidi : public MIDIDriver { static void thread_func(void *p_udata); - enum class MessageCategory { - Data, - Voice, - SysExBegin, - SystemCommon, // excluding System Exclusive Begin/End - SysExEnd, - RealTime, - }; - - // If the passed byte is a status byte, return the associated message category, - // else return MessageCategory::Data. - static MessageCategory msg_category(uint8_t msg_part); - - // Return the number of data bytes expected for the provided status byte. - static size_t msg_expected_data(uint8_t status_byte); - void lock() const; void unlock() const; public: - virtual Error open(); - virtual void close(); - - virtual PackedStringArray get_connected_inputs(); + virtual Error open() override; + virtual void close() override; MIDIDriverALSAMidi(); virtual ~MIDIDriverALSAMidi(); diff --git a/drivers/coremidi/midi_driver_coremidi.cpp b/drivers/coremidi/midi_driver_coremidi.cpp index 87fc7612f7..f6cc59471e 100644 --- a/drivers/coremidi/midi_driver_coremidi.cpp +++ b/drivers/coremidi/midi_driver_coremidi.cpp @@ -37,16 +37,30 @@ #import <CoreAudio/HostTime.h> #import <CoreServices/CoreServices.h> +Mutex MIDIDriverCoreMidi::mutex; +bool MIDIDriverCoreMidi::core_midi_closed = false; + +MIDIDriverCoreMidi::InputConnection::InputConnection(int p_device_index, MIDIEndpointRef p_source) : + parser(p_device_index), source(p_source) {} + void MIDIDriverCoreMidi::read(const MIDIPacketList *packet_list, void *read_proc_ref_con, void *src_conn_ref_con) { - MIDIPacket *packet = const_cast<MIDIPacket *>(packet_list->packet); - int *device_index = static_cast<int *>(src_conn_ref_con); - for (UInt32 i = 0; i < packet_list->numPackets; i++) { - receive_input_packet(*device_index, packet->timeStamp, packet->data, packet->length); - packet = MIDIPacketNext(packet); + MutexLock lock(mutex); + if (!core_midi_closed) { + InputConnection *source = static_cast<InputConnection *>(src_conn_ref_con); + const MIDIPacket *packet = packet_list->packet; + for (UInt32 packet_index = 0; packet_index < packet_list->numPackets; packet_index++) { + for (UInt16 data_index = 0; data_index < packet->length; data_index++) { + source->parser.parse_fragment(packet->data[data_index]); + } + packet = MIDIPacketNext(packet); + } } } Error MIDIDriverCoreMidi::open() { + ERR_FAIL_COND_V_MSG(client || core_midi_closed, FAILED, + "MIDIDriverCoreMidi cannot be reopened."); + CFStringRef name = CFStringCreateWithCString(nullptr, "Godot", kCFStringEncodingASCII); OSStatus result = MIDIClientCreate(name, nullptr, nullptr, &client); CFRelease(name); @@ -61,12 +75,27 @@ Error MIDIDriverCoreMidi::open() { return ERR_CANT_OPEN; } - int sources = MIDIGetNumberOfSources(); - for (int i = 0; i < sources; i++) { + int source_count = MIDIGetNumberOfSources(); + int connection_index = 0; + for (int i = 0; i < source_count; i++) { MIDIEndpointRef source = MIDIGetSource(i); if (source) { - MIDIPortConnectSource(port_in, source, static_cast<void *>(&i)); - connected_sources.insert(i, source); + InputConnection *conn = memnew(InputConnection(connection_index, source)); + const OSStatus res = MIDIPortConnectSource(port_in, source, static_cast<void *>(conn)); + if (res != noErr) { + memdelete(conn); + } else { + connected_sources.push_back(conn); + + CFStringRef nameRef = nullptr; + char name[256]; + MIDIObjectGetStringProperty(source, kMIDIPropertyDisplayName, &nameRef); + CFStringGetCString(nameRef, name, sizeof(name), kCFStringEncodingUTF8); + CFRelease(nameRef); + connected_input_names.push_back(name); + + connection_index++; // Contiguous index for successfully connected inputs. + } } } @@ -74,11 +103,17 @@ Error MIDIDriverCoreMidi::open() { } void MIDIDriverCoreMidi::close() { - for (int i = 0; i < connected_sources.size(); i++) { - MIDIEndpointRef source = connected_sources[i]; - MIDIPortDisconnectSource(port_in, source); + mutex.lock(); + core_midi_closed = true; + mutex.unlock(); + + for (InputConnection *conn : connected_sources) { + MIDIPortDisconnectSource(port_in, conn->source); + memdelete(conn); } + connected_sources.clear(); + connected_input_names.clear(); if (port_in != 0) { MIDIPortDispose(port_in); @@ -91,26 +126,6 @@ void MIDIDriverCoreMidi::close() { } } -PackedStringArray MIDIDriverCoreMidi::get_connected_inputs() { - PackedStringArray list; - - for (int i = 0; i < connected_sources.size(); i++) { - MIDIEndpointRef source = connected_sources[i]; - CFStringRef ref = nullptr; - char name[256]; - - MIDIObjectGetStringProperty(source, kMIDIPropertyDisplayName, &ref); - CFStringGetCString(ref, name, sizeof(name), kCFStringEncodingUTF8); - CFRelease(ref); - - list.push_back(name); - } - - return list; -} - -MIDIDriverCoreMidi::MIDIDriverCoreMidi() {} - MIDIDriverCoreMidi::~MIDIDriverCoreMidi() { close(); } diff --git a/drivers/coremidi/midi_driver_coremidi.h b/drivers/coremidi/midi_driver_coremidi.h index 38fb515664..02cbc6234c 100644 --- a/drivers/coremidi/midi_driver_coremidi.h +++ b/drivers/coremidi/midi_driver_coremidi.h @@ -34,6 +34,7 @@ #ifdef COREMIDI_ENABLED #include "core/os/midi_driver.h" +#include "core/os/mutex.h" #include "core/templates/vector.h" #import <CoreMIDI/CoreMIDI.h> @@ -43,17 +44,25 @@ class MIDIDriverCoreMidi : public MIDIDriver { MIDIClientRef client = 0; MIDIPortRef port_in; - Vector<MIDIEndpointRef> connected_sources; + struct InputConnection { + InputConnection() = default; + InputConnection(int p_device_index, MIDIEndpointRef p_source); + Parser parser; + MIDIEndpointRef source; + }; + + Vector<InputConnection *> connected_sources; + + static Mutex mutex; + static bool core_midi_closed; static void read(const MIDIPacketList *packet_list, void *read_proc_ref_con, void *src_conn_ref_con); public: - virtual Error open(); - virtual void close(); - - PackedStringArray get_connected_inputs(); + virtual Error open() override; + virtual void close() override; - MIDIDriverCoreMidi(); + MIDIDriverCoreMidi() = default; virtual ~MIDIDriverCoreMidi(); }; diff --git a/drivers/d3d12/d3d12ma.cpp b/drivers/d3d12/d3d12ma.cpp index 51171141de..b7c9eb7ec0 100644 --- a/drivers/d3d12/d3d12ma.cpp +++ b/drivers/d3d12/d3d12ma.cpp @@ -43,6 +43,18 @@ #pragma GCC diagnostic ignored "-Wunused-function" #pragma GCC diagnostic ignored "-Wnonnull-compare" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" +#pragma clang diagnostic ignored "-Wstring-plus-int" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wmissing-field-initializers" +#pragma clang diagnostic ignored "-Wtautological-undefined-compare" +#pragma clang diagnostic ignored "-Wunused-variable" +#pragma clang diagnostic ignored "-Wunused-but-set-variable" +#pragma clang diagnostic ignored "-Wunused-function" +#pragma clang diagnostic ignored "-Wunused-private-field" +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" #endif #if defined(_MSC_VER) diff --git a/drivers/d3d12/rendering_context_driver_d3d12.cpp b/drivers/d3d12/rendering_context_driver_d3d12.cpp index 128b8bcd03..c4cb99fcaa 100644 --- a/drivers/d3d12/rendering_context_driver_d3d12.cpp +++ b/drivers/d3d12/rendering_context_driver_d3d12.cpp @@ -43,12 +43,20 @@ #pragma GCC diagnostic ignored "-Wshadow" #pragma GCC diagnostic ignored "-Wswitch" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" +#pragma clang diagnostic ignored "-Wstring-plus-int" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wmissing-field-initializers" #endif #include "dxcapi.h" #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic pop +#elif defined(__clang__) +#pragma clang diagnostic pop #endif #if !defined(_MSC_VER) diff --git a/drivers/d3d12/rendering_context_driver_d3d12.h b/drivers/d3d12/rendering_context_driver_d3d12.h index 2e286b6927..a2d828ded1 100644 --- a/drivers/d3d12/rendering_context_driver_d3d12.h +++ b/drivers/d3d12/rendering_context_driver_d3d12.h @@ -46,6 +46,13 @@ #pragma GCC diagnostic ignored "-Wswitch" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" +#pragma clang diagnostic ignored "-Wstring-plus-int" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wmissing-field-initializers" +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" #endif #if defined(AS) @@ -59,6 +66,8 @@ #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic pop +#elif defined(__clang__) +#pragma clang diagnostic pop #endif using Microsoft::WRL::ComPtr; diff --git a/drivers/d3d12/rendering_device_driver_d3d12.cpp b/drivers/d3d12/rendering_device_driver_d3d12.cpp index fb278a4d56..a6bce1d79a 100644 --- a/drivers/d3d12/rendering_device_driver_d3d12.cpp +++ b/drivers/d3d12/rendering_device_driver_d3d12.cpp @@ -51,6 +51,12 @@ #pragma GCC diagnostic ignored "-Wshadow" #pragma GCC diagnostic ignored "-Wswitch" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" +#pragma clang diagnostic ignored "-Wstring-plus-int" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wmissing-field-initializers" #endif #include "dxil_validator.h" @@ -63,6 +69,8 @@ extern "C" { #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic pop +#elif defined(__clang__) +#pragma clang diagnostic pop #endif #if defined(_MSC_VER) @@ -96,11 +104,6 @@ static const D3D12_RANGE VOID_RANGE = {}; static const uint32_t ROOT_CONSTANT_REGISTER = GODOT_NIR_DESCRIPTOR_SET_MULTIPLIER * (RDD::MAX_UNIFORM_SETS + 1); static const uint32_t RUNTIME_DATA_REGISTER = GODOT_NIR_DESCRIPTOR_SET_MULTIPLIER * (RDD::MAX_UNIFORM_SETS + 2); -#ifdef DEV_ENABLED -//#define DEBUG_COUNT_BARRIERS -#define CUSTOM_INFO_QUEUE_ENABLED 0 -#endif - /*****************/ /**** GENERIC ****/ /*****************/ @@ -869,6 +872,7 @@ RDD::BufferID RenderingDeviceDriverD3D12::buffer_create(uint64_t p_size, BitFiel D3D12MA::ALLOCATION_DESC allocation_desc = {}; allocation_desc.HeapType = D3D12_HEAP_TYPE_DEFAULT; + D3D12_RESOURCE_STATES initial_state = D3D12_RESOURCE_STATE_COMMON; switch (p_allocation_type) { case MEMORY_ALLOCATION_TYPE_CPU: { bool is_src = p_usage.has_flag(BUFFER_USAGE_TRANSFER_FROM_BIT); @@ -876,10 +880,12 @@ RDD::BufferID RenderingDeviceDriverD3D12::buffer_create(uint64_t p_size, BitFiel if (is_src && !is_dst) { // Looks like a staging buffer: CPU maps, writes sequentially, then GPU copies to VRAM. allocation_desc.HeapType = D3D12_HEAP_TYPE_UPLOAD; + initial_state = D3D12_RESOURCE_STATE_GENERIC_READ; } if (is_dst && !is_src) { // Looks like a readback buffer: GPU copies from VRAM, then CPU maps and reads. allocation_desc.HeapType = D3D12_HEAP_TYPE_READBACK; + initial_state = D3D12_RESOURCE_STATE_COPY_DEST; } } break; case MEMORY_ALLOCATION_TYPE_GPU: { @@ -908,7 +914,7 @@ RDD::BufferID RenderingDeviceDriverD3D12::buffer_create(uint64_t p_size, BitFiel res = allocator->CreateResource( &allocation_desc, reinterpret_cast<const D3D12_RESOURCE_DESC *>(&resource_desc), - D3D12_RESOURCE_STATE_COMMON, + initial_state, nullptr, allocation.GetAddressOf(), IID_PPV_ARGS(buffer.GetAddressOf())); @@ -922,7 +928,7 @@ RDD::BufferID RenderingDeviceDriverD3D12::buffer_create(uint64_t p_size, BitFiel buf_info->resource = buffer.Get(); buf_info->owner_info.resource = buffer; buf_info->owner_info.allocation = allocation; - buf_info->owner_info.states.subresource_states.push_back(D3D12_RESOURCE_STATE_COMMON); + buf_info->owner_info.states.subresource_states.push_back(initial_state); buf_info->states_ptr = &buf_info->owner_info.states; buf_info->size = p_size; buf_info->flags.usable_as_uav = (resource_desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); @@ -1462,7 +1468,7 @@ RDD::TextureID RenderingDeviceDriverD3D12::_texture_create_shared_from_slice(Tex uav_desc.Format = RD_TO_D3D12_FORMAT[p_view.format].general_format; } - if (p_slice_type != -1) { + if (p_slice_type != (TextureSliceType)-1) { // Complete description with slicing. switch (p_slice_type) { @@ -1560,7 +1566,7 @@ RDD::TextureID RenderingDeviceDriverD3D12::_texture_create_shared_from_slice(Tex tex_info->states_ptr = owner_tex_info->states_ptr; tex_info->format = p_view.format; tex_info->desc = new_tex_resource_desc; - if (p_slice_type == -1) { + if (p_slice_type == (TextureSliceType)-1) { tex_info->base_layer = owner_tex_info->base_layer; tex_info->layers = owner_tex_info->layers; tex_info->base_mip = owner_tex_info->base_mip; @@ -1741,7 +1747,7 @@ RDD::SamplerID RenderingDeviceDriverD3D12::sampler_create(const SamplerState &p_ slot = 1; } else { for (uint32_t i = 1; i < samplers.size(); i++) { - if (samplers[i].Filter == INT_MAX) { + if ((int)samplers[i].Filter == INT_MAX) { slot = i; break; } @@ -2703,6 +2709,8 @@ D3D12_UNORDERED_ACCESS_VIEW_DESC RenderingDeviceDriverD3D12::_make_ranged_uav_fo uav_desc.Texture3D.MipSlice = mip; uav_desc.Texture3D.WSize >>= p_mipmap_offset; } break; + default: + break; } return uav_desc; @@ -4094,7 +4102,6 @@ RDD::UniformSetID RenderingDeviceDriverD3D12::uniform_set_create(VectorView<Boun { uniform_set_info->resource_states.reserve(resource_states.size()); - uint32_t i = 0; for (const KeyValue<ResourceInfo *, NeededState> &E : resource_states) { UniformSetInfo::StateRequirement sr; sr.resource = E.key; @@ -4102,7 +4109,6 @@ RDD::UniformSetID RenderingDeviceDriverD3D12::uniform_set_create(VectorView<Boun sr.states = E.value.states; sr.shader_uniform_idx_mask = E.value.shader_uniform_idx_mask; uniform_set_info->resource_states.push_back(sr); - i++; } } @@ -6635,7 +6641,7 @@ Error RenderingDeviceDriverD3D12::_initialize_frames(uint32_t p_frame_count) { D3D12MA::ALLOCATION_DESC allocation_desc = {}; allocation_desc.HeapType = D3D12_HEAP_TYPE_DEFAULT; - CD3DX12_RESOURCE_DESC resource_desc = CD3DX12_RESOURCE_DESC::Buffer(D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT); + //CD3DX12_RESOURCE_DESC resource_desc = CD3DX12_RESOURCE_DESC::Buffer(D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT); uint32_t resource_descriptors_per_frame = GLOBAL_GET("rendering/rendering_device/d3d12/max_resource_descriptors_per_frame"); uint32_t sampler_descriptors_per_frame = GLOBAL_GET("rendering/rendering_device/d3d12/max_sampler_descriptors_per_frame"); uint32_t misc_descriptors_per_frame = GLOBAL_GET("rendering/rendering_device/d3d12/max_misc_descriptors_per_frame"); diff --git a/drivers/d3d12/rendering_device_driver_d3d12.h b/drivers/d3d12/rendering_device_driver_d3d12.h index 1782819238..92e8e494d4 100644 --- a/drivers/d3d12/rendering_device_driver_d3d12.h +++ b/drivers/d3d12/rendering_device_driver_d3d12.h @@ -43,6 +43,13 @@ #pragma GCC diagnostic ignored "-Wswitch" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" +#pragma clang diagnostic ignored "-Wstring-plus-int" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wmissing-field-initializers" +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" #endif #include "d3dx12.h" @@ -59,12 +66,19 @@ #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic pop +#elif defined(__clang__) +#pragma clang diagnostic pop #endif using Microsoft::WRL::ComPtr; #define D3D12_BITCODE_OFFSETS_NUM_STAGES 3 +#ifdef DEV_ENABLED +//#define DEBUG_COUNT_BARRIERS +#define CUSTOM_INFO_QUEUE_ENABLED 0 +#endif + struct dxil_validator; class RenderingContextDriverD3D12; @@ -257,7 +271,7 @@ private: LocalVector<D3D12_RESOURCE_BARRIER> res_barriers; uint32_t res_barriers_count = 0; uint32_t res_barriers_batch = 0; -#ifdef DEV_ENABLED +#ifdef DEBUG_COUNT_BARRIERS int frame_barriers_count = 0; int frame_barriers_batches_count = 0; uint64_t frame_barriers_cpu_time = 0; diff --git a/drivers/gles3/rasterizer_canvas_gles3.h b/drivers/gles3/rasterizer_canvas_gles3.h index 7fc9992c3d..46ed479a3d 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.h +++ b/drivers/gles3/rasterizer_canvas_gles3.h @@ -63,7 +63,6 @@ class RasterizerCanvasGLES3 : public RendererCanvasRender { FLAGS_TRANSPOSE_RECT = (1 << 10), FLAGS_NINEPACH_DRAW_CENTER = (1 << 12), - FLAGS_USING_PARTICLES = (1 << 13), FLAGS_USE_SKELETON = (1 << 15), FLAGS_NINEPATCH_H_MODE_SHIFT = 16, diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index ae39c86d44..5ff95391a2 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -72,7 +72,7 @@ #if !defined(IOS_ENABLED) && !defined(WEB_ENABLED) // We include EGL below to get debug callback on GLES2 platforms, -// but EGL is not available on iOS. +// but EGL is not available on iOS or the web. #define CAN_DEBUG #endif diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 9ea030bbd4..a6796a1a6b 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -2247,7 +2247,6 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ bool glow_enabled = false; if (p_environment.is_valid()) { glow_enabled = environment_get_glow_enabled(p_environment); - rb->ensure_internal_buffers(); // Ensure our intermediate buffer is available if glow is enabled if (glow_enabled) { // If glow is enabled, we apply tonemapping etc. in post, so disable it during rendering apply_color_adjustments_in_post = true; @@ -2339,7 +2338,6 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ if (render_data.environment.is_valid()) { bool use_bcs = environment_get_adjustments_enabled(render_data.environment); if (use_bcs) { - rb->ensure_internal_buffers(); apply_color_adjustments_in_post = true; } @@ -2473,6 +2471,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ if (is_reflection_probe) { fbo = GLES3::LightStorage::get_singleton()->reflection_probe_instance_get_framebuffer(render_data.reflection_probe, render_data.reflection_probe_pass); } else { + rb->set_apply_color_adjustments_in_post(apply_color_adjustments_in_post); fbo = rb->get_render_fbo(); } @@ -2500,7 +2499,9 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_ glColorMask(0, 0, 0, 0); RasterizerGLES3::clear_depth(0.0); glClear(GL_DEPTH_BUFFER_BIT); - glDrawBuffers(0, nullptr); + // Some desktop GL implementations fall apart when using Multiview with GL_NONE. + GLuint db = p_camera_data->view_count > 1 ? GL_COLOR_ATTACHMENT0 : GL_NONE; + glDrawBuffers(1, &db); uint64_t spec_constant = SceneShaderGLES3::DISABLE_FOG | SceneShaderGLES3::DISABLE_LIGHT_DIRECTIONAL | SceneShaderGLES3::DISABLE_LIGHTMAP | SceneShaderGLES3::DISABLE_LIGHT_OMNI | diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 4eb6f62482..e358230747 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -239,13 +239,6 @@ void main() { model_matrix = model_matrix * transpose(mat4(instance_xform0, instance_xform1, vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0))); #endif // USE_INSTANCING -#if !defined(USE_ATTRIBUTES) && !defined(USE_PRIMITIVE) - if (bool(read_draw_data_flags & FLAGS_USING_PARTICLES)) { - //scale by texture size - vertex /= read_draw_data_color_texture_pixel_size; - } -#endif - vec2 color_texture_pixel_size = read_draw_data_color_texture_pixel_size; #ifdef USE_POINT_SIZE diff --git a/drivers/gles3/shaders/canvas_uniforms_inc.glsl b/drivers/gles3/shaders/canvas_uniforms_inc.glsl index 21fd4d3d9d..f6ad2b730a 100644 --- a/drivers/gles3/shaders/canvas_uniforms_inc.glsl +++ b/drivers/gles3/shaders/canvas_uniforms_inc.glsl @@ -14,7 +14,6 @@ #define FLAGS_TRANSPOSE_RECT uint(1 << 10) // (1 << 11) is for FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR in RD backends, unused here. #define FLAGS_NINEPACH_DRAW_CENTER uint(1 << 12) -#define FLAGS_USING_PARTICLES uint(1 << 13) #define FLAGS_NINEPATCH_H_MODE_SHIFT 16 #define FLAGS_NINEPATCH_V_MODE_SHIFT 18 diff --git a/drivers/gles3/storage/config.cpp b/drivers/gles3/storage/config.cpp index 1a14902c7c..a28b050bf8 100644 --- a/drivers/gles3/storage/config.cpp +++ b/drivers/gles3/storage/config.cpp @@ -35,6 +35,10 @@ #include "../rasterizer_gles3.h" #include "texture_storage.h" +#ifdef WEB_ENABLED +#include <emscripten/html5_webgl.h> +#endif + using namespace GLES3; #define _GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF @@ -44,6 +48,23 @@ Config *Config::singleton = nullptr; Config::Config() { singleton = this; +#ifdef WEB_ENABLED + // Starting with Emscripten 3.1.51, glGetStringi(GL_EXTENSIONS, i) will only ever return + // a fixed list of extensions, regardless of what additional extensions are enabled. This + // isn't very useful for us in determining which extensions we can rely on here. So, instead + // we use emscripten_webgl_get_supported_extensions() to get all supported extensions, which + // is what Emscripten 3.1.50 and earlier do. + { + char *extension_array_string = emscripten_webgl_get_supported_extensions(); + PackedStringArray extension_array = String((const char *)extension_array_string).split(" "); + extensions.reserve(extension_array.size() * 2); + for (const String &s : extension_array) { + extensions.insert(s); + extensions.insert("GL_" + s); + } + free(extension_array_string); + } +#else { GLint max_extensions = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &max_extensions); @@ -55,6 +76,7 @@ Config::Config() { extensions.insert((const char *)s); } } +#endif bptc_supported = extensions.has("GL_ARB_texture_compression_bptc") || extensions.has("EXT_texture_compression_bptc"); astc_supported = extensions.has("GL_KHR_texture_compression_astc") || extensions.has("GL_OES_texture_compression_astc") || extensions.has("GL_KHR_texture_compression_astc_ldr") || extensions.has("GL_KHR_texture_compression_astc_hdr"); diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index bacf607c66..21790d29b5 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -1111,15 +1111,15 @@ MaterialStorage::MaterialStorage() { global_shader_uniforms.buffer_size = MAX(16, (int)GLOBAL_GET("rendering/limits/global_shader_variables/buffer_size")); if (global_shader_uniforms.buffer_size * sizeof(GlobalShaderUniforms::Value) > uint32_t(Config::get_singleton()->max_uniform_buffer_size)) { + // Limit to maximum support UBO size. global_shader_uniforms.buffer_size = uint32_t(Config::get_singleton()->max_uniform_buffer_size) / sizeof(GlobalShaderUniforms::Value); - WARN_PRINT("Project setting \"rendering/limits/global_shader_variables/buffer_size\" exceeds maximum uniform buffer size of: " + itos(Config::get_singleton()->max_uniform_buffer_size / sizeof(GlobalShaderUniforms::Value)) + ". Falling back on maximum buffer size."); } global_shader_uniforms.buffer_values = memnew_arr(GlobalShaderUniforms::Value, global_shader_uniforms.buffer_size); memset(global_shader_uniforms.buffer_values, 0, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size); global_shader_uniforms.buffer_usage = memnew_arr(GlobalShaderUniforms::ValueUsage, global_shader_uniforms.buffer_size); - global_shader_uniforms.buffer_dirty_regions = memnew_arr(bool, global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); - memset(global_shader_uniforms.buffer_dirty_regions, 0, sizeof(bool) * global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); + global_shader_uniforms.buffer_dirty_regions = memnew_arr(bool, 1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE)); + memset(global_shader_uniforms.buffer_dirty_regions, 0, sizeof(bool) * (1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE))); glGenBuffers(1, &global_shader_uniforms.buffer); glBindBuffer(GL_UNIFORM_BUFFER, global_shader_uniforms.buffer); glBufferData(GL_UNIFORM_BUFFER, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size, nullptr, GL_DYNAMIC_DRAW); @@ -1788,7 +1788,7 @@ void MaterialStorage::global_shader_parameter_add(const StringName &p_name, RS:: //is vector, allocate in buffer and update index gv.buffer_index = _global_shader_uniform_allocate(gv.buffer_elements); - ERR_FAIL_COND_MSG(gv.buffer_index < 0, vformat("Failed allocating global variable '%s' out of buffer memory. Consider increasing it in the Project Settings.", String(p_name))); + ERR_FAIL_COND_MSG(gv.buffer_index < 0, vformat("Failed allocating global variable '%s' out of buffer memory. Consider increasing rendering/limits/global_shader_variables/buffer_size in the Project Settings. Maximum items supported by this hardware is: %d.", String(p_name), Config::get_singleton()->max_uniform_buffer_size / sizeof(GlobalShaderUniforms::Value))); global_shader_uniforms.buffer_usage[gv.buffer_index].elements = gv.buffer_elements; _global_shader_uniform_store_in_buffer(gv.buffer_index, gv.type, gv.value); _global_shader_uniform_mark_buffer_dirty(gv.buffer_index, gv.buffer_elements); @@ -1999,7 +1999,7 @@ int32_t MaterialStorage::global_shader_parameters_instance_allocate(RID p_instan ERR_FAIL_COND_V(global_shader_uniforms.instance_buffer_pos.has(p_instance), -1); int32_t pos = _global_shader_uniform_allocate(ShaderLanguage::MAX_INSTANCE_UNIFORM_INDICES); global_shader_uniforms.instance_buffer_pos[p_instance] = pos; //save anyway - ERR_FAIL_COND_V_MSG(pos < 0, -1, "Too many instances using shader instance variables. Increase buffer size in Project Settings."); + ERR_FAIL_COND_V_MSG(pos < 0, -1, vformat("Too many instances using shader instance variables. Consider increasing rendering/limits/global_shader_variables/buffer_size in the Project Settings. Maximum items supported by this hardware is: %d.", Config::get_singleton()->max_uniform_buffer_size / sizeof(GlobalShaderUniforms::Value))); global_shader_uniforms.buffer_usage[pos].elements = ShaderLanguage::MAX_INSTANCE_UNIFORM_INDICES; return pos; } @@ -2079,7 +2079,7 @@ void MaterialStorage::global_shader_parameters_instance_update(RID p_instance, i void MaterialStorage::_update_global_shader_uniforms() { MaterialStorage *material_storage = MaterialStorage::get_singleton(); if (global_shader_uniforms.buffer_dirty_region_count > 0) { - uint32_t total_regions = global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE; + uint32_t total_regions = 1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); if (total_regions / global_shader_uniforms.buffer_dirty_region_count <= 4) { // 25% of regions dirty, just update all buffer glBindBuffer(GL_UNIFORM_BUFFER, global_shader_uniforms.buffer); diff --git a/drivers/gles3/storage/render_scene_buffers_gles3.cpp b/drivers/gles3/storage/render_scene_buffers_gles3.cpp index e4f1a01f68..c91547d2b1 100644 --- a/drivers/gles3/storage/render_scene_buffers_gles3.cpp +++ b/drivers/gles3/storage/render_scene_buffers_gles3.cpp @@ -194,7 +194,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() { ERR_FAIL_COND(view_count == 0); - bool use_internal_buffer = scaling_3d_mode != RS::VIEWPORT_SCALING_3D_MODE_OFF || needs_internal_buffers; + bool use_internal_buffer = scaling_3d_mode != RS::VIEWPORT_SCALING_3D_MODE_OFF || apply_color_adjustments_in_post; uint32_t depth_format_size = 3; bool use_multiview = view_count > 1; @@ -558,8 +558,8 @@ void RenderSceneBuffersGLES3::_clear_back_buffers() { } } -void RenderSceneBuffersGLES3::ensure_internal_buffers() { - needs_internal_buffers = true; +void RenderSceneBuffersGLES3::set_apply_color_adjustments_in_post(bool p_apply_in_post) { + apply_color_adjustments_in_post = p_apply_in_post; } void RenderSceneBuffersGLES3::check_glow_buffers() { diff --git a/drivers/gles3/storage/render_scene_buffers_gles3.h b/drivers/gles3/storage/render_scene_buffers_gles3.h index 8273c18b8e..a7a676ad33 100644 --- a/drivers/gles3/storage/render_scene_buffers_gles3.h +++ b/drivers/gles3/storage/render_scene_buffers_gles3.h @@ -50,7 +50,7 @@ public: //bool use_taa = false; //bool use_debanding = false; uint32_t view_count = 1; - bool needs_internal_buffers = false; + bool apply_color_adjustments_in_post = false; RID render_target; @@ -106,12 +106,12 @@ public: virtual void set_fsr_sharpness(float p_fsr_sharpness) override{}; virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override{}; virtual void set_use_debanding(bool p_use_debanding) override{}; + void set_apply_color_adjustments_in_post(bool p_apply_in_post); void free_render_buffer_data(); void check_backbuffer(bool p_need_color, bool p_need_depth); // Check if we need to initialize our backbuffer. void check_glow_buffers(); // Check if we need to initialize our glow buffers. - void ensure_internal_buffers(); GLuint get_render_fbo(); GLuint get_msaa3d_fbo() { diff --git a/drivers/vulkan/SCsub b/drivers/vulkan/SCsub index 80d5f35305..1efef5ad77 100644 --- a/drivers/vulkan/SCsub +++ b/drivers/vulkan/SCsub @@ -16,14 +16,14 @@ if env["use_volk"]: if env["platform"] == "android": env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_ANDROID_KHR"]) elif env["platform"] == "ios": - env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_IOS_MVK"]) + env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_IOS_MVK", "VK_USE_PLATFORM_METAL_EXT"]) elif env["platform"] == "linuxbsd": if env["x11"]: env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_XLIB_KHR"]) if env["wayland"]: env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WAYLAND_KHR"]) elif env["platform"] == "macos": - env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_MACOS_MVK"]) + env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_MACOS_MVK", "VK_USE_PLATFORM_METAL_EXT"]) elif env["platform"] == "windows": env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WIN32_KHR"]) diff --git a/drivers/vulkan/rendering_context_driver_vulkan.cpp b/drivers/vulkan/rendering_context_driver_vulkan.cpp index 7cba820978..fe2ff5e0da 100644 --- a/drivers/vulkan/rendering_context_driver_vulkan.cpp +++ b/drivers/vulkan/rendering_context_driver_vulkan.cpp @@ -102,6 +102,10 @@ Error RenderingContextDriverVulkan::_initialize_instance_extensions() { // This extension allows us to use the properties2 features to query additional device capabilities. _register_requested_instance_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, false); +#if defined(USE_VOLK) && (defined(MACOS_ENABLED) || defined(IOS_ENABLED)) + _register_requested_instance_extension(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, true); +#endif + // Only enable debug utils in verbose mode or DEV_ENABLED. // End users would get spammed with messages of varying verbosity due to the // mess that thirdparty layers/extensions and drivers seem to leave in their @@ -360,6 +364,11 @@ Error RenderingContextDriverVulkan::_initialize_instance() { VkInstanceCreateInfo instance_info = {}; instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + +#if defined(USE_VOLK) && (defined(MACOS_ENABLED) || defined(IOS_ENABLED)) + instance_info.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; +#endif + instance_info.pApplicationInfo = &app_info; instance_info.enabledExtensionCount = enabled_extension_names.size(); instance_info.ppEnabledExtensionNames = enabled_extension_names.ptr(); diff --git a/drivers/winmidi/midi_driver_winmidi.cpp b/drivers/winmidi/midi_driver_winmidi.cpp index 07f0226c5d..0f37f63ccd 100644 --- a/drivers/winmidi/midi_driver_winmidi.cpp +++ b/drivers/winmidi/midi_driver_winmidi.cpp @@ -36,26 +36,42 @@ void MIDIDriverWinMidi::read(HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { if (wMsg == MIM_DATA) { - receive_input_packet((int)dwInstance, (uint64_t)dwParam2, (uint8_t *)&dwParam1, 3); + // For MIM_DATA: dwParam1 = wMidiMessage, dwParam2 = dwTimestamp. + // Windows implementation has already unpacked running status and dropped any SysEx, + // so we can just forward straight to the event. + const uint8_t *midi_msg = (uint8_t *)&dwParam1; + send_event((int)dwInstance, midi_msg[0], &midi_msg[1], 2); } } Error MIDIDriverWinMidi::open() { + int device_index = 0; for (UINT i = 0; i < midiInGetNumDevs(); i++) { HMIDIIN midi_in; + MIDIINCAPS caps; - MMRESULT res = midiInOpen(&midi_in, i, (DWORD_PTR)read, (DWORD_PTR)i, CALLBACK_FUNCTION); - if (res == MMSYSERR_NOERROR) { + MMRESULT open_res = midiInOpen(&midi_in, i, (DWORD_PTR)read, + (DWORD_PTR)device_index, CALLBACK_FUNCTION); + MMRESULT caps_res = midiInGetDevCaps(i, &caps, sizeof(MIDIINCAPS)); + + if (open_res == MMSYSERR_NOERROR) { midiInStart(midi_in); - connected_sources.insert(i, midi_in); + connected_sources.push_back(midi_in); + if (caps_res == MMSYSERR_NOERROR) { + connected_input_names.push_back(caps.szPname); + } else { + // Should push something even if we don't get a name, + // so that the IDs line up correctly on the script side. + connected_input_names.push_back("ERROR"); + } + // Only increment device index for successfully connected devices. + device_index++; } else { char err[256]; - midiInGetErrorText(res, err, 256); + midiInGetErrorText(open_res, err, 256); ERR_PRINT("midiInOpen error: " + String(err)); - MIDIINCAPS caps; - res = midiInGetDevCaps(i, &caps, sizeof(MIDIINCAPS)); - if (res == MMSYSERR_NOERROR) { + if (caps_res == MMSYSERR_NOERROR) { ERR_PRINT("Can't open MIDI device \"" + String(caps.szPname) + "\", is it being used by another application?"); } } @@ -64,25 +80,6 @@ Error MIDIDriverWinMidi::open() { return OK; } -PackedStringArray MIDIDriverWinMidi::get_connected_inputs() { - PackedStringArray list; - - for (int i = 0; i < connected_sources.size(); i++) { - HMIDIIN midi_in = connected_sources[i]; - UINT id = 0; - MMRESULT res = midiInGetID(midi_in, &id); - if (res == MMSYSERR_NOERROR) { - MIDIINCAPS caps; - res = midiInGetDevCaps(i, &caps, sizeof(MIDIINCAPS)); - if (res == MMSYSERR_NOERROR) { - list.push_back(caps.szPname); - } - } - } - - return list; -} - void MIDIDriverWinMidi::close() { for (int i = 0; i < connected_sources.size(); i++) { HMIDIIN midi_in = connected_sources[i]; @@ -90,9 +87,7 @@ void MIDIDriverWinMidi::close() { midiInClose(midi_in); } connected_sources.clear(); -} - -MIDIDriverWinMidi::MIDIDriverWinMidi() { + connected_input_names.clear(); } MIDIDriverWinMidi::~MIDIDriverWinMidi() { diff --git a/drivers/winmidi/midi_driver_winmidi.h b/drivers/winmidi/midi_driver_winmidi.h index f3e016f378..7a75252233 100644 --- a/drivers/winmidi/midi_driver_winmidi.h +++ b/drivers/winmidi/midi_driver_winmidi.h @@ -48,12 +48,10 @@ class MIDIDriverWinMidi : public MIDIDriver { static void CALLBACK read(HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2); public: - virtual Error open(); - virtual void close(); + virtual Error open() override; + virtual void close() override; - virtual PackedStringArray get_connected_inputs(); - - MIDIDriverWinMidi(); + MIDIDriverWinMidi() = default; virtual ~MIDIDriverWinMidi(); }; diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index ffd609d925..48b9e01fd8 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -682,6 +682,7 @@ void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; connect("clear_selection", callable_mp(editor, &AnimationTrackEditor::_clear_selection).bind(false)); connect("select_key", callable_mp(editor, &AnimationTrackEditor::_key_selected), CONNECT_DEFERRED); + connect("deselect_key", callable_mp(editor, &AnimationTrackEditor::_key_deselected), CONNECT_DEFERRED); } void AnimationBezierTrackEdit::_play_position_draw() { @@ -871,14 +872,14 @@ void AnimationBezierTrackEdit::_change_selected_keys_handle_mode(Animation::Hand } void AnimationBezierTrackEdit::_clear_selection_for_anim(const Ref<Animation> &p_anim) { - if (!(animation == p_anim)) { + if (!(animation == p_anim) || !is_visible()) { return; } _clear_selection(); } -void AnimationBezierTrackEdit::_select_at_anim(const Ref<Animation> &p_anim, int p_track, real_t p_pos) { - if (!(animation == p_anim)) { +void AnimationBezierTrackEdit::_select_at_anim(const Ref<Animation> &p_anim, int p_track, real_t p_pos, bool p_single) { + if (!(animation == p_anim) || !is_visible()) { return; } @@ -886,7 +887,7 @@ void AnimationBezierTrackEdit::_select_at_anim(const Ref<Animation> &p_anim, int ERR_FAIL_COND(idx < 0); selection.insert(IntPair(p_track, idx)); - emit_signal(SNAME("select_key"), idx, true, p_track); + emit_signal(SNAME("select_key"), idx, p_single, p_track); queue_redraw(); } @@ -964,7 +965,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { real_t minimum_value = INFINITY; real_t maximum_value = -INFINITY; - for (const IntPair &E : selection) { + for (const IntPair &E : focused_keys) { IntPair key_pair = E; real_t time = animation->track_get_key_time(key_pair.first, key_pair.second); @@ -1002,7 +1003,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { return; } else if (ED_IS_SHORTCUT("animation_bezier_editor/select_all_keys", p_event)) { for (int i = 0; i < edit_points.size(); ++i) { - selection.insert(IntPair(edit_points[i].track, edit_points[i].key)); + _select_at_anim(animation, edit_points[i].track, animation->track_get_key_time(edit_points[i].track, edit_points[i].key), i == 0); } queue_redraw(); @@ -1010,6 +1011,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { return; } else if (ED_IS_SHORTCUT("animation_bezier_editor/deselect_all_keys", p_event)) { selection.clear(); + emit_signal(SNAME("clear_selection")); queue_redraw(); accept_event(); @@ -1094,7 +1096,8 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { for (int i = 0; i < animation->track_get_key_count(track); ++i) { undo_redo->add_undo_method( this, - "_bezier_track_insert_key", + "_bezier_track_insert_key_at_anim", + animation, track, animation->track_get_key_time(track, i), animation->bezier_track_get_key_value(track, i), @@ -1218,7 +1221,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { //insert new point if (mb->get_position().x >= limit && mb->get_position().x < get_size().width && mb->is_command_or_control_pressed()) { float h = (get_size().height / 2.0 - mb->get_position().y) * timeline_v_zoom + timeline_v_scroll; - Array new_point = make_default_bezier_key(h); + Array new_point = animation->make_default_bezier_key(h); real_t time = ((mb->get_position().x - limit) / timeline->get_zoom_scale()) + timeline->get_value(); while (animation->track_find_key(selected_track, time, Animation::FIND_MODE_APPROX) != -1) { @@ -1235,7 +1238,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { int index = animation->track_find_key(selected_track, time, Animation::FIND_MODE_APPROX); ERR_FAIL_COND(index == -1); _clear_selection(); - selection.insert(IntPair(selected_track, index)); + _select_at_anim(animation, selected_track, animation->track_get_key_time(selected_track, index), true); moving_selection_attempt = true; moving_selection = false; @@ -1277,13 +1280,15 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { Rect2 selection_rect(bs_from, bs_to - bs_from); bool track_set = false; + int j = 0; for (int i = 0; i < edit_points.size(); i++) { if (edit_points[i].point_rect.intersects(selection_rect)) { - selection.insert(IntPair(edit_points[i].track, edit_points[i].key)); + _select_at_anim(animation, edit_points[i].track, animation->track_get_key_time(edit_points[i].track, edit_points[i].key), j == 0 && !box_selecting_add); if (!track_set) { track_set = true; set_animation_and_track(animation, edit_points[i].track, read_only); } + j++; } } } else { @@ -1366,7 +1371,8 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { key[0] = h; undo_redo->add_do_method( this, - "_bezier_track_insert_key", + "_bezier_track_insert_key_at_anim", + animation, E->get().first, newpos, key[0], @@ -1387,7 +1393,8 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { Array key = animation->track_get_key_value(E->get().first, E->get().second); undo_redo->add_undo_method( this, - "_bezier_track_insert_key", + "_bezier_track_insert_key_at_anim", + animation, E->get().first, oldpos, key[0], @@ -1405,7 +1412,8 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, 1); undo_redo->add_undo_method( this, - "_bezier_track_insert_key", + "_bezier_track_insert_key_at_anim", + animation, amr.track, amr.time, key[0], @@ -1418,21 +1426,22 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); // 7-reselect - + int i = 0; for (SelectionSet::Element *E = selection.back(); E; E = E->prev()) { real_t oldpos = animation->track_get_key_time(E->get().first, E->get().second); real_t newpos = oldpos + moving_selection_offset.x; - undo_redo->add_do_method(this, "_select_at_anim", animation, E->get().first, newpos); - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, oldpos); + undo_redo->add_do_method(this, "_select_at_anim", animation, E->get().first, newpos, i == 0); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, oldpos, i == 0); + i++; } undo_redo->commit_action(); } else if (select_single_attempt != IntPair(-1, -1)) { selection.clear(); - selection.insert(select_single_attempt); set_animation_and_track(animation, select_single_attempt.first, read_only); + _select_at_anim(animation, select_single_attempt.first, animation->track_get_key_time(select_single_attempt.first, select_single_attempt.second), true); } moving_selection = false; @@ -1567,9 +1576,10 @@ bool AnimationBezierTrackEdit::_try_select_at_ui_pos(const Point2 &p_pos, bool p if (selection.has(pair)) { if (p_deselectable) { selection.erase(pair); + emit_signal(SNAME("deselect_key"), edit_points[i].key, edit_points[i].track); } } else { - selection.insert(pair); + _select_at_anim(animation, edit_points[i].track, animation->track_get_key_time(edit_points[i].track, edit_points[i].key), false); } queue_redraw(); select_single_attempt = IntPair(-1, -1); @@ -1595,7 +1605,7 @@ bool AnimationBezierTrackEdit::_try_select_at_ui_pos(const Point2 &p_pos, bool p set_animation_and_track(animation, pair.first, read_only); if (!selection.has(pair)) { selection.clear(); - selection.insert(pair); + _select_at_anim(animation, edit_points[i].track, animation->track_get_key_time(edit_points[i].track, edit_points[i].key), true); } } return true; @@ -1637,19 +1647,6 @@ void AnimationBezierTrackEdit::_zoom_callback(float p_zoom_factor, Vector2 p_ori queue_redraw(); } -Array AnimationBezierTrackEdit::make_default_bezier_key(float p_value) { - Array new_point; - new_point.resize(5); - - new_point[0] = p_value; - new_point[1] = -0.25; - new_point[2] = 0; - new_point[3] = 0.25; - new_point[4] = 0; - - return new_point; -} - float AnimationBezierTrackEdit::get_bezier_key_value(Array p_bezier_key_array) { return p_bezier_key_array[0]; } @@ -1669,7 +1666,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) { time += 0.001; } float h = (get_size().height / 2.0 - menu_insert_key.y) * timeline_v_zoom + timeline_v_scroll; - Array new_point = make_default_bezier_key(h); + Array new_point = animation->make_default_bezier_key(h); EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); undo_redo->create_action(TTR("Add Bezier Point")); undo_redo->add_do_method(animation.ptr(), "track_insert_key", selected_track, time, new_point); @@ -1763,12 +1760,16 @@ void AnimationBezierTrackEdit::duplicate_selected_keys(real_t p_ofs, bool p_ofs_ undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); // Reselect duplicated. + int i = 0; for (const Pair<int, real_t> &E : new_selection_values) { - undo_redo->add_do_method(this, "_select_at_anim", animation, E.first, E.second); + undo_redo->add_do_method(this, "_select_at_anim", animation, E.first, E.second, i == 0); + i++; } + i = 0; for (SelectionSet::Element *E = selection.back(); E; E = E->prev()) { real_t time = animation->track_get_key_time(E->get().first, E->get().second); - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, time); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, time, i == 0); + i++; } undo_redo->add_do_method(this, "queue_redraw"); @@ -1805,16 +1806,20 @@ void AnimationBezierTrackEdit::copy_selected_keys(bool p_cut) { undo_redo->create_action(TTR("Animation Cut Keys"), UndoRedo::MERGE_DISABLE, animation.ptr()); undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); + int i = 0; for (RBMap<AnimationTrackEditor::SelectedKey, AnimationTrackEditor::KeyInfo>::Element *E = keys.back(); E; E = E->prev()) { int track_idx = E->key().track; int key_idx = E->key().key; float time = E->value().pos; undo_redo->add_do_method(animation.ptr(), "track_remove_key_at_time", track_idx, time); undo_redo->add_undo_method(animation.ptr(), "track_insert_key", track_idx, time, animation->track_get_key_value(track_idx, key_idx), animation->track_get_key_transition(track_idx, key_idx)); - undo_redo->add_undo_method(this, "_select_at_anim", animation, track_idx, time); + undo_redo->add_undo_method(this, "_select_at_anim", animation, track_idx, time, i == 0); + i++; } + i = 0; for (RBMap<AnimationTrackEditor::SelectedKey, AnimationTrackEditor::KeyInfo>::Element *E = keys.back(); E; E = E->prev()) { - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, E->value().pos); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->key().track, E->value().pos, i == 0); + i++; } undo_redo->commit_action(); } @@ -1863,7 +1868,7 @@ void AnimationBezierTrackEdit::paste_keys(real_t p_ofs, bool p_ofs_valid) { Variant value = key.value; if (key.track_type != Animation::TYPE_BEZIER) { - value = make_default_bezier_key(key.value); + value = animation->make_default_bezier_key(key.value); } undo_redo->add_do_method(animation.ptr(), "track_insert_key", selected_track, dst_time, value, key.transition); @@ -1883,11 +1888,15 @@ void AnimationBezierTrackEdit::paste_keys(real_t p_ofs, bool p_ofs_valid) { undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); // Reselect pasted. + int i = 0; for (const Pair<int, float> &E : new_selection_values) { - undo_redo->add_do_method(this, "_select_at_anim", animation, E.first, E.second); + undo_redo->add_do_method(this, "_select_at_anim", animation, E.first, E.second, i == 0); + i++; } + i = 0; for (SelectionSet::Element *E = selection.back(); E; E = E->prev()) { - undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, animation->track_get_key_time(E->get().first, E->get().second)); + undo_redo->add_undo_method(this, "_select_at_anim", animation, E->get().first, animation->track_get_key_time(E->get().first, E->get().second), i == 0); + i++; } undo_redo->commit_action(); @@ -1913,10 +1922,9 @@ void AnimationBezierTrackEdit::delete_selection() { } } -void AnimationBezierTrackEdit::_bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const Animation::HandleMode p_handle_mode) { - ERR_FAIL_COND(animation.is_null()); - int idx = animation->bezier_track_insert_key(p_track, p_time, p_value, p_in_handle, p_out_handle); - animation->bezier_track_set_key_handle_mode(p_track, idx, p_handle_mode); +void AnimationBezierTrackEdit::_bezier_track_insert_key_at_anim(const Ref<Animation> &p_anim, int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const Animation::HandleMode p_handle_mode) { + int idx = p_anim->bezier_track_insert_key(p_track, p_time, p_value, p_in_handle, p_out_handle); + p_anim->bezier_track_set_key_handle_mode(p_track, idx, p_handle_mode); } void AnimationBezierTrackEdit::_bind_methods() { @@ -1925,9 +1933,10 @@ void AnimationBezierTrackEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("_select_at_anim"), &AnimationBezierTrackEdit::_select_at_anim); ClassDB::bind_method(D_METHOD("_update_hidden_tracks_after"), &AnimationBezierTrackEdit::_update_hidden_tracks_after); ClassDB::bind_method(D_METHOD("_update_locked_tracks_after"), &AnimationBezierTrackEdit::_update_locked_tracks_after); - ClassDB::bind_method(D_METHOD("_bezier_track_insert_key"), &AnimationBezierTrackEdit::_bezier_track_insert_key); + ClassDB::bind_method(D_METHOD("_bezier_track_insert_key_at_anim"), &AnimationBezierTrackEdit::_bezier_track_insert_key_at_anim); ADD_SIGNAL(MethodInfo("select_key", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "single"), PropertyInfo(Variant::INT, "track"))); + ADD_SIGNAL(MethodInfo("deselect_key", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::INT, "track"))); ADD_SIGNAL(MethodInfo("clear_selection")); } diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h index ab667421f3..dd7e8758f3 100644 --- a/editor/animation_bezier_editor.h +++ b/editor/animation_bezier_editor.h @@ -144,7 +144,7 @@ class AnimationBezierTrackEdit : public Control { void _clear_selection(); void _clear_selection_for_anim(const Ref<Animation> &p_anim); - void _select_at_anim(const Ref<Animation> &p_anim, int p_track, real_t p_pos); + void _select_at_anim(const Ref<Animation> &p_anim, int p_track, real_t p_pos, bool p_single); bool _try_select_at_ui_pos(const Point2 &p_pos, bool p_aggregate, bool p_deselectable); void _change_selected_keys_handle_mode(Animation::HandleMode p_mode, bool p_auto = false); @@ -198,7 +198,6 @@ protected: void _notification(int p_what); public: - static Array make_default_bezier_key(float p_value); static float get_bezier_key_value(Array p_bezier_key_array); virtual String get_tooltip(const Point2 &p_pos) const override; @@ -222,7 +221,7 @@ public: void paste_keys(real_t p_ofs, bool p_ofs_valid); void delete_selection(); - void _bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const Animation::HandleMode p_handle_mode); + void _bezier_track_insert_key_at_anim(const Ref<Animation> &p_anim, int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const Animation::HandleMode p_handle_mode); AnimationBezierTrackEdit(); }; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index b80a8d77f4..b6636ca576 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -874,15 +874,15 @@ bool AnimationMultiTrackKeyEdit::_set(const StringName &p_name, const Variant &p undo_redo->create_action(TTR("Animation Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS); } Vector2 prev = animation->bezier_track_get_key_out_handle(track, key); - undo_redo->add_do_method(this, "_bezier_track_set_key_out_handle", track, key, value); - undo_redo->add_undo_method(this, "_bezier_track_set_key_out_handle", track, key, prev); + undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, value); + undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, prev); update_obj = true; } else if (name == "handle_mode") { const Variant &value = p_value; if (!setting) { setting = true; - undo_redo->create_action(TTR("Animation Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS); + undo_redo->create_action(TTR("Animation Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS, animation.ptr()); } int prev_mode = animation->bezier_track_get_key_handle_mode(track, key); Vector2 prev_in_handle = animation->bezier_track_get_key_in_handle(track, key); @@ -3690,7 +3690,7 @@ void AnimationTrackEditor::_name_limit_changed() { } void AnimationTrackEditor::_timeline_changed(float p_new_pos, bool p_timeline_only) { - emit_signal(SNAME("timeline_changed"), p_new_pos, p_timeline_only); + emit_signal(SNAME("timeline_changed"), p_new_pos, p_timeline_only, false); } void AnimationTrackEditor::_track_remove_request(int p_track) { @@ -3787,6 +3787,7 @@ void AnimationTrackEditor::set_anim_pos(float p_pos) { } _redraw_groups(); bezier_edit->set_play_position(p_pos); + emit_signal(SNAME("timeline_changed"), p_pos, true, true); } static bool track_type_is_resettable(Animation::TrackType p_type) { @@ -3867,15 +3868,23 @@ void AnimationTrackEditor::commit_insert_queue() { } // Skip the confirmation dialog if the user holds Shift while clicking the key icon. - if (!Input::get_singleton()->is_key_pressed(Key::SHIFT) && num_tracks > 0) { - String shortcut_hint = TTR("Hold Shift when clicking the key icon to skip this dialog."); + // If `confirm_insert_track` editor setting is disabled, the behavior is reversed. + bool confirm_insert = EDITOR_GET("editors/animation/confirm_insert_track"); + if ((Input::get_singleton()->is_key_pressed(Key::SHIFT) != confirm_insert) && num_tracks > 0) { + String dialog_text; + // Potentially a new key, does not exist. if (num_tracks == 1) { // TRANSLATORS: %s will be replaced by a phrase describing the target of track. - insert_confirm_text->set_text(vformat(TTR("Create new track for %s and insert key?") + "\n\n" + shortcut_hint, last_track_query)); + dialog_text = vformat(TTR("Create new track for %s and insert key?"), last_track_query); } else { - insert_confirm_text->set_text(vformat(TTR("Create %d new tracks and insert keys?") + "\n\n" + shortcut_hint, num_tracks)); + dialog_text = vformat(TTR("Create %d new tracks and insert keys?"), num_tracks); + } + + if (confirm_insert) { + dialog_text += +"\n\n" + TTR("Hold Shift when clicking the key icon to skip this dialog."); } + insert_confirm_text->set_text(dialog_text); insert_confirm_bezier->set_visible(all_bezier); insert_confirm_reset->set_visible(reset_allowed); @@ -4420,7 +4429,7 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD for (int i = 0; i < subindices.size(); i++) { InsertData id = p_id; id.type = Animation::TYPE_BEZIER; - id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); + id.value = subindices[i].is_empty() ? p_id.value : p_id.value.get(subindices[i].substr(1, subindices[i].length())); id.path = String(p_id.path) + subindices[i]; p_next_tracks = _confirm_insert(id, p_next_tracks, p_reset_wanted, p_reset_anim, false); } @@ -4456,16 +4465,8 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD } break; case Animation::TYPE_BEZIER: { - Array array; - array.resize(5); - array[0] = p_id.value; - array[1] = -0.25; - array[2] = 0; - array[3] = 0.25; - array[4] = 0; - value = array; + value = animation->make_default_bezier_key(p_id.value); bezier_edit_icon->set_disabled(false); - } break; default: { // Other track types shouldn't use this code path. @@ -5084,17 +5085,7 @@ void AnimationTrackEditor::_fetch_value_track_options(const NodePath &p_path, An PropertyInfo h = _find_hint_for_track(animation->get_track_count() - 1, np); animation->remove_track(animation->get_track_count() - 1); // Hack. switch (h.type) { - case Variant::FLOAT: { -#ifdef DISABLE_DEPRECATED - bool is_angle = h.type == Variant::FLOAT && h.hint_string.contains("radians_as_degrees"); -#else - bool is_angle = h.type == Variant::FLOAT && h.hint_string.contains("radians"); -#endif // DISABLE_DEPRECATED - if (is_angle) { - *r_interpolation_type = Animation::INTERPOLATION_LINEAR_ANGLE; - } - [[fallthrough]]; - } + case Variant::FLOAT: case Variant::VECTOR2: case Variant::RECT2: case Variant::VECTOR3: @@ -5277,15 +5268,7 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { NodePath bp; Variant value; _find_hint_for_track(p_track, bp, &value); - Array arr; - arr.resize(5); - arr[0] = value; - arr[1] = -0.25; - arr[2] = 0; - arr[3] = 0.25; - arr[4] = 0; - - id.value = arr; + id.value = animation->make_default_bezier_key(value); } break; case Animation::TYPE_AUDIO: { Dictionary ak; @@ -5829,7 +5812,7 @@ void AnimationTrackEditor::_anim_duplicate_keys(float p_ofs, bool p_ofs_valid, i if (key_is_bezier && !track_is_bezier) { value = AnimationBezierTrackEdit::get_bezier_key_value(value); } else if (!key_is_bezier && track_is_bezier) { - value = AnimationBezierTrackEdit::make_default_bezier_key(value); + value = animation->make_default_bezier_key(value); } undo_redo->add_do_method(animation.ptr(), "track_insert_key", dst_track, dst_time, value, animation->track_get_key_transition(E->key().track, E->key().key)); @@ -5973,7 +5956,7 @@ void AnimationTrackEditor::_anim_paste_keys(float p_ofs, bool p_ofs_valid, int p if (key_is_bezier && !track_is_bezier) { value = AnimationBezierTrackEdit::get_bezier_key_value(value); } else if (!key_is_bezier && track_is_bezier) { - value = AnimationBezierTrackEdit::make_default_bezier_key(value); + value = animation->make_default_bezier_key(value); } undo_redo->add_do_method(animation.ptr(), "track_insert_key", dst_track, dst_time, value, key.transition); diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 595aff3bd0..a9d37a6a99 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -347,18 +347,18 @@ void FindReplaceBar::_replace_all() { needs_to_count_results = true; } -void FindReplaceBar::_get_search_from(int &r_line, int &r_col, bool p_is_searching_next) { +void FindReplaceBar::_get_search_from(int &r_line, int &r_col, SearchMode p_search_mode) { if (!text_editor->has_selection(0) || is_selection_only()) { r_line = text_editor->get_caret_line(0); r_col = text_editor->get_caret_column(0); - if (!p_is_searching_next && r_line == result_line && r_col >= result_col && r_col <= result_col + get_search_text().length()) { + if (p_search_mode == SEARCH_PREV && r_line == result_line && r_col >= result_col && r_col <= result_col + get_search_text().length()) { r_col = result_col; } return; } - if (p_is_searching_next) { + if (p_search_mode == SEARCH_NEXT) { r_line = text_editor->get_selection_to_line(); r_col = text_editor->get_selection_to_column(); } else { @@ -368,7 +368,11 @@ void FindReplaceBar::_get_search_from(int &r_line, int &r_col, bool p_is_searchi } void FindReplaceBar::_update_results_count() { - if (!needs_to_count_results && (result_line != -1) && results_count_to_current > 0) { + int caret_line, caret_column; + _get_search_from(caret_line, caret_column, SEARCH_CURRENT); + bool match_selected = caret_line == result_line && caret_column == result_col && !is_selection_only() && text_editor->has_selection(0); + + if (match_selected && !needs_to_count_results && result_line != -1 && results_count_to_current > 0) { results_count_to_current += (flags & TextEdit::SEARCH_BACKWARDS) ? -1 : 1; if (results_count_to_current > results_count) { @@ -385,9 +389,10 @@ void FindReplaceBar::_update_results_count() { return; } - needs_to_count_results = false; + needs_to_count_results = !match_selected; results_count = 0; + results_count_to_current = 0; for (int i = 0; i < text_editor->get_line_count(); i++) { String line_text = text_editor->get_line(i); @@ -417,18 +422,26 @@ void FindReplaceBar::_update_results_count() { results_count++; - if (i == result_line) { - if (col_pos == result_col) { - results_count_to_current = results_count; - } else if (col_pos < result_col && col_pos + searched.length() > result_col) { - col_pos = result_col; - results_count_to_current = results_count; - } + if (i <= result_line && col_pos <= result_col) { + results_count_to_current = results_count; + } + if (i == result_line && col_pos < result_col && col_pos + searched.length() > result_col) { + // Searching forwards and backwards with repeating text can lead to different matches. + col_pos = result_col; } - col_pos += searched.length(); } } + if (!match_selected) { + // Current result should refer to the match before the caret, if the caret is not on a match. + if (caret_line != result_line || caret_column != result_col) { + results_count_to_current -= 1; + } + if (results_count_to_current == 0 && (caret_line > result_line || (caret_line == result_line && caret_column > result_col))) { + // Caret is after all matches. + results_count_to_current = results_count; + } + } } void FindReplaceBar::_update_matches_display() { @@ -457,7 +470,7 @@ bool FindReplaceBar::search_current() { _update_flags(false); int line, col; - _get_search_from(line, col); + _get_search_from(line, col, SEARCH_CURRENT); return _search(flags, line, col); } @@ -473,10 +486,14 @@ bool FindReplaceBar::search_prev() { String text = get_search_text(); + if ((flags & TextEdit::SEARCH_BACKWARDS) == 0) { + needs_to_count_results = true; + } + _update_flags(true); int line, col; - _get_search_from(line, col); + _get_search_from(line, col, SEARCH_PREV); col -= text.length(); if (col < 0) { @@ -499,10 +516,14 @@ bool FindReplaceBar::search_next() { popup_search(true); } + if (flags & TextEdit::SEARCH_BACKWARDS) { + needs_to_count_results = true; + } + _update_flags(false); int line, col; - _get_search_from(line, col, true); + _get_search_from(line, col, SEARCH_NEXT); return _search(flags, line, col); } @@ -653,6 +674,7 @@ void FindReplaceBar::set_text_edit(CodeTextEditor *p_text_editor) { } if (base_text_editor) { + text_editor->set_search_text(String()); base_text_editor->remove_find_replace_bar(); base_text_editor = nullptr; text_editor->disconnect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_editor_text_changed)); @@ -670,8 +692,7 @@ void FindReplaceBar::set_text_edit(CodeTextEditor *p_text_editor) { text_editor = base_text_editor->get_text_editor(); text_editor->connect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_editor_text_changed)); - _update_results_count(); - _update_matches_display(); + _editor_text_changed(); } void FindReplaceBar::_bind_methods() { @@ -1049,6 +1070,9 @@ void CodeTextEditor::update_editor_settings() { text_editor->set_smooth_scroll_enabled(EDITOR_GET("text_editor/behavior/navigation/smooth_scrolling")); text_editor->set_v_scroll_speed(EDITOR_GET("text_editor/behavior/navigation/v_scroll_speed")); text_editor->set_drag_and_drop_selection_enabled(EDITOR_GET("text_editor/behavior/navigation/drag_and_drop_selection")); + text_editor->set_use_default_word_separators(EDITOR_GET("text_editor/behavior/navigation/use_default_word_separators")); + text_editor->set_use_custom_word_separators(EDITOR_GET("text_editor/behavior/navigation/use_custom_word_separators")); + text_editor->set_custom_word_separators(EDITOR_GET("text_editor/behavior/navigation/custom_word_separators")); // Behavior: Indent set_indent_using_spaces(EDITOR_GET("text_editor/behavior/indent/type")); diff --git a/editor/code_editor.h b/editor/code_editor.h index af33a3fac8..28f6944b66 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -64,6 +64,12 @@ class CodeTextEditor; class FindReplaceBar : public HBoxContainer { GDCLASS(FindReplaceBar, HBoxContainer); + enum SearchMode { + SEARCH_CURRENT, + SEARCH_NEXT, + SEARCH_PREV, + }; + LineEdit *search_text = nullptr; Label *matches_label = nullptr; Button *find_prev = nullptr; @@ -94,7 +100,7 @@ class FindReplaceBar : public HBoxContainer { bool replace_all_mode = false; bool preserve_cursor = false; - void _get_search_from(int &r_line, int &r_col, bool p_is_searching_next = false); + void _get_search_from(int &r_line, int &r_col, SearchMode p_search_mode); void _update_results_count(); void _update_matches_display(); diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index bfc4d91af7..eb0ab1174b 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -1377,6 +1377,8 @@ void ConnectionsDock::_notification(int p_what) { slot_menu->set_item_icon(slot_menu->get_item_index(SLOT_MENU_DISCONNECT), get_editor_theme_icon(SNAME("Unlinked"))); tree->add_theme_constant_override("icon_max_width", get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor))); + + update_tree(); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 56500c71e2..204636e128 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -160,8 +160,13 @@ bool CreateDialog::_should_hide_type(const StringName &p_type) const { String script_path = ScriptServer::get_global_class_path(p_type); if (script_path.begins_with("res://addons/")) { - if (!EditorNode::get_singleton()->is_addon_plugin_enabled(script_path.get_slicec('/', 3))) { - return true; // Plugin is not enabled. + int i = script_path.find("/", 13); // 13 is length of "res://addons/". + while (i > -1) { + const String plugin_path = script_path.substr(0, i).path_join("plugin.cfg"); + if (FileAccess::exists(plugin_path)) { + return !EditorNode::get_singleton()->is_addon_plugin_enabled(plugin_path); + } + i = script_path.find("/", i + 1); } } } diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index b062b20000..5e96daf69c 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -840,7 +840,7 @@ void ScriptEditorDebugger::_set_reason_text(const String &p_reason, MessageType for (int i = 0; i < boundaries.size(); i += 2) { const int start = boundaries[i]; const int end = boundaries[i + 1]; - lines.append(p_reason.substr(start, end - start + 1)); + lines.append(p_reason.substr(start, end - start)); } reason->set_tooltip_text(String("\n").join(lines)); diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index 74f911f07d..3b337997e0 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -799,6 +799,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { set_tooltip_text(TTR("Drag & drop to rearrange.")); VBoxContainer *vb = memnew(VBoxContainer); + vb->add_theme_constant_override("separation", 4 * EDSCALE); add_child(vb); set_v_size_flags(SIZE_EXPAND_FILL); @@ -854,8 +855,17 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { separator->set_mouse_filter(MOUSE_FILTER_PASS); vb->add_child(separator); + Control *spacer_top = memnew(Control); + spacer_top->set_custom_minimum_size(Size2(0, 6 * EDSCALE)); + vb->add_child(spacer_top); + HBoxContainer *hb = memnew(HBoxContainer); vb->add_child(hb); + + Control *spacer_bottom = memnew(Control); + spacer_bottom->set_custom_minimum_size(Size2(0, 2 * EDSCALE)); + vb->add_child(spacer_bottom); + slider = memnew(VSlider); slider->set_min(0.0); slider->set_max(1.0); diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 545404ec8e..b62351256e 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -55,11 +55,6 @@ void EditorAutoloadSettings::_notification(int p_what) { file_dialog->add_filter("*." + E); } - for (const AutoloadInfo &info : autoload_cache) { - if (info.node && info.in_editor) { - callable_mp((Node *)get_tree()->get_root(), &Node::add_child).call_deferred(info.node, false, Node::INTERNAL_MODE_DISABLED); - } - } browse_button->set_icon(get_editor_theme_icon(SNAME("Folder"))); } break; @@ -419,6 +414,8 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) { Ref<Script> scr = res; if (scr.is_valid()) { + ERR_FAIL_COND_V_MSG(!scr->is_valid(), nullptr, vformat("Failed to create an autoload, script '%s' is not compiling.", p_path)); + StringName ibt = scr->get_instance_base_type(); bool valid_type = ClassDB::is_parent_class(ibt, "Node"); ERR_FAIL_COND_V_MSG(!valid_type, nullptr, vformat("Failed to create an autoload, script '%s' does not inherit from 'Node'.", p_path)); @@ -436,6 +433,35 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) { return n; } +void EditorAutoloadSettings::init_autoloads() { + for (AutoloadInfo &info : autoload_cache) { + info.node = _create_autoload(info.path); + + if (info.node) { + Ref<Script> scr = info.node->get_script(); + info.in_editor = scr.is_valid() && scr->is_tool(); + info.node->set_name(info.name); + } + + if (info.is_singleton) { + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptServer::get_language(i)->add_named_global_constant(info.name, info.node); + } + } + + if (!info.is_singleton && !info.in_editor && info.node != nullptr) { + memdelete(info.node); + info.node = nullptr; + } + } + + for (const AutoloadInfo &info : autoload_cache) { + if (info.node && info.in_editor) { + callable_mp((Node *)get_tree()->get_root(), &Node::add_child).call_deferred(info.node, false, Node::INTERNAL_MODE_DISABLED); + } + } +} + void EditorAutoloadSettings::update_autoload() { if (updating_autoload) { return; @@ -857,27 +883,6 @@ EditorAutoloadSettings::EditorAutoloadSettings() { autoload_cache.push_back(info); } - for (AutoloadInfo &info : autoload_cache) { - info.node = _create_autoload(info.path); - - if (info.node) { - Ref<Script> scr = info.node->get_script(); - info.in_editor = scr.is_valid() && scr->is_tool(); - info.node->set_name(info.name); - } - - if (info.is_singleton) { - for (int i = 0; i < ScriptServer::get_language_count(); i++) { - ScriptServer::get_language(i)->add_named_global_constant(info.name, info.node); - } - } - - if (!info.is_singleton && !info.in_editor && info.node != nullptr) { - memdelete(info.node); - info.node = nullptr; - } - } - HBoxContainer *hbc = memnew(HBoxContainer); add_child(hbc); diff --git a/editor/editor_autoload_settings.h b/editor/editor_autoload_settings.h index e4ac62e700..2ab969eb59 100644 --- a/editor/editor_autoload_settings.h +++ b/editor/editor_autoload_settings.h @@ -104,6 +104,7 @@ protected: static void _bind_methods(); public: + void init_autoloads(); void update_autoload(); bool autoload_add(const String &p_name, const String &p_path); void autoload_remove(const String &p_name); diff --git a/editor/editor_dock_manager.cpp b/editor/editor_dock_manager.cpp index ccb47220db..75135532aa 100644 --- a/editor/editor_dock_manager.cpp +++ b/editor/editor_dock_manager.cpp @@ -277,7 +277,7 @@ void EditorDockManager::_restore_dock_to_saved_window(Control *p_dock, const Dic p_window_dump.get("window_screen_rect", Rect2i())); } -void EditorDockManager::_dock_move_to_bottom(Control *p_dock) { +void EditorDockManager::_dock_move_to_bottom(Control *p_dock, bool p_visible) { _move_dock(p_dock, nullptr); all_docks[p_dock].at_bottom = true; @@ -288,7 +288,7 @@ void EditorDockManager::_dock_move_to_bottom(Control *p_dock) { // Force docks moved to the bottom to appear first in the list, and give them their associated shortcut to toggle their bottom panel. Button *bottom_button = EditorNode::get_bottom_panel()->add_item(all_docks[p_dock].title, p_dock, all_docks[p_dock].shortcut, true); bottom_button->connect(SceneStringName(gui_input), callable_mp(this, &EditorDockManager::_bottom_dock_button_gui_input).bind(bottom_button).bind(p_dock)); - EditorNode::get_bottom_panel()->make_item_visible(p_dock); + EditorNode::get_bottom_panel()->make_item_visible(p_dock, p_visible); } void EditorDockManager::_dock_remove_from_bottom(Control *p_dock) { @@ -548,11 +548,13 @@ void EditorDockManager::load_docks_from_config(Ref<ConfigFile> p_layout, const S // Don't open disabled docks. continue; } + bool at_bottom = false; if (restore_window_on_load && floating_docks_dump.has(name)) { all_docks[dock].previous_at_bottom = dock_bottom.has(name); _restore_dock_to_saved_window(dock, floating_docks_dump[name]); } else if (dock_bottom.has(name)) { - _dock_move_to_bottom(dock); + _dock_move_to_bottom(dock, false); + at_bottom = true; } else if (i >= 0) { _move_dock(dock, dock_slot[i], 0); } @@ -564,7 +566,11 @@ void EditorDockManager::load_docks_from_config(Ref<ConfigFile> p_layout, const S } else { // Make sure it is open. all_docks[dock].open = true; - dock->show(); + // It's important to not update the visibility of bottom panels. + // Visibility of bottom panels are managed in EditorBottomPanel. + if (!at_bottom) { + dock->show(); + } } all_docks[dock].dock_slot_index = i; @@ -668,7 +674,7 @@ void EditorDockManager::open_dock(Control *p_dock, bool p_set_current) { // Open dock to its previous location. if (all_docks[p_dock].previous_at_bottom) { - _dock_move_to_bottom(p_dock); + _dock_move_to_bottom(p_dock, true); } else if (all_docks[p_dock].dock_slot_index != DOCK_SLOT_NONE) { TabContainer *slot = dock_slot[all_docks[p_dock].dock_slot_index]; int tab_index = all_docks[p_dock].previous_tab_index; @@ -899,7 +905,7 @@ void DockContextPopup::_float_dock() { void DockContextPopup::_move_dock_to_bottom() { hide(); - dock_manager->_dock_move_to_bottom(context_dock); + dock_manager->_dock_move_to_bottom(context_dock, true); dock_manager->_update_layout(); } diff --git a/editor/editor_dock_manager.h b/editor/editor_dock_manager.h index 226222c55a..1e6b413d14 100644 --- a/editor/editor_dock_manager.h +++ b/editor/editor_dock_manager.h @@ -121,7 +121,7 @@ private: void _open_dock_in_window(Control *p_dock, bool p_show_window = true, bool p_reset_size = false); void _restore_dock_to_saved_window(Control *p_dock, const Dictionary &p_window_dump); - void _dock_move_to_bottom(Control *p_dock); + void _dock_move_to_bottom(Control *p_dock, bool p_visible); void _dock_remove_from_bottom(Control *p_dock); bool _is_dock_at_bottom(Control *p_dock); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index a1e392cd7d..4664defa59 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -44,6 +44,7 @@ #include "editor/editor_paths.h" #include "editor/editor_resource_preview.h" #include "editor/editor_settings.h" +#include "editor/project_settings_editor.h" #include "scene/resources/packed_scene.h" EditorFileSystem *EditorFileSystem::singleton = nullptr; @@ -149,6 +150,11 @@ uint64_t EditorFileSystemDirectory::get_file_modified_time(int p_idx) const { return files[p_idx]->modified_time; } +uint64_t EditorFileSystemDirectory::get_file_import_modified_time(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, files.size(), 0); + return files[p_idx]->import_modified_time; +} + String EditorFileSystemDirectory::get_file_script_class_name(int p_idx) const { return files[p_idx]->script_class_name; } @@ -161,6 +167,10 @@ String EditorFileSystemDirectory::get_file_script_class_icon_path(int p_idx) con return files[p_idx]->script_class_icon_path; } +String EditorFileSystemDirectory::get_file_icon_path(int p_idx) const { + return files[p_idx]->icon_path; +} + StringName EditorFileSystemDirectory::get_file_type(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, files.size(), ""); return files[p_idx]->type; @@ -202,17 +212,68 @@ EditorFileSystemDirectory::EditorFileSystemDirectory() { } EditorFileSystemDirectory::~EditorFileSystemDirectory() { - for (int i = 0; i < files.size(); i++) { - memdelete(files[i]); + for (EditorFileSystemDirectory::FileInfo *fi : files) { + memdelete(fi); } - for (int i = 0; i < subdirs.size(); i++) { - memdelete(subdirs[i]); + for (EditorFileSystemDirectory *dir : subdirs) { + memdelete(dir); + } +} + +EditorFileSystem::ScannedDirectory::~ScannedDirectory() { + for (ScannedDirectory *dir : subdirs) { + memdelete(dir); + } +} + +void EditorFileSystem::_first_scan_filesystem() { + Ref<DirAccess> d = DirAccess::create(DirAccess::ACCESS_RESOURCES); + first_scan_root_dir = memnew(ScannedDirectory); + first_scan_root_dir->full_path = "res://"; + HashSet<String> existing_class_names; + + nb_files_total = _scan_new_dir(first_scan_root_dir, d); + + // This loads the global class names from the scripts and ensures that even if the + // global_script_class_cache.cfg was missing or invalid, the global class names are valid in ScriptServer. + _first_scan_process_scripts(first_scan_root_dir, existing_class_names); + + // Removing invalid global class to prevent having invalid paths in ScriptServer. + _remove_invalid_global_class_names(existing_class_names); + + // Now that all the global class names should be loaded, create autoloads and plugins. + // This is done after loading the global class names because autoloads and plugins can use + // global class names. + ProjectSettingsEditor::get_singleton()->init_autoloads(); + EditorNode::get_singleton()->init_plugins(); +} + +void EditorFileSystem::_first_scan_process_scripts(const ScannedDirectory *p_scan_dir, HashSet<String> &p_existing_class_names) { + for (ScannedDirectory *scan_sub_dir : p_scan_dir->subdirs) { + _first_scan_process_scripts(scan_sub_dir, p_existing_class_names); + } + + for (const String &scan_file : p_scan_dir->files) { + String path = p_scan_dir->full_path.path_join(scan_file); + String type = ResourceLoader::get_resource_type(path); + + if (ClassDB::is_parent_class(type, SNAME("Script"))) { + String script_class_extends; + String script_class_icon_path; + String script_class_name = _get_global_script_class(type, path, &script_class_extends, &script_class_icon_path); + _register_global_class_script(path, path, type, script_class_name, script_class_extends, script_class_icon_path); + + if (!script_class_name.is_empty()) { + p_existing_class_names.insert(script_class_name); + } + } } } void EditorFileSystem::_scan_filesystem() { - ERR_FAIL_COND(!scanning || new_filesystem); + // On the first scan, the first_scan_root_dir is created in _first_scan_filesystem. + ERR_FAIL_COND(!scanning || new_filesystem || (first_scan && !first_scan_root_dir)); //read .fscache String cpath; @@ -270,8 +331,8 @@ void EditorFileSystem::_scan_filesystem() { FileCache fc; fc.type = split[1]; if (fc.type.contains("/")) { - fc.type = fc.type.get_slice("/", 0); - fc.resource_script_class = fc.type.get_slice("/", 1); + fc.type = split[1].get_slice("/", 0); + fc.resource_script_class = split[1].get_slice("/", 1); } fc.uid = split[2].to_int(); fc.modification_time = split[3].to_int(); @@ -314,23 +375,33 @@ void EditorFileSystem::_scan_filesystem() { } EditorProgressBG scan_progress("efs", "ScanFS", 1000); - ScanProgress sp; - sp.low = 0; - sp.hi = 1; + sp.hi = nb_files_total; sp.progress = &scan_progress; new_filesystem = memnew(EditorFileSystemDirectory); new_filesystem->parent = nullptr; - Ref<DirAccess> d = DirAccess::create(DirAccess::ACCESS_RESOURCES); - d->change_dir("res://"); - _scan_new_dir(new_filesystem, d, sp); - dep_update_list.clear(); + ScannedDirectory *sd; + // On the first scan, the first_scan_root_dir is created in _first_scan_filesystem. + if (first_scan) { + sd = first_scan_root_dir; + } else { + Ref<DirAccess> d = DirAccess::create(DirAccess::ACCESS_RESOURCES); + sd = memnew(ScannedDirectory); + sd->full_path = "res://"; + nb_files_total = _scan_new_dir(sd, d); + } + + _process_file_system(sd, new_filesystem, sp); + dep_update_list.clear(); file_cache.clear(); //clear caches, no longer needed - if (!first_scan) { + if (first_scan) { + memdelete(first_scan_root_dir); + first_scan_root_dir = nullptr; + } else { //on the first scan this is done from the main thread after re-importing _save_filesystem_cache(); } @@ -563,6 +634,10 @@ bool EditorFileSystem::_scan_import_support(const Vector<String> &reimports) { bool EditorFileSystem::_update_scan_actions() { sources_changed.clear(); + // We need to update the script global class names before the reimports to be sure that + // all the importer classes that depends on class names will work. + _update_script_classes(); + bool fs_changed = false; Vector<String> reimports; @@ -611,7 +686,7 @@ bool EditorFileSystem::_update_scan_actions() { fs_changed = true; if (ClassDB::is_parent_class(ia.new_file->type, SNAME("Script"))) { - _queue_update_script_class(ia.dir->get_file_path(idx)); + _queue_update_script_class(ia.dir->get_file_path(idx), ia.new_file->type, ia.new_file->script_class_name, ia.new_file->script_class_extends, ia.new_file->script_class_icon_path); } if (ia.new_file->type == SNAME("PackedScene")) { _queue_update_scene_groups(ia.dir->get_file_path(idx)); @@ -622,8 +697,9 @@ bool EditorFileSystem::_update_scan_actions() { int idx = ia.dir->find_file_index(ia.file); ERR_CONTINUE(idx == -1); + String script_class_name = ia.dir->files[idx]->script_class_name; if (ClassDB::is_parent_class(ia.dir->files[idx]->type, SNAME("Script"))) { - _queue_update_script_class(ia.dir->get_file_path(idx)); + _queue_update_script_class(ia.dir->get_file_path(idx), "", "", "", ""); } if (ia.dir->files[idx]->type == SNAME("PackedScene")) { _queue_update_scene_groups(ia.dir->get_file_path(idx)); @@ -633,6 +709,15 @@ bool EditorFileSystem::_update_scan_actions() { memdelete(ia.dir->files[idx]); ia.dir->files.remove_at(idx); + // Restore another script with the same global class name if it exists. + if (!script_class_name.is_empty()) { + EditorFileSystemDirectory::FileInfo *old_fi = nullptr; + String old_file = _get_file_by_class_name(filesystem, script_class_name, old_fi); + if (!old_file.is_empty() && old_fi) { + _queue_update_script_class(old_file, old_fi->type, old_fi->script_class_name, old_fi->script_class_extends, old_fi->script_class_icon_path); + } + } + fs_changed = true; } break; @@ -640,12 +725,22 @@ bool EditorFileSystem::_update_scan_actions() { int idx = ia.dir->find_file_index(ia.file); ERR_CONTINUE(idx == -1); String full_path = ia.dir->get_file_path(idx); - if (_test_for_reimport(full_path, false)) { + + bool need_reimport = _test_for_reimport(full_path, false); + if (!need_reimport && FileAccess::exists(full_path + ".import")) { + uint64_t import_mt = ia.dir->get_file_import_modified_time(idx); + if (import_mt != FileAccess::get_modified_time(full_path + ".import")) { + need_reimport = true; + } + } + + if (need_reimport) { //must reimport reimports.push_back(full_path); Vector<String> dependencies = _get_dependencies(full_path); - for (const String &dependency_path : dependencies) { - if (import_extensions.has(dependency_path.get_extension())) { + for (const String &dep : dependencies) { + const String &dependency_path = dep.contains("::") ? dep.get_slice("::", 0) : dep; + if (import_extensions.has(dep.get_extension())) { reimports.push_back(dependency_path); } } @@ -663,10 +758,11 @@ bool EditorFileSystem::_update_scan_actions() { ERR_CONTINUE(idx == -1); String full_path = ia.dir->get_file_path(idx); - if (ClassDB::is_parent_class(ia.dir->files[idx]->type, SNAME("Script"))) { - _queue_update_script_class(full_path); + const EditorFileSystemDirectory::FileInfo *fi = ia.dir->files[idx]; + if (ClassDB::is_parent_class(fi->type, SNAME("Script"))) { + _queue_update_script_class(full_path, fi->type, fi->script_class_name, fi->script_class_extends, fi->script_class_icon_path); } - if (ia.dir->files[idx]->type == SNAME("PackedScene")) { + if (fi->type == SNAME("PackedScene")) { _queue_update_scene_groups(full_path); } @@ -707,6 +803,10 @@ bool EditorFileSystem::_update_scan_actions() { _save_filesystem_cache(); } + // Moving the processing of pending updates before the resources_reload event to be sure all global class names + // are updated. Script.cpp listens on resources_reload and reloads updated scripts. + _process_update_pending(); + if (reloads.size()) { emit_signal(SNAME("resources_reload"), reloads); } @@ -724,6 +824,14 @@ void EditorFileSystem::scan() { return; } + // The first scan must be on the main thread because, after the first scan and update + // of global class names, we load the plugins and autoloads. These need to + // be added on the main thread because they are nodes, and we need to wait for them + // to be loaded to continue the scan and reimportations. + if (first_scan) { + _first_scan_filesystem(); + } + _update_extensions(); if (!use_threads) { @@ -737,12 +845,14 @@ void EditorFileSystem::scan() { filesystem = new_filesystem; new_filesystem = nullptr; _update_scan_actions(); + // Update all icons so they are loaded for the FileSystemDock. + _update_files_icon_path(); scanning = false; - _update_pending_script_classes(); - _update_pending_scene_groups(); + // Set first_scan to false before the signals so the function doing_first_scan can return false + // in editor_node to start the export if needed. + first_scan = false; emit_signal(SNAME("filesystem_changed")); emit_signal(SNAME("sources_changed"), sources_changed.size() > 0); - first_scan = false; } else { ERR_FAIL_COND(thread.is_started()); set_process(true); @@ -756,28 +866,19 @@ void EditorFileSystem::scan() { } } -void EditorFileSystem::ScanProgress::update(int p_current, int p_total) const { - float ratio = low + ((hi - low) / p_total) * p_current; - progress->step(ratio * 1000); +void EditorFileSystem::ScanProgress::increment() { + current++; + float ratio = current / MAX(hi, 1.0f); + progress->step(ratio * 1000.0f); EditorFileSystem::singleton->scan_total = ratio; } -EditorFileSystem::ScanProgress EditorFileSystem::ScanProgress::get_sub(int p_current, int p_total) const { - ScanProgress sp = *this; - float slice = (sp.hi - sp.low) / p_total; - sp.low += slice * p_current; - sp.hi = slice; - return sp; -} - -void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAccess> &da, const ScanProgress &p_progress) { +int EditorFileSystem::_scan_new_dir(ScannedDirectory *p_dir, Ref<DirAccess> &da) { List<String> dirs; List<String> files; String cd = da->get_current_dir(); - p_dir->modified_time = FileAccess::get_modified_time(cd); - da->list_dir_begin(); while (true) { String f = da->get_next(); @@ -810,55 +911,59 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc dirs.sort_custom<FileNoCaseComparator>(); files.sort_custom<FileNoCaseComparator>(); - int total = dirs.size() + files.size(); - int idx = 0; + int nb_files_total_scan = 0; - for (List<String>::Element *E = dirs.front(); E; E = E->next(), idx++) { + for (List<String>::Element *E = dirs.front(); E; E = E->next()) { if (da->change_dir(E->get()) == OK) { String d = da->get_current_dir(); if (d == cd || !d.begins_with(cd)) { da->change_dir(cd); //avoid recursion } else { - EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory); - - efd->parent = p_dir; - efd->name = E->get(); + ScannedDirectory *sd = memnew(ScannedDirectory); + sd->name = E->get(); + sd->full_path = p_dir->full_path.path_join(sd->name); - _scan_new_dir(efd, da, p_progress.get_sub(idx, total)); + nb_files_total_scan += _scan_new_dir(sd, da); - int idx2 = 0; - for (int i = 0; i < p_dir->subdirs.size(); i++) { - if (efd->name.filenocasecmp_to(p_dir->subdirs[i]->name) < 0) { - break; - } - idx2++; - } - if (idx2 == p_dir->subdirs.size()) { - p_dir->subdirs.push_back(efd); - } else { - p_dir->subdirs.insert(idx2, efd); - } + p_dir->subdirs.push_back(sd); da->change_dir(".."); } } else { ERR_PRINT("Cannot go into subdir '" + E->get() + "'."); } + } + + p_dir->files = files; + nb_files_total_scan += files.size(); + + return nb_files_total_scan; +} + +void EditorFileSystem::_process_file_system(const ScannedDirectory *p_scan_dir, EditorFileSystemDirectory *p_dir, ScanProgress &p_progress) { + p_dir->modified_time = FileAccess::get_modified_time(p_scan_dir->full_path); - p_progress.update(idx, total); + for (ScannedDirectory *scan_sub_dir : p_scan_dir->subdirs) { + EditorFileSystemDirectory *sub_dir = memnew(EditorFileSystemDirectory); + sub_dir->parent = p_dir; + sub_dir->name = scan_sub_dir->name; + p_dir->subdirs.push_back(sub_dir); + _process_file_system(scan_sub_dir, sub_dir, p_progress); } - for (List<String>::Element *E = files.front(); E; E = E->next(), idx++) { - String ext = E->get().get_extension().to_lower(); + for (const String &scan_file : p_scan_dir->files) { + String ext = scan_file.get_extension().to_lower(); if (!valid_extensions.has(ext)) { + p_progress.increment(); continue; //invalid } - EditorFileSystemDirectory::FileInfo *fi = memnew(EditorFileSystemDirectory::FileInfo); - fi->file = E->get(); + String path = p_scan_dir->full_path.path_join(scan_file); - String path = cd.path_join(fi->file); + EditorFileSystemDirectory::FileInfo *fi = memnew(EditorFileSystemDirectory::FileInfo); + fi->file = scan_file; + p_dir->files.push_back(fi); FileCache *fc = file_cache.getptr(path); uint64_t mt = FileAccess::get_modified_time(path); @@ -888,7 +993,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc ItemAction ia; ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT; ia.dir = p_dir; - ia.file = E->get(); + ia.file = fi->file; scan_actions.push_back(ia); } @@ -917,7 +1022,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc ItemAction ia; ia.action = ItemAction::ACTION_FILE_TEST_REIMPORT; ia.dir = p_dir; - ia.file = E->get(); + ia.file = fi->file; scan_actions.push_back(ia); } } else { @@ -933,6 +1038,21 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc fi->script_class_name = fc->script_class_name; fi->script_class_extends = fc->script_class_extends; fi->script_class_icon_path = fc->script_class_icon_path; + + if (first_scan && ClassDB::is_parent_class(fi->type, SNAME("Script"))) { + bool update_script = false; + String old_class_name = fi->script_class_name; + fi->script_class_name = _get_global_script_class(fi->type, path, &fi->script_class_extends, &fi->script_class_icon_path); + if (old_class_name != fi->script_class_name) { + update_script = true; + } else if (!fi->script_class_name.is_empty() && (!ScriptServer::is_global_class(fi->script_class_name) || ScriptServer::get_global_class_path(fi->script_class_name) != path)) { + // This script has a class name but is not in the global class names or the path of the class has changed. + update_script = true; + } + if (update_script) { + _queue_update_script_class(path, fi->type, fi->script_class_name, fi->script_class_extends, fi->script_class_icon_path); + } + } } else { //new or modified time fi->type = ResourceLoader::get_resource_type(path); @@ -950,7 +1070,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc // Files in dep_update_list are forced for rescan to update dependencies. They don't need other updates. if (!dep_update_list.has(path)) { if (ClassDB::is_parent_class(fi->type, SNAME("Script"))) { - _queue_update_script_class(path); + _queue_update_script_class(path, fi->type, fi->script_class_name, fi->script_class_extends, fi->script_class_icon_path); } if (fi->type == SNAME("PackedScene")) { _queue_update_scene_groups(path); @@ -967,16 +1087,16 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAc } } - p_dir->files.push_back(fi); - p_progress.update(idx, total); + p_progress.increment(); } } -void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const ScanProgress &p_progress) { +void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, ScanProgress &p_progress) { uint64_t current_mtime = FileAccess::get_modified_time(p_dir->get_path()); bool updated_dir = false; String cd = p_dir->get_path(); + int diff_nb_files = 0; if (current_mtime != p_dir->modified_time || using_fat32_or_exfat) { updated_dir = true; @@ -993,6 +1113,8 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const p_dir->get_subdir(i)->verified = false; } + diff_nb_files -= p_dir->files.size(); + //then scan files and directories and check what's different Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_RESOURCES); @@ -1018,17 +1140,25 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const int idx = p_dir->find_dir_index(f); if (idx == -1) { - if (_should_skip_directory(cd.path_join(f))) { + String dir_path = cd.path_join(f); + if (_should_skip_directory(dir_path)) { continue; } - EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory); + ScannedDirectory sd; + sd.name = f; + sd.full_path = dir_path; + EditorFileSystemDirectory *efd = memnew(EditorFileSystemDirectory); efd->parent = p_dir; efd->name = f; + Ref<DirAccess> d = DirAccess::create(DirAccess::ACCESS_RESOURCES); - d->change_dir(cd.path_join(f)); - _scan_new_dir(efd, d, p_progress.get_sub(1, 1)); + d->change_dir(dir_path); + int nb_files_dir = _scan_new_dir(&sd, d); + p_progress.hi += nb_files_dir; + diff_nb_files += nb_files_dir; + _process_file_system(&sd, efd, p_progress); ItemAction ia; ia.action = ItemAction::ACTION_DIR_ADD; @@ -1082,7 +1212,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const ia.file = f; scan_actions.push_back(ia); } - + diff_nb_files++; } else { p_dir->files[idx]->verified = true; } @@ -1100,6 +1230,7 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const ia.dir = p_dir; ia.file = p_dir->files[i]->file; scan_actions.push_back(ia); + diff_nb_files--; continue; } @@ -1146,10 +1277,16 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const scan_actions.push_back(ia); } } + + p_progress.increment(); } for (int i = 0; i < p_dir->subdirs.size(); i++) { if ((updated_dir && !p_dir->subdirs[i]->verified) || _should_skip_directory(p_dir->subdirs[i]->get_path())) { + // Add all the files of the folder to be sure _update_scan_actions process the removed files + // for global class names. + diff_nb_files += _insert_actions_delete_files_directory(p_dir->subdirs[i]); + //this directory was removed or ignored, add action to remove it ItemAction ia; ia.action = ItemAction::ACTION_DIR_REMOVE; @@ -1159,6 +1296,8 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir, const } _scan_fs_changes(p_dir->get_subdir(i), p_progress); } + + nb_files_total = MAX(nb_files_total + diff_nb_files, 0); } void EditorFileSystem::_delete_internal_files(const String &p_file) { @@ -1173,19 +1312,64 @@ void EditorFileSystem::_delete_internal_files(const String &p_file) { } } +int EditorFileSystem::_insert_actions_delete_files_directory(EditorFileSystemDirectory *p_dir) { + int nb_files = 0; + for (EditorFileSystemDirectory::FileInfo *fi : p_dir->files) { + ItemAction ia; + ia.action = ItemAction::ACTION_FILE_REMOVE; + ia.dir = p_dir; + ia.file = fi->file; + scan_actions.push_back(ia); + nb_files++; + } + + for (EditorFileSystemDirectory *sub_dir : p_dir->subdirs) { + nb_files += _insert_actions_delete_files_directory(sub_dir); + } + + return nb_files; +} + void EditorFileSystem::_thread_func_sources(void *_userdata) { EditorFileSystem *efs = (EditorFileSystem *)_userdata; if (efs->filesystem) { EditorProgressBG pr("sources", TTR("ScanSources"), 1000); ScanProgress sp; sp.progress = ≺ - sp.hi = 1; - sp.low = 0; + sp.hi = efs->nb_files_total; efs->_scan_fs_changes(efs->filesystem, sp); } efs->scanning_changes_done.set(); } +void EditorFileSystem::_remove_invalid_global_class_names(const HashSet<String> &p_existing_class_names) { + List<StringName> global_classes; + ScriptServer::get_global_class_list(&global_classes); + for (const StringName &class_name : global_classes) { + if (!p_existing_class_names.has(class_name)) { + ScriptServer::remove_global_class(class_name); + } + } +} + +String EditorFileSystem::_get_file_by_class_name(EditorFileSystemDirectory *p_dir, const String &p_class_name, EditorFileSystemDirectory::FileInfo *&r_file_info) { + for (EditorFileSystemDirectory::FileInfo *fi : p_dir->files) { + if (fi->script_class_name == p_class_name) { + r_file_info = fi; + return p_dir->get_path().path_join(fi->file); + } + } + + for (EditorFileSystemDirectory *sub_dir : p_dir->subdirs) { + String file = _get_file_by_class_name(sub_dir, p_class_name, r_file_info); + if (!file.is_empty()) { + return file; + } + } + r_file_info = nullptr; + return ""; +} + void EditorFileSystem::scan_changes() { if (first_scan || // Prevent a premature changes scan from inhibiting the first full scan scanning || scanning_changes || thread.is_started()) { @@ -1204,14 +1388,10 @@ void EditorFileSystem::scan_changes() { EditorProgressBG pr("sources", TTR("ScanSources"), 1000); ScanProgress sp; sp.progress = ≺ - sp.hi = 1; - sp.low = 0; + sp.hi = nb_files_total; scan_total = 0; _scan_fs_changes(filesystem, sp); - bool changed = _update_scan_actions(); - _update_pending_script_classes(); - _update_pending_scene_groups(); - if (changed) { + if (_update_scan_actions()) { emit_signal(SNAME("filesystem_changed")); } } @@ -1276,13 +1456,13 @@ void EditorFileSystem::_notification(int p_what) { thread_sources.wait_to_finish(); } bool changed = _update_scan_actions(); - _update_pending_script_classes(); - _update_pending_scene_groups(); + // Set first_scan to false before the signals so the function doing_first_scan can return false + // in editor_node to start the export if needed. + first_scan = false; if (changed) { emit_signal(SNAME("filesystem_changed")); } emit_signal(SNAME("sources_changed"), sources_changed.size() > 0); - first_scan = false; scanning_changes = false; // Changed to false here to prevent recursive triggering of scan thread. done_importing = true; } @@ -1296,11 +1476,13 @@ void EditorFileSystem::_notification(int p_what) { new_filesystem = nullptr; thread.wait_to_finish(); _update_scan_actions(); - _update_pending_script_classes(); - _update_pending_scene_groups(); + // Update all icons so they are loaded for the FileSystemDock. + _update_files_icon_path(); + // Set first_scan to false before the signals so the function doing_first_scan can return false + // in editor_node to start the export if needed. + first_scan = false; emit_signal(SNAME("filesystem_changed")); emit_signal(SNAME("sources_changed"), sources_changed.size() > 0); - first_scan = false; } if (done_importing && scan_changes_pending) { @@ -1315,7 +1497,7 @@ void EditorFileSystem::_notification(int p_what) { } bool EditorFileSystem::is_scanning() const { - return scanning || scanning_changes; + return scanning || scanning_changes || first_scan; } float EditorFileSystem::get_scanning_progress() const { @@ -1578,15 +1760,80 @@ String EditorFileSystem::_get_global_script_class(const String &p_type, const St return String(); } +void EditorFileSystem::_update_file_icon_path(EditorFileSystemDirectory::FileInfo *file_info) { + String icon_path; + if (file_info->script_class_icon_path.is_empty() && !file_info->deps.is_empty()) { + const String &script_dep = file_info->deps[0]; // Assuming the first dependency is a script. + const String &script_path = script_dep.contains("::") ? script_dep.get_slice("::", 2) : script_dep; + if (!script_path.is_empty()) { + String *cached = file_icon_cache.getptr(script_path); + if (cached) { + icon_path = *cached; + } else { + if (ClassDB::is_parent_class(ResourceLoader::get_resource_type(script_path), SNAME("Script"))) { + int script_file; + EditorFileSystemDirectory *efsd = find_file(script_path, &script_file); + if (efsd) { + icon_path = efsd->files[script_file]->script_class_icon_path; + } + } + file_icon_cache.insert(script_path, icon_path); + } + } + } + + file_info->icon_path = icon_path; +} + +void EditorFileSystem::_update_files_icon_path(EditorFileSystemDirectory *edp) { + if (!edp) { + edp = filesystem; + file_icon_cache.clear(); + } + for (EditorFileSystemDirectory *sub_dir : edp->subdirs) { + _update_files_icon_path(sub_dir); + } + for (EditorFileSystemDirectory::FileInfo *fi : edp->files) { + _update_file_icon_path(fi); + } +} + void EditorFileSystem::_update_script_classes() { + if (update_script_paths.is_empty()) { + return; + } + update_script_mutex.lock(); - for (const String &path : update_script_paths) { - EditorFileSystem::get_singleton()->register_global_class_script(path, path); + for (const KeyValue<String, ScriptInfo> &E : update_script_paths) { + _register_global_class_script(E.key, E.key, E.value.type, E.value.script_class_name, E.value.script_class_extends, E.value.script_class_icon_path); } - // Parse documentation second, as it requires the class names to be correct and registered - for (const String &path : update_script_paths) { + update_script_paths.clear(); + update_script_mutex.unlock(); + + ScriptServer::save_global_classes(); + EditorNode::get_editor_data().script_class_save_icon_paths(); + + emit_signal("script_classes_updated"); + + // Rescan custom loaders and savers. + // Doing the following here because the `filesystem_changed` signal fires multiple times and isn't always followed by script classes update. + // So I thought it's better to do this when script classes really get updated + ResourceLoader::remove_custom_loaders(); + ResourceLoader::add_custom_loaders(); + ResourceSaver::remove_custom_savers(); + ResourceSaver::add_custom_savers(); +} + +void EditorFileSystem::_update_script_documentation() { + if (update_script_paths_documentation.is_empty()) { + return; + } + + update_script_mutex.lock(); + + for (const String &path : update_script_paths_documentation) { int index = -1; EditorFileSystemDirectory *efd = find_file(path, &index); @@ -1610,40 +1857,38 @@ void EditorFileSystem::_update_script_classes() { } } - update_script_paths.clear(); + update_script_paths_documentation.clear(); update_script_mutex.unlock(); - - ScriptServer::save_global_classes(); - EditorNode::get_editor_data().script_class_save_icon_paths(); - emit_signal("script_classes_updated"); - - // Rescan custom loaders and savers. - // Doing the following here because the `filesystem_changed` signal fires multiple times and isn't always followed by script classes update. - // So I thought it's better to do this when script classes really get updated - ResourceLoader::remove_custom_loaders(); - ResourceLoader::add_custom_loaders(); - ResourceSaver::remove_custom_savers(); - ResourceSaver::add_custom_savers(); } -void EditorFileSystem::_update_pending_script_classes() { - if (!update_script_paths.is_empty()) { - _update_script_classes(); - } else { - // In case the class cache file was removed somehow, regenerate it. - if (!FileAccess::exists(ScriptServer::get_global_class_cache_file_path())) { - ScriptServer::save_global_classes(); - } - } +void EditorFileSystem::_process_update_pending() { + _update_script_classes(); + // Parse documentation second, as it requires the class names to be loaded + // because _update_script_documentation loads the scripts completely. + _update_script_documentation(); + _update_pending_scene_groups(); } -void EditorFileSystem::_queue_update_script_class(const String &p_path) { +void EditorFileSystem::_queue_update_script_class(const String &p_path, const String &p_type, const String &p_script_class_name, const String &p_script_class_extends, const String &p_script_class_icon_path) { update_script_mutex.lock(); - update_script_paths.insert(p_path); + + ScriptInfo si; + si.type = p_type; + si.script_class_name = p_script_class_name; + si.script_class_extends = p_script_class_extends; + si.script_class_icon_path = p_script_class_icon_path; + update_script_paths.insert(p_path, si); + + update_script_paths_documentation.insert(p_path); + update_script_mutex.unlock(); } void EditorFileSystem::_update_scene_groups() { + if (update_scene_paths.is_empty()) { + return; + } + EditorProgress *ep = nullptr; if (update_scene_paths.size() > 1) { ep = memnew(EditorProgress("update_scene_groups", TTR("Update Scene Groups"), update_scene_paths.size())); @@ -1662,7 +1907,7 @@ void EditorFileSystem::_update_scene_groups() { continue; } - const HashSet<StringName> scene_groups = _get_scene_groups(path); + const HashSet<StringName> scene_groups = PackedScene::get_scene_groups(path); if (!scene_groups.is_empty()) { ProjectSettings::get_singleton()->add_scene_groups_cache(path, scene_groups); } @@ -1706,12 +1951,6 @@ void EditorFileSystem::_get_all_scenes(EditorFileSystemDirectory *p_dir, HashSet } } -HashSet<StringName> EditorFileSystem::_get_scene_groups(const String &p_path) { - Ref<PackedScene> packed_scene = ResourceLoader::load(p_path); - ERR_FAIL_COND_V(packed_scene.is_null(), HashSet<StringName>()); - return packed_scene->get_state()->get_all_groups(); -} - void EditorFileSystem::update_file(const String &p_file) { ERR_FAIL_COND(p_file.is_empty()); update_files({ p_file }); @@ -1719,6 +1958,8 @@ void EditorFileSystem::update_file(const String &p_file) { void EditorFileSystem::update_files(const Vector<String> &p_script_paths) { bool updated = false; + bool update_files_icon_cache = false; + Vector<EditorFileSystemDirectory::FileInfo *> files_to_update_icon_path; for (const String &file : p_script_paths) { ERR_CONTINUE(file.is_empty()); EditorFileSystemDirectory *fs = nullptr; @@ -1740,7 +1981,10 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) { } } if (ClassDB::is_parent_class(fs->files[cpos]->type, SNAME("Script"))) { - _queue_update_script_class(file); + _queue_update_script_class(file, fs->files[cpos]->type, "", "", ""); + if (!fs->files[cpos]->script_class_icon_path.is_empty()) { + update_files_icon_cache = true; + } } if (fs->files[cpos]->type == SNAME("PackedScene")) { _queue_update_scene_groups(file); @@ -1789,6 +2033,8 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) { _save_late_updated_files(); //files need to be updated in the re-scan } + const String old_script_class_icon_path = fs->files[cpos]->script_class_icon_path; + const String old_class_name = fs->files[cpos]->script_class_name; fs->files[cpos]->type = type; fs->files[cpos]->resource_script_class = script_class; fs->files[cpos]->uid = uid; @@ -1811,19 +2057,42 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) { EditorResourcePreview::get_singleton()->check_for_invalidation(file); if (ClassDB::is_parent_class(fs->files[cpos]->type, SNAME("Script"))) { - _queue_update_script_class(file); + _queue_update_script_class(file, fs->files[cpos]->type, fs->files[cpos]->script_class_name, fs->files[cpos]->script_class_extends, fs->files[cpos]->script_class_icon_path); } if (fs->files[cpos]->type == SNAME("PackedScene")) { _queue_update_scene_groups(file); } + + if (fs->files[cpos]->type == SNAME("Resource")) { + files_to_update_icon_path.push_back(fs->files[cpos]); + } else if (old_script_class_icon_path != fs->files[cpos]->script_class_icon_path) { + update_files_icon_cache = true; + } + + // Restore another script as the global class name if multiple scripts had the same old class name. + if (!old_class_name.is_empty() && fs->files[cpos]->script_class_name != old_class_name && ClassDB::is_parent_class(type, SNAME("Script"))) { + EditorFileSystemDirectory::FileInfo *old_fi = nullptr; + String old_file = _get_file_by_class_name(filesystem, old_class_name, old_fi); + if (!old_file.is_empty() && old_fi) { + _queue_update_script_class(old_file, old_fi->type, old_fi->script_class_name, old_fi->script_class_extends, old_fi->script_class_icon_path); + } + } updated = true; } } if (updated) { - _update_pending_script_classes(); - _update_pending_scene_groups(); - call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later + if (update_files_icon_cache) { + _update_files_icon_path(); + } else { + for (EditorFileSystemDirectory::FileInfo *fi : files_to_update_icon_path) { + _update_file_icon_path(fi); + } + } + if (!is_scanning()) { + _process_update_pending(); + call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later + } } } @@ -1831,31 +2100,37 @@ HashSet<String> EditorFileSystem::get_valid_extensions() const { return valid_extensions; } -void EditorFileSystem::register_global_class_script(const String &p_search_path, const String &p_target_path) { +void EditorFileSystem::_register_global_class_script(const String &p_search_path, const String &p_target_path, const String &p_type, const String &p_script_class_name, const String &p_script_class_extends, const String &p_script_class_icon_path) { ScriptServer::remove_global_class_by_path(p_search_path); // First remove, just in case it changed - int index = -1; - EditorFileSystemDirectory *efd = find_file(p_search_path, &index); - - if (!efd || index < 0) { - // The file was removed + if (p_script_class_name.is_empty()) { return; } - if (!efd->files[index]->script_class_name.is_empty()) { - String lang; - for (int j = 0; j < ScriptServer::get_language_count(); j++) { - if (ScriptServer::get_language(j)->handles_global_class_type(efd->files[index]->type)) { - lang = ScriptServer::get_language(j)->get_name(); - } - } - if (lang.is_empty()) { - return; // No lang found that can handle this global class + String lang; + for (int j = 0; j < ScriptServer::get_language_count(); j++) { + if (ScriptServer::get_language(j)->handles_global_class_type(p_type)) { + lang = ScriptServer::get_language(j)->get_name(); + break; } + } + if (lang.is_empty()) { + return; // No lang found that can handle this global class + } + + ScriptServer::add_global_class(p_script_class_name, p_script_class_extends, lang, p_target_path); + EditorNode::get_editor_data().script_class_set_icon_path(p_script_class_name, p_script_class_icon_path); + EditorNode::get_editor_data().script_class_set_name(p_target_path, p_script_class_name); +} - ScriptServer::add_global_class(efd->files[index]->script_class_name, efd->files[index]->script_class_extends, lang, p_target_path); - EditorNode::get_editor_data().script_class_set_icon_path(efd->files[index]->script_class_name, efd->files[index]->script_class_icon_path); - EditorNode::get_editor_data().script_class_set_name(p_target_path, efd->files[index]->script_class_name); +void EditorFileSystem::register_global_class_script(const String &p_search_path, const String &p_target_path) { + int index_file; + EditorFileSystemDirectory *efsd = find_file(p_search_path, &index_file); + if (efsd) { + const EditorFileSystemDirectory::FileInfo *fi = efsd->files[index_file]; + EditorFileSystem::get_singleton()->_register_global_class_script(p_search_path, p_target_path, fi->type, fi->script_class_name, fi->script_class_extends, fi->script_class_icon_path); + } else { + ScriptServer::remove_global_class_by_path(p_search_path); } } @@ -2405,18 +2680,23 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { int from = 0; for (int i = 0; i < reimport_files.size(); i++) { if (groups_to_reimport.has(reimport_files[i].path)) { + from = i + 1; continue; } if (use_multiple_threads && reimport_files[i].threaded) { - if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer) { + if (i + 1 == reimport_files.size() || reimport_files[i + 1].importer != reimport_files[from].importer || groups_to_reimport.has(reimport_files[i + 1].path)) { if (from - i == 0) { // Single file, do not use threads. pr.step(reimport_files[i].path.get_file(), i); _reimport_file(reimport_files[i].path); } else { Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(reimport_files[from].importer); - ERR_CONTINUE(!importer.is_valid()); + if (importer.is_null()) { + ERR_PRINT(vformat("Invalid importer for \"%s\".", reimport_files[from].importer)); + from = i + 1; + continue; + } importer->import_threaded_begin(); @@ -2446,6 +2726,10 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { } else { pr.step(reimport_files[i].path.get_file(), i); _reimport_file(reimport_files[i].path); + + // We need to increment the counter, maybe the next file is multithreaded + // and doesn't have the same importer. + from = i + 1; } } @@ -2470,8 +2754,7 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) { ResourceUID::get_singleton()->update_cache(); // After reimporting, update the cache. _save_filesystem_cache(); - _update_pending_script_classes(); - _update_pending_scene_groups(); + _process_update_pending(); importing = false; if (!is_scanning()) { emit_signal(SNAME("filesystem_changed")); diff --git a/editor/editor_file_system.h b/editor/editor_file_system.h index cd95d5fb95..1bc24416eb 100644 --- a/editor/editor_file_system.h +++ b/editor/editor_file_system.h @@ -66,6 +66,7 @@ class EditorFileSystemDirectory : public Object { String script_class_name; String script_class_extends; String script_class_icon_path; + String icon_path; }; Vector<FileInfo *> files; @@ -88,9 +89,11 @@ public: Vector<String> get_file_deps(int p_idx) const; bool get_file_import_is_valid(int p_idx) const; uint64_t get_file_modified_time(int p_idx) const; + uint64_t get_file_import_modified_time(int p_idx) const; String get_file_script_class_name(int p_idx) const; //used for scripts String get_file_script_class_extends(int p_idx) const; //used for scripts String get_file_script_class_icon_path(int p_idx) const; //used for scripts + String get_file_icon_path(int p_idx) const; //used for FileSystemDock EditorFileSystemDirectory *get_parent(); @@ -157,11 +160,21 @@ class EditorFileSystem : public Node { EditorFileSystemDirectory::FileInfo *new_file = nullptr; }; + struct ScannedDirectory { + String name; + String full_path; + Vector<ScannedDirectory *> subdirs; + List<String> files; + + ~ScannedDirectory(); + }; + bool use_threads = false; Thread thread; static void _thread_func(void *_userdata); EditorFileSystemDirectory *new_filesystem = nullptr; + ScannedDirectory *first_scan_root_dir = nullptr; bool scanning = false; bool importing = false; @@ -170,8 +183,11 @@ class EditorFileSystem : public Node { float scan_total; String filesystem_settings_version_for_import; bool revalidate_import_files = false; + int nb_files_total = 0; void _scan_filesystem(); + void _first_scan_filesystem(); + void _first_scan_process_scripts(const ScannedDirectory *p_scan_dir, HashSet<String> &p_existing_class_names); HashSet<String> late_update_files; @@ -200,11 +216,10 @@ class EditorFileSystem : public Node { HashSet<String> dep_update_list; struct ScanProgress { - float low = 0; float hi = 0; - mutable EditorProgressBG *progress = nullptr; - void update(int p_current, int p_total) const; - ScanProgress get_sub(int p_current, int p_total) const; + int current = 0; + EditorProgressBG *progress = nullptr; + void increment(); }; void _save_filesystem_cache(); @@ -212,15 +227,17 @@ class EditorFileSystem : public Node { bool _find_file(const String &p_file, EditorFileSystemDirectory **r_d, int &r_file_pos) const; - void _scan_fs_changes(EditorFileSystemDirectory *p_dir, const ScanProgress &p_progress); + void _scan_fs_changes(EditorFileSystemDirectory *p_dir, ScanProgress &p_progress); void _delete_internal_files(const String &p_file); + int _insert_actions_delete_files_directory(EditorFileSystemDirectory *p_dir); HashSet<String> textfile_extensions; HashSet<String> valid_extensions; HashSet<String> import_extensions; - void _scan_new_dir(EditorFileSystemDirectory *p_dir, Ref<DirAccess> &da, const ScanProgress &p_progress); + int _scan_new_dir(ScannedDirectory *p_dir, Ref<DirAccess> &da); + void _process_file_system(const ScannedDirectory *p_scan_dir, EditorFileSystemDirectory *p_dir, ScanProgress &p_progress); Thread thread_sources; bool scanning_changes = false; @@ -254,18 +271,26 @@ class EditorFileSystem : public Node { } }; + struct ScriptInfo { + String type; + String script_class_name; + String script_class_extends; + String script_class_icon_path; + }; + Mutex update_script_mutex; - HashSet<String> update_script_paths; - void _queue_update_script_class(const String &p_path); + HashMap<String, ScriptInfo> update_script_paths; + HashSet<String> update_script_paths_documentation; + void _queue_update_script_class(const String &p_path, const String &p_type, const String &p_script_class_name, const String &p_script_class_extends, const String &p_script_class_icon_path); void _update_script_classes(); - void _update_pending_script_classes(); + void _update_script_documentation(); + void _process_update_pending(); Mutex update_scene_mutex; HashSet<String> update_scene_paths; void _queue_update_scene_groups(const String &p_path); void _update_scene_groups(); void _update_pending_scene_groups(); - HashSet<StringName> _get_scene_groups(const String &p_path); void _get_all_scenes(EditorFileSystemDirectory *p_dir, HashSet<String> &r_list); String _get_global_script_class(const String &p_type, const String &p_path, String *r_extends, String *r_icon_path) const; @@ -279,6 +304,7 @@ class EditorFileSystem : public Node { void _move_group_files(EditorFileSystemDirectory *efd, const String &p_group_file, const String &p_new_location); HashSet<String> group_file_cache; + HashMap<String, String> file_icon_cache; struct ImportThreadData { const ImportFile *reimport_files; @@ -295,6 +321,13 @@ class EditorFileSystem : public Node { Vector<Ref<EditorFileSystemImportFormatSupportQuery>> import_support_queries; + void _update_file_icon_path(EditorFileSystemDirectory::FileInfo *file_info); + void _update_files_icon_path(EditorFileSystemDirectory *edp = nullptr); + void _remove_invalid_global_class_names(const HashSet<String> &p_existing_class_names); + String _get_file_by_class_name(EditorFileSystemDirectory *p_dir, const String &p_class_name, EditorFileSystemDirectory::FileInfo *&r_file_info); + + void _register_global_class_script(const String &p_search_path, const String &p_target_path, const String &p_type, const String &p_script_class_name, const String &p_script_class_extends, const String &p_script_class_icon_path); + protected: void _notification(int p_what); static void _bind_methods(); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 00ac1c7c6f..5725129f65 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -3761,6 +3761,12 @@ EditorHelpBit::EditorHelpBit(const String &p_symbol) { /// EditorHelpBitTooltip /// +void EditorHelpBitTooltip::_start_timer() { + if (timer->is_inside_tree() && timer->is_stopped()) { + timer->start(); + } +} + void EditorHelpBitTooltip::_safe_queue_free() { if (_pushing_input > 0) { _need_free = true; @@ -3769,13 +3775,20 @@ void EditorHelpBitTooltip::_safe_queue_free() { } } +void EditorHelpBitTooltip::_target_gui_input(const Ref<InputEvent> &p_event) { + const Ref<InputEventMouse> mouse_event = p_event; + if (mouse_event.is_valid()) { + _start_timer(); + } +} + void EditorHelpBitTooltip::_notification(int p_what) { switch (p_what) { case NOTIFICATION_WM_MOUSE_ENTER: timer->stop(); break; case NOTIFICATION_WM_MOUSE_EXIT: - timer->start(); + _start_timer(); break; } } @@ -3783,7 +3796,7 @@ void EditorHelpBitTooltip::_notification(int p_what) { // Forwards non-mouse input to the parent viewport. void EditorHelpBitTooltip::_input_from_window(const Ref<InputEvent> &p_event) { if (p_event->is_action_pressed(SNAME("ui_cancel"), false, true)) { - hide(); // Will be deleted on its timer. + _safe_queue_free(); } else { const Ref<InputEventMouse> mouse_event = p_event; if (mouse_event.is_null()) { @@ -3801,7 +3814,7 @@ void EditorHelpBitTooltip::_input_from_window(const Ref<InputEvent> &p_event) { void EditorHelpBitTooltip::show_tooltip(EditorHelpBit *p_help_bit, Control *p_target) { ERR_FAIL_NULL(p_help_bit); EditorHelpBitTooltip *tooltip = memnew(EditorHelpBitTooltip(p_target)); - p_help_bit->connect("request_hide", callable_mp(static_cast<Window *>(tooltip), &Window::hide)); // Will be deleted on its timer. + p_help_bit->connect("request_hide", callable_mp(tooltip, &EditorHelpBitTooltip::_safe_queue_free)); tooltip->add_child(p_help_bit); p_target->get_viewport()->add_child(tooltip); p_help_bit->update_content_height(); @@ -3858,8 +3871,8 @@ EditorHelpBitTooltip::EditorHelpBitTooltip(Control *p_target) { add_child(timer); ERR_FAIL_NULL(p_target); - p_target->connect(SceneStringName(mouse_entered), callable_mp(timer, &Timer::stop)); - p_target->connect(SceneStringName(mouse_exited), callable_mp(timer, &Timer::start).bind(-1)); + p_target->connect(SceneStringName(mouse_exited), callable_mp(this, &EditorHelpBitTooltip::_start_timer)); + p_target->connect(SceneStringName(gui_input), callable_mp(this, &EditorHelpBitTooltip::_target_gui_input)); } #if defined(MODULE_GDSCRIPT_ENABLED) || defined(MODULE_MONO_ENABLED) diff --git a/editor/editor_help.h b/editor/editor_help.h index 8d1fec713e..93f74cb2c1 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -329,7 +329,9 @@ class EditorHelpBitTooltip : public PopupPanel { int _pushing_input = 0; bool _need_free = false; + void _start_timer(); void _safe_queue_free(); + void _target_gui_input(const Ref<InputEvent> &p_event); protected: void _notification(int p_what); diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index d29067aa02..467a19ebb1 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -413,7 +413,7 @@ void EditorProperty::_notification(int p_what) { if (has_borders) { get_parent()->disconnect(SceneStringName(theme_changed), callable_mp(this, &EditorProperty::_update_property_bg)); } - } + } break; } } @@ -1239,9 +1239,11 @@ void EditorInspectorCategory::_notification(int p_what) { int ofs = (get_size().width - w) / 2; + float v_margin_offset = sb->get_content_margin(SIDE_TOP) - sb->get_content_margin(SIDE_BOTTOM); + if (icon.is_valid()) { Size2 rect_size = Size2(icon_size, icon_size); - Point2 rect_pos = Point2(ofs, (get_size().height - icon_size) / 2).floor(); + Point2 rect_pos = Point2(ofs, (get_size().height - icon_size) / 2 + v_margin_offset).round(); if (is_layout_rtl()) { rect_pos.x = get_size().width - rect_pos.x - icon_size; } @@ -1255,7 +1257,9 @@ void EditorInspectorCategory::_notification(int p_what) { if (is_layout_rtl()) { ofs = get_size().width - ofs - w; } - draw_string(font, Point2(ofs, font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2).floor(), label, HORIZONTAL_ALIGNMENT_LEFT, w, font_size, color); + float text_pos_y = font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2 + v_margin_offset; + Point2 text_pos = Point2(ofs, text_pos_y).round(); + draw_string(font, text_pos, label, HORIZONTAL_ALIGNMENT_LEFT, w, font_size, color); } break; } } @@ -1283,6 +1287,9 @@ Size2 EditorInspectorCategory::get_minimum_size() const { } ms.height += get_theme_constant(SNAME("v_separation"), SNAME("Tree")); + const Ref<StyleBox> &bg_style = get_theme_stylebox(SNAME("bg")); + ms.height += bg_style->get_content_margin(SIDE_TOP) + bg_style->get_content_margin(SIDE_BOTTOM); + return ms; } @@ -1364,6 +1371,8 @@ void EditorInspectorSection::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { update_minimum_size(); + bg_color = get_theme_color(SNAME("prop_subsection"), EditorStringName(Editor)); + bg_color.a /= level; } break; case NOTIFICATION_SORT_CHILDREN: { @@ -1423,10 +1432,11 @@ void EditorInspectorSection::_notification(int p_what) { // Draw header title, folding arrow and count of revertable properties. { - int separation = Math::round(2 * EDSCALE); + int outer_margin = Math::round(2 * EDSCALE); + int separation = get_theme_constant(SNAME("h_separation"), SNAME("EditorInspectorSection")); - int margin_start = section_indent + separation; - int margin_end = separation; + int margin_start = section_indent + outer_margin; + int margin_end = outer_margin; // - Arrow. Ref<Texture2D> arrow = _get_arrow(); @@ -1439,7 +1449,7 @@ void EditorInspectorSection::_notification(int p_what) { } arrow_position.y = (header_height - arrow->get_height()) / 2; draw_texture(arrow, arrow_position); - margin_start += arrow->get_width(); + margin_start += arrow->get_width() + separation; } int available = get_size().width - (margin_start + margin_end); @@ -1464,27 +1474,25 @@ void EditorInspectorSection::_notification(int p_what) { // Can we fit the long version of the revertable count text? num_revertable_str = vformat(TTRN("(%d change)", "(%d changes)", revertable_properties.size()), revertable_properties.size()); num_revertable_width = light_font->get_string_size(num_revertable_str, HORIZONTAL_ALIGNMENT_LEFT, -1.0f, light_font_size, TextServer::JUSTIFICATION_NONE).x; - if (label_width + separation + num_revertable_width > available) { + if (label_width + outer_margin + num_revertable_width > available) { // We'll have to use the short version. num_revertable_str = vformat("(%d)", revertable_properties.size()); num_revertable_width = light_font->get_string_size(num_revertable_str, HORIZONTAL_ALIGNMENT_LEFT, -1.0f, light_font_size, TextServer::JUSTIFICATION_NONE).x; } - Point2 text_offset = Point2( - margin_end, - light_font->get_ascent(light_font_size) + (header_height - light_font->get_height(light_font_size)) / 2); + float text_offset_y = light_font->get_ascent(light_font_size) + (header_height - light_font->get_height(light_font_size)) / 2; + Point2 text_offset = Point2(margin_end, text_offset_y).round(); if (!rtl) { text_offset.x = get_size().width - (text_offset.x + num_revertable_width); } draw_string(light_font, text_offset, num_revertable_str, HORIZONTAL_ALIGNMENT_LEFT, -1.0f, light_font_size, light_font_color, TextServer::JUSTIFICATION_NONE); - margin_end += num_revertable_width + separation; - available -= num_revertable_width + separation; + margin_end += num_revertable_width + outer_margin; + available -= num_revertable_width + outer_margin; } // - Label. - Point2 text_offset = Point2( - margin_start, - font->get_ascent(font_size) + (header_height - font->get_height(font_size)) / 2); + float text_offset_y = font->get_ascent(font_size) + (header_height - font->get_height(font_size)) / 2; + Point2 text_offset = Point2(margin_start, text_offset_y).round(); if (rtl) { text_offset.x = margin_end; } @@ -1562,13 +1570,14 @@ Size2 EditorInspectorSection::get_minimum_size() const { return ms; } -void EditorInspectorSection::setup(const String &p_section, const String &p_label, Object *p_object, const Color &p_bg_color, bool p_foldable, int p_indent_depth) { +void EditorInspectorSection::setup(const String &p_section, const String &p_label, Object *p_object, const Color &p_bg_color, bool p_foldable, int p_indent_depth, int p_level) { section = p_section; label = p_label; object = p_object; bg_color = p_bg_color; foldable = p_foldable; indent_depth = p_indent_depth; + level = p_level; if (!foldable && !vbox_added) { add_child(vbox); @@ -1668,7 +1677,7 @@ void EditorInspectorSection::property_can_revert_changed(const String &p_path, b } void EditorInspectorSection::_bind_methods() { - ClassDB::bind_method(D_METHOD("setup", "section", "label", "object", "bg_color", "foldable"), &EditorInspectorSection::setup); + ClassDB::bind_method(D_METHOD("setup", "section", "label", "object", "bg_color", "foldable", "indent_depth", "level"), &EditorInspectorSection::setup, DEFVAL(0), DEFVAL(1)); ClassDB::bind_method(D_METHOD("get_vbox"), &EditorInspectorSection::get_vbox); ClassDB::bind_method(D_METHOD("unfold"), &EditorInspectorSection::unfold); ClassDB::bind_method(D_METHOD("fold"), &EditorInspectorSection::fold); @@ -2589,6 +2598,10 @@ int EditorInspector::inspector_plugin_count = 0; EditorProperty *EditorInspector::instantiate_property_editor(Object *p_object, const Variant::Type p_type, const String &p_path, PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide) { for (int i = inspector_plugin_count - 1; i >= 0; i--) { + if (!inspector_plugins[i]->can_handle(p_object)) { + continue; + } + inspector_plugins[i]->parse_property(p_object, p_type, p_path, p_hint, p_hint_text, p_usage, p_wide); if (inspector_plugins[i]->added_editors.size()) { for (List<EditorInspectorPlugin::AddedEditor>::Element *E = inspector_plugins[i]->added_editors.front()->next(); E; E = E->next()) { //only keep first one @@ -3124,6 +3137,7 @@ void EditorInspector::update_tree() { // Recreate the category vbox if it was reset. if (category_vbox == nullptr) { category_vbox = memnew(VBoxContainer); + category_vbox->hide(); main_vbox->add_child(category_vbox); } @@ -3178,7 +3192,7 @@ void EditorInspector::update_tree() { Color c = sscolor; c.a /= level; - section->setup(acc_path, label, object, c, use_folding, section_depth); + section->setup(acc_path, label, object, c, use_folding, section_depth, level); section->set_tooltip_text(tooltip); // Add editors at the start of a group. @@ -3196,6 +3210,7 @@ void EditorInspector::update_tree() { // If we did not find a section to add the property to, add it to the category vbox instead (the category vbox handles margins correctly). if (current_vbox == main_vbox) { + category_vbox->show(); current_vbox = category_vbox; } @@ -4074,6 +4089,10 @@ void EditorInspector::_node_removed(Node *p_node) { void EditorInspector::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_THEME_CHANGED: { + main_vbox->add_theme_constant_override("separation", get_theme_constant(SNAME("v_separation"), SNAME("EditorInspector"))); + } break; + case NOTIFICATION_READY: { EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", callable_mp(this, &EditorInspector::_feature_profile_changed)); set_process(is_visible_in_tree()); @@ -4337,7 +4356,6 @@ EditorInspector::EditorInspector() { object = nullptr; main_vbox = memnew(VBoxContainer); main_vbox->set_h_size_flags(SIZE_EXPAND_FILL); - main_vbox->add_theme_constant_override("separation", 0); add_child(main_vbox); set_horizontal_scroll_mode(SCROLL_MODE_DISABLED); set_follow_focus(true); diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index f9b0d1f094..29ee234883 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -307,6 +307,7 @@ class EditorInspectorSection : public Container { Color bg_color; bool foldable = false; int indent_depth = 0; + int level = 1; Timer *dropping_unfold_timer = nullptr; bool dropping = false; @@ -329,7 +330,7 @@ protected: public: virtual Size2 get_minimum_size() const override; - void setup(const String &p_section, const String &p_label, Object *p_object, const Color &p_bg_color, bool p_foldable, int p_indent_depth = 0); + void setup(const String &p_section, const String &p_label, Object *p_object, const Color &p_bg_color, bool p_foldable, int p_indent_depth = 0, int p_level = 1); VBoxContainer *get_vbox(); void unfold(); void fold(); diff --git a/editor/editor_interface.cpp b/editor/editor_interface.cpp index 35e846b344..46113ab2cb 100644 --- a/editor/editor_interface.cpp +++ b/editor/editor_interface.cpp @@ -39,6 +39,7 @@ #include "editor/editor_undo_redo_manager.h" #include "editor/filesystem_dock.h" #include "editor/gui/editor_run_bar.h" +#include "editor/gui/editor_scene_tabs.h" #include "editor/gui/scene_tree_editor.h" #include "editor/inspector_dock.h" #include "editor/plugins/node_3d_editor_plugin.h" @@ -452,6 +453,7 @@ void EditorInterface::save_scene_as(const String &p_scene, bool p_with_preview) void EditorInterface::mark_scene_as_unsaved() { EditorUndoRedoManager::get_singleton()->set_history_as_unsaved(EditorNode::get_editor_data().get_current_edited_scene_history_id()); + EditorSceneTabs::get_singleton()->update_scene_tabs(); } void EditorInterface::save_all_scenes() { diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 6a016c217a..0dfbcd0e0d 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -58,8 +58,8 @@ void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_f MessageType message_type = p_type == ERR_HANDLER_WARNING ? MSG_TYPE_WARNING : MSG_TYPE_ERROR; - if (self->current != Thread::get_caller_id()) { - callable_mp(self, &EditorLog::add_message).call_deferred(err_str, message_type); + if (!Thread::is_main_thread()) { + MessageQueue::get_main_singleton()->push_callable(callable_mp(self, &EditorLog::add_message), err_str, message_type); } else { self->add_message(err_str, message_type); } @@ -557,8 +557,6 @@ EditorLog::EditorLog() { eh.errfunc = _error_handler; eh.userdata = this; add_error_handler(&eh); - - current = Thread::get_caller_id(); } void EditorLog::deinit() { diff --git a/editor/editor_log.h b/editor/editor_log.h index 7012a2a43c..9c652e912a 100644 --- a/editor/editor_log.h +++ b/editor/editor_log.h @@ -156,8 +156,6 @@ private: ErrorHandlerList eh; - Thread::ID current; - //void _dragged(const Point2& p_ofs); void _meta_clicked(const String &p_meta); void _clear_request(); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 1560fe5636..fd49920c6b 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -317,14 +317,10 @@ void EditorNode::shortcut_input(const Ref<InputEvent> &p_event) { Ref<InputEventKey> k = p_event; if ((k.is_valid() && k->is_pressed() && !k->is_echo()) || Object::cast_to<InputEventShortcut>(*p_event)) { - EditorPlugin *old_editor = editor_plugin_screen; - + bool is_handled = true; if (ED_IS_SHORTCUT("editor/filter_files", p_event)) { FileSystemDock::get_singleton()->focus_on_filter(); - get_tree()->get_root()->set_input_as_handled(); - } - - if (ED_IS_SHORTCUT("editor/editor_2d", p_event)) { + } else if (ED_IS_SHORTCUT("editor/editor_2d", p_event)) { editor_select(EDITOR_2D); } else if (ED_IS_SHORTCUT("editor/editor_3d", p_event)) { editor_select(EDITOR_3D); @@ -343,9 +339,10 @@ void EditorNode::shortcut_input(const Ref<InputEvent> &p_event) { } else if (ED_IS_SHORTCUT("editor/toggle_last_opened_bottom_panel", p_event)) { bottom_panel->toggle_last_opened_bottom_panel(); } else { + is_handled = false; } - if (old_editor != editor_plugin_screen) { + if (is_handled) { get_tree()->get_root()->set_input_as_handled(); } } @@ -679,6 +676,8 @@ void EditorNode::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { + singleton->active_plugins.clear(); + if (progress_dialog) { progress_dialog->queue_free(); } @@ -704,23 +703,7 @@ void EditorNode::_notification(int p_what) { } break; case NOTIFICATION_READY: { - { - started_timestamp = Time::get_singleton()->get_unix_time_from_system(); - _initializing_plugins = true; - Vector<String> addons; - if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) { - addons = GLOBAL_GET("editor_plugins/enabled"); - } - - for (int i = 0; i < addons.size(); i++) { - set_addon_plugin_enabled(addons[i], true); - } - _initializing_plugins = false; - - if (!pending_addons.is_empty()) { - EditorFileSystem::get_singleton()->connect("script_classes_updated", callable_mp(this, &EditorNode::_enable_pending_addons)); - } - } + started_timestamp = Time::get_singleton()->get_unix_time_from_system(); RenderingServer::get_singleton()->viewport_set_disable_2d(get_scene_root()->get_viewport_rid(), true); RenderingServer::get_singleton()->viewport_set_environment_mode(get_viewport()->get_viewport_rid(), RenderingServer::VIEWPORT_ENVIRONMENT_DISABLED); @@ -858,6 +841,23 @@ void EditorNode::_update_update_spinner() { OS::get_singleton()->set_low_processor_usage_mode(!update_continuously); } +void EditorNode::init_plugins() { + _initializing_plugins = true; + Vector<String> addons; + if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) { + addons = GLOBAL_GET("editor_plugins/enabled"); + } + + for (const String &addon : addons) { + set_addon_plugin_enabled(addon, true); + } + _initializing_plugins = false; + + if (!pending_addons.is_empty()) { + EditorFileSystem::get_singleton()->connect("script_classes_updated", callable_mp(this, &EditorNode::_enable_pending_addons), CONNECT_ONE_SHOT); + } +} + void EditorNode::_on_plugin_ready(Object *p_script, const String &p_activate_name) { Ref<Script> scr = Object::cast_to<Script>(p_script); if (scr.is_null()) { @@ -952,6 +952,7 @@ void EditorNode::_fs_changed() { // FIXME: Move this to a cleaner location, it's hacky to do this in _fs_changed. String export_error; Error err = OK; + // It's important to wait for the first scan to finish; otherwise, scripts or resources might not be imported. if (!export_defer.preset.is_empty() && !EditorFileSystem::get_singleton()->is_scanning()) { String preset_name = export_defer.preset; // Ensures export_project does not loop infinitely, because notifications may @@ -1735,7 +1736,7 @@ bool EditorNode::_validate_scene_recursive(const String &p_filename, Node *p_nod return false; } -int EditorNode::_save_external_resources() { +int EditorNode::_save_external_resources(bool p_also_save_external_data) { // Save external resources and its subresources if any was modified. int flg = 0; @@ -1781,6 +1782,16 @@ int EditorNode::_save_external_resources() { saved++; } + if (p_also_save_external_data) { + for (int i = 0; i < editor_data.get_editor_plugin_count(); i++) { + EditorPlugin *plugin = editor_data.get_editor_plugin(i); + if (!plugin->get_unsaved_status().is_empty()) { + plugin->save_external_data(); + saved++; + } + } + } + EditorUndoRedoManager::get_singleton()->set_history_as_saved(EditorUndoRedoManager::GLOBAL_HISTORY); return saved; @@ -1810,9 +1821,7 @@ static void _reset_animation_mixers(Node *p_node, List<Pair<AnimationMixer *, Re } void EditorNode::_save_scene(String p_file, int idx) { - if (!saving_scene.is_empty() && saving_scene == p_file) { - return; - } + ERR_FAIL_COND_MSG(!saving_scene.is_empty() && saving_scene == p_file, "Scene saved while already being saved!"); Node *scene = editor_data.get_edited_scene_root(idx); @@ -2726,10 +2735,10 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { ScriptEditor::get_singleton()->save_current_script(); } - const int saved = _save_external_resources(); + const int saved = _save_external_resources(true); if (saved > 0) { show_accept( - vformat(TTR("The current scene has no root node, but %d modified external resource(s) were saved anyway."), saved), + vformat(TTR("The current scene has no root node, but %d modified external resource(s) and/or plugin data were saved anyway."), saved), TTR("OK")); } else if (p_option == FILE_SAVE_AS_SCENE) { // Don't show this dialog when pressing Ctrl + S to avoid interfering with script saving. @@ -5249,6 +5258,14 @@ bool EditorNode::has_scenes_in_session() { return !scenes.is_empty(); } +void EditorNode::undo() { + trigger_menu_option(EDIT_UNDO, true); +} + +void EditorNode::redo() { + trigger_menu_option(EDIT_REDO, true); +} + bool EditorNode::ensure_main_scene(bool p_from_native) { pick_main_scene->set_meta("from_native", p_from_native); // Whether from play button or native run. String main_scene = GLOBAL_GET("application/run/main_scene"); @@ -5961,9 +5978,6 @@ void EditorNode::reload_instances_with_path_in_edited_scenes(const String &p_ins is_editable = owner->is_editable_instance(original_node); } - // For clear instance state for path recaching. - instantiated_node->set_scene_instance_state(Ref<SceneState>()); - bool original_node_is_displayed_folded = original_node->is_displayed_folded(); bool original_node_scene_instance_load_placeholder = original_node->get_scene_instance_load_placeholder(); @@ -6446,6 +6460,7 @@ EditorNode::EditorNode() { ED_SHORTCUT("editor/ungroup_selected_nodes", TTR("Ungroup Selected Node(s)"), KeyModifierMask::CMD_OR_CTRL | KeyModifierMask::SHIFT | Key::G); // Used in the GPUParticles/CPUParticles 2D/3D editor plugins. + // The shortcut is Ctrl + R even on macOS, as Cmd + R is used to run the current scene on macOS. ED_SHORTCUT("particles/restart_emission", TTR("Restart Emission"), KeyModifierMask::CTRL | Key::R); FileAccess::set_backup_save(EDITOR_GET("filesystem/on_save/safe_save_on_backup_then_rename")); @@ -6796,7 +6811,7 @@ EditorNode::EditorNode() { distraction_free = memnew(Button); distraction_free->set_theme_type_variation("FlatMenuButton"); ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KeyModifierMask::CTRL | KeyModifierMask::SHIFT | Key::F11); - ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KeyModifierMask::META | KeyModifierMask::CTRL | Key::D); + ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KeyModifierMask::META | KeyModifierMask::SHIFT | Key::D); ED_SHORTCUT_AND_COMMAND("editor/toggle_last_opened_bottom_panel", TTR("Toggle Last Opened Bottom Panel"), KeyModifierMask::CMD_OR_CTRL | Key::J); distraction_free->set_shortcut(ED_GET_SHORTCUT("editor/distraction_free_mode")); distraction_free->set_tooltip_text(TTR("Toggle distraction-free mode.")); diff --git a/editor/editor_node.h b/editor/editor_node.h index b7b4dff74e..7a26156ab8 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -573,7 +573,7 @@ private: void _update_undo_redo_allowed(); - int _save_external_resources(); + int _save_external_resources(bool p_also_save_external_data = false); void _set_current_scene(int p_idx); void _set_current_scene_nocheck(int p_idx); @@ -683,6 +683,7 @@ protected: public: // Public for use with callable_mp. + void init_plugins(); void _on_plugin_ready(Object *p_script, const String &p_activate_name); void editor_select(int p_which); @@ -915,6 +916,9 @@ public: bool has_scenes_in_session(); + void undo(); + void redo(); + int execute_and_show_output(const String &p_title, const String &p_path, const List<String> &p_arguments, bool p_close_on_ok = true, bool p_close_on_errors = false, String *r_output = nullptr); EditorNode(); diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 127bca9bbf..633f6abad9 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -435,7 +435,7 @@ void EditorPropertyArray::update_property() { editor->setup("Object"); new_prop = editor; } else { - new_prop = EditorInspector::instantiate_property_editor(nullptr, value_type, "", subtype_hint, subtype_hint_string, PROPERTY_USAGE_NONE); + new_prop = EditorInspector::instantiate_property_editor(this, value_type, "", subtype_hint, subtype_hint_string, PROPERTY_USAGE_NONE); } new_prop->set_selectable(false); new_prop->set_use_folding(is_using_folding()); @@ -1064,7 +1064,7 @@ void EditorPropertyDictionary::update_property() { editor->setup("Object"); new_prop = editor; } else { - new_prop = EditorInspector::instantiate_property_editor(nullptr, value_type, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE); + new_prop = EditorInspector::instantiate_property_editor(this, value_type, "", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE); } new_prop->set_selectable(false); new_prop->set_use_folding(is_using_folding()); diff --git a/editor/editor_quick_open.cpp b/editor/editor_quick_open.cpp index 0621e5f8d1..dfb87f43da 100644 --- a/editor/editor_quick_open.cpp +++ b/editor/editor_quick_open.cpp @@ -32,6 +32,7 @@ #include "core/os/keyboard.h" #include "editor/editor_node.h" +#include "editor/editor_string_names.h" #include "editor/themes/editor_scale.h" Rect2i EditorQuickOpen::prev_rect = Rect2i(); @@ -119,10 +120,12 @@ void EditorQuickOpen::_update_search() { sorter.sort(entries.ptrw(), entries.size()); } + const int class_icon_size = search_options->get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor)); const int entry_limit = MIN(entries.size(), 300); for (int i = 0; i < entry_limit; i++) { TreeItem *ti = search_options->create_item(root); ti->set_text(0, entries[i].path); + ti->set_icon_max_width(0, class_icon_size); ti->set_icon(0, *icons.lookup_ptr(entries[i].path.get_extension())); } diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp index 46fe2225d0..4cd44e3020 100644 --- a/editor/editor_resource_picker.cpp +++ b/editor/editor_resource_picker.cpp @@ -31,6 +31,7 @@ #include "editor_resource_picker.h" #include "editor/audio_stream_preview.h" +#include "editor/editor_help.h" #include "editor/editor_node.h" #include "editor/editor_quick_open.h" #include "editor/editor_resource_preview.h" @@ -504,6 +505,11 @@ void EditorResourcePicker::set_create_options(Object *p_menu_node) { int id = TYPE_BASE_ID + idx; edit_menu->add_icon_item(icon, vformat(TTR("New %s"), t), id); + HashMap<String, DocData::ClassDoc>::Iterator class_doc = EditorHelp::get_doc_data()->class_list.find(t); + if (class_doc) { + edit_menu->set_item_tooltip(-1, DTR(class_doc->value.brief_description)); + } + idx++; } @@ -1059,7 +1065,7 @@ EditorResourcePicker::EditorResourcePicker(bool p_hide_assign_button_controls) { } edit_button = memnew(Button); - edit_button->set_flat(true); + edit_button->set_flat(false); edit_button->set_toggle_mode(true); edit_button->connect(SceneStringName(pressed), callable_mp(this, &EditorResourcePicker::_update_menu)); add_child(edit_button); @@ -1262,8 +1268,6 @@ void EditorAudioStreamPicker::_preview_draw() { if (audio_stream->get_length() > 0 && size.width > 0) { rect.size.height *= 0.5; - stream_preview_rect->draw_rect(rect, Color(0, 0, 0, 1)); - Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(audio_stream); float preview_len = preview->get_length(); @@ -1319,8 +1323,8 @@ void EditorAudioStreamPicker::_preview_draw() { text = audio_stream->get_class().replace_first("AudioStream", ""); } - stream_preview_rect->draw_texture(icon, Point2i(EDSCALE * 2, rect.position.y + (rect.size.height - icon->get_height()) / 2), icon_modulate); - stream_preview_rect->draw_string(font, Point2i(EDSCALE * 2 + icon->get_width(), rect.position.y + font->get_ascent(font_size) + (rect.size.height - font->get_height(font_size)) / 2), text, HORIZONTAL_ALIGNMENT_CENTER, size.width - 4 * EDSCALE - icon->get_width()); + stream_preview_rect->draw_texture(icon, Point2i(EDSCALE * 4, rect.position.y + (rect.size.height - icon->get_height()) / 2), icon_modulate); + stream_preview_rect->draw_string(font, Point2i(EDSCALE * 4 + icon->get_width(), rect.position.y + font->get_ascent(font_size) + (rect.size.height - font->get_height(font_size)) / 2), text, HORIZONTAL_ALIGNMENT_CENTER, size.width - 4 * EDSCALE - icon->get_width(), font_size, get_theme_color(SNAME("font_color"), EditorStringName(Editor))); } EditorAudioStreamPicker::EditorAudioStreamPicker() : diff --git a/editor/editor_script.cpp b/editor/editor_script.cpp index a2af5a760e..30a4b6811c 100644 --- a/editor/editor_script.cpp +++ b/editor/editor_script.cpp @@ -32,7 +32,10 @@ #include "editor/editor_interface.h" #include "editor/editor_node.h" +#include "editor/editor_undo_redo_manager.h" +#include "editor/gui/editor_scene_tabs.h" #include "scene/main/node.h" +#include "scene/resources/packed_scene.h" void EditorScript::add_root_node(Node *p_node) { if (!EditorNode::get_singleton()) { @@ -41,11 +44,24 @@ void EditorScript::add_root_node(Node *p_node) { } if (EditorNode::get_singleton()->get_edited_scene()) { - EditorNode::add_io_error("EditorScript::add_root_node: " + TTR("There is an edited scene already.")); + EditorNode::add_io_error("EditorScript::add_root_node: " + TTR("The current scene already has a root node.")); return; } - //editor->set_edited_scene(p_node); + const String &scene_path = p_node->get_scene_file_path(); + if (!scene_path.is_empty()) { + Ref<PackedScene> scene = ResourceLoader::load(scene_path); + if (scene.is_valid()) { + memfree(scene->instantiate(PackedScene::GEN_EDIT_STATE_INSTANCE)); // Ensure node cache. + + p_node->set_scene_inherited_state(scene->get_state()); + p_node->set_scene_file_path(String()); + } + } + + EditorNode::get_singleton()->set_edited_scene(p_node); + EditorUndoRedoManager::get_singleton()->set_history_as_unsaved(EditorNode::get_editor_data().get_current_edited_scene_history_id()); + EditorSceneTabs::get_singleton()->update_scene_tabs(); } Node *EditorScript::get_scene() const { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 782d64621f..5d3cc80da9 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -423,9 +423,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "network/connection/engine_version_update_mode", int(default_update_mode), "Disable Update Checks,Check Newest Preview,Check Newest Stable,Check Newest Patch"); // Uses EngineUpdateLabel::UpdateMode. } - _initial_set("interface/editor/debug/enable_pseudolocalization", false); - set_restart_if_changed("interface/editor/debug/enable_pseudolocalization", true); - // Use pseudolocalization in editor. EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/use_embedded_menu", false, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/use_native_file_dialogs", false, "", PROPERTY_USAGE_DEFAULT) EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/expand_to_title", true, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) @@ -477,13 +474,18 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/vsync_mode", 1, "Disabled,Enabled,Adaptive,Mailbox") EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/update_continuously", false, "") +#ifdef ANDROID_ENABLED + EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/android/use_accumulated_input", true, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) + EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/android/use_input_buffering", true, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) +#endif + // Inspector EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "interface/inspector/max_array_dictionary_items_per_page", 20, "10,100,1") EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/inspector/show_low_level_opentype_features", false, "") EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/inspector/float_drag_speed", 5.0, "0.1,100,0.01") EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/inspector/nested_color_mode", 0, "Containers & Resources,Resources,External Resources") EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/inspector/delimitate_all_container_and_resources", true, "") - EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_ENUM, "interface/inspector/default_property_name_style", EditorPropertyNameProcessor::STYLE_CAPITALIZED, "Raw,Capitalized,Localized", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_ENUM, "interface/inspector/default_property_name_style", EditorPropertyNameProcessor::STYLE_CAPITALIZED, "Raw (e.g. \"z_index\"),Capitalized (e.g. \"Z Index\"),Localized (e.g. \"Z Index\")", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); // The lowest value is equal to the minimum float step for 32-bit floats. // The step must be set manually, as changing this setting should not change the step here. EDITOR_SETTING_USAGE(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/inspector/default_float_step", 0.001, "0.0000001,1,0.0000001", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); @@ -642,6 +644,9 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/behavior/navigation/drag_and_drop_selection", true); _initial_set("text_editor/behavior/navigation/stay_in_script_editor_on_node_selected", true); _initial_set("text_editor/behavior/navigation/open_script_when_connecting_signal_to_existing_method", true); + _initial_set("text_editor/behavior/navigation/use_default_word_separators", true); // Includes ´`~$^=+|<> General punctuation and CJK punctuation. + _initial_set("text_editor/behavior/navigation/use_custom_word_separators", false); + _initial_set("text_editor/behavior/navigation/custom_word_separators", ""); // Custom word separators. // Behavior: Indent EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "text_editor/behavior/indent/type", 0, "Tabs,Spaces") @@ -662,7 +667,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/script_list/sort_members_outline_alphabetically", false); // Completion - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "text_editor/completion/idle_parse_delay", 2.0, "0.1,10,0.01") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "text_editor/completion/idle_parse_delay", 1.5, "0.1,10,0.01") _initial_set("text_editor/completion/auto_brace_complete", true); _initial_set("text_editor/completion/code_complete_enabled", true); EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "text_editor/completion/code_complete_delay", 0.3, "0.01,5,0.01,or_greater") @@ -781,6 +786,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { // Animation _initial_set("editors/animation/autorename_animation_tracks", true); + _initial_set("editors/animation/confirm_insert_track", true); _initial_set("editors/animation/default_create_bezier_tracks", false); _initial_set("editors/animation/default_create_reset_tracks", true); _initial_set("editors/animation/onion_layers_past_color", Color(1, 0, 0)); @@ -1098,7 +1104,6 @@ fail: } void EditorSettings::setup_language() { - TranslationServer::get_singleton()->set_editor_pseudolocalization(get("interface/editor/debug/enable_pseudolocalization")); String lang = get("interface/editor/editor_language"); if (lang == "en") { return; // Default, nothing to do. diff --git a/editor/editor_settings_dialog.cpp b/editor/editor_settings_dialog.cpp index 6fd6a7103f..a71d43ad51 100644 --- a/editor/editor_settings_dialog.cpp +++ b/editor/editor_settings_dialog.cpp @@ -168,28 +168,17 @@ void EditorSettingsDialog::_notification(int p_what) { } void EditorSettingsDialog::shortcut_input(const Ref<InputEvent> &p_event) { - ERR_FAIL_COND(p_event.is_null()); - EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - const Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed()) { bool handled = false; if (ED_IS_SHORTCUT("ui_undo", p_event)) { - String action = undo_redo->get_current_action_name(); - if (!action.is_empty()) { - EditorNode::get_log()->add_message(vformat(TTR("Undo: %s"), action), EditorLog::MSG_TYPE_EDITOR); - } - undo_redo->undo(); + EditorNode::get_singleton()->undo(); handled = true; } if (ED_IS_SHORTCUT("ui_redo", p_event)) { - undo_redo->redo(); - String action = undo_redo->get_current_action_name(); - if (!action.is_empty()) { - EditorNode::get_log()->add_message(vformat(TTR("Redo: %s"), action), EditorLog::MSG_TYPE_EDITOR); - } + EditorNode::get_singleton()->redo(); handled = true; } diff --git a/editor/editor_undo_redo_manager.cpp b/editor/editor_undo_redo_manager.cpp index 94f76dbc41..55bc198dfb 100644 --- a/editor/editor_undo_redo_manager.cpp +++ b/editor/editor_undo_redo_manager.cpp @@ -104,8 +104,13 @@ int EditorUndoRedoManager::get_history_id_for_object(Object *p_object) const { } EditorUndoRedoManager::History &EditorUndoRedoManager::get_history_for_object(Object *p_object) { - int history_id = get_history_id_for_object(p_object); - ERR_FAIL_COND_V_MSG(pending_action.history_id != INVALID_HISTORY && history_id != pending_action.history_id, get_or_create_history(pending_action.history_id), vformat("UndoRedo history mismatch: expected %d, got %d.", pending_action.history_id, history_id)); + int history_id; + if (!forced_history) { + history_id = get_history_id_for_object(p_object); + ERR_FAIL_COND_V_MSG(pending_action.history_id != INVALID_HISTORY && history_id != pending_action.history_id, get_or_create_history(pending_action.history_id), vformat("UndoRedo history mismatch: expected %d, got %d.", pending_action.history_id, history_id)); + } else { + history_id = pending_action.history_id; + } History &history = get_or_create_history(history_id); if (pending_action.history_id == INVALID_HISTORY) { @@ -116,6 +121,11 @@ EditorUndoRedoManager::History &EditorUndoRedoManager::get_history_for_object(Ob return history; } +void EditorUndoRedoManager::force_fixed_history() { + ERR_FAIL_COND_MSG(pending_action.history_id == INVALID_HISTORY, "The current action has no valid history assigned."); + forced_history = true; +} + void EditorUndoRedoManager::create_action_for_history(const String &p_name, int p_history_id, UndoRedo::MergeMode p_mode, bool p_backward_undo_ops) { if (pending_action.history_id != INVALID_HISTORY) { // Nested action. @@ -236,6 +246,7 @@ void EditorUndoRedoManager::commit_action(bool p_execute) { return; // Empty action, do nothing. } + forced_history = false; is_committing = true; History &history = get_or_create_history(pending_action.history_id); @@ -469,6 +480,7 @@ void EditorUndoRedoManager::_bind_methods() { ClassDB::bind_method(D_METHOD("create_action", "name", "merge_mode", "custom_context", "backward_undo_ops"), &EditorUndoRedoManager::create_action, DEFVAL(UndoRedo::MERGE_DISABLE), DEFVAL((Object *)nullptr), DEFVAL(false)); ClassDB::bind_method(D_METHOD("commit_action", "execute"), &EditorUndoRedoManager::commit_action, DEFVAL(true)); ClassDB::bind_method(D_METHOD("is_committing_action"), &EditorUndoRedoManager::is_committing_action); + ClassDB::bind_method(D_METHOD("force_fixed_history"), &EditorUndoRedoManager::force_fixed_history); { MethodInfo mi; diff --git a/editor/editor_undo_redo_manager.h b/editor/editor_undo_redo_manager.h index e8c782871c..219d5e0702 100644 --- a/editor/editor_undo_redo_manager.h +++ b/editor/editor_undo_redo_manager.h @@ -67,6 +67,7 @@ private: HashMap<int, History> history_map; Action pending_action; + bool forced_history = false; bool is_committing = false; History *_get_newest_undo(); @@ -79,6 +80,7 @@ public: UndoRedo *get_history_undo_redo(int p_idx) const; int get_history_id_for_object(Object *p_object) const; History &get_history_for_object(Object *p_object); + void force_fixed_history(); void create_action_for_history(const String &p_name, int p_history_id, UndoRedo::MergeMode p_mode = UndoRedo::MERGE_DISABLE, bool p_backward_undo_ops = false); void create_action(const String &p_name = "", UndoRedo::MergeMode p_mode = UndoRedo::MERGE_DISABLE, Object *p_custom_context = nullptr, bool p_backward_undo_ops = false); diff --git a/editor/engine_update_label.cpp b/editor/engine_update_label.cpp index 958093410a..facbfc7c6b 100644 --- a/editor/engine_update_label.cpp +++ b/editor/engine_update_label.cpp @@ -146,7 +146,7 @@ void EngineUpdateLabel::_http_request_completed(int p_result, int p_response_cod break; } - if (int(release_type) == int(current_version_type) && release_index < current_version_index) { + if (int(release_type) == int(current_version_type) && release_index <= current_version_index) { break; } diff --git a/platform/macos/export/codesign.cpp b/editor/export/codesign.cpp index 72d496b04d..72d496b04d 100644 --- a/platform/macos/export/codesign.cpp +++ b/editor/export/codesign.cpp diff --git a/platform/macos/export/codesign.h b/editor/export/codesign.h index 49d53b376e..9a858c49ac 100644 --- a/platform/macos/export/codesign.h +++ b/editor/export/codesign.h @@ -28,8 +28,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /**************************************************************************/ -#ifndef MACOS_CODESIGN_H -#define MACOS_CODESIGN_H +#ifndef CODESIGN_H +#define CODESIGN_H // macOS code signature creation utility. // @@ -364,4 +364,4 @@ public: #endif // MODULE_REGEX_ENABLED -#endif // MACOS_CODESIGN_H +#endif // CODESIGN_H diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index 527544fea3..c0646dc572 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -797,10 +797,6 @@ String EditorExportPlatform::_export_customize(const String &p_path, LocalVector if (!customize_scenes_plugins.is_empty()) { for (Ref<EditorExportPlugin> &plugin : customize_scenes_plugins) { Node *customized = plugin->_customize_scene(node, p_path); - if (plugin->skipped) { - plugin->_clear(); - return String(); - } if (customized != nullptr) { node = customized; modified = true; @@ -834,10 +830,6 @@ String EditorExportPlatform::_export_customize(const String &p_path, LocalVector if (!customize_resources_plugins.is_empty()) { for (Ref<EditorExportPlugin> &plugin : customize_resources_plugins) { Ref<Resource> new_res = plugin->_customize_resource(res, p_path); - if (plugin->skipped) { - plugin->_clear(); - return String(); - } if (new_res.is_valid()) { modified = true; if (new_res != res) { @@ -1132,33 +1124,97 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & } //store everything in the export medium - int idx = 0; int total = paths.size(); + // idx is incremented at the beginning of the paths loop to easily allow + // for continue statements without accidentally skipping an increment. + int idx = total > 0 ? -1 : 0; for (const String &E : paths) { + idx++; String path = E; String type = ResourceLoader::get_resource_type(path); - if (FileAccess::exists(path + ".import")) { - // Before doing this, try to see if it can be customized. + bool has_import_file = FileAccess::exists(path + ".import"); + Ref<ConfigFile> config; + if (has_import_file) { + config.instantiate(); + err = config->load(path + ".import"); + if (err != OK) { + ERR_PRINT("Could not parse: '" + path + "', not exported."); + continue; + } + + String importer_type = config->get_value("remap", "importer"); + + if (importer_type == "skip") { + // Skip file. + continue; + } + } + + bool do_export = true; + for (int i = 0; i < export_plugins.size(); i++) { + if (GDVIRTUAL_IS_OVERRIDDEN_PTR(export_plugins[i], _export_file)) { + export_plugins.write[i]->_export_file_script(path, type, features_psa); + } else { + export_plugins.write[i]->_export_file(path, type, features); + } + if (p_so_func) { + for (int j = 0; j < export_plugins[i]->shared_objects.size(); j++) { + err = p_so_func(p_udata, export_plugins[i]->shared_objects[j]); + if (err != OK) { + return err; + } + } + } + + for (int j = 0; j < export_plugins[i]->extra_files.size(); j++) { + err = p_func(p_udata, export_plugins[i]->extra_files[j].path, export_plugins[i]->extra_files[j].data, idx, total, enc_in_filters, enc_ex_filters, key); + if (err != OK) { + return err; + } + if (export_plugins[i]->extra_files[j].remap) { + do_export = false; // If remap, do not. + path_remaps.push_back(path); + path_remaps.push_back(export_plugins[i]->extra_files[j].path); + } + } + + if (export_plugins[i]->skipped) { + do_export = false; + } + export_plugins.write[i]->_clear(); + + if (!do_export) { + break; + } + } + if (!do_export) { + continue; + } + + if (has_import_file) { + String importer_type = config->get_value("remap", "importer"); + + if (importer_type == "keep") { + // Just keep file as-is. + Vector<uint8_t> array = FileAccess::get_file_as_bytes(path); + err = p_func(p_udata, path, array, idx, total, enc_in_filters, enc_ex_filters, key); + + if (err != OK) { + return err; + } - String export_path = _export_customize(path, customize_resources_plugins, customize_scenes_plugins, export_cache, export_base_path, false); - if (export_path.is_empty()) { - // Skipped from plugin. continue; } + // Before doing this, try to see if it can be customized. + String export_path = _export_customize(path, customize_resources_plugins, customize_scenes_plugins, export_cache, export_base_path, false); + if (export_path != path) { // It was actually customized. // Since the original file is likely not recognized, just use the import system. - Ref<ConfigFile> config; - config.instantiate(); - err = config->load(path + ".import"); - if (err != OK) { - ERR_PRINT("Could not parse: '" + path + "', not exported."); - continue; - } config->set_value("remap", "type", ResourceLoader::get_resource_type(export_path)); // Erase all Paths. @@ -1194,33 +1250,6 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & } } else { // File is imported and not customized, replace by what it imports. - Ref<ConfigFile> config; - config.instantiate(); - err = config->load(path + ".import"); - if (err != OK) { - ERR_PRINT("Could not parse: '" + path + "', not exported."); - continue; - } - - String importer_type = config->get_value("remap", "importer"); - - if (importer_type == "skip") { - // Skip file. - continue; - } - - if (importer_type == "keep") { - // Just keep file as-is. - Vector<uint8_t> array = FileAccess::get_file_as_bytes(path); - err = p_func(p_udata, path, array, idx, total, enc_in_filters, enc_ex_filters, key); - - if (err != OK) { - return err; - } - - continue; - } - List<String> remaps; config->get_section_keys("remap", &remaps); @@ -1282,66 +1311,24 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & } } else { - // Customize. + // Just store it as it comes. - bool do_export = true; - for (int i = 0; i < export_plugins.size(); i++) { - if (GDVIRTUAL_IS_OVERRIDDEN_PTR(export_plugins[i], _export_file)) { - export_plugins.write[i]->_export_file_script(path, type, features_psa); - } else { - export_plugins.write[i]->_export_file(path, type, features); - } - if (p_so_func) { - for (int j = 0; j < export_plugins[i]->shared_objects.size(); j++) { - err = p_so_func(p_udata, export_plugins[i]->shared_objects[j]); - if (err != OK) { - return err; - } - } - } - - for (int j = 0; j < export_plugins[i]->extra_files.size(); j++) { - err = p_func(p_udata, export_plugins[i]->extra_files[j].path, export_plugins[i]->extra_files[j].data, idx, total, enc_in_filters, enc_ex_filters, key); - if (err != OK) { - return err; - } - if (export_plugins[i]->extra_files[j].remap) { - do_export = false; //if remap, do not - path_remaps.push_back(path); - path_remaps.push_back(export_plugins[i]->extra_files[j].path); - } - } + // Customization only happens if plugins did not take care of it before. + bool force_binary = convert_text_to_binary && (path.get_extension().to_lower() == "tres" || path.get_extension().to_lower() == "tscn"); + String export_path = _export_customize(path, customize_resources_plugins, customize_scenes_plugins, export_cache, export_base_path, force_binary); - if (export_plugins[i]->skipped) { - do_export = false; - } - export_plugins.write[i]->_clear(); - - if (!do_export) { - break; //apologies, not exporting - } + if (export_path != path) { + // Add a remap entry. + path_remaps.push_back(path); + path_remaps.push_back(export_path); } - //just store it as it comes - if (do_export) { - // Customization only happens if plugins did not take care of it before - bool force_binary = convert_text_to_binary && (path.get_extension().to_lower() == "tres" || path.get_extension().to_lower() == "tscn"); - String export_path = _export_customize(path, customize_resources_plugins, customize_scenes_plugins, export_cache, export_base_path, force_binary); - - if (export_path != path) { - // Add a remap entry - path_remaps.push_back(path); - path_remaps.push_back(export_path); - } - Vector<uint8_t> array = FileAccess::get_file_as_bytes(export_path); - err = p_func(p_udata, export_path, array, idx, total, enc_in_filters, enc_ex_filters, key); - if (err != OK) { - return err; - } + Vector<uint8_t> array = FileAccess::get_file_as_bytes(export_path); + err = p_func(p_udata, export_path, array, idx, total, enc_in_filters, enc_ex_filters, key); + if (err != OK) { + return err; } } - - idx++; } if (convert_text_to_binary || !customize_resources_plugins.is_empty() || !customize_scenes_plugins.is_empty()) { diff --git a/platform/macos/export/lipo.cpp b/editor/export/lipo.cpp index 2d77e5960d..9038994b06 100644 --- a/platform/macos/export/lipo.cpp +++ b/editor/export/lipo.cpp @@ -37,7 +37,7 @@ bool LipO::is_lipo(const String &p_path) { return (magic == 0xbebafeca || magic == 0xcafebabe || magic == 0xbfbafeca || magic == 0xcafebabf); } -bool LipO::create_file(const String &p_output_path, const PackedStringArray &p_files) { +bool LipO::create_file(const String &p_output_path, const Vector<String> &p_files) { close(); fa = FileAccess::open(p_output_path, FileAccess::WRITE); @@ -125,6 +125,100 @@ bool LipO::create_file(const String &p_output_path, const PackedStringArray &p_f return true; } +bool LipO::create_file(const String &p_output_path, const Vector<String> &p_files, const Vector<Vector2i> &p_cputypes) { + close(); + + fa = FileAccess::open(p_output_path, FileAccess::WRITE); + ERR_FAIL_COND_V_MSG(fa.is_null(), false, vformat("LipO: Can't open file: \"%s\".", p_output_path)); + ERR_FAIL_COND_V(p_files.size() != p_cputypes.size(), false); + + uint64_t max_size = 0; + for (int i = 0; i < p_files.size(); i++) { + Ref<FileAccess> fb = FileAccess::open(p_files[i], FileAccess::READ); + if (fb.is_null()) { + close(); + ERR_FAIL_V_MSG(false, vformat("LipO: Can't open file: \"%s\".", p_files[i])); + } + + { + FatArch arch; + MachO mh; + if (MachO::is_macho(p_files[i]) && mh.open_file(p_files[i])) { + arch.cputype = mh.get_cputype(); + arch.cpusubtype = mh.get_cpusubtype(); + arch.offset = 0; + arch.size = mh.get_size(); + arch.align = mh.get_align(); + ERR_FAIL_V_MSG(arch.cputype != (uint32_t)p_cputypes[i].x || arch.cpusubtype != (uint32_t)p_cputypes[i].y, vformat("Mismatching MachO architecture: \"%s\".", p_files[i])); + } else { + arch.cputype = (uint32_t)p_cputypes[i].x; + arch.cpusubtype = (uint32_t)p_cputypes[i].y; + arch.offset = 0; + arch.size = fb->get_length(); + arch.align = 0x03; + } + max_size += arch.size; + + archs.push_back(arch); + } + } + + // Write header. + bool is_64 = (max_size >= std::numeric_limits<uint32_t>::max()); + if (is_64) { + fa->store_32(0xbfbafeca); + } else { + fa->store_32(0xbebafeca); + } + fa->store_32(BSWAP32(archs.size())); + uint64_t offset = archs.size() * (is_64 ? 32 : 20) + 8; + for (int i = 0; i < archs.size(); i++) { + archs.write[i].offset = offset + PAD(offset, uint64_t(1) << archs[i].align); + if (is_64) { + fa->store_32(BSWAP32(archs[i].cputype)); + fa->store_32(BSWAP32(archs[i].cpusubtype)); + fa->store_64(BSWAP64(archs[i].offset)); + fa->store_64(BSWAP64(archs[i].size)); + fa->store_32(BSWAP32(archs[i].align)); + fa->store_32(0); + } else { + fa->store_32(BSWAP32(archs[i].cputype)); + fa->store_32(BSWAP32(archs[i].cpusubtype)); + fa->store_32(BSWAP32(archs[i].offset)); + fa->store_32(BSWAP32(archs[i].size)); + fa->store_32(BSWAP32(archs[i].align)); + } + offset = archs[i].offset + archs[i].size; + } + + // Write files and padding. + for (int i = 0; i < archs.size(); i++) { + Ref<FileAccess> fb = FileAccess::open(p_files[i], FileAccess::READ); + if (fb.is_null()) { + close(); + ERR_FAIL_V_MSG(false, vformat("LipO: Can't open file: \"%s\".", p_files[i])); + } + uint64_t cur = fa->get_position(); + for (uint64_t j = cur; j < archs[i].offset; j++) { + fa->store_8(0); + } + int pages = archs[i].size / 4096; + int remain = archs[i].size % 4096; + unsigned char step[4096]; + for (int j = 0; j < pages; j++) { + uint64_t br = fb->get_buffer(step, 4096); + if (br > 0) { + fa->store_buffer(step, br); + } + } + uint64_t br = fb->get_buffer(step, remain); + if (br > 0) { + fa->store_buffer(step, br); + } + } + return true; +} + bool LipO::open_file(const String &p_path) { close(); @@ -198,6 +292,18 @@ int LipO::get_arch_count() const { return archs.size(); } +uint32_t LipO::get_arch_cputype(int p_index) const { + ERR_FAIL_COND_V_MSG(fa.is_null(), 0, "LipO: File not opened."); + ERR_FAIL_INDEX_V(p_index, archs.size(), 0); + return archs[p_index].cputype; +} + +uint32_t LipO::get_arch_cpusubtype(int p_index) const { + ERR_FAIL_COND_V_MSG(fa.is_null(), 0, "LipO: File not opened."); + ERR_FAIL_INDEX_V(p_index, archs.size(), 0); + return archs[p_index].cpusubtype; +} + bool LipO::extract_arch(int p_index, const String &p_path) { ERR_FAIL_COND_V_MSG(fa.is_null(), false, "LipO: File not opened."); ERR_FAIL_INDEX_V(p_index, archs.size(), false); diff --git a/platform/macos/export/lipo.h b/editor/export/lipo.h index e375fc5a66..0b65959bc5 100644 --- a/platform/macos/export/lipo.h +++ b/editor/export/lipo.h @@ -28,8 +28,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /**************************************************************************/ -#ifndef MACOS_LIPO_H -#define MACOS_LIPO_H +#ifndef LIPO_H +#define LIPO_H // Universal / Universal 2 fat binary file creator and extractor. @@ -57,10 +57,13 @@ class LipO : public RefCounted { public: static bool is_lipo(const String &p_path); - bool create_file(const String &p_output_path, const PackedStringArray &p_files); + bool create_file(const String &p_output_path, const Vector<String> &p_files); + bool create_file(const String &p_output_path, const Vector<String> &p_files, const Vector<Vector2i> &p_cputypes); bool open_file(const String &p_path); int get_arch_count() const; + uint32_t get_arch_cputype(int p_index) const; + uint32_t get_arch_cpusubtype(int p_index) const; bool extract_arch(int p_index, const String &p_path); void close(); @@ -68,4 +71,4 @@ public: ~LipO(); }; -#endif // MACOS_LIPO_H +#endif // LIPO_H diff --git a/platform/macos/export/macho.cpp b/editor/export/macho.cpp index a829774a88..a829774a88 100644 --- a/platform/macos/export/macho.cpp +++ b/editor/export/macho.cpp diff --git a/platform/macos/export/macho.h b/editor/export/macho.h index a84de7de60..e7393a2fee 100644 --- a/platform/macos/export/macho.h +++ b/editor/export/macho.h @@ -28,8 +28,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /**************************************************************************/ -#ifndef MACOS_MACHO_H -#define MACOS_MACHO_H +#ifndef MACHO_H +#define MACHO_H // Mach-O binary object file format parser and editor. @@ -39,6 +39,7 @@ #include "core/object/ref_counted.h" class MachO : public RefCounted { +public: struct MachHeader { uint32_t cputype; uint32_t cpusubtype; @@ -98,6 +99,21 @@ class MachO : public RefCounted { LC_LINKER_OPTIMIZATION_HINT = 0x0000002e, LC_VERSION_MIN_TVOS = 0x0000002f, LC_VERSION_MIN_WATCHOS = 0x00000030, + LC_BUILD_VERSION = 0x00000032, + }; + + enum PlatformID { + PLATFORM_UNKNOWN = 0, + PLATFORM_MACOS = 1, + PLATFORM_IOS = 2, + PLATFORM_TVOS = 3, + PLATFORM_WATCHOS = 4, + PLATFORM_BRIDGEOS = 5, + PLATFORM_MACCATALYST = 6, + PLATFORM_IOSSIMULATOR = 7, + PLATFORM_TVOSSIMULATOR = 8, + PLATFORM_WATCHOSSIMULATOR = 9, + PLATFORM_DRIVERKIT = 10, }; struct LoadCommandHeader { @@ -158,6 +174,7 @@ class MachO : public RefCounted { uint32_t reserved3; }; +private: Ref<FileAccess> fa; bool swap = false; @@ -208,4 +225,4 @@ public: bool set_signature_size(uint64_t p_size); }; -#endif // MACOS_MACHO_H +#endif // MACHO_H diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 1c22ecd673..d4bd97a393 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -200,33 +200,6 @@ Ref<Texture2D> FileSystemDock::_get_tree_item_icon(bool p_is_valid, const String } } -String FileSystemDock::_get_entry_script_icon(const EditorFileSystemDirectory *p_dir, int p_file) { - const PackedStringArray &deps = p_dir->get_file_deps(p_file); - if (deps.is_empty()) { - return String(); - } - - const String &script_path = deps[0]; // Assuming the first dependency is a script. - if (script_path.is_empty() || !ClassDB::is_parent_class(ResourceLoader::get_resource_type(script_path), SNAME("Script"))) { - return String(); - } - - String *cached = icon_cache.getptr(script_path); - if (cached) { - return *cached; - } - - HashMap<String, String>::Iterator I; - int script_file; - EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(script_path, &script_file); - if (efsd) { - I = icon_cache.insert(script_path, efsd->get_file_script_class_icon_path(script_file)); - } else { - I = icon_cache.insert(script_path, String()); - } - return I->value; -} - bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory *p_dir, Vector<String> &uncollapsed_paths, bool p_select_in_favorites, bool p_unfold_path) { bool parent_should_expand = false; @@ -316,7 +289,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory FileInfo fi; fi.name = p_dir->get_file(i); fi.type = p_dir->get_file_type(i); - fi.icon_path = _get_entry_script_icon(p_dir, i); + fi.icon_path = p_dir->get_file_icon_path(i); fi.import_broken = !p_dir->get_file_import_is_valid(i); fi.modified_time = p_dir->get_file_modified_time(i); @@ -414,8 +387,6 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo updating_tree = true; TreeItem *root = tree->create_item(); - icon_cache.clear(); - // Handles the favorites. TreeItem *favorites_item = tree->create_item(root); favorites_item->set_icon(0, get_editor_theme_icon(SNAME("Favorites"))); @@ -463,7 +434,7 @@ void FileSystemDock::_update_tree(const Vector<String> &p_uncollapsed_paths, boo int index; EditorFileSystemDirectory *dir = EditorFileSystem::get_singleton()->find_file(favorite, &index); if (dir) { - icon = _get_tree_item_icon(dir->get_file_import_is_valid(index), dir->get_file_type(index), _get_entry_script_icon(dir, index)); + icon = _get_tree_item_icon(dir->get_file_import_is_valid(index), dir->get_file_type(index), dir->get_file_icon_path(index)); } else { icon = get_editor_theme_icon(SNAME("File")); } @@ -575,7 +546,7 @@ void FileSystemDock::_notification(int p_what) { case NOTIFICATION_PROCESS: { if (EditorFileSystem::get_singleton()->is_scanning()) { - scanning_progress->set_value(EditorFileSystem::get_singleton()->get_scanning_progress() * 100); + scanning_progress->set_value(EditorFileSystem::get_singleton()->get_scanning_progress() * 100.0f); } } break; @@ -787,6 +758,8 @@ void FileSystemDock::navigate_to_path(const String &p_path) { // Ensure that the FileSystem dock is visible. EditorDockManager::get_singleton()->focus_dock(this); + import_dock_needs_update = true; + _update_import_dock(); } void FileSystemDock::_file_list_thumbnail_done(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, const Variant &p_udata) { @@ -1017,7 +990,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { fi.path = favorite; if (efd) { fi.type = efd->get_file_type(index); - fi.icon_path = _get_entry_script_icon(efd, index); + fi.icon_path = efd->get_file_icon_path(index); fi.import_broken = !efd->get_file_import_is_valid(index); fi.modified_time = efd->get_file_modified_time(index); } else { @@ -1110,7 +1083,7 @@ void FileSystemDock::_update_file_list(bool p_keep_selection) { fi.name = efd->get_file(i); fi.path = directory.path_join(fi.name); fi.type = efd->get_file_type(i); - fi.icon_path = _get_entry_script_icon(efd, i); + fi.icon_path = efd->get_file_icon_path(i); fi.import_broken = !efd->get_file_import_is_valid(i); fi.modified_time = efd->get_file_modified_time(i); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 3fbff3ef19..959ace8eba 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -142,7 +142,6 @@ private: FILE_NEW_SCENE, }; - HashMap<String, String> icon_cache; HashMap<String, Color> folder_colors; Dictionary assigned_folder_colors; @@ -250,7 +249,6 @@ private: void _reselect_items_selected_on_drag_begin(bool reset = false); Ref<Texture2D> _get_tree_item_icon(bool p_is_valid, const String &p_file_type, const String &p_icon_path); - String _get_entry_script_icon(const EditorFileSystemDirectory *p_dir, int p_file); bool _create_tree(TreeItem *p_parent, EditorFileSystemDirectory *p_dir, Vector<String> &uncollapsed_paths, bool p_select_in_favorites, bool p_unfold_path = false); void _update_tree(const Vector<String> &p_uncollapsed_paths = Vector<String>(), bool p_uncollapse_root = false, bool p_select_in_favorites = false, bool p_unfold_path = false); void _navigate_to_path(const String &p_path, bool p_select_in_favorites = false); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index 18ac4074da..6cfc035fc9 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -369,6 +369,7 @@ void GroupsEditor::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { filter->set_right_icon(get_editor_theme_icon("Search")); add->set_icon(get_editor_theme_icon("Add")); + _update_tree(); } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (groups_dirty && is_visible_in_tree()) { diff --git a/editor/gui/editor_bottom_panel.cpp b/editor/gui/editor_bottom_panel.cpp index f2c4a13e05..3e74a3c94e 100644 --- a/editor/gui/editor_bottom_panel.cpp +++ b/editor/gui/editor_bottom_panel.cpp @@ -178,7 +178,11 @@ Button *EditorBottomPanel::add_item(String p_text, Control *p_item, const Ref<Sh bpi.button = tb; bpi.control = p_item; bpi.name = p_text; - items.push_back(bpi); + if (p_at_front) { + items.insert(0, bpi); + } else { + items.push_back(bpi); + } return tb; } diff --git a/editor/gui/editor_run_bar.cpp b/editor/gui/editor_run_bar.cpp index af044cbfce..4cc2d1145e 100644 --- a/editor/gui/editor_run_bar.cpp +++ b/editor/gui/editor_run_bar.cpp @@ -66,9 +66,10 @@ void EditorRunBar::_notification(int p_what) { write_movie_button->set_icon(get_editor_theme_icon(SNAME("MainMovieWrite"))); // This button behaves differently, so color it as such. write_movie_button->begin_bulk_theme_override(); - write_movie_button->add_theme_color_override("icon_normal_color", Color(1, 1, 1, 0.7)); - write_movie_button->add_theme_color_override("icon_pressed_color", Color(0, 0, 0, 0.84)); - write_movie_button->add_theme_color_override("icon_hover_color", Color(1, 1, 1, 0.9)); + write_movie_button->add_theme_color_override("icon_normal_color", get_theme_color(SNAME("movie_writer_icon_normal"), EditorStringName(EditorStyles))); + write_movie_button->add_theme_color_override("icon_pressed_color", get_theme_color(SNAME("movie_writer_icon_pressed"), EditorStringName(EditorStyles))); + write_movie_button->add_theme_color_override("icon_hover_color", get_theme_color(SNAME("movie_writer_icon_hover"), EditorStringName(EditorStyles))); + write_movie_button->add_theme_color_override("icon_hover_pressed_color", get_theme_color(SNAME("movie_writer_icon_hover_pressed"), EditorStringName(EditorStyles))); write_movie_button->end_bulk_theme_override(); } break; } diff --git a/editor/gui/editor_validation_panel.cpp b/editor/gui/editor_validation_panel.cpp index 969cb43952..a4ca743bd7 100644 --- a/editor/gui/editor_validation_panel.cpp +++ b/editor/gui/editor_validation_panel.cpp @@ -66,6 +66,7 @@ void EditorValidationPanel::add_line(int p_id, const String &p_valid_message) { Label *label = memnew(Label); message_container->add_child(label); label->set_custom_minimum_size(Size2(200 * EDSCALE, 0)); + label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); valid_messages[p_id] = p_valid_message; diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index eea2511cc5..a3e62c298f 100644 --- a/editor/gui/scene_tree_editor.cpp +++ b/editor/gui/scene_tree_editor.cpp @@ -589,7 +589,6 @@ void SceneTreeEditor::_node_removed(Node *p_node) { if (p_node == selected) { selected = nullptr; - emit_signal(SNAME("node_selected")); } } diff --git a/editor/icons/2D.svg b/editor/icons/2D.svg index 9908006fe3..ca67a538da 100644 --- a/editor/icons/2D.svg +++ b/editor/icons/2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.308 15-2-2a1 1 0 0 1 1.414-1.414l.293.293V3.293h8.586L11.308 3a1 1 0 0 1 1.415-1.414l2 2a1 1 0 0 1 0 1.414l-2 2a1 1 0 0 1-1.415-1.414l.293-.293H5.015v6.586l.294-.293A1 1 0 0 1 6.723 13l-2 2a1 1 0 0 1-1.414 0z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m3.308 15-2-2a1 1 0 0 1 1.414-1.414l.293.293V3.293h8.586L11.308 3a1 1 0 0 1 1.415-1.414l2 2a1 1 0 0 1 0 1.414l-2 2a1 1 0 0 1-1.415-1.414l.293-.293H5.015v6.586l.294-.293A1 1 0 0 1 6.723 13l-2 2a1 1 0 0 1-1.414 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/3D.svg b/editor/icons/3D.svg index b9b17b82ee..6b82223b1a 100644 --- a/editor/icons/3D.svg +++ b/editor/icons/3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.309 1.291-2 2a1 1 0 0 0 1.414 1.414l.293-.293v8.586h8.586l-.293.293a1 1 0 0 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2a1 1 0 0 0-1.414 1.414l.293.293H6.43l5.586-5.586v.416a1 1 0 0 0 2 0v-2.83a1 1 0 0 0-1-1h-2.83a1 1 0 0 0 0 2h.416L5.016 9.584V4.412l.293.293a1 1 0 0 0 1.414-1.414l-2-2a1 1 0 0 0-1.414 0z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m3.309 1.291-2 2a1 1 0 0 0 1.414 1.414l.293-.293v8.586h8.586l-.293.293a1 1 0 0 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2a1 1 0 0 0-1.414 1.414l.293.293H6.43l5.586-5.586v.416a1 1 0 0 0 2 0v-2.83a1 1 0 0 0-1-1h-2.83a1 1 0 0 0 0 2h.416L5.016 9.584V4.412l.293.293a1 1 0 0 0 1.414-1.414l-2-2a1 1 0 0 0-1.414 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AABB.svg b/editor/icons/AABB.svg index 94bf00d7bf..01866f5efd 100644 --- a/editor/icons/AABB.svg +++ b/editor/icons/AABB.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a3 3 0 0 0-2.223 5.012A3 3 0 0 0 3 12h2V7h2V1H5zm6 0v5.174A3 3 0 0 0 10 6V4H8v8h2a3 3 0 0 0 3-3 3 3 0 0 0 0-6V1h-2zM5 3v2a1 1 0 0 1 0-2zm8 2a1 1 0 0 1 0 2zM3 8v2a1 1 0 0 1 0-2zm7 0a1 1 0 0 1 0 2z" fill="#ee5677"/><path d="M8 4v8h2a3 3 0 0 0 0-6V4zM3 6a3 3 0 0 0 0 6h2V6zm0 2v2a1 1 0 0 1 0-2zm7 0a1 1 0 0 1 0 2z" fill="#fff" fill-opacity=".235"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#ee5677" d="M5 1a3 3 0 0 0-2.223 5.012A3 3 0 0 0 3 12h2V7h2V1H5zm6 0v5.174A3 3 0 0 0 10 6V4H8v8h2a3 3 0 0 0 3-3 3 3 0 0 0 0-6V1h-2zM5 3v2a1 1 0 0 1 0-2zm8 2a1 1 0 0 1 0 2zM3 8v2a1 1 0 0 1 0-2zm7 0a1 1 0 0 1 0 2z"/><path fill="#fff" fill-opacity=".235" d="M8 4v8h2a3 3 0 0 0 0-6V4zM3 6a3 3 0 0 0 0 6h2V6zm0 2v2a1 1 0 0 1 0-2zm7 0a1 1 0 0 1 0 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AcceptDialog.svg b/editor/icons/AcceptDialog.svg index 5d60a318b1..83b42102c8 100644 --- a/editor/icons/AcceptDialog.svg +++ b/editor/icons/AcceptDialog.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm9.475 1.637 1.414 1.414L6.939 13l-2.828-2.828 1.414-1.414 1.415 1.414z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm9.475 1.637 1.414 1.414L6.939 13l-2.828-2.828 1.414-1.414 1.415 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ActionCopy.svg b/editor/icons/ActionCopy.svg index fe47a732da..909c6c105d 100644 --- a/editor/icons/ActionCopy.svg +++ b/editor/icons/ActionCopy.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h1V3h9V2a1 1 0 0 0-1-1zm3 3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1zm1 2h7v7H6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h1V3h9V2a1 1 0 0 0-1-1zm3 3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1zm1 2h7v7H6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ActionCut.svg b/editor/icons/ActionCut.svg index e1f21534fe..5ea64e7f57 100644 --- a/editor/icons/ActionCut.svg +++ b/editor/icons/ActionCut.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3.635.51C.67 3.376 4.17 9.439 6.402 9.305l.442.765-.565.979a3 3 0 1 0 .315 3.449L8 11.998l1.406 2.5a3 3 0 1 0 .315-3.45l-.567-.982.442-.765c2.232.134 5.731-5.93 2.767-8.795L8 8zM4 12a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm8 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3.635.51C.67 3.376 4.17 9.439 6.402 9.305l.442.765-.565.979a3 3 0 1 0 .315 3.449L8 11.998l1.406 2.5a3 3 0 1 0 .315-3.45l-.567-.982.442-.765c2.232.134 5.731-5.93 2.767-8.795L8 8zM4 12a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm8 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ActionPaste.svg b/editor/icons/ActionPaste.svg index bdfb849c41..4ac0c25147 100644 --- a/editor/icons/ActionPaste.svg +++ b/editor/icons/ActionPaste.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1h-3.184a3 3 0 0 0-5.632 0zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM3 5h2v2h6V5h2v8H3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1h-3.184a3 3 0 0 0-5.632 0zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM3 5h2v2h6V5h2v8H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Add.svg b/editor/icons/Add.svg index afad08a2e0..eaeb043591 100644 --- a/editor/icons/Add.svg +++ b/editor/icons/Add.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Anchor.svg b/editor/icons/Anchor.svg index e6dfdff010..30470ca4af 100644 --- a/editor/icons/Anchor.svg +++ b/editor/icons/Anchor.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 7H5v2h2v3.898a5 5 0 0 1-3.828-3.603l-1.934.518a7 7 0 0 0 13.524 0l-1.938-.52A5 5 0 0 1 9 12.896V9h2V7H9v-.176a3 3 0 1 0-2 0zm1-4a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 7H5v2h2v3.898a5 5 0 0 1-3.828-3.603l-1.934.518a7 7 0 0 0 13.524 0l-1.938-.52A5 5 0 0 1 9 12.896V9h2V7H9v-.176a3 3 0 1 0-2 0zm1-4a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimatableBody2D.svg b/editor/icons/AnimatableBody2D.svg index 0403edca28..5dcf707d63 100644 --- a/editor/icons/AnimatableBody2D.svg +++ b/editor/icons/AnimatableBody2D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11 4h2v2h-2zm0 7h2v2h-2zm-7 0h2v2H4z" fill="#8da5f3"/><g fill="none" stroke="#8da5f3" stroke-linecap="round"><path d="M2.5 8v5A1.5 1.5 0 0 0 4 14.5h9a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5H8"/><path d="m2 2 6 6M7 1.75l2 2M1.75 7l2 2" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M11 4h2v2h-2zm0 7h2v2h-2zm-7 0h2v2H4z"/><g fill="none" stroke="#8da5f3" stroke-linecap="round"><path d="M2.5 8v5A1.5 1.5 0 0 0 4 14.5h9a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5H8"/><path stroke-width="1.5" d="m2 2 6 6M7 1.75l2 2M1.75 7l2 2"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AnimatableBody3D.svg b/editor/icons/AnimatableBody3D.svg index 1288a429db..df08da843a 100644 --- a/editor/icons/AnimatableBody3D.svg +++ b/editor/icons/AnimatableBody3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11 4h2v2h-2zm0 7h2v2h-2zm-7 0h2v2H4z" fill="#fc7f7f"/><g fill="none" stroke="#fc7f7f" stroke-linecap="round"><path d="M2.5 8v5A1.5 1.5 0 0 0 4 14.5h9a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5H8"/><path d="m2 2 6 6M7 1.75l2 2M1.75 7l2 2" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M11 4h2v2h-2zm0 7h2v2h-2zm-7 0h2v2H4z"/><g fill="none" stroke="#fc7f7f" stroke-linecap="round"><path d="M2.5 8v5A1.5 1.5 0 0 0 4 14.5h9a1.5 1.5 0 0 0 1.5-1.5V4A1.5 1.5 0 0 0 13 2.5H8"/><path stroke-width="1.5" d="m2 2 6 6M7 1.75l2 2M1.75 7l2 2"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AnimatedSprite2D.svg b/editor/icons/AnimatedSprite2D.svg index 187bc461bf..1cc68f4a97 100644 --- a/editor/icons/AnimatedSprite2D.svg +++ b/editor/icons/AnimatedSprite2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#8da5f3"><path d="M7 0a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z" fill-opacity=".4"/><path d="M5 2a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v7a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2z" fill-opacity=".6"/><path d="M3 4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM2 9a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm7 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm0 3a2.5 2 0 0 1-5 0z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#8da5f3"><path fill-opacity=".4" d="M7 0a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/><path fill-opacity=".6" d="M5 2a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v7a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2z"/><path d="M3 4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM2 9a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm7 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm0 3a2.5 2 0 0 1-5 0z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AnimatedSprite3D.svg b/editor/icons/AnimatedSprite3D.svg index 8c4074388a..7c6f635821 100644 --- a/editor/icons/AnimatedSprite3D.svg +++ b/editor/icons/AnimatedSprite3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="M7 0a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z" fill-opacity=".4"/><path d="M5 2a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v7a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2z" fill-opacity=".6"/><path d="M3 4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM2 9a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm7 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm0 3a2.5 2 0 0 1-5 0z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fc7f7f"><path fill-opacity=".4" d="M7 0a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/><path fill-opacity=".6" d="M5 2a2 2 0 0 0-2 2h7a2 2 0 0 1 2 2v7a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2z"/><path d="M3 4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM2 9a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm7 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm0 3a2.5 2 0 0 1-5 0z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AnimatedTexture.svg b/editor/icons/AnimatedTexture.svg index eead92e933..e0b1c62647 100644 --- a/editor/icons/AnimatedTexture.svg +++ b/editor/icons/AnimatedTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Animation.svg b/editor/icons/Animation.svg index 55d4809bdb..fac7cc8192 100644 --- a/editor/icons/Animation.svg +++ b/editor/icons/Animation.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 14a2 2 0 0 0 2 2h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 1 0-2 4.465zM8 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm3.441 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4.488 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm.024 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.904 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 11a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 14a2 2 0 0 0 2 2h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 1 0-2 4.465zM8 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm3.441 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4.488 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm.024 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.904 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 11a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationAutoFit.svg b/editor/icons/AnimationAutoFit.svg index fdde20d464..7162c7519a 100644 --- a/editor/icons/AnimationAutoFit.svg +++ b/editor/icons/AnimationAutoFit.svg @@ -1,2 +1 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m15.477 0.99862v14h-2.1017v-14zm-14.954 14.003v-14h2.1017v14zm11.946-6.823-3.5-3v6zm-8.9343 0.023985 3.5 3v-2h2.1464l0.00376-2h-2.1501v-2zm4.6005-7.0028c8.9077 15.09 8.9077 15.09 0 0zm-0.23085 14.003c-8.9077-15.09-8.9077-15.09 0 0z" fill="#e0e0e0" stroke-width="1.0251"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m15.477 0.99862v14h-2.1017v-14zm-14.954 14.003v-14h2.1017v14zm11.946-6.823-3.5-3v6zm-8.9343 0.023985 3.5 3v-2h2.1464l0.00376-2h-2.1501v-2zm4.6005-7.0028c8.9077 15.09 8.9077 15.09 0 0zm-0.23085 14.003c-8.9077-15.09-8.9077-15.09 0 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationAutoFitBezier.svg b/editor/icons/AnimationAutoFitBezier.svg index 1a79255c19..acddd6802c 100644 --- a/editor/icons/AnimationAutoFitBezier.svg +++ b/editor/icons/AnimationAutoFitBezier.svg @@ -1,2 +1 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m12.469 8.1784-3.5-3v6zm-8.9343 0.023985 3.5 3v-2h2.1464l0.00376-2h-2.1501v-2zm9.4532 0.53338c-10.763 8.9077-10.763 8.9077 0 0zm0 7h-9.9859v-2h9.9859zm-9.9806-8.5564c10.763-8.9077 10.763-8.9077 0 0zm0-7h9.9859v2h-9.9859zm5.4684 2.8277c8.9077 10.763 8.9077 10.763 0 0zm7 0v9.9859h-2v-9.9859zm-7.8862 9.9859c-8.9077-10.763-8.9077-10.763 0 0zm-7 0v-9.9859h2v9.9859z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m12.469 8.1784-3.5-3v6zm-8.9343 0.023985 3.5 3v-2h2.1464l0.00376-2h-2.1501v-2zm9.4532 0.53338c-10.763 8.9077-10.763 8.9077 0 0zm0 7h-9.9859v-2h9.9859zm-9.9806-8.5564c10.763-8.9077 10.763-8.9077 0 0zm0-7h9.9859v2h-9.9859zm5.4684 2.8277c8.9077 10.763 8.9077 10.763 0 0zm7 0v9.9859h-2v-9.9859zm-7.8862 9.9859c-8.9077-10.763-8.9077-10.763 0 0zm-7 0v-9.9859h2v9.9859z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationFilter.svg b/editor/icons/AnimationFilter.svg index 0924f5a200..bc9bec547f 100644 --- a/editor/icons/AnimationFilter.svg +++ b/editor/icons/AnimationFilter.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14.783 1.55H1.77a.454.454 0 0 0-.318.779l4.615 4.507v7.086a.45.45 0 0 0 .738.354l3.511-2.812a.454.454 0 0 0 .17-.354V6.836L15.1 2.33a.454.454 0 0 0-.317-.779z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14.783 1.55H1.77a.454.454 0 0 0-.318.779l4.615 4.507v7.086a.45.45 0 0 0 .738.354l3.511-2.812a.454.454 0 0 0 .17-.354V6.836L15.1 2.33a.454.454 0 0 0-.317-.779z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationLibrary.svg b/editor/icons/AnimationLibrary.svg index 63ed97b4fc..5e0219314a 100644 --- a/editor/icons/AnimationLibrary.svg +++ b/editor/icons/AnimationLibrary.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 2a6 6 0 0 0 0 12v-1.01a1 1 0 0 1 0-2v-6a1 1 0 0 1 0-2zM11 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0-7a6 6 0 0 0 0 12 6 6 0 0 1-2.95-3.133A1 1 0 1 1 7.53 9a6 6 0 0 1 0-2 1 1 0 1 1 .52-1.867A5.795 6.506 0 0 1 11 2zM7.5 2a6 6 0 0 0 0 12 6 6 0 0 1-2.95-3.133A1 1 0 1 1 4.03 9a6 6 0 0 1 0-2 1 1 0 1 1 .52-1.867A5.795 6.506 0 0 1 7.5 2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14.5 2a6 6 0 0 0 0 12v-1.01a1 1 0 0 1 0-2v-6a1 1 0 0 1 0-2zM11 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0-7a6 6 0 0 0 0 12 6 6 0 0 1-2.95-3.133A1 1 0 1 1 7.53 9a6 6 0 0 1 0-2 1 1 0 1 1 .52-1.867A5.795 6.506 0 0 1 11 2zM7.5 2a6 6 0 0 0 0 12 6 6 0 0 1-2.95-3.133A1 1 0 1 1 4.03 9a6 6 0 0 1 0-2 1 1 0 1 1 .52-1.867A5.795 6.506 0 0 1 7.5 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationMixer.svg b/editor/icons/AnimationMixer.svg index 61f5bf6474..8c2dc9c0cf 100644 --- a/editor/icons/AnimationMixer.svg +++ b/editor/icons/AnimationMixer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z" fill="#919191"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationPlayer.svg b/editor/icons/AnimationPlayer.svg index 21f287fbc5..a15dea1808 100644 --- a/editor/icons/AnimationPlayer.svg +++ b/editor/icons/AnimationPlayer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z" fill="#c38ef1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#c38ef1" d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm1 4h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationTrackGroup.svg b/editor/icons/AnimationTrackGroup.svg index 73bcb6f655..d8cf4b6efd 100644 --- a/editor/icons/AnimationTrackGroup.svg +++ b/editor/icons/AnimationTrackGroup.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5.05 2v2H14V2zm-3.32-.017v2h2v-2zM8.983 7v2H14V7zm-3.525 5v2h2v-2zm3.525 0v2H14v-2zM5.492 6.932v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5.05 2v2H14V2zm-3.32-.017v2h2v-2zM8.983 7v2H14V7zm-3.525 5v2h2v-2zm3.525 0v2H14v-2zM5.492 6.932v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationTrackList.svg b/editor/icons/AnimationTrackList.svg index 3ba4915350..a79a5cfd11 100644 --- a/editor/icons/AnimationTrackList.svg +++ b/editor/icons/AnimationTrackList.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AnimationTree.svg b/editor/icons/AnimationTree.svg index 65250cf681..d2ec029969 100644 --- a/editor/icons/AnimationTree.svg +++ b/editor/icons/AnimationTree.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm4 3h2v2h4v2H9v2h2v2H8a1 1 0 0 1-1-1V8H6a1 1 0 0 1-1-1zM2 5h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z" fill="#c38ef1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#c38ef1" d="M1 1v14h1v-2h2v2h8v-2h2v2h1V1h-1v2h-2V1H4v2H2V1zm4 3h2v2h4v2H9v2h2v2H8a1 1 0 0 1-1-1V8H6a1 1 0 0 1-1-1zM2 5h2v2H2zm10 0h2v2h-2zM2 9h2v2H2zm10 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Area2D.svg b/editor/icons/Area2D.svg index 42f77d464a..4a8e95490c 100644 --- a/editor/icons/Area2D.svg +++ b/editor/icons/Area2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v4h2V3h2V1zm10 0v2h2v2h2V1zM4 4v8h8V4zm2 2h4v4H6zm-5 5v4h4v-2H3v-2zm12 0v2h-2v2h4v-4z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M1 1v4h2V3h2V1zm10 0v2h2v2h2V1zM4 4v8h8V4zm2 2h4v4H6zm-5 5v4h4v-2H3v-2zm12 0v2h-2v2h4v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Area3D.svg b/editor/icons/Area3D.svg index 88da3e7c91..114f7f670a 100644 --- a/editor/icons/Area3D.svg +++ b/editor/icons/Area3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v4h2V3h2V1zm10 0v2h2v2h2V1zM4 4v8h8V4zm2 2h4v4H6zm-5 5v4h4v-2H3v-2zm12 0v2h-2v2h4v-4z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M1 1v4h2V3h2V1zm10 0v2h2v2h2V1zM4 4v8h8V4zm2 2h4v4H6zm-5 5v4h4v-2H3v-2zm12 0v2h-2v2h4v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Array.svg b/editor/icons/Array.svg index fbf0df8f68..fd9be640fb 100644 --- a/editor/icons/Array.svg +++ b/editor/icons/Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 4a3 3 0 0 0 0 6h2V4zm6 0a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zm4 0a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zM4 6v2a1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M4 4a3 3 0 0 0 0 6h2V4zm6 0a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zm4 0a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zM4 6v2a1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrayMesh.svg b/editor/icons/ArrayMesh.svg index 9e39024a6a..9261d8a0d7 100644 --- a/editor/icons/ArrayMesh.svg +++ b/editor/icons/ArrayMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm10 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-2 7v3H8v2h3v3h2v-3h3v-2h-3V8zm-8 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M3 1a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm10 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-2 7v3H8v2h3v3h2v-3h3v-2h-3V8zm-8 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrayOccluder3D.svg b/editor/icons/ArrayOccluder3D.svg index 3d18fa0921..5612cf0fea 100644 --- a/editor/icons/ArrayOccluder3D.svg +++ b/editor/icons/ArrayOccluder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-2 7v3H8v2h3v3h2v-3h3v-2h-3V8zm-8 3a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M13 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-2 7v3H8v2h3v3h2v-3h3v-2h-3V8zm-8 3a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrowDown.svg b/editor/icons/ArrowDown.svg index 23b7af823d..e77eeb5637 100644 --- a/editor/icons/ArrowDown.svg +++ b/editor/icons/ArrowDown.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 5v7l4-4m-4 4L4 8" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 5v7l4-4m-4 4L4 8"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrowLeft.svg b/editor/icons/ArrowLeft.svg index 4141c3ba6d..b7cb8929cb 100644 --- a/editor/icons/ArrowLeft.svg +++ b/editor/icons/ArrowLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11 8H4l4 4M4 8l4-4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 8H4l4 4M4 8l4-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrowRight.svg b/editor/icons/ArrowRight.svg index f433ef338d..c37c92e676 100644 --- a/editor/icons/ArrowRight.svg +++ b/editor/icons/ArrowRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 8h7L8 4m4 4-4 4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 8h7L8 4m4 4-4 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/ArrowUp.svg b/editor/icons/ArrowUp.svg index 377d275394..597380f91c 100644 --- a/editor/icons/ArrowUp.svg +++ b/editor/icons/ArrowUp.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 11V4L4 8m4-4 4 4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 11V4L4 8m4-4 4 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/AspectRatioContainer.svg b/editor/icons/AspectRatioContainer.svg index b8fa88091d..4c8e9750c5 100644 --- a/editor/icons/AspectRatioContainer.svg +++ b/editor/icons/AspectRatioContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM3 5v2h2V5zm8 0v2h2V5zM3 9v2h2V9zm8 0v2h2V9zm-8 4a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM3 5v2h2V5zm8 0v2h2V5zM3 9v2h2V9zm8 0v2h2V9zm-8 4a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AssetLib.svg b/editor/icons/AssetLib.svg index 6463c1a3b5..4a4d9e7cd7 100644 --- a/editor/icons/AssetLib.svg +++ b/editor/icons/AssetLib.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"><path d="M8 1v9l4-4m-4 4L4 6"/><path d="M2 10v4h12v-4" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"><path d="M8 1v9l4-4m-4 4L4 6"/><path stroke-linecap="round" d="M2 10v4h12v-4"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AtlasTexture.svg b/editor/icons/AtlasTexture.svg index 4f4112253d..62f4ca39c9 100644 --- a/editor/icons/AtlasTexture.svg +++ b/editor/icons/AtlasTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1 1 3v12l5-2 4 2 5-2V1l-5 2zm0 2 4 2v8l-4-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1 1 3v12l5-2 4 2 5-2V1l-5 2zm0 2 4 2v8l-4-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioBusBypass.svg b/editor/icons/AudioBusBypass.svg index 538c13d8d6..f5e3ec91c9 100644 --- a/editor/icons/AudioBusBypass.svg +++ b/editor/icons/AudioBusBypass.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h4a3 3 0 0 0 .787-5.894A3 3 0 0 0 7 3zm1 2h1a1 1 0 0 1 0 2H6zm0 4h3a1 1 0 0 1 0 2H6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h4a3 3 0 0 0 .787-5.894A3 3 0 0 0 7 3zm1 2h1a1 1 0 0 1 0 2H6zm0 4h3a1 1 0 0 1 0 2H6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioBusLayout.svg b/editor/icons/AudioBusLayout.svg index 7670aa2e81..70eb0f2894 100644 --- a/editor/icons/AudioBusLayout.svg +++ b/editor/icons/AudioBusLayout.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm8 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zM3 2h2a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm8 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zM3 2h2a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioBusMute.svg b/editor/icons/AudioBusMute.svg index 54f52131b1..d802230e29 100644 --- a/editor/icons/AudioBusMute.svg +++ b/editor/icons/AudioBusMute.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 12V4l4 5 4-5v8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 12V4l4 5 4-5v8"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioBusSolo.svg b/editor/icons/AudioBusSolo.svg index b0b383cb91..bdb8f841cd 100644 --- a/editor/icons/AudioBusSolo.svg +++ b/editor/icons/AudioBusSolo.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 3a3 3 0 0 0 0 6h2a1 1 0 0 1 0 2H6a1 1 0 0 0 0 2h3a1 1 0 0 0 0-6H7a1 1 0 0 1 0-2h3a1 1 0 0 0 0-2H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 3a3 3 0 0 0 0 6h2a1 1 0 0 1 0 2H6a1 1 0 0 0 0 2h3a1 1 0 0 0 0-6H7a1 1 0 0 1 0-2h3a1 1 0 0 0 0-2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioListener2D.svg b/editor/icons/AudioListener2D.svg index dae17181b6..71adde1aa7 100644 --- a/editor/icons/AudioListener2D.svg +++ b/editor/icons/AudioListener2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6a4 4 0 0 1 8 0c0 1 0 3-3 4.75 0 3-1.47 3.25-3 3.25H3M13.05 2.5a7 7 0 0 1 0 7" fill="none" stroke-width="2" stroke-linejoin="round" stroke="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2" d="M2 6a4 4 0 0 1 8 0c0 1 0 3-3 4.75 0 3-1.47 3.25-3 3.25H3M13.05 2.5a7 7 0 0 1 0 7"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioListener3D.svg b/editor/icons/AudioListener3D.svg index 35cf068340..cb9c36074b 100644 --- a/editor/icons/AudioListener3D.svg +++ b/editor/icons/AudioListener3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6a4 4 0 0 1 8 0c0 1 0 3-3 4.75 0 3-1.47 3.25-3 3.25H3M13.05 2.5a7 7 0 0 1 0 7" fill="none" stroke-width="2" stroke-linejoin="round" stroke="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-linejoin="round" stroke-width="2" d="M2 6a4 4 0 0 1 8 0c0 1 0 3-3 4.75 0 3-1.47 3.25-3 3.25H3M13.05 2.5a7 7 0 0 1 0 7"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStream.svg b/editor/icons/AudioStream.svg index c213da811e..8a01126015 100644 --- a/editor/icons/AudioStream.svg +++ b/editor/icons/AudioStream.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="m12 2a-1 1 0 0 1 0 2a 8 8 0 0 0-8 8a-1 1 0 0 1-2 0a10 10 0 0 1 10-10zm0 4A-1 1 0 0 1 12 8a 4 4 0 0 0-4 4A-1 1 0 0 1 6 12a6 6 0 0 1 6-6zm0 4A-2 2 0 0 1 12 14A-2 2 0 0 1 12 10z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="m12 2a-1 1 0 0 1 0 2a 8 8 0 0 0-8 8a-1 1 0 0 1-2 0a10 10 0 0 1 10-10zm0 4A-1 1 0 0 1 12 8a 4 4 0 0 0-4 4A-1 1 0 0 1 6 12a6 6 0 0 1 6-6zm0 4A-2 2 0 0 1 12 14A-2 2 0 0 1 12 10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamGenerator.svg b/editor/icons/AudioStreamGenerator.svg index 2e822de277..b458804c47 100644 --- a/editor/icons/AudioStreamGenerator.svg +++ b/editor/icons/AudioStreamGenerator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="m14 9-3 5-3-12-3 7-3-2" fill="none" stroke="url(#a)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m14 9-3 5-3-12-3 7-3-2"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamMP3.svg b/editor/icons/AudioStreamMP3.svg index bb06b905e0..da9452ed3b 100644 --- a/editor/icons/AudioStreamMP3.svg +++ b/editor/icons/AudioStreamMP3.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z" fill="url(#a)"/><path d="M10.5 8v5m2-4v3m-4-2v1m6-1v1" stroke="url(#a)" stroke-linecap="round" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z"/><path fill="none" stroke="url(#a)" stroke-linecap="round" d="M10.5 8v5m2-4v3m-4-2v1m6-1v1"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamMicrophone.svg b/editor/icons/AudioStreamMicrophone.svg index ca13bcbbb7..7adaf0fa6f 100644 --- a/editor/icons/AudioStreamMicrophone.svg +++ b/editor/icons/AudioStreamMicrophone.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M7 1a2 2 0 0 0-2 2h2v1H5v2h2v1H5a2 2 0 0 0 2 2v4l-2 2h6l-2-2V9a2 2 0 0 0 2-2H9V6h2V4H9V3h2a2 2 0 0 0-2-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M7 1a2 2 0 0 0-2 2h2v1H5v2h2v1H5a2 2 0 0 0 2 2v4l-2 2h6l-2-2V9a2 2 0 0 0 2-2H9V6h2V4H9V3h2a2 2 0 0 0-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamOggVorbis.svg b/editor/icons/AudioStreamOggVorbis.svg index bb06b905e0..da9452ed3b 100644 --- a/editor/icons/AudioStreamOggVorbis.svg +++ b/editor/icons/AudioStreamOggVorbis.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z" fill="url(#a)"/><path d="M10.5 8v5m2-4v3m-4-2v1m6-1v1" stroke="url(#a)" stroke-linecap="round" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z"/><path fill="none" stroke="url(#a)" stroke-linecap="round" d="M10.5 8v5m2-4v3m-4-2v1m6-1v1"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamPlayer.svg b/editor/icons/AudioStreamPlayer.svg index ba84502d99..a3c4ad8e35 100644 --- a/editor/icons/AudioStreamPlayer.svg +++ b/editor/icons/AudioStreamPlayer.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path d="M1.382.335.777.858H.204v.673h.564l.614.531Z" style="fill:#e0e0e0;stroke:#e0e0e0;stroke-width:.1764;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"/><path d="M1.718.572c.275.374.275.882 0 1.256M1.947.343c.402.5.402 1.213 0 1.714" style="fill:none;stroke:#e0e0e0;stroke-width:.176328;stroke-linecap:round;stroke-opacity:1"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" stroke-width=".176" d="M1.382.335.777.858H.204v.673h.564l.614.531Z"/><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width=".176" d="M1.718.572a1.06 1.06 0 0 1 0 1.256M1.947.343c.402.5.402 1.213 0 1.714"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamPlayer2D.svg b/editor/icons/AudioStreamPlayer2D.svg index 54ff128a4d..fa60e30238 100644 --- a/editor/icons/AudioStreamPlayer2D.svg +++ b/editor/icons/AudioStreamPlayer2D.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path d="M1.382.335.777.858H.204v.673h.564l.614.531Z" style="fill:#8da5f3;stroke:#8da5f3;stroke-width:.1764;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"/><path d="M1.718.572c.275.374.275.882 0 1.256M1.947.343c.402.5.402 1.213 0 1.714" style="fill:none;stroke:#8da5f3;stroke-width:.176328;stroke-linecap:round;stroke-opacity:1"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path fill="#8da5f3" stroke="#8da5f3" stroke-linejoin="round" stroke-width=".176" d="M1.382.335.777.858H.204v.673h.564l.614.531Z"/><path fill="none" stroke="#8da5f3" stroke-linecap="round" stroke-width=".176" d="M1.718.572a1.06 1.06 0 0 1 0 1.256M1.947.343c.402.5.402 1.213 0 1.714"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamPlayer3D.svg b/editor/icons/AudioStreamPlayer3D.svg index fc0231a657..f6be929e61 100644 --- a/editor/icons/AudioStreamPlayer3D.svg +++ b/editor/icons/AudioStreamPlayer3D.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path d="M1.382.335.777.858H.204v.673h.564l.614.531Z" style="fill:#fc7f7f;stroke:#fc7f7f;stroke-width:.1764;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"/><path d="M1.718.572c.275.374.275.882 0 1.256M1.947.343c.402.5.402 1.213 0 1.714" style="fill:none;stroke:#fc7f7f;stroke-width:.176328;stroke-linecap:round;stroke-opacity:1"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" version="1.0" viewBox="0 0 2.4 2.4"><path fill="#fc7f7f" stroke="#fc7f7f" stroke-linejoin="round" stroke-width=".176" d="M1.382.335.777.858H.204v.673h.564l.614.531Z"/><path fill="none" stroke="#fc7f7f" stroke-linecap="round" stroke-width=".176" d="M1.718.572a1.06 1.06 0 0 1 0 1.256M1.947.343c.402.5.402 1.213 0 1.714"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamPolyphonic.svg b/editor/icons/AudioStreamPolyphonic.svg index 0e20205fdd..f0231c633f 100644 --- a/editor/icons/AudioStreamPolyphonic.svg +++ b/editor/icons/AudioStreamPolyphonic.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1zm-3 6h2v2h2v2h-2v2h-2v-2H8v-2h2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1zm-3 6h2v2h2v2h-2v2h-2v-2H8v-2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamRandomizer.svg b/editor/icons/AudioStreamRandomizer.svg index 70f7441812..109d1ed993 100644 --- a/editor/icons/AudioStreamRandomizer.svg +++ b/editor/icons/AudioStreamRandomizer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M8 1C1 1 1 1 1 8s0 7 7 7 7 0 7-7 0-7-7-7zm3.75 1.25a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM8 6a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM4.25 9.75a1 1 0 0 1 0 4 1 1 0 0 1 0-4z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M8 1C1 1 1 1 1 8s0 7 7 7 7 0 7-7 0-7-7-7zm3.75 1.25a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM8 6a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM4.25 9.75a1 1 0 0 1 0 4 1 1 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AudioStreamWAV.svg b/editor/icons/AudioStreamWAV.svg index bb06b905e0..da9452ed3b 100644 --- a/editor/icons/AudioStreamWAV.svg +++ b/editor/icons/AudioStreamWAV.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="1" y2="15"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z" fill="url(#a)"/><path d="M10.5 8v5m2-4v3m-4-2v1m6-1v1" stroke="url(#a)" stroke-linecap="round" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="1" y2="15" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="url(#a)" d="M13 2a1 1 0 0 0-1-1L4.754 3A1 1 0 0 0 4 4v5.55A2.5 2.5 0 1 0 6 12V4.756l5-1.428V6.5l2-1z"/><path fill="none" stroke="url(#a)" stroke-linecap="round" d="M10.5 8v5m2-4v3m-4-2v1m6-1v1"/></svg>
\ No newline at end of file diff --git a/editor/icons/AutoEnd.svg b/editor/icons/AutoEnd.svg index 1205da6af0..88c4fd475c 100644 --- a/editor/icons/AutoEnd.svg +++ b/editor/icons/AutoEnd.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H6a1 1 0 0 0-.781.375l-4 5a1 1 0 0 0 0 1.248l4 5a1 1 0 0 0 .78.377zm-1-2H6.48L3.281 8l3.2-4H13zm-6-2V6L5 8zm1-5h4v1.2H9.4v1.2h2.2v1.2H9.4v1.2H12V11H8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14 14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H6a1 1 0 0 0-.781.375l-4 5a1 1 0 0 0 0 1.248l4 5a1 1 0 0 0 .78.377zm-1-2H6.48L3.281 8l3.2-4H13zm-6-2V6L5 8zm1-5h4v1.2H9.4v1.2h2.2v1.2H9.4v1.2H12V11H8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AutoKey.svg b/editor/icons/AutoKey.svg index 5af089c4a8..7df078f40e 100644 --- a/editor/icons/AutoKey.svg +++ b/editor/icons/AutoKey.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="5" r="4"/><path d="M11 13a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0-3 3zm-7-3a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1h1v-2zm4 6h1v-2H8a1 1 0 0 1-1-1h4a3 3 0 1 0-3 3zm-1-4a1.08 1.08 0 0 1 2 0z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><circle cx="8" cy="5" r="4"/><path d="M11 13a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0-3 3zm-7-3a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1h1v-2zm4 6h1v-2H8a1 1 0 0 1-1-1h4a3 3 0 1 0-3 3zm-1-4a1.08 1.08 0 0 1 2 0z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/AutoPlay.svg b/editor/icons/AutoPlay.svg index a12cf1ff8b..3d72ffbb23 100644 --- a/editor/icons/AutoPlay.svg +++ b/editor/icons/AutoPlay.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8a1 1 0 0 0 .781-.375l4-5a1 1 0 0 0 0-1.248l-4-5A1 1 0 0 0 10 2H2zm1 2h6.52l3.199 4-3.2 4H3zm5 3a2 2 0 0 0-4 0v4h1V9h2v2h1zM5 7a1 1 0 0 1 2 0v1H5zm4-1v4l2-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8a1 1 0 0 0 .781-.375l4-5a1 1 0 0 0 0-1.248l-4-5A1 1 0 0 0 10 2H2zm1 2h6.52l3.199 4-3.2 4H3zm5 3a2 2 0 0 0-4 0v4h1V9h2v2h1zM5 7a1 1 0 0 1 2 0v1H5zm4-1v4l2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/AutoTriangle.svg b/editor/icons/AutoTriangle.svg index 2e70dfe1ee..720cd4e595 100644 --- a/editor/icons/AutoTriangle.svg +++ b/editor/icons/AutoTriangle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8.232.678.645 15.289h14.71zm-1.29 4.765H9.21l4.203 9.004H10.87l-.777-1.949h-4.11l-.778 1.95H2.738l4.203-9.005zm1.081 2.04-1.492 3.404h3L8.023 7.482z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8.232.678.645 15.289h14.71zm-1.29 4.765H9.21l4.203 9.004H10.87l-.777-1.949h-4.11l-.778 1.95H2.738l4.203-9.005zm1.081 2.04-1.492 3.404h3L8.023 7.482z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Back.svg b/editor/icons/Back.svg index 1f9d32da2c..4bf823306d 100644 --- a/editor/icons/Back.svg +++ b/editor/icons/Back.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="M6 2 2 8l4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 2 2 8l4 6"/></svg>
\ No newline at end of file diff --git a/editor/icons/BackBufferCopy.svg b/editor/icons/BackBufferCopy.svg index c85a35a410..a2f78ad078 100644 --- a/editor/icons/BackBufferCopy.svg +++ b/editor/icons/BackBufferCopy.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v11h5v-2h-3v-7h6v-2zm6 3v11h8v-11zm2 2h4v7h-4z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m1 1v11h5v-2h-3v-7h6v-2zm6 3v11h8v-11zm2 2h4v7h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Bake.svg b/editor/icons/Bake.svg index 9c652c76b3..e956592248 100644 --- a/editor/icons/Bake.svg +++ b/editor/icons/Bake.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BaseButton.svg b/editor/icons/BaseButton.svg index 039becb131..163914119a 100644 --- a/editor/icons/BaseButton.svg +++ b/editor/icons/BaseButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 9C4.669 9 4 9.669 4 10.5V12H2v2h12v-2h-2v-1.5c0-.831-.669-1.5-1.5-1.5z" fill="#76ad7b"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#76ad7b" d="M5.5 9C4.669 9 4 9.669 4 10.5V12H2v2h12v-2h-2v-1.5c0-.831-.669-1.5-1.5-1.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Basis.svg b/editor/icons/Basis.svg index 6754da4213..b9f03c2b13 100644 --- a/editor/icons/Basis.svg +++ b/editor/icons/Basis.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 2v8h2a3 3 0 0 0 0-6V2zm10 0v2h2V2zM7 4a2 2 0 0 0 0 4H5v2h2a2 2 0 0 0 0-4h2V4zm7 0a2 2 0 0 0 0 4h-2V6h-2v4h4a2 2 0 0 0 0-4h2V4zM2 6a1 1 0 0 1 1 1 1 1 0 0 1-1 1z" fill="#e1ec41"/><path d="M10 2v2h2V2zm0 4v4h2V6z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e1ec41" d="M0 2v8h2a3 3 0 0 0 0-6V2zm10 0v2h2V2zM7 4a2 2 0 0 0 0 4H5v2h2a2 2 0 0 0 0-4h2V4zm7 0a2 2 0 0 0 0 4h-2V6h-2v4h4a2 2 0 0 0 0-4h2V4zM2 6a1 1 0 0 1 1 1 1 1 0 0 1-1 1z"/><path fill="#fff" fill-opacity=".4" d="M10 2v2h2V2zm0 4v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BezierHandlesBalanced.svg b/editor/icons/BezierHandlesBalanced.svg index 439a382329..5228ed9e1e 100644 --- a/editor/icons/BezierHandlesBalanced.svg +++ b/editor/icons/BezierHandlesBalanced.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.8 13.5s1.3-6.7 6.6-8c5.1 1 6 8 6 8" fill="none" stroke="#87b1d7" stroke-width=".5"/><path d="M2.5 7.7 12.7 4" stroke="#61b2ff" stroke-width="1.5"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8.25" cy="5.7" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.75" cy="7.9" r="1"/><circle cx="13.5" cy="3.7" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#87b1d7" stroke-width=".5" d="M1.8 13.5s1.3-6.7 6.6-8c5.1 1 6 8 6 8"/><path stroke="#61b2ff" stroke-width="1.5" d="M2.5 7.7 12.7 4"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8.25" cy="5.7" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.75" cy="7.9" r="1"/><circle cx="13.5" cy="3.7" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/BezierHandlesFree.svg b/editor/icons/BezierHandlesFree.svg index 69fdaf25b2..a745a461f9 100644 --- a/editor/icons/BezierHandlesFree.svg +++ b/editor/icons/BezierHandlesFree.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.8 13.5s1.3-5.2 6.6-6.5c5.1 1 6 6.5 6 6.5" fill="none" stroke="#87b1d7" stroke-width=".5"/><path d="M2.7 8.4 8.4 7.2 10.4 2.7" fill="none" stroke="#61b3ff" stroke-width="1.5"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8.25" cy="7.2" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.75" cy="8.5" r="1"/><circle cx="10.75" cy="1.75" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#87b1d7" stroke-width=".5" d="m1.8 13.5s1.3-5.2 6.6-6.5c5.1 1 6 6.5 6 6.5"/><path fill="none" stroke="#61b3ff" stroke-width="1.5" d="M2.7 8.4 8.4 7.2 10.4 2.7"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8.25" cy="7.2" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.75" cy="8.5" r="1"/><circle cx="10.75" cy="1.75" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/BezierHandlesLinear.svg b/editor/icons/BezierHandlesLinear.svg index fa1ada5854..f8aa9ab3dd 100644 --- a/editor/icons/BezierHandlesLinear.svg +++ b/editor/icons/BezierHandlesLinear.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.8 13.5 6.2-9 6.2 9" fill="none" stroke="#87b1d7" stroke-width=".5"/><path d="M5.3 8.4 7.9 4.6m.2 0l2.6 3.8" fill="none" stroke="#61b3ff" stroke-width="1.5"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8" cy="4.5" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="4.8" cy="9.1" r="1"/><circle cx="11.2" cy="9.1" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#87b1d7" stroke-width=".5" d="m1.8 13.5 6.2-9 6.2 9"/><path fill="none" stroke="#61b3ff" stroke-width="1.5" d="M5.3 8.4 7.9 4.6m.2 0l2.6 3.8"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8" cy="4.5" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="4.8" cy="9.1" r="1"/><circle cx="11.2" cy="9.1" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/BezierHandlesMirror.svg b/editor/icons/BezierHandlesMirror.svg index c64e08d4a9..8ab935673d 100644 --- a/editor/icons/BezierHandlesMirror.svg +++ b/editor/icons/BezierHandlesMirror.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.8 13.5c2.2-10 10.2-10 12.4 0" fill="none" stroke="#87b1d7" stroke-width=".5"/><path d="M2.7 5.7h10.6" stroke="#61b2ff" stroke-width="1.5"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8" cy="5.7" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.8" cy="5.7" r="1"/><circle cx="14.2" cy="5.7" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#87b1d7" stroke-width=".5" d="M1.8 13.5c2.2-10 10.2-10 12.4 0"/><path stroke="#61b2ff" stroke-width="1.5" d="M2.7 5.7h10.6"/><g fill="#e0e0e0"><circle cx="1.8" cy="13.5" r="1.25"/><circle cx="14.2" cy="13.5" r="1.25"/><circle cx="8" cy="5.7" r="1.25"/></g><g fill="none" stroke="#e0e0e0" stroke-width=".5"><circle cx="1.8" cy="5.7" r="1"/><circle cx="14.2" cy="5.7" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/BitMap.svg b/editor/icons/BitMap.svg index 703c958ee3..ee7567282e 100644 --- a/editor/icons/BitMap.svg +++ b/editor/icons/BitMap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm2 2v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm0-2v-2h-2v2zm0-2h2v-2h-2zm0-2v-2h-2v2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm-2 0h-2v2h2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v2h2v-2zm2 2v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm0-2v-2h-2v2zm0-2h2v-2h-2zm0-2v-2h-2v2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm-2 0h-2v2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Blend.svg b/editor/icons/Blend.svg index 4ccfb0125a..47f9fe5671 100644 --- a/editor/icons/Blend.svg +++ b/editor/icons/Blend.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 1v2h2.586L8 6.586 3.707 2.293 2.293 3.707 6.586 8l-4.293 4.293 1.414 1.414L8 9.414 11.586 13H9v2h5a1 1 0 0 0 1-1V9h-2v2.586L9.414 8 13 4.414V7h2V2a1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M9 1v2h2.586L8 6.586 3.707 2.293 2.293 3.707 6.586 8l-4.293 4.293 1.414 1.414L8 9.414 11.586 13H9v2h5a1 1 0 0 0 1-1V9h-2v2.586L9.414 8 13 4.414V7h2V2a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Bone.svg b/editor/icons/Bone.svg index 16c232c71e..f34b6ed207 100644 --- a/editor/icons/Bone.svg +++ b/editor/icons/Bone.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.824 8.384a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496 2.466 2.466 0 1 0-4.496 1.705z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.824 8.384a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496 2.466 2.466 0 1 0-4.496 1.705z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Bone2D.svg b/editor/icons/Bone2D.svg index efa1d9d2cf..10da51a3b7 100644 --- a/editor/icons/Bone2D.svg +++ b/editor/icons/Bone2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.824 8.384a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496 2.466 2.466 0 1 0-4.496 1.705z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M4.824 8.384a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496 2.466 2.466 0 1 0-4.496 1.705z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneAttachment3D.svg b/editor/icons/BoneAttachment3D.svg index ec515bc423..2fa8badb2b 100644 --- a/editor/icons/BoneAttachment3D.svg +++ b/editor/icons/BoneAttachment3D.svg @@ -1,20 +1 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" - y="0px" width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve"> -<path fill="#FC7F7F" d="M9.264,8.125L8.119,9.27c-0.219,0.228-0.212,0.589,0.014,0.81c0.222,0.213,0.574,0.213,0.794,0l0.169-0.168 - v4.912h4.909l-0.167,0.165c-0.219,0.229-0.212,0.591,0.015,0.81c0.222,0.214,0.573,0.214,0.794,0l1.145-1.145 - c0.224-0.224,0.224-0.584,0-0.809l-1.145-1.143c-0.226-0.221-0.588-0.215-0.809,0.014c-0.213,0.221-0.213,0.573,0,0.795l0.167,0.168 - h-2.957l3.195-3.196v0.237c0,0.317,0.256,0.573,0.572,0.573c0.315,0,0.571-0.256,0.571-0.573V9.102c0-0.315-0.256-0.571-0.571-0.571 - h-1.619c-0.316,0-0.572,0.256-0.572,0.571c0,0.316,0.256,0.572,0.572,0.572h0.237l-3.194,3.194V9.911l0.167,0.168 - c0.228,0.218,0.59,0.213,0.81-0.015c0.214-0.223,0.214-0.572,0-0.795l-1.144-1.145C9.848,7.903,9.486,7.903,9.264,8.125L9.264,8.125 - z"/> -<path fill="#FC7F7F" d="M7.615,11.175l0.326-0.326c-0.119-0.06-0.23-0.135-0.328-0.229c-0.524-0.511-0.538-1.349-0.035-1.871 - l1.155-1.155c0.5-0.499,1.367-0.497,1.865-0.003l0.3,0.3l0.276-0.276c0.399,0.266,0.849,0.393,1.296,0.405 - c0.211-0.142,0.453-0.24,0.726-0.24h0.399c0.391-0.186,0.741-0.467,0.998-0.854c0.754-1.134,0.446-2.665-0.688-3.419 - c-0.309-0.205-0.66-0.338-1.026-0.389c-0.188-1.349-1.433-2.291-2.782-2.103c-1.349,0.188-2.29,1.433-2.103,2.782 - c0.051,0.367,0.184,0.717,0.389,1.026l-3.56,3.56C3.69,7.63,2.159,7.938,1.405,9.072c-0.754,1.134-0.446,2.664,0.688,3.419 - c0.308,0.204,0.659,0.338,1.026,0.389c0.188,1.349,1.433,2.29,2.782,2.103c1.349-0.188,2.291-1.433,2.103-2.781 - C7.953,11.834,7.82,11.483,7.615,11.175z"/> -</svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#FC7F7F" d="M9.264,8.125L8.119,9.27c-0.219,0.228-0.212,0.589,0.014,0.81c0.222,0.213,0.574,0.213,0.794,0l0.169-0.168 v4.912h4.909l-0.167,0.165c-0.219,0.229-0.212,0.591,0.015,0.81c0.222,0.214,0.573,0.214,0.794,0l1.145-1.145 c0.224-0.224,0.224-0.584,0-0.809l-1.145-1.143c-0.226-0.221-0.588-0.215-0.809,0.014c-0.213,0.221-0.213,0.573,0,0.795l0.167,0.168 h-2.957l3.195-3.196v0.237c0,0.317,0.256,0.573,0.572,0.573c0.315,0,0.571-0.256,0.571-0.573V9.102c0-0.315-0.256-0.571-0.571-0.571 h-1.619c-0.316,0-0.572,0.256-0.572,0.571c0,0.316,0.256,0.572,0.572,0.572h0.237l-3.194,3.194V9.911l0.167,0.168 c0.228,0.218,0.59,0.213,0.81-0.015c0.214-0.223,0.214-0.572,0-0.795l-1.144-1.145C9.848,7.903,9.486,7.903,9.264,8.125L9.264,8.125 z"/><path fill="#FC7F7F" d="M7.615,11.175l0.326-0.326c-0.119-0.06-0.23-0.135-0.328-0.229c-0.524-0.511-0.538-1.349-0.035-1.871 l1.155-1.155c0.5-0.499,1.367-0.497,1.865-0.003l0.3,0.3l0.276-0.276c0.399,0.266,0.849,0.393,1.296,0.405 c0.211-0.142,0.453-0.24,0.726-0.24h0.399c0.391-0.186,0.741-0.467,0.998-0.854c0.754-1.134,0.446-2.665-0.688-3.419 c-0.309-0.205-0.66-0.338-1.026-0.389c-0.188-1.349-1.433-2.291-2.782-2.103c-1.349,0.188-2.29,1.433-2.103,2.782 c0.051,0.367,0.184,0.717,0.389,1.026l-3.56,3.56C3.69,7.63,2.159,7.938,1.405,9.072c-0.754,1.134-0.446,2.664,0.688,3.419 c0.308,0.204,0.659,0.338,1.026,0.389c0.188,1.349,1.433,2.29,2.782,2.103c1.349-0.188,2.291-1.433,2.103-2.781 C7.953,11.834,7.82,11.483,7.615,11.175z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapHumanBody.svg b/editor/icons/BoneMapHumanBody.svg index 6532053bee..607f1db571 100644 --- a/editor/icons/BoneMapHumanBody.svg +++ b/editor/icons/BoneMapHumanBody.svg @@ -1 +1 @@ -<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h256v256H0V0Z" fill="#3f3f3f"/><path d="M128 134.04c1.75 8.75 2.911 16.725 3.5 28.5.5 10 1 12.75.5 16.5-1.846 13.843 1.692 45.975 2.166 51.667.5 6-1.913 6.06-2.666 11.583-.612 4.49 19.75 4.61 16.25-2.25-6.25-12.25-.5-21 1-55.25.13-2.98-2.242-11.968-.5-23.5 2.771-18.353 2.105-26.81 1.625-36.415-.311-7.993-.25-14.241-2.25-34.741-.244-2.5 1.479-19.817 2.988-19.772 10.5.313 24.329-1.252 29.537-3.67 7.225.933 24.452-3.012 31.971-4.031 3.636 2.351 4.169.833 9.379 2.254 1.375.375 4.334-.36 3-1.25-1.852-1.234-5.187-2.062-5.75-3 2.688-.625 5.591-2.394 9-3.291 2.375-.625 4.717-2.937 3.875-3.084-2.875-.5-6.507 1.137-9.375 1.625-3.931.67-6.309.81-8.333 1.292-.307.073-.776.19-1.448.24l-.013.109c-9.205.248-20.081-2.431-32.578-1.392-8.506-.982-23.545-1.29-28.378-1.374-3.478-.06-14.823-.645-17.938-.125-.167-1.02-.375-2.437.238-4.117 3.72-1.811 4.797-4.449 6.825-8.673.23 1.106 1.563 1.232 3.115-3.558 1.415-4.37.58-5.563-.579-5.631.043-.514.07-1.026.079-1.536.196-12.01-1.74-20.61-15.24-20.61s-15.437 8.6-15.24 20.61c.009.51.036 1.022.078 1.536-1.159.068-1.993 1.262-.578 5.631 1.552 4.79 2.884 4.664 3.115 3.558 2.028 4.224 3.105 6.862 6.825 8.673.612 1.68.404 3.097.237 4.117-3.114-.52-14.459.066-17.937.126-4.833.083-19.872.392-28.378 1.373-12.497-1.039-23.373 1.64-32.578 1.392a24.54 24.54 0 0 0-.013-.11c-.672-.048-1.141-.166-1.448-.239-2.024-.482-4.402-.622-8.333-1.291-2.868-.489-6.5-2.125-9.375-1.625-.842.146 1.5 2.458 3.875 3.083 3.408.897 6.312 2.666 9 3.291-.563.938-3.898 1.766-5.75 3-1.334.89 1.625 1.625 3 1.25 5.21-1.42 5.743.097 9.378-2.254 7.52 1.02 24.747 4.964 31.972 4.031 5.208 2.418 19.036 3.983 29.536 3.67 1.51-.045 3.233 17.272 2.989 19.772-2 20.5-1.939 26.748-2.25 34.741-.48 9.605-1.147 18.062 1.625 36.416 1.742 11.531-.63 20.519-.5 23.5 1.5 34.25 7.25 43 1 55.25-3.5 6.859 16.862 6.739 16.25 2.25-.753-5.523-3.167-5.584-2.667-11.584.474-5.692 4.013-37.824 2.167-51.666-.5-3.75 0-6.5.5-16.5.589-11.776 1.75-19.751 3.5-28.501Z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path fill="#3f3f3f" d="M0 0h256v256H0V0Z"/><path fill="#b2b2b2" d="M128 134.04c1.75 8.75 2.911 16.725 3.5 28.5.5 10 1 12.75.5 16.5-1.846 13.843 1.692 45.975 2.166 51.667.5 6-1.913 6.06-2.666 11.583-.612 4.49 19.75 4.61 16.25-2.25-6.25-12.25-.5-21 1-55.25.13-2.98-2.242-11.968-.5-23.5 2.771-18.353 2.105-26.81 1.625-36.415-.311-7.993-.25-14.241-2.25-34.741-.244-2.5 1.479-19.817 2.988-19.772 10.5.313 24.329-1.252 29.537-3.67 7.225.933 24.452-3.012 31.971-4.031 3.636 2.351 4.169.833 9.379 2.254 1.375.375 4.334-.36 3-1.25-1.852-1.234-5.187-2.062-5.75-3 2.688-.625 5.591-2.394 9-3.291 2.375-.625 4.717-2.937 3.875-3.084-2.875-.5-6.507 1.137-9.375 1.625-3.931.67-6.309.81-8.333 1.292-.307.073-.776.19-1.448.24l-.013.109c-9.205.248-20.081-2.431-32.578-1.392-8.506-.982-23.545-1.29-28.378-1.374-3.478-.06-14.823-.645-17.938-.125-.167-1.02-.375-2.437.238-4.117 3.72-1.811 4.797-4.449 6.825-8.673.23 1.106 1.563 1.232 3.115-3.558 1.415-4.37.58-5.563-.579-5.631.043-.514.07-1.026.079-1.536.196-12.01-1.74-20.61-15.24-20.61s-15.437 8.6-15.24 20.61c.009.51.036 1.022.078 1.536-1.159.068-1.993 1.262-.578 5.631 1.552 4.79 2.884 4.664 3.115 3.558 2.028 4.224 3.105 6.862 6.825 8.673.612 1.68.404 3.097.237 4.117-3.114-.52-14.459.066-17.937.126-4.833.083-19.872.392-28.378 1.373-12.497-1.039-23.373 1.64-32.578 1.392a24.54 24.54 0 0 0-.013-.11c-.672-.048-1.141-.166-1.448-.239-2.024-.482-4.402-.622-8.333-1.291-2.868-.489-6.5-2.125-9.375-1.625-.842.146 1.5 2.458 3.875 3.083 3.408.897 6.312 2.666 9 3.291-.563.938-3.898 1.766-5.75 3-1.334.89 1.625 1.625 3 1.25 5.21-1.42 5.743.097 9.378-2.254 7.52 1.02 24.747 4.964 31.972 4.031 5.208 2.418 19.036 3.983 29.536 3.67 1.51-.045 3.233 17.272 2.989 19.772-2 20.5-1.939 26.748-2.25 34.741-.48 9.605-1.147 18.062 1.625 36.416 1.742 11.531-.63 20.519-.5 23.5 1.5 34.25 7.25 43 1 55.25-3.5 6.859 16.862 6.739 16.25 2.25-.753-5.523-3.167-5.584-2.667-11.584.474-5.692 4.013-37.824 2.167-51.666-.5-3.75 0-6.5.5-16.5.589-11.776 1.75-19.751 3.5-28.501Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapHumanFace.svg b/editor/icons/BoneMapHumanFace.svg index 86e9821147..7502b79140 100644 --- a/editor/icons/BoneMapHumanFace.svg +++ b/editor/icons/BoneMapHumanFace.svg @@ -1 +1 @@ -<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h256v256H0V0Z" fill="#3f3f3f"/><path d="M197.026 138.242c4.499-14.473 7.974-31.142 7.719-49.518-.94-67.6-62.462-62.87-73.892-61.237C40.886 40.34 76.091 140.577 75.74 151.594c-1.225 38.374 20.921 42.748 40.416 53.888.661.378 1.815.447 3.328.278 1.806 6.295 2.941 14.759 2.387 18.909-.816 6.124 52.255 6.124 52.255 0 0-15.72 3.059-31.09 8.457-47.222 1.786-.571 4.014-1.9 6.491-4.237 3.42-3.227 8.71-5.444 11.431-15.787 3.904-14.834.968-19.018-3.479-19.181Z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path fill="#3f3f3f" d="M0 0h256v256H0V0Z"/><path fill="#b2b2b2" d="M197.026 138.242c4.499-14.473 7.974-31.142 7.719-49.518-.94-67.6-62.462-62.87-73.892-61.237C40.886 40.34 76.091 140.577 75.74 151.594c-1.225 38.374 20.921 42.748 40.416 53.888.661.378 1.815.447 3.328.278 1.806 6.295 2.941 14.759 2.387 18.909-.816 6.124 52.255 6.124 52.255 0 0-15.72 3.059-31.09 8.457-47.222 1.786-.571 4.014-1.9 6.491-4.237 3.42-3.227 8.71-5.444 11.431-15.787 3.904-14.834.968-19.018-3.479-19.181Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapHumanLeftHand.svg b/editor/icons/BoneMapHumanLeftHand.svg index 065021afc0..9e1301ad50 100644 --- a/editor/icons/BoneMapHumanLeftHand.svg +++ b/editor/icons/BoneMapHumanLeftHand.svg @@ -1 +1 @@ -<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h256v256H0V0Z" fill="#3f3f3f"/><path d="M175.976 196.525c1.762-16.733 7.034-38.341 4.633-65.048-.286-3.178-1.125-12.071-1.115-20.683.006-5.294-.528-12.127-.494-16.044.042-4.833-.107-10.396-.156-13.939-.263-18.86-3.307-21.456-7.704-21.456-4.311 0-6.692 3.566-6.765 21.145-.015 3.605.125 12.75.125 14.625 0 4.377-.083 8.542 0 13.375.112 6.489-1.07 17-2.25 17-.976 0-2.025-9.825-2.394-19.25-.189-4.831-.805-14.584-.65-17.525.44-8.353.119-14.729.384-22.541.796-23.402-3.254-27.933-8.673-27.933-5.494 0-8.995 14.422-8.713 28.556.032 1.599-.291 12.685.047 22.465.189 5.453-.267 12.407-.42 17.418-.274 8.942-1.439 15.974-2.218 15.974-.66 0-1.033-8.146-1.364-16.427-.214-5.389-1.117-14.62-.916-20.904.472-14.753-.284-27.556-.265-30.375.158-23.739-3.665-30.775-9.013-30.775-5.369 0-9.297 7.548-9.15 30.835.016 2.633-.655 24.982-.44 30.454.216 5.498-.693 16.266-.879 21.205-.325 8.63-1.623 15.987-2.281 15.987-.821 0-2.699-6.41-2.931-15.242-.147-5.568.307-12.747.156-17.672-.315-10.176-.794-16.157-.97-24.927-.486-24.295-4.088-26.572-9.535-26.572-4.49 0-8.113 7.168-8.164 28.758-.017 6.925-.608 15.656-.079 23.582.201 3.02-.156 10.628-.469 18.473-.2 5.002-.275 11.876-.284 15.944-.042 19.649-6.678 33.356-9.139 32.827-7.583-1.63-12.912-10.979-17.805-29.327-2.637-9.891-9.166-17.787-17.474-19.453-6.475-1.298-4.946 11.54-.33 31.323 2.162 9.267 6.977 21.557 9.891 30.664 7.913 24.729 31.394 47.141 40.226 57.137 4.286 4.85 59.223 4.85 66.147 0 2.882-2.018 10.772-25.39 11.431-31.654Z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path fill="#3f3f3f" d="M0 0h256v256H0V0Z"/><path fill="#b2b2b2" d="M175.976 196.525c1.762-16.733 7.034-38.341 4.633-65.048-.286-3.178-1.125-12.071-1.115-20.683.006-5.294-.528-12.127-.494-16.044.042-4.833-.107-10.396-.156-13.939-.263-18.86-3.307-21.456-7.704-21.456-4.311 0-6.692 3.566-6.765 21.145-.015 3.605.125 12.75.125 14.625 0 4.377-.083 8.542 0 13.375.112 6.489-1.07 17-2.25 17-.976 0-2.025-9.825-2.394-19.25-.189-4.831-.805-14.584-.65-17.525.44-8.353.119-14.729.384-22.541.796-23.402-3.254-27.933-8.673-27.933-5.494 0-8.995 14.422-8.713 28.556.032 1.599-.291 12.685.047 22.465.189 5.453-.267 12.407-.42 17.418-.274 8.942-1.439 15.974-2.218 15.974-.66 0-1.033-8.146-1.364-16.427-.214-5.389-1.117-14.62-.916-20.904.472-14.753-.284-27.556-.265-30.375.158-23.739-3.665-30.775-9.013-30.775-5.369 0-9.297 7.548-9.15 30.835.016 2.633-.655 24.982-.44 30.454.216 5.498-.693 16.266-.879 21.205-.325 8.63-1.623 15.987-2.281 15.987-.821 0-2.699-6.41-2.931-15.242-.147-5.568.307-12.747.156-17.672-.315-10.176-.794-16.157-.97-24.927-.486-24.295-4.088-26.572-9.535-26.572-4.49 0-8.113 7.168-8.164 28.758-.017 6.925-.608 15.656-.079 23.582.201 3.02-.156 10.628-.469 18.473-.2 5.002-.275 11.876-.284 15.944-.042 19.649-6.678 33.356-9.139 32.827-7.583-1.63-12.912-10.979-17.805-29.327-2.637-9.891-9.166-17.787-17.474-19.453-6.475-1.298-4.946 11.54-.33 31.323 2.162 9.267 6.977 21.557 9.891 30.664 7.913 24.729 31.394 47.141 40.226 57.137 4.286 4.85 59.223 4.85 66.147 0 2.882-2.018 10.772-25.39 11.431-31.654Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapHumanRightHand.svg b/editor/icons/BoneMapHumanRightHand.svg index f676a05188..a2d1297f1b 100644 --- a/editor/icons/BoneMapHumanRightHand.svg +++ b/editor/icons/BoneMapHumanRightHand.svg @@ -1 +1 @@ -<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h256v256H0V0Z" fill="#3f3f3f"/><path d="M80.023 196.525c-1.761-16.733-7.033-38.341-4.632-65.048.286-3.178 1.125-12.071 1.115-20.683-.006-5.294.528-12.127.494-16.044-.042-4.833.107-10.396.156-13.939.263-18.86 3.306-21.456 7.703-21.456 4.312 0 6.693 3.566 6.766 21.145.015 3.605-.125 12.75-.125 14.625 0 4.377.083 8.542 0 13.375-.112 6.489 1.07 17 2.25 17 .975 0 2.025-9.825 2.394-19.25.189-4.831.804-14.584.65-17.525-.44-8.353-.119-14.729-.385-22.541-.795-23.402 3.254-27.933 8.674-27.933 5.493 0 8.995 14.422 8.712 28.556-.032 1.599.292 12.685-.047 22.465-.188 5.453.268 12.407.421 17.418.274 8.942 1.439 15.974 2.217 15.974.661 0 1.034-8.146 1.364-16.427.215-5.389 1.117-14.62.916-20.904-.471-14.753.285-27.556.266-30.375-.159-23.739 3.665-30.775 9.013-30.775 5.369 0 9.297 7.548 9.15 30.835-.017 2.633.655 24.982.44 30.454-.216 5.498.693 16.266.879 21.205.325 8.63 1.623 15.987 2.281 15.987.82 0 2.699-6.41 2.931-15.242.147-5.568-.308-12.747-.156-17.672.314-10.176.794-16.157.969-24.927.487-24.295 4.088-26.572 9.536-26.572 4.489 0 8.113 7.168 8.164 28.758.016 6.925.607 15.656.079 23.582-.202 3.02.155 10.628.468 18.473.2 5.002.276 11.876.285 15.944.042 19.649 6.678 33.356 9.139 32.827 7.583-1.63 12.912-10.979 17.804-29.327 2.638-9.891 9.167-17.787 17.475-19.453 6.475-1.298 4.946 11.54.33 31.323-2.162 9.267-6.977 21.557-9.892 30.664-7.913 24.729-31.393 47.141-40.225 57.137-4.287 4.85-59.224 4.85-66.148 0-2.88-2.018-10.771-25.39-11.43-31.654Z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path fill="#3f3f3f" d="M0 0h256v256H0V0Z"/><path fill="#b2b2b2" d="M80.023 196.525c-1.761-16.733-7.033-38.341-4.632-65.048.286-3.178 1.125-12.071 1.115-20.683-.006-5.294.528-12.127.494-16.044-.042-4.833.107-10.396.156-13.939.263-18.86 3.306-21.456 7.703-21.456 4.312 0 6.693 3.566 6.766 21.145.015 3.605-.125 12.75-.125 14.625 0 4.377.083 8.542 0 13.375-.112 6.489 1.07 17 2.25 17 .975 0 2.025-9.825 2.394-19.25.189-4.831.804-14.584.65-17.525-.44-8.353-.119-14.729-.385-22.541-.795-23.402 3.254-27.933 8.674-27.933 5.493 0 8.995 14.422 8.712 28.556-.032 1.599.292 12.685-.047 22.465-.188 5.453.268 12.407.421 17.418.274 8.942 1.439 15.974 2.217 15.974.661 0 1.034-8.146 1.364-16.427.215-5.389 1.117-14.62.916-20.904-.471-14.753.285-27.556.266-30.375-.159-23.739 3.665-30.775 9.013-30.775 5.369 0 9.297 7.548 9.15 30.835-.017 2.633.655 24.982.44 30.454-.216 5.498.693 16.266.879 21.205.325 8.63 1.623 15.987 2.281 15.987.82 0 2.699-6.41 2.931-15.242.147-5.568-.308-12.747-.156-17.672.314-10.176.794-16.157.969-24.927.487-24.295 4.088-26.572 9.536-26.572 4.489 0 8.113 7.168 8.164 28.758.016 6.925.607 15.656.079 23.582-.202 3.02.155 10.628.468 18.473.2 5.002.276 11.876.285 15.944.042 19.649 6.678 33.356 9.139 32.827 7.583-1.63 12.912-10.979 17.804-29.327 2.638-9.891 9.167-17.787 17.475-19.453 6.475-1.298 4.946 11.54.33 31.323-2.162 9.267-6.977 21.557-9.892 30.664-7.913 24.729-31.393 47.141-40.225 57.137-4.287 4.85-59.224 4.85-66.148 0-2.88-2.018-10.771-25.39-11.43-31.654Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapperHandle.svg b/editor/icons/BoneMapperHandle.svg index 3d3b5fdd2e..5ca399385b 100644 --- a/editor/icons/BoneMapperHandle.svg +++ b/editor/icons/BoneMapperHandle.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill-opacity=".294" r="5"/><circle cx="6" cy="6" fill="#fff" r="4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="5" fill-opacity=".294"/><circle cx="6" cy="6" r="4" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapperHandleCircle.svg b/editor/icons/BoneMapperHandleCircle.svg index c7d4cf2b1e..abd2e2c9ea 100644 --- a/editor/icons/BoneMapperHandleCircle.svg +++ b/editor/icons/BoneMapperHandleCircle.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#fff" r="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="3" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoneMapperHandleSelected.svg b/editor/icons/BoneMapperHandleSelected.svg index 731623c886..fba4eb2a4b 100644 --- a/editor/icons/BoneMapperHandleSelected.svg +++ b/editor/icons/BoneMapperHandleSelected.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill-opacity=".294" r="5"/><g fill="#fff"><circle cx="6" cy="6" r="4"/><path d="M7 0h5v5h-1V1H7zm5 7v5H7v-1h4V7zm-7 5H0V7h1v4h4zM0 5V0h5v1H1v4z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="5" fill-opacity=".294"/><g fill="#fff"><circle cx="6" cy="6" r="4"/><path d="M7 0h5v5h-1V1H7zm5 7v5H7v-1h4V7zm-7 5H0V7h1v4h4zM0 5V0h5v1H1v4z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/BoxContainer.svg b/editor/icons/BoxContainer.svg index 8bc2838803..cdd0633333 100644 --- a/editor/icons/BoxContainer.svg +++ b/editor/icons/BoxContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v2H3zm0 4h10v2H3zm0 4h10v2H3z" fill="#8eef97" transform="rotate(45 4.241 9.083) scale(.737)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v2H3zm0 4h10v2H3zm0 4h10v2H3z" transform="rotate(45 4.241 9.083)scale(.737)"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoxMesh.svg b/editor/icons/BoxMesh.svg index 734f239279..70c310398d 100644 --- a/editor/icons/BoxMesh.svg +++ b/editor/icons/BoxMesh.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoxOccluder3D.svg b/editor/icons/BoxOccluder3D.svg index 888e9febdd..9008f75b63 100644 --- a/editor/icons/BoxOccluder3D.svg +++ b/editor/icons/BoxOccluder3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .889-.506.254A4.5 4.5 0 1 1 1 7.314v4.297l7 3.5 7-3.5V4.39z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="m8 .889-.506.254A4.5 4.5 0 1 1 1 7.314v4.297l7 3.5 7-3.5V4.39z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BoxShape3D.svg b/editor/icons/BoxShape3D.svg index ba86e08afd..6af9780f62 100644 --- a/editor/icons/BoxShape3D.svg +++ b/editor/icons/BoxShape3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1-7 3v8l7 3 7-3v-8z" fill="#2998ff"/><path d="m8 15-7-3v-8l7 3z" fill="#5fb2ff"/><path d="m1 4 7 3 7-3-7-3z" fill="#a2d2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#2998ff" d="m8 1-7 3v8l7 3 7-3v-8z"/><path fill="#5fb2ff" d="m8 15-7-3v-8l7 3z"/><path fill="#a2d2ff" d="m1 4 7 3 7-3-7-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Breakpoint.svg b/editor/icons/Breakpoint.svg index dae5fa78d6..7eff32c4af 100644 --- a/editor/icons/Breakpoint.svg +++ b/editor/icons/Breakpoint.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.308" fill="#e0e0e0"/><circle cx="8" cy="8" r="3.033" fill="#fefefe"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.308" fill="#e0e0e0"/><circle cx="8" cy="8" r="3.033" fill="#fefefe"/></svg>
\ No newline at end of file diff --git a/editor/icons/Bucket.svg b/editor/icons/Bucket.svg index b2c694632d..67f336bb68 100644 --- a/editor/icons/Bucket.svg +++ b/editor/icons/Bucket.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8.693 2.51a.754.754 0 0 0-1.067 0l-.8.8 1.538 1.54a1.132 1.132 0 1 1-1.066 1.066l-1.54-1.54-.8.8-1.6-1.6A.754.754 0 0 1 4.425 2.51l3.273 3.273a.754.754 0 1 0 .533-.533L4.958 1.977A1.509 1.509 0 0 0 2.824 4.11l1.6 1.6-3.2 3.201a.754.754 0 0 0 0 1.067l4.268 4.268a.754.754 0 0 0 1.067 0l6.935-6.935zm4.801 5.869c-1.51 2.263-1.51 2.263-1.51 3.018 0 .754.756 1.509 1.51 1.509s1.51-.755 1.51-1.51c0-.754 0-.754-1.51-3.017z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8.693 2.51a.754.754 0 0 0-1.067 0l-.8.8 1.538 1.54a1.132 1.132 0 1 1-1.066 1.066l-1.54-1.54-.8.8-1.6-1.6A.754.754 0 0 1 4.425 2.51l3.273 3.273a.754.754 0 1 0 .533-.533L4.958 1.977A1.509 1.509 0 0 0 2.824 4.11l1.6 1.6-3.2 3.201a.754.754 0 0 0 0 1.067l4.268 4.268a.754.754 0 0 0 1.067 0l6.935-6.935zm4.801 5.869c-1.51 2.263-1.51 2.263-1.51 3.018 0 .754.756 1.509 1.51 1.509s1.51-.755 1.51-1.51c0-.754 0-.754-1.51-3.017z"/></svg>
\ No newline at end of file diff --git a/editor/icons/BusVuActive.svg b/editor/icons/BusVuActive.svg index 33906eea1e..730961a029 100644 --- a/editor/icons/BusVuActive.svg +++ b/editor/icons/BusVuActive.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 16 128" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="2" y2="126"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path d="M3 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 5H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10" fill="none" stroke-linecap="round" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="128"><linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff5f5f"/><stop offset=".5" stop-color="#e1da5b"/><stop offset="1" stop-color="#5fff97"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="M3 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 5H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10"/></svg>
\ No newline at end of file diff --git a/editor/icons/BusVuFrozen.svg b/editor/icons/BusVuFrozen.svg index 8b7f47932c..ce3c915708 100644 --- a/editor/icons/BusVuFrozen.svg +++ b/editor/icons/BusVuFrozen.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 16 128" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="2" y2="126"><stop offset="0" stop-color="#62aeff"/><stop offset=".5" stop-color="#75d1e6"/><stop offset="1" stop-color="#84ffee"/></linearGradient><path d="M3 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 5H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10" fill="none" stroke-linecap="round" opacity=".7" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="128"><linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62aeff"/><stop offset=".5" stop-color="#75d1e6"/><stop offset="1" stop-color="#84ffee"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="M3 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 5H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10m0 3H3m0 3h10" opacity=".7"/></svg>
\ No newline at end of file diff --git a/editor/icons/Button.svg b/editor/icons/Button.svg index ae7444c23b..ab463c47fb 100644 --- a/editor/icons/Button.svg +++ b/editor/icons/Button.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L9 4.133V1zM5.5 9A1.5 1.5 0 0 0 4 10.5V12H2v2h12v-2h-2v-1.5A1.5 1.5 0 0 0 10.5 9z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M7 1v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L9 4.133V1zM5.5 9A1.5 1.5 0 0 0 4 10.5V12H2v2h12v-2h-2v-1.5A1.5 1.5 0 0 0 10.5 9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ButtonGroup.svg b/editor/icons/ButtonGroup.svg index 81eaa7a3ab..3bba919dc5 100644 --- a/editor/icons/ButtonGroup.svg +++ b/editor/icons/ButtonGroup.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 1h2a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM6 6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm5 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm-7 2h1v2H4zm2 0h1v2H6zm2 0h1v2H8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 1h2a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM6 6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm5 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm0 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm-7 2h1v2H4zm2 0h1v2H6zm2 0h1v2H8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CPUParticles2D.svg b/editor/icons/CPUParticles2D.svg index 84754a31a1..d511546df6 100644 --- a/editor/icons/CPUParticles2D.svg +++ b/editor/icons/CPUParticles2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.586.5a.764.764 0 0 0-.764.764v.6h-1.2a.764.764 0 0 0-.764.764v1.2h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v4.5h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v1.2a.764.764 0 0 0 .764.764h1.2v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h4.5v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h1.2a.764.764 0 0 0 .764-.764v-1.2h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-4.5h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-1.2a.764.764 0 0 0-.764-.763h-1.2v-.6a.764.764 0 0 0-.764-.764h-.4a.764.764 0 0 0-.764.764v.6h-4.5v-.6a.764.764 0 0 0-.764-.764zm6.575 5.3a2.186 2.186 0 0 1-.3 4.349h-5.83a2.186 2.186 0 0 1-.3-4.349 3.28 3.644 0 0 1 6.434 0zM5.084 11a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zm5.83 0a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zM8 11.729a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.46z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M4.586.5a.764.764 0 0 0-.764.764v.6h-1.2a.764.764 0 0 0-.764.764v1.2h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v4.5h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v1.2a.764.764 0 0 0 .764.764h1.2v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h4.5v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h1.2a.764.764 0 0 0 .764-.764v-1.2h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-4.5h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-1.2a.764.764 0 0 0-.764-.763h-1.2v-.6a.764.764 0 0 0-.764-.764h-.4a.764.764 0 0 0-.764.764v.6h-4.5v-.6a.764.764 0 0 0-.764-.764zm6.575 5.3a2.186 2.186 0 0 1-.3 4.349h-5.83a2.186 2.186 0 0 1-.3-4.349 3.28 3.644 0 0 1 6.434 0zM5.084 11a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zm5.83 0a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zM8 11.729a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.46z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CPUParticles3D.svg b/editor/icons/CPUParticles3D.svg index e1a628d5c4..475eeb740b 100644 --- a/editor/icons/CPUParticles3D.svg +++ b/editor/icons/CPUParticles3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.586.5a.764.764 0 0 0-.764.764v.6h-1.2a.764.764 0 0 0-.764.764v1.2h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v4.5h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v1.2a.764.764 0 0 0 .764.764h1.2v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h4.5v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h1.2a.764.764 0 0 0 .764-.764v-1.2h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-4.5h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-1.2a.764.764 0 0 0-.764-.763h-1.2v-.6a.764.764 0 0 0-.764-.764h-.4a.764.764 0 0 0-.764.764v.6h-4.5v-.6a.764.764 0 0 0-.764-.764zm6.575 5.3a2.186 2.186 0 0 1-.3 4.349h-5.83a2.186 2.186 0 0 1-.3-4.349 3.28 3.644 0 0 1 6.434 0zM5.084 11a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zm5.83 0a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zM8 11.729a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.46z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4.586.5a.764.764 0 0 0-.764.764v.6h-1.2a.764.764 0 0 0-.764.764v1.2h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v4.5h-.6a.764.764 0 0 0-.764.764v.4a.764.764 0 0 0 .764.764h.6v1.2a.764.764 0 0 0 .764.764h1.2v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h4.5v.6a.764.764 0 0 0 .764.764h.4a.764.764 0 0 0 .764-.764v-.6h1.2a.764.764 0 0 0 .764-.764v-1.2h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-4.5h.6a.764.764 0 0 0 .764-.764v-.4a.764.764 0 0 0-.764-.764h-.6v-1.2a.764.764 0 0 0-.764-.763h-1.2v-.6a.764.764 0 0 0-.764-.764h-.4a.764.764 0 0 0-.764.764v.6h-4.5v-.6a.764.764 0 0 0-.764-.764zm6.575 5.3a2.186 2.186 0 0 1-.3 4.349h-5.83a2.186 2.186 0 0 1-.3-4.349 3.28 3.644 0 0 1 6.434 0zM5.084 11a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zm5.83 0a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.459zM8 11.729a.729.729 0 0 1 0 1.459.729.729 0 0 1 0-1.46z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Callable.svg b/editor/icons/Callable.svg index 73e1909d96..20798c6039 100644 --- a/editor/icons/Callable.svg +++ b/editor/icons/Callable.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m12 1c-2 2-4 4-7 4h-4v5h4c3 0 5 2 7 4zm1 4v5c2.59-.016 2.59-4.985 0-5zm-11 6v4h2l1-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m12 1c-2 2-4 4-7 4h-4v5h4c3 0 5 2 7 4zm1 4v5c2.59-.016 2.59-4.985 0-5zm-11 6v4h2l1-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Camera2D.svg b/editor/icons/Camera2D.svg index 81e5cc2c8e..e51e3c6d21 100644 --- a/editor/icons/Camera2D.svg +++ b/editor/icons/Camera2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 2a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V12a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1l3 2V7l-3 2V7.23A3 3 0 0 0 9 2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M9 2a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V12a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1l3 2V7l-3 2V7.23A3 3 0 0 0 9 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Camera3D.svg b/editor/icons/Camera3D.svg index bf61aa48fc..dacf2be53d 100644 --- a/editor/icons/Camera3D.svg +++ b/editor/icons/Camera3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 2a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V12a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1l3 2V7l-3 2V7.23A3 3 0 0 0 9 2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M9 2a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V12a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1l3 2V7l-3 2V7.23A3 3 0 0 0 9 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CameraAttributes.svg b/editor/icons/CameraAttributes.svg index d67e3d5713..bdc250863c 100644 --- a/editor/icons/CameraAttributes.svg +++ b/editor/icons/CameraAttributes.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2zm6.36 6.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2zm6.36 6.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CameraAttributesPhysical.svg b/editor/icons/CameraAttributesPhysical.svg index 6871177c13..964bea10c8 100644 --- a/editor/icons/CameraAttributesPhysical.svg +++ b/editor/icons/CameraAttributesPhysical.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2z" fill="#e0e0e0"/><path d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2z"/><path fill="#5fb2ff" d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CameraAttributesPractical.svg b/editor/icons/CameraAttributesPractical.svg index c33351af0f..8479f23172 100644 --- a/editor/icons/CameraAttributesPractical.svg +++ b/editor/icons/CameraAttributesPractical.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2z" fill="#e0e0e0"/><path d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 2a3 3 0 0 0-2 5.23V9L1 7v6l3-2v1a1 1 0 0 0 1 1h3a2 2 0 0 1 .73-1.24 1.83 1.83 0 0 1 1.828-3.143 1.8 1.8 0 0 1 3.313-.75 3 3 0 0 0-4.883-3.09A3 3 0 0 0 6 2z"/><path fill="#ffca5f" d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CameraTexture.svg b/editor/icons/CameraTexture.svg index af9c32f1a7..530cd8c6d2 100644 --- a/editor/icons/CameraTexture.svg +++ b/editor/icons/CameraTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm4 1-.75 1H5a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H9.75L9 4zm1 2a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm4 1-.75 1H5a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1H9.75L9 4zm1 2a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasGroup.svg b/editor/icons/CanvasGroup.svg index ff313238d9..913e842764 100644 --- a/editor/icons/CanvasGroup.svg +++ b/editor/icons/CanvasGroup.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z" fill="#8da5f3" fill-opacity=".6"/><path d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" fill-opacity=".6" d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z"/><path fill="#8da5f3" d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasItem.svg b/editor/icons/CanvasItem.svg index ec36a3b1f5..0006015a25 100644 --- a/editor/icons/CanvasItem.svg +++ b/editor/icons/CanvasItem.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.92 10c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.3-1.64 2.4 2.4 6.8-6.8a1.7 1.7 0 0 0-2.4-2.45z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M2.92 10c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.3-1.64 2.4 2.4 6.8-6.8a1.7 1.7 0 0 0-2.4-2.45z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasItemMaterial.svg b/editor/icons/CanvasItemMaterial.svg index 35f4bbb4f2..e5b34fd12a 100644 --- a/editor/icons/CanvasItemMaterial.svg +++ b/editor/icons/CanvasItemMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><circle cx="8" cy="8" r="7" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><circle cx="8" cy="8" r="7" fill="url(#a)"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasLayer.svg b/editor/icons/CanvasLayer.svg index e334df1431..87c3fc5395 100644 --- a/editor/icons/CanvasLayer.svg +++ b/editor/icons/CanvasLayer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v6h1V3a1 1 0 0 1 1-1h6V1zm-.08 9c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.381-1.61 2.4 2.441 6.802-6.917a1.7 1.7 0 0 0-2.4-2.442zm8.7-1.39v6a1 1 0 0 1-1 1H7v1h6a2 2 0 0 0 2-2V7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v6h1V3a1 1 0 0 1 1-1h6V1zm-.08 9c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.381-1.61 2.4 2.441 6.802-6.917a1.7 1.7 0 0 0-2.4-2.442zm8.7-1.39v6a1 1 0 0 1-1 1H7v1h6a2 2 0 0 0 2-2V7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasModulate.svg b/editor/icons/CanvasModulate.svg index 1a6d693506..8414cf37da 100644 --- a/editor/icons/CanvasModulate.svg +++ b/editor/icons/CanvasModulate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h14V1zm2 2h10v10H3z" fill="#8da5f3"/><path d="M12 12H7.2L12 7.2z" fill="#45d7ff"/><path d="M4 4h4.8L4 8.8z" fill="#ff4545"/><path d="M4 12V8.8L8.8 4H12v3.2L7.2 12z" fill="#80ff45"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M1 1v14h14V1zm2 2h10v10H3z"/><path fill="#45d7ff" d="M12 12H7.2L12 7.2z"/><path fill="#ff4545" d="M4 4h4.8L4 8.8z"/><path fill="#80ff45" d="M4 12V8.8L8.8 4H12v3.2L7.2 12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CanvasTexture.svg b/editor/icons/CanvasTexture.svg index 8734da3ee8..302db55464 100644 --- a/editor/icons/CanvasTexture.svg +++ b/editor/icons/CanvasTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v8.5c1.5.5 1-1 2-1V3h10v2.2a2.415 2.415 0 0 1 2 .5V2a1 1 0 0 0-1-1zm1.36 10.18c-.283.169-.516.466-.645.865-.416 1.277-2.417-.94-.946 2.009.465.931 1.912 1.202 2.835.723a1.922 1.922 0 0 0 .83-2.555c-.578-1.158-1.45-1.411-2.074-1.041zm2.222-.7 1.272 2.495 7.069-3.602a1.415 1.415 0 0 0-1.259-2.534zM9 5v1H8v1H6v1H5v1H4v1h.25L11 6.527V6h-1V5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v8.5c1.5.5 1-1 2-1V3h10v2.2a2.415 2.415 0 0 1 2 .5V2a1 1 0 0 0-1-1zm1.36 10.18c-.283.169-.516.466-.645.865-.416 1.277-2.417-.94-.946 2.009.465.931 1.912 1.202 2.835.723a1.922 1.922 0 0 0 .83-2.555c-.578-1.158-1.45-1.411-2.074-1.041zm2.222-.7 1.272 2.495 7.069-3.602a1.415 1.415 0 0 0-1.259-2.534zM9 5v1H8v1H6v1H5v1H4v1h.25L11 6.527V6h-1V5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CapsuleMesh.svg b/editor/icons/CapsuleMesh.svg index ad8eea2f01..7643bdf36b 100644 --- a/editor/icons/CapsuleMesh.svg +++ b/editor/icons/CapsuleMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 6a4 4 0 0 1 8 0v4a4 4 0 0 1-8 0zm0 1.25a2.5 1 0 0 0 8 0m-4-5v12" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="M4 6a4 4 0 0 1 8 0v4a4 4 0 0 1-8 0zm0 1.25a2.5 1 0 0 0 8 0m-4-5v12"/></svg>
\ No newline at end of file diff --git a/editor/icons/CapsuleShape2D.svg b/editor/icons/CapsuleShape2D.svg index dc1d5b06fc..89f24b11e5 100644 --- a/editor/icons/CapsuleShape2D.svg +++ b/editor/icons/CapsuleShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 6v4a4 4 0 0 0 8 0V6a4 4 0 0 0-8 0" stroke-width="2" stroke="#5fb2ff" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-width="2" d="M4 6v4a4 4 0 0 0 8 0V6a4 4 0 0 0-8 0"/></svg>
\ No newline at end of file diff --git a/editor/icons/CapsuleShape3D.svg b/editor/icons/CapsuleShape3D.svg index c8f000e9f9..6100b1d0b1 100644 --- a/editor/icons/CapsuleShape3D.svg +++ b/editor/icons/CapsuleShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 6v4a5 5 0 0 0 10 0V6A5 5 0 0 0 3 6z" fill="#5fb2ff"/><circle cx="6.5" cy="4.5" fill="#a2d2ff" r="1.5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="M3 6v4a5 5 0 0 0 10 0V6A5 5 0 0 0 3 6z"/><circle cx="6.5" cy="4.5" r="1.5" fill="#a2d2ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/CenterContainer.svg b/editor/icons/CenterContainer.svg index 990f63b6c2..c8d10c1089 100644 --- a/editor/icons/CenterContainer.svg +++ b/editor/icons/CenterContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm3 1 2 2 2-2zm-2 2v4l2-2zm8 0-2 2 2 2zm-4 4-2 2h4z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm3 1 2 2 2-2zm-2 2v4l2-2zm8 0-2 2 2 2zm-4 4-2 2h4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CenterView.svg b/editor/icons/CenterView.svg index dc4052fd6d..fbd23ae3e2 100644 --- a/editor/icons/CenterView.svg +++ b/editor/icons/CenterView.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="4" height="4" rx="1" fill="#e0e0e0"/><path d="M1.5 5.5 4 8l-2.5 2.5m13 0L12 8l2.5-2.5m-4-4L8 4 5.5 1.5m0 13L8 12l2.5 2.5" fill="none" stroke-width="1.5" stroke-linejoin="round" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="4" height="4" x="6" y="6" fill="#e0e0e0" rx="1"/><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="1.5" d="M1.5 5.5 4 8l-2.5 2.5m13 0L12 8l2.5-2.5m-4-4L8 4 5.5 1.5m0 13L8 12l2.5 2.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/CharacterBody2D.svg b/editor/icons/CharacterBody2D.svg index 2027ef22ca..a6c12d2bad 100644 --- a/editor/icons/CharacterBody2D.svg +++ b/editor/icons/CharacterBody2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.492 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.316.062l-2.051.684-.684-2.051a1 1 0 0 0-1.898.631l1 3a1 1 0 0 0 1.265.633l1.684-.56v.61c0 .041.019.076.024.116l-4.579 3.052a1 1 0 1 0 1.11 1.664l5.056-3.37 1.495 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.897l-2.178.725-.975-1.951a.981.981 0 0 0 .469-.827V9h1.383l.722 1.448a1 1 0 1 0 1.79-.895l-1-2A1 1 0 0 0 12.492 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M6.492 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.316.062l-2.051.684-.684-2.051a1 1 0 0 0-1.898.631l1 3a1 1 0 0 0 1.265.633l1.684-.56v.61c0 .041.019.076.024.116l-4.579 3.052a1 1 0 1 0 1.11 1.664l5.056-3.37 1.495 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.897l-2.178.725-.975-1.951a.981.981 0 0 0 .469-.827V9h1.383l.722 1.448a1 1 0 1 0 1.79-.895l-1-2A1 1 0 0 0 12.492 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CharacterBody3D.svg b/editor/icons/CharacterBody3D.svg index 332d33455d..4732bba151 100644 --- a/editor/icons/CharacterBody3D.svg +++ b/editor/icons/CharacterBody3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.492 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.316.062l-2.051.684-.684-2.051a1 1 0 0 0-1.898.631l1 3a1 1 0 0 0 1.265.633l1.684-.56v.61c0 .041.019.076.024.116l-4.579 3.052a1 1 0 1 0 1.11 1.664l5.056-3.37 1.495 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.897l-2.178.725-.975-1.951a.981.981 0 0 0 .469-.827V9h1.383l.722 1.448a1 1 0 1 0 1.79-.895l-1-2A1 1 0 0 0 12.492 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6.492 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.316.062l-2.051.684-.684-2.051a1 1 0 0 0-1.898.631l1 3a1 1 0 0 0 1.265.633l1.684-.56v.61c0 .041.019.076.024.116l-4.579 3.052a1 1 0 1 0 1.11 1.664l5.056-3.37 1.495 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.897l-2.178.725-.975-1.951a.981.981 0 0 0 .469-.827V9h1.383l.722 1.448a1 1 0 1 0 1.79-.895l-1-2A1 1 0 0 0 12.492 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CheckBox.svg b/editor/icons/CheckBox.svg index cbe203c797..8d89b753e4 100644 --- a/editor/icons/CheckBox.svg +++ b/editor/icons/CheckBox.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8l-2 2v3H3V4h7l2-2zm9.363 2.05L7.414 9 6 7.586 4.586 9l2.828 2.828 6.363-6.363z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 2a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8l-2 2v3H3V4h7l2-2zm9.363 2.05L7.414 9 6 7.586 4.586 9l2.828 2.828 6.363-6.363z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CheckButton.svg b/editor/icons/CheckButton.svg index 91367e2a2a..c279db4306 100644 --- a/editor/icons/CheckButton.svg +++ b/editor/icons/CheckButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4h6a4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 2h2.541a4 4 0 0 0 -.54102 2 4 4 0 0 0 .54102 2h-2.541a2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m5 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4h6a4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 2h2.541a4 4 0 0 0 -.54102 2 4 4 0 0 0 .54102 2h-2.541a2 2 0 0 1 -2-2 2 2 0 0 1 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Checkerboard.svg b/editor/icons/Checkerboard.svg index 5836c0641c..26ab5220d6 100644 --- a/editor/icons/Checkerboard.svg +++ b/editor/icons/Checkerboard.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M0 0h64v64H0z" fill-opacity=".2"/><path d="M0 0v16h16V0zm16 16v16h16V16zm16 0h16V0H32zm16 0v16h16V16zm0 16H32v16h16zm0 16v16h16V48zm-16 0H16v16h16zm-16 0V32H0v16z" fill-opacity=".4"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><g fill="#fff"><path fill-opacity=".2" d="M0 0h64v64H0z"/><path fill-opacity=".4" d="M0 0v16h16V0zm16 16v16h16V16zm16 0h16V0H32zm16 0v16h16V16zm0 16H32v16h16zm0 16v16h16V48zm-16 0H16v16h16zm-16 0V32H0v16z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/CircleShape2D.svg b/editor/icons/CircleShape2D.svg index da55f1d367..db61736a30 100644 --- a/editor/icons/CircleShape2D.svg +++ b/editor/icons/CircleShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" fill="none" stroke="#5fb2ff" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="6" fill="none" stroke="#5fb2ff" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/ClassList.svg b/editor/icons/ClassList.svg index 0316dfc942..68a662e83f 100644 --- a/editor/icons/ClassList.svg +++ b/editor/icons/ClassList.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1v1h-5v1h2v10h6v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-4h2v1h6v-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m6 1v1h-5v1h2v10h6v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-4h2v1h6v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Clear.svg b/editor/icons/Clear.svg index 577cacba22..d809d62e46 100644 --- a/editor/icons/Clear.svg +++ b/editor/icons/Clear.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a1 1 0 0 0 -1 1v5h-2c-1.108 0-2 .892-2 2v1h10v-1c0-1.108-.892-2-2-2h-2v-5a1 1 0 0 0 -1-1zm-5 10v4l10-1v-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m8 1a1 1 0 0 0 -1 1v5h-2c-1.108 0-2 .892-2 2v1h10v-1c0-1.108-.892-2-2-2h-2v-5a1 1 0 0 0 -1-1zm-5 10v4l10-1v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Close.svg b/editor/icons/Close.svg index be1c1dcec4..e2e9707e5b 100644 --- a/editor/icons/Close.svg +++ b/editor/icons/Close.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3 10 10M3 13 13 3" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-width="2" d="m3 3 10 10M3 13 13 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeEdit.svg b/editor/icons/CodeEdit.svg index e2c040cf8d..78430dd1d6 100644 --- a/editor/icons/CodeEdit.svg +++ b/editor/icons/CodeEdit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm2 1L4 5l1 1-1 1 1 1 2-2zm2 3v1h2V7z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm2 1L4 5l1 1-1 1 1 1 2-2zm2 3v1h2V7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeFoldDownArrow.svg b/editor/icons/CodeFoldDownArrow.svg index 027fb5d85a..8e0ee16352 100644 --- a/editor/icons/CodeFoldDownArrow.svg +++ b/editor/icons/CodeFoldDownArrow.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m3 5 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 5 3 3 3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeFoldedRightArrow.svg b/editor/icons/CodeFoldedRightArrow.svg index 2d48e96804..2189ee2f2d 100644 --- a/editor/icons/CodeFoldedRightArrow.svg +++ b/editor/icons/CodeFoldedRightArrow.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m4 9 3-3-3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4 9 3-3-3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeHighlighter.svg b/editor/icons/CodeHighlighter.svg index 8e0de9c642..e99222f72b 100644 --- a/editor/icons/CodeHighlighter.svg +++ b/editor/icons/CodeHighlighter.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a"><stop offset=".25" stop-color="#ffe345"/><stop offset=".75" stop-color="#919191"/></linearGradient><path d="m5.914 4-2 2H9.01V4z" fill="#45d7ff"/><path d="M11 4v2h4V4Z" fill="#ff4596"/><path d="M1 8v2h3V8z" fill="#ff4545"/><path d="M6 8v2h7V8z" fill="url(#a)"/><path d="M1 12v2h5v-2zm7 0v2h6v-2z" fill="#919191"/><path d="M2 1 1 2l1.5 1.5L1 5l1 1 2.5-2.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a"><stop offset=".25" stop-color="#ffe345"/><stop offset=".75" stop-color="#919191"/></linearGradient><path fill="#45d7ff" d="m5.914 4-2 2H9.01V4z"/><path fill="#ff4596" d="M11 4v2h4V4Z"/><path fill="#ff4545" d="M1 8v2h3V8z"/><path fill="url(#a)" d="M6 8v2h7V8z"/><path fill="#919191" d="M1 12v2h5v-2zm7 0v2h6v-2z"/><path fill="#e0e0e0" d="M2 1 1 2l1.5 1.5L1 5l1 1 2.5-2.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeRegionFoldDownArrow.svg b/editor/icons/CodeRegionFoldDownArrow.svg index 744ea7197d..5186dd8afb 100644 --- a/editor/icons/CodeRegionFoldDownArrow.svg +++ b/editor/icons/CodeRegionFoldDownArrow.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M10 3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1zM3 5.75a1 1 0 0 1 1.414-1.414L6 5.922l1.586-1.586A1 1 0 0 1 9 5.75L6.707 8.043a1 1 0 0 1-1.414 0z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="#fff" d="M10 3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1zM3 5.75a1 1 0 0 1 1.414-1.414L6 5.922l1.586-1.586A1 1 0 0 1 9 5.75L6.707 8.043a1 1 0 0 1-1.414 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CodeRegionFoldedRightArrow.svg b/editor/icons/CodeRegionFoldedRightArrow.svg index 245371b5a1..99e20678c9 100644 --- a/editor/icons/CodeRegionFoldedRightArrow.svg +++ b/editor/icons/CodeRegionFoldedRightArrow.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm2.75 7a1 1 0 0 1-1.414-1.414L5.922 6 4.336 4.414A1 1 0 0 1 5.75 3l2.293 2.293a1 1 0 0 1 0 1.414z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="#fff" d="M3 2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm2.75 7a1 1 0 0 1-1.414-1.414L5.922 6 4.336 4.414A1 1 0 0 1 5.75 3l2.293 2.293a1 1 0 0 1 0 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Collapse.svg b/editor/icons/Collapse.svg index fb594a636b..eb87f5a263 100644 --- a/editor/icons/Collapse.svg +++ b/editor/icons/Collapse.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 8 5 4 5-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 8 5 4 5-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/CollapseTree.svg b/editor/icons/CollapseTree.svg index bff3eca839..048ac81f32 100644 --- a/editor/icons/CollapseTree.svg +++ b/editor/icons/CollapseTree.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 9.669-3.536 2.583H7v2.537h2v-2.537h2.536zm0-3.314L4.464 3.772H7V1.235h2v2.537h2.536zm-7.296.73h14.591v1.831H.704z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m8 9.669-3.536 2.583H7v2.537h2v-2.537h2.536zm0-3.314L4.464 3.772H7V1.235h2v2.537h2.536zm-7.296.73h14.591v1.831H.704z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CollisionPolygon2D.svg b/editor/icons/CollisionPolygon2D.svg index 79278193e6..316ba08007 100644 --- a/editor/icons/CollisionPolygon2D.svg +++ b/editor/icons/CollisionPolygon2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V2h12L8 8z" fill="none" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2" d="M14 14H2V2h12L8 8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CollisionPolygon3D.svg b/editor/icons/CollisionPolygon3D.svg index 469a7ed732..b6ab1e6208 100644 --- a/editor/icons/CollisionPolygon3D.svg +++ b/editor/icons/CollisionPolygon3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2 6 3.5v5L8 14l-6-3.5v-5h6zm6 3.5L8 9 2 5.5M8 9v5" fill="none" stroke-linejoin="round" stroke-width="2" stroke="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-linejoin="round" stroke-width="2" d="m8 2 6 3.5v5L8 14l-6-3.5v-5h6zm6 3.5L8 9 2 5.5M8 9v5"/></svg>
\ No newline at end of file diff --git a/editor/icons/CollisionShape2D.svg b/editor/icons/CollisionShape2D.svg index b40701eb68..7fc1d17e1b 100644 --- a/editor/icons/CollisionShape2D.svg +++ b/editor/icons/CollisionShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V2h12z" fill="none" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2" d="M14 14H2V2h12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CollisionShape3D.svg b/editor/icons/CollisionShape3D.svg index 7299eacdf7..aa24d48cb4 100644 --- a/editor/icons/CollisionShape3D.svg +++ b/editor/icons/CollisionShape3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5" fill="none" stroke-width="2" stroke="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-width="2" d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5"/></svg>
\ No newline at end of file diff --git a/editor/icons/Color.svg b/editor/icons/Color.svg index a03753989f..5e4ac2ac00 100644 --- a/editor/icons/Color.svg +++ b/editor/icons/Color.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 4a3 3 0 0 0 0 6h1V8H4a1 1 0 0 1 0-2h1V4z" fill="#ff5f5f"/><path d="M6 2v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V2z" fill="#5fff97"/><path d="M14 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#ff5f5f" d="M4 4a3 3 0 0 0 0 6h1V8H4a1 1 0 0 1 0-2h1V4z"/><path fill="#5fff97" d="M6 2v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V2z"/><path fill="#5fb2ff" d="M14 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorPick.svg b/editor/icons/ColorPick.svg index ff44937a21..741bd7a300 100644 --- a/editor/icons/ColorPick.svg +++ b/editor/icons/ColorPick.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.108 0-2 .892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1-1.7305v-5h1v-2h-1v-2c0-1.108-.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m8 1c-1.108 0-2 .892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1-1.7305v-5h1v-2h-1v-2c0-1.108-.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorPicker.svg b/editor/icons/ColorPicker.svg index 8b77b87ff0..1c2ec26e67 100644 --- a/editor/icons/ColorPicker.svg +++ b/editor/icons/ColorPicker.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 5H5v2h1v5a2 2 0 0 0 1 1.728V15h2v-1.27A2 2 0 0 0 10 12V7h1V5h-1V3a1 1 0 0 0-4 0zm1 2h2v5a1 1 0 0 1-2 0z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M6 5H5v2h1v5a2 2 0 0 0 1 1.728V15h2v-1.27A2 2 0 0 0 10 12V7h1V5h-1V3a1 1 0 0 0-4 0zm1 2h2v5a1 1 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorPickerBarArrow.svg b/editor/icons/ColorPickerBarArrow.svg index 3474931e65..6068594386 100644 --- a/editor/icons/ColorPickerBarArrow.svg +++ b/editor/icons/ColorPickerBarArrow.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 16 20" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 16h12l-6-6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="20"><path fill="#e0e0e0" d="M2 16h12l-6-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorPickerButton.svg b/editor/icons/ColorPickerButton.svg index 57fe70987b..ea66a8dc2d 100644 --- a/editor/icons/ColorPickerButton.svg +++ b/editor/icons/ColorPickerButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11 5h-1v2h1v5a2 2 0 0 0 1 1.728V15h2v-1.27A2 2 0 0 0 15 12V7h1V5h-1V3a1 1 0 0 0-4 0zm1 2h2v5a1 1 0 0 1-2 0zM4 2v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L6 5.133V2zm-.5 8A1.5 1.5 0 0 0 2 11.5V13H1v2h8v-2H8v-1.5A1.5 1.5 0 0 0 6.5 10z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M11 5h-1v2h1v5a2 2 0 0 0 1 1.728V15h2v-1.27A2 2 0 0 0 15 12V7h1V5h-1V3a1 1 0 0 0-4 0zm1 2h2v5a1 1 0 0 1-2 0zM4 2v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L6 5.133V2zm-.5 8A1.5 1.5 0 0 0 2 11.5V13H1v2h8v-2H8v-1.5A1.5 1.5 0 0 0 6.5 10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorRect.svg b/editor/icons/ColorRect.svg index d155e2bac6..254fc47519 100644 --- a/editor/icons/ColorRect.svg +++ b/editor/icons/ColorRect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h14V1zm2 2h10v10H3z" fill="#8eef97"/><path d="M12 12H7.2L12 7.2z" fill="#45d7ff"/><path d="M4 4h4.8L4 8.8z" fill="#ff4545"/><path d="M4 12V8.8L8.8 4H12v3.2L7.2 12z" fill="#80ff45"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M1 1v14h14V1zm2 2h10v10H3z"/><path fill="#45d7ff" d="M12 12H7.2L12 7.2z"/><path fill="#ff4545" d="M4 4h4.8L4 8.8z"/><path fill="#80ff45" d="M4 12V8.8L8.8 4H12v3.2L7.2 12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ColorTrackVu.svg b/editor/icons/ColorTrackVu.svg index 627329274a..c463e28134 100644 --- a/editor/icons/ColorTrackVu.svg +++ b/editor/icons/ColorTrackVu.svg @@ -1 +1 @@ -<svg height="24" viewBox="0 0 16 24" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="24" y2="0"><stop offset="0" stop-color="#288027"/><stop offset=".75" stop-color="#dbee15"/><stop offset=".75" stop-color="#eec315"/><stop offset="1" stop-color="#f70000"/></linearGradient><path fill="url(#a)" d="M0 0h16v24H0z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="24"><linearGradient id="a" x1="8" x2="8" y1="24" y2="0" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#288027"/><stop offset=".75" stop-color="#dbee15"/><stop offset=".75" stop-color="#eec315"/><stop offset="1" stop-color="#f70000"/></linearGradient><path fill="url(#a)" d="M0 0h16v24H0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CombineLines.svg b/editor/icons/CombineLines.svg index 124814ae88..542053971d 100644 --- a/editor/icons/CombineLines.svg +++ b/editor/icons/CombineLines.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 2v2h14V2zm7 5v2h7V7zm0 5v2h7v-2zM4.976 14V9h2l-1.5-2-1.5-2-1.5 2-1.5 2h2v5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 2v2h14V2zm7 5v2h7V7zm0 5v2h7v-2zM4.976 14V9h2l-1.5-2-1.5-2-1.5 2-1.5 2h2v5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CompressedTexture2D.svg b/editor/icons/CompressedTexture2D.svg index aa65696396..53b80e0361 100644 --- a/editor/icons/CompressedTexture2D.svg +++ b/editor/icons/CompressedTexture2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h6v-2h2v-2H3V3h5V1zm6 2v2h2V3zm2 0h2V1h-2zm2 0v2h2V3zm0 2h-2v2h2zm0 2v2h2V7zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm-2-4V7H8V6H7v1H6v1H5v1H4v1h4V9z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h6v-2h2v-2H3V3h5V1zm6 2v2h2V3zm2 0h2V1h-2zm2 0v2h2V3zm0 2h-2v2h2zm0 2v2h2V7zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm-2-4V7H8V6H7v1H6v1H5v1H4v1h4V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CompressedTexture3D.svg b/editor/icons/CompressedTexture3D.svg index 0f027ad71b..8fc50da445 100644 --- a/editor/icons/CompressedTexture3D.svg +++ b/editor/icons/CompressedTexture3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 14a1 1 0 0 0 1 1h6v-2h2v-2H8v1H2.25V5H10V3H8v.75H3.25L5 2h3V1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5Zm6.675-8L8 6.5V7h2v2H8v1.75l-.325.25-1.5-.5-1.75.75-1.75-.75L4.25 8l.875 1.25ZM10 3h2V1h-2zm2 0v2h2V3zm0 2h-2v2h2zm0 2v2h2V7zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2z" fill="#e0e0e0"/><path d="M7.675 6v5L6 10.5l-.875-1.25zM4.25 8v3.25L2.5 10.5" fill="#000" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 14a1 1 0 0 0 1 1h6v-2h2v-2H8v1H2.25V5H10V3H8v.75H3.25L5 2h3V1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5Zm6.675-8L8 6.5V7h2v2H8v1.75l-.325.25-1.5-.5-1.75.75-1.75-.75L4.25 8l.875 1.25ZM10 3h2V1h-2zm2 0v2h2V3zm0 2h-2v2h2zm0 2v2h2V7zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2z"/><path fill-opacity=".4" d="M7.675 6v5L6 10.5l-.875-1.25zM4.25 8v3.25L2.5 10.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConcavePolygonShape2D.svg b/editor/icons/ConcavePolygonShape2D.svg index cb5d98c01a..8824c8bf26 100644 --- a/editor/icons/ConcavePolygonShape2D.svg +++ b/editor/icons/ConcavePolygonShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V2l6 6 6-6z" fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2" d="M14 14H2V2l6 6 6-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConcavePolygonShape3D.svg b/editor/icons/ConcavePolygonShape3D.svg index d970a161dd..51e0765312 100644 --- a/editor/icons/ConcavePolygonShape3D.svg +++ b/editor/icons/ConcavePolygonShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1 1 4v8l7 3 7-3V4zm7 3-2 1v6l-5 2v2l7-3z" fill="#2998ff"/><path d="m8 13 5-2-5-2-5 2zM8 1 1 4l2 1 5-2 5 2 2-1z" fill="#a2d2ff"/><path d="m8 9 5 2V5L8 3zM1 4v8l7 3v-2l-5-2V5z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#2998ff" d="M8 1 1 4v8l7 3 7-3V4zm7 3-2 1v6l-5 2v2l7-3z"/><path fill="#a2d2ff" d="m8 13 5-2-5-2-5 2zM8 1 1 4l2 1 5-2 5 2 2-1z"/><path fill="#5fb2ff" d="m8 9 5 2V5L8 3zM1 4v8l7 3v-2l-5-2V5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConeTwistJoint3D.svg b/editor/icons/ConeTwistJoint3D.svg index d2a9c0b609..1489b2e63e 100644 --- a/editor/icons/ConeTwistJoint3D.svg +++ b/editor/icons/ConeTwistJoint3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2-6 9a6 3 0 0 0 12 0 6 3 0 0 0-12 0m12 0L8 2v9" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke="#fc7f7f" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m8 2-6 9a6 3 0 0 0 12 0 6 3 0 0 0-12 0m12 0L8 2v9"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConfirmationDialog.svg b/editor/icons/ConfirmationDialog.svg index 1ef0c3c71a..be7834d16f 100644 --- a/editor/icons/ConfirmationDialog.svg +++ b/editor/icons/ConfirmationDialog.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm6.986 1.002A3 3 0 0 1 9 11.822V12H7v-1a1 1 0 0 1 1-1 1 1 0 1 0-.865-1.5 1 1 0 0 1-1.733-1 3 3 0 0 1 2.584-1.498zM7 13h2v1H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm6.986 1.002A3 3 0 0 1 9 11.822V12H7v-1a1 1 0 0 1 1-1 1 1 0 1 0-.865-1.5 1 1 0 0 1-1.733-1 3 3 0 0 1 2.584-1.498zM7 13h2v1H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Container.svg b/editor/icons/Container.svg index bfe78cbc67..b0657e0c82 100644 --- a/editor/icons/Container.svg +++ b/editor/icons/Container.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm12 0v2h2V9zM1 13a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm12 0v2h2V9zM1 13a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ContainerLayout.svg b/editor/icons/ContainerLayout.svg index 1eac17532f..336c853b9a 100644 --- a/editor/icons/ContainerLayout.svg +++ b/editor/icons/ContainerLayout.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm12 0v2h2V9zM1 13a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z" fill="#8eef97"/><path d="M7 7h4v4H7z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm12 0v2h2V9zM1 13a2 2 0 0 0 2 2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2a2 2 0 0 0 2-2z"/><path fill="#d6d6d6" d="M7 7h4v4H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Control.svg b/editor/icons/Control.svg index b1e43f8f3c..8b993345e8 100644 --- a/editor/icons/Control.svg +++ b/editor/icons/Control.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5" fill="none" stroke="#8eef97" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignBottomLeft.svg b/editor/icons/ControlAlignBottomLeft.svg index 34904b5c6a..80b9532cd6 100644 --- a/editor/icons/ControlAlignBottomLeft.svg +++ b/editor/icons/ControlAlignBottomLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 10h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 10h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignBottomRight.svg b/editor/icons/ControlAlignBottomRight.svg index 169ca2840f..c5ddf42c5a 100644 --- a/editor/icons/ControlAlignBottomRight.svg +++ b/editor/icons/ControlAlignBottomRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 10h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m10 10h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignBottomWide.svg b/editor/icons/ControlAlignBottomWide.svg index f51043789f..caa31ea227 100644 --- a/editor/icons/ControlAlignBottomWide.svg +++ b/editor/icons/ControlAlignBottomWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 10h12v4h-12z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 10h12v4h-12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignCenter.svg b/editor/icons/ControlAlignCenter.svg index 44dda03e47..c41e2195b8 100644 --- a/editor/icons/ControlAlignCenter.svg +++ b/editor/icons/ControlAlignCenter.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 6h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m6 6h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignCenterBottom.svg b/editor/icons/ControlAlignCenterBottom.svg index ca7f0c2e01..e8ee76c47f 100644 --- a/editor/icons/ControlAlignCenterBottom.svg +++ b/editor/icons/ControlAlignCenterBottom.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 10h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m6 10h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignCenterLeft.svg b/editor/icons/ControlAlignCenterLeft.svg index 612c36b4d6..905c568b3c 100644 --- a/editor/icons/ControlAlignCenterLeft.svg +++ b/editor/icons/ControlAlignCenterLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 6h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 6h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignCenterRight.svg b/editor/icons/ControlAlignCenterRight.svg index 43f8618c80..9347937277 100644 --- a/editor/icons/ControlAlignCenterRight.svg +++ b/editor/icons/ControlAlignCenterRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 6h4v4h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m10 6h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignCenterTop.svg b/editor/icons/ControlAlignCenterTop.svg index dca9c84ce6..f92344b55c 100644 --- a/editor/icons/ControlAlignCenterTop.svg +++ b/editor/icons/ControlAlignCenterTop.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 2h4v3.9999h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m6 2h4v3.9999h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignFullRect.svg b/editor/icons/ControlAlignFullRect.svg index 6dfde73e08..1d8535c445 100644 --- a/editor/icons/ControlAlignFullRect.svg +++ b/editor/icons/ControlAlignFullRect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#d6d6d6" d="m2 2h12v12h-12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignHCenterWide.svg b/editor/icons/ControlAlignHCenterWide.svg index af3f9b495b..1d980c97d8 100644 --- a/editor/icons/ControlAlignHCenterWide.svg +++ b/editor/icons/ControlAlignHCenterWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 6h12v4h-12z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 6h12v4h-12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignLeftWide.svg b/editor/icons/ControlAlignLeftWide.svg index 82f4911cb4..3f492c4c08 100644 --- a/editor/icons/ControlAlignLeftWide.svg +++ b/editor/icons/ControlAlignLeftWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h4v12h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 2h4v12h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignRightWide.svg b/editor/icons/ControlAlignRightWide.svg index 0ee0e095e2..2c71814336 100644 --- a/editor/icons/ControlAlignRightWide.svg +++ b/editor/icons/ControlAlignRightWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 2h4v12h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m10 2h4v12h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignTopLeft.svg b/editor/icons/ControlAlignTopLeft.svg index 68a8173835..36b11a1d8f 100644 --- a/editor/icons/ControlAlignTopLeft.svg +++ b/editor/icons/ControlAlignTopLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h4v3.9999h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 2h4v3.9999h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignTopRight.svg b/editor/icons/ControlAlignTopRight.svg index c862d20504..070c80ca00 100644 --- a/editor/icons/ControlAlignTopRight.svg +++ b/editor/icons/ControlAlignTopRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 2h4v3.9999h-4z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m10 2h4v3.9999h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignTopWide.svg b/editor/icons/ControlAlignTopWide.svg index 01d9690706..c319e8b77a 100644 --- a/editor/icons/ControlAlignTopWide.svg +++ b/editor/icons/ControlAlignTopWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h12v3.9999h-12z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="m0 0h16v16h-16z"/><path fill="#474747" d="m2 2h12v12h-12z"/><path fill="#d6d6d6" d="m2 2h12v3.9999h-12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlAlignVCenterWide.svg b/editor/icons/ControlAlignVCenterWide.svg index 538f3daed0..7e011897e7 100644 --- a/editor/icons/ControlAlignVCenterWide.svg +++ b/editor/icons/ControlAlignVCenterWide.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h16v16H0z" fill="#919191"/><path d="M2 2h12v12H2z" fill="#474747"/><path d="M10 2v12H6V2z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#919191" d="M0 0h16v16H0z"/><path fill="#474747" d="M2 2h12v12H2z"/><path fill="#d6d6d6" d="M10 2v12H6V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ControlLayout.svg b/editor/icons/ControlLayout.svg index c23e407ef2..6c581c2035 100644 --- a/editor/icons/ControlLayout.svg +++ b/editor/icons/ControlLayout.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11.793 8V6H8V3.887H6V6H3.858v2H6v3.967h2V8z" fill="#d6d6d6"/><path d="M8 .5a7.5 7.5 0 0 0 0 15 7.5 7.5 0 0 0 0-15zm0 2a5.5 5.5 0 0 1 0 11 5.5 5.5 0 0 1 0-11z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#d6d6d6" d="M11.793 8V6H8V3.887H6V6H3.858v2H6v3.967h2V8z"/><path fill="#8eef97" d="M8 .5a7.5 7.5 0 0 0 0 15 7.5 7.5 0 0 0 0-15zm0 2a5.5 5.5 0 0 1 0 11 5.5 5.5 0 0 1 0-11z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConvexPolygonShape2D.svg b/editor/icons/ConvexPolygonShape2D.svg index 23249190dd..8d692010b5 100644 --- a/editor/icons/ConvexPolygonShape2D.svg +++ b/editor/icons/ConvexPolygonShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V8l6-6 6 6z" fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2" d="M14 14H2V8l6-6 6 6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ConvexPolygonShape3D.svg b/editor/icons/ConvexPolygonShape3D.svg index 09c5ee9bee..7a1a42f957 100644 --- a/editor/icons/ConvexPolygonShape3D.svg +++ b/editor/icons/ConvexPolygonShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 15-7-3V4l7 3z" fill="#5fb2ff"/><path d="M8 1 1 4l7 11 7-3z" fill="#2998ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="m8 15-7-3V4l7 3z"/><path fill="#2998ff" d="M8 1 1 4l7 11 7-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CopyNodePath.svg b/editor/icons/CopyNodePath.svg index 457982bf14..9bf5d81fdf 100644 --- a/editor/icons/CopyNodePath.svg +++ b/editor/icons/CopyNodePath.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3zm3 5-2 4h2l2-4zm4 0-2 4h2l2-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3zm3 5-2 4h2l2-4zm4 0-2 4h2l2-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CreateNewSceneFrom.svg b/editor/icons/CreateNewSceneFrom.svg index e5b0e3c014..3dbd30b834 100644 --- a/editor/icons/CreateNewSceneFrom.svg +++ b/editor/icons/CreateNewSceneFrom.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h7v-1H8v-4h2V8h4v2h1V7z" fill="#e0e0e0"/><path d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h7v-1H8v-4h2V8h4v2h1V7z"/><path fill="#5fff97" d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CryptoKey.svg b/editor/icons/CryptoKey.svg index e4faefabae..bc1cbfc533 100644 --- a/editor/icons/CryptoKey.svg +++ b/editor/icons/CryptoKey.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 4.233 4.233" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.397.34-.749.747v.375l.188.187L.339 3.145v.375l.374.374h.374l.187-.188.282-.092.092-.282.282-.093.187-.56.28-.095.187-.187.187.187h.374l.748-.748.001-.374L2.772.34zm.374.858a.264.264 0 1 1 .002.528.264.264 0 0 1-.002-.528z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><path fill="#e0e0e0" d="m2.397.34-.749.747v.375l.188.187L.339 3.145v.375l.374.374h.374l.187-.188.282-.092.092-.282.282-.093.187-.56.28-.095.187-.187.187.187h.374l.748-.748.001-.374L2.772.34zm.374.858a.264.264 0 1 1 .002.528.264.264 0 0 1-.002-.528z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Cubemap.svg b/editor/icons/Cubemap.svg index 81965f7a09..fce76803f2 100644 --- a/editor/icons/Cubemap.svg +++ b/editor/icons/Cubemap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 6v4h4v-4zm8 0v4h4v-4z" fill="#5fff97"/><path d="m4 6v4h4v-4zm8 0v4h4v-4z" fill="#ff5f5f"/><path d="m4 2v4h4v-4zm0 8v4h4v-4z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="m0 6v4h4v-4zm8 0v4h4v-4z"/><path fill="#ff5f5f" d="m4 6v4h4v-4zm8 0v4h4v-4z"/><path fill="#5fb2ff" d="m4 2v4h4v-4zm0 8v4h4v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CubemapArray.svg b/editor/icons/CubemapArray.svg index 847fc7f70a..fbad386e77 100644 --- a/editor/icons/CubemapArray.svg +++ b/editor/icons/CubemapArray.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 6v4h2v-4zm6 0v4h4v-4z" fill="#5fff97"/><path d="m4 6v4h4v-4zm8 0v4h2v-4z" fill="#ff5f5f"/><path d="m4 2v4h4v-4zm0 8v4h4v-4z" fill="#5fb2ff"/><path d="m-.00000002 2v12h4.00000002v-2h-2v-8h2v-2h-2zm12.00000002 0v2h2.000001v8h-2.000001v2h4.000001v-12h-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="m2 6v4h2v-4zm6 0v4h4v-4z"/><path fill="#ff5f5f" d="m4 6v4h4v-4zm8 0v4h2v-4z"/><path fill="#5fb2ff" d="m4 2v4h4v-4zm0 8v4h4v-4z"/><path fill="#e0e0e0" d="m-.00000002 2v12h4.00000002v-2h-2v-8h2v-2h-2zm12.00000002 0v2h2.000001v8h-2.000001v2h4.000001v-12h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Curve.svg b/editor/icons/Curve.svg index 40615839e3..3c05f13402 100644 --- a/editor/icons/Curve.svg +++ b/editor/icons/Curve.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0" stroke-width="2"><path d="M2 1v13h13" stroke-opacity=".325"/><path d="M2 14c8 0 12-4 12-12" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0" stroke-width="2"><path stroke-opacity=".325" d="M2 1v13h13"/><path stroke-linecap="round" d="M2 14c8 0 12-4 12-12"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Curve2D.svg b/editor/icons/Curve2D.svg index e4cf1dcb9d..cc51a4539b 100644 --- a/editor/icons/Curve2D.svg +++ b/editor/icons/Curve2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M 2 14 C 14 14 2 2 14 2" fill="none" stroke-linecap="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M 2 14 C 14 14 2 2 14 2"/></svg>
\ No newline at end of file diff --git a/editor/icons/Curve3D.svg b/editor/icons/Curve3D.svg index a5cd20433e..5057ef6dbd 100644 --- a/editor/icons/Curve3D.svg +++ b/editor/icons/Curve3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2 2 5l6 3 6-3v6l-6 3-6-3" fill="none" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 2 2 5l6 3 6-3v6l-6 3-6-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveClose.svg b/editor/icons/CurveClose.svg index cf7f70d37d..1823775ea0 100644 --- a/editor/icons/CurveClose.svg +++ b/editor/icons/CurveClose.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13C3 4 4 3 13 5" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2"/><path d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#fff"/><path d="M10 6v2h2V6zm0 2H8v2h2zm-2 2H6v2h2z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" d="M5 13C3 4 4 3 13 5"/><path fill="#fff" d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/><path fill="#5fb2ff" d="M10 6v2h2V6zm0 2H8v2h2zm-2 2H6v2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveConstant.svg b/editor/icons/CurveConstant.svg index a09831c237..1ff093d172 100644 --- a/editor/icons/CurveConstant.svg +++ b/editor/icons/CurveConstant.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M2 6h8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M2 6h8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveCreate.svg b/editor/icons/CurveCreate.svg index 1b22b5bec5..f851c5b928 100644 --- a/editor/icons/CurveCreate.svg +++ b/editor/icons/CurveCreate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13C3 4 4 3 13 5" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2"/><path d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm6 5v3H8v2h3v3h2v-3h3v-2h-3V8z" fill="#5fff97"/><path d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" d="M5 13C3 4 4 3 13 5"/><path fill="#5fff97" d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm6 5v3H8v2h3v3h2v-3h3v-2h-3V8z"/><path fill="#fff" d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveCurve.svg b/editor/icons/CurveCurve.svg index 75ce3b8f66..398f0f3508 100644 --- a/editor/icons/CurveCurve.svg +++ b/editor/icons/CurveCurve.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13C3 4 4 3 13 5" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2"/><path d="M8.469.47 5.78 3.159a2 2 0 0 0-2.62 2.62L.47 8.47l1.06 1.062 2.69-2.69a2 2 0 0 0 2.62-2.62L9.53 1.53 8.47.471z" fill="#5fb2ff"/><path d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" d="M5 13C3 4 4 3 13 5"/><path fill="#5fb2ff" d="M8.469.47 5.78 3.159a2 2 0 0 0-2.62 2.62L.47 8.47l1.06 1.062 2.69-2.69a2 2 0 0 0 2.62-2.62L9.53 1.53 8.47.471z"/><path fill="#fff" d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveDelete.svg b/editor/icons/CurveDelete.svg index e7dc91744c..0f27b661a6 100644 --- a/editor/icons/CurveDelete.svg +++ b/editor/icons/CurveDelete.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13C3 4 4 3 13 5" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2"/><path d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4.879 5.465L8.465 9.879 10.585 12l-2.12 2.121 1.414 1.414L12 13.415l2.121 2.12 1.414-1.414L13.415 12l2.12-2.121-1.414-1.414L12 10.585z" fill="#ff5f5f"/><path d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" d="M5 13C3 4 4 3 13 5"/><path fill="#ff5f5f" d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4.879 5.465L8.465 9.879 10.585 12l-2.12 2.121 1.414 1.414L12 13.415l2.121 2.12 1.414-1.414L13.415 12l2.12-2.121-1.414-1.414L12 10.585z"/><path fill="#fff" d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveEdit.svg b/editor/icons/CurveEdit.svg index dee4e77176..f942c200f2 100644 --- a/editor/icons/CurveEdit.svg +++ b/editor/icons/CurveEdit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13C3 4 4 3 13 5" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2"/><path d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm3 5 3.291 8 .947-2.82 1.883 1.883.943-.942-1.884-1.883 2.82-.947L8 8z" fill="#5fb2ff"/><path d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" d="M5 13C3 4 4 3 13 5"/><path fill="#5fb2ff" d="M5 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm3 5 3.291 8 .947-2.82 1.883 1.883.943-.942-1.884-1.883 2.82-.947L8 8z"/><path fill="#fff" d="M13 3a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-8 8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveIn.svg b/editor/icons/CurveIn.svg index d1028a491d..caeaa390a2 100644 --- a/editor/icons/CurveIn.svg +++ b/editor/icons/CurveIn.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M2 10c5 0 8-3 8-8" fill="none" stroke="#80ff45" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#80ff45" stroke-linecap="round" stroke-width="2" d="M2 10c5 0 8-3 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveInOut.svg b/editor/icons/CurveInOut.svg index 13a9ceee2c..bb2835ea85 100644 --- a/editor/icons/CurveInOut.svg +++ b/editor/icons/CurveInOut.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M2 10c5 0 3-8 8-8" fill="none" stroke="#45d7ff" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#45d7ff" stroke-linecap="round" stroke-width="2" d="M2 10c5 0 3-8 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveLinear.svg b/editor/icons/CurveLinear.svg index c4fc83ae02..f4012776d7 100644 --- a/editor/icons/CurveLinear.svg +++ b/editor/icons/CurveLinear.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 10 8-8" fill="none" stroke="#ffe345" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#ffe345" stroke-linecap="round" stroke-width="2" d="m2 10 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveOut.svg b/editor/icons/CurveOut.svg index 339c56752e..712fd9b255 100644 --- a/editor/icons/CurveOut.svg +++ b/editor/icons/CurveOut.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M2 10c0-5 3-8 8-8" fill="none" stroke="#45ffa2" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#45ffa2" stroke-linecap="round" stroke-width="2" d="M2 10c0-5 3-8 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveOutIn.svg b/editor/icons/CurveOutIn.svg index 9d90c01dd6..35095597a7 100644 --- a/editor/icons/CurveOutIn.svg +++ b/editor/icons/CurveOutIn.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M2 10c0-5 8-3 8-8" fill="none" stroke="#ff4596" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#ff4596" stroke-linecap="round" stroke-width="2" d="M2 10c0-5 8-3 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveTexture.svg b/editor/icons/CurveTexture.svg index b9838ebc36..9fed625819 100644 --- a/editor/icons/CurveTexture.svg +++ b/editor/icons/CurveTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v9.16A3 3 0 0 1 2 11h1V3h10v1.135a3 3 0 0 1 2 0V2a1 1 0 0 0-1-1zm7 4v1H8v1H6v1H5v1H4v1h4.39c1.113-.567 1.968-1.454 2.61-3.473V6h-1V5zm4.039 1.727c-.927 3.246-2.636 4.682-4.652 5.466C6.37 12.978 4 13 2 13a1 1 0 1 0 0 2c2 0 4.63.024 7.113-.941 2.484-.966 4.775-3.03 5.848-6.784a1 1 0 0 0-1.922-.548z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v9.16A3 3 0 0 1 2 11h1V3h10v1.135a3 3 0 0 1 2 0V2a1 1 0 0 0-1-1zm7 4v1H8v1H6v1H5v1H4v1h4.39c1.113-.567 1.968-1.454 2.61-3.473V6h-1V5zm4.039 1.727c-.927 3.246-2.636 4.682-4.652 5.466C6.37 12.978 4 13 2 13a1 1 0 1 0 0 2c2 0 4.63.024 7.113-.941 2.484-.966 4.775-3.03 5.848-6.784a1 1 0 0 0-1.922-.548z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveTilt.svg b/editor/icons/CurveTilt.svg index 4cf7c5bff3..b4ff258bf7 100644 --- a/editor/icons/CurveTilt.svg +++ b/editor/icons/CurveTilt.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 16 16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="none" r="5" stroke="#ff6" stroke-miterlimit="10" stroke-width="2"/><path d="m8 8v-5" fill="none" stroke="#ff6" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="m8 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" fill="#fff"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><circle cx="8" cy="8" r="5" fill="none" stroke="#ff6" stroke-miterlimit="10" stroke-width="2"/><path fill="none" stroke="#ff6" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="m8 8v-5"/><path fill="#fff" d="m8 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/CurveXYZTexture.svg b/editor/icons/CurveXYZTexture.svg index e376dd434b..e56401c95e 100644 --- a/editor/icons/CurveXYZTexture.svg +++ b/editor/icons/CurveXYZTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v10a2 2 0 0 1 .75-.1Q3 11.9 3 10.62V3h10v6.5a2 2 0 0 1 2 0V2a1 1 0 0 0-1-1zm7 4v1H8v1H6v1H5v1H4v.5a2 2 0 0 1 2.7.5h1.2a2 2 0 0 1 3.2 0h.9V8h-1V6h-1V5z" fill="#e0e0e0"/><g stroke-width="1.6" stroke-linecap="round" fill="none"><path d="M2 14.2q2.5 0 3-3" stroke="#ff5f5f"/><path d="M6.5 14.2q2.5 0 3-3" stroke="#5fff97"/><path d="M11 14.2q2.5 0 3-3" stroke="#5fb2ff"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v10a2 2 0 0 1 .75-.1Q3 11.9 3 10.62V3h10v6.5a2 2 0 0 1 2 0V2a1 1 0 0 0-1-1zm7 4v1H8v1H6v1H5v1H4v.5a2 2 0 0 1 2.7.5h1.2a2 2 0 0 1 3.2 0h.9V8h-1V6h-1V5z"/><g fill="none" stroke-linecap="round" stroke-width="1.6"><path stroke="#ff5f5f" d="M2 14.2q2.5 0 3-3"/><path stroke="#5fff97" d="M6.5 14.2q2.5 0 3-3"/><path stroke="#5fb2ff" d="M11 14.2q2.5 0 3-3"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/CylinderMesh.svg b/editor/icons/CylinderMesh.svg index 9d0045a341..e64b204875 100644 --- a/editor/icons/CylinderMesh.svg +++ b/editor/icons/CylinderMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 4v8a6 2 0 0 0 12 0V4A6 2 0 0 0 2 4a6 2 0 0 0 12 0" stroke-width="2" fill="none" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="M2 4v8a6 2 0 0 0 12 0V4A6 2 0 0 0 2 4a6 2 0 0 0 12 0"/></svg>
\ No newline at end of file diff --git a/editor/icons/CylinderShape3D.svg b/editor/icons/CylinderShape3D.svg index a70a7609f3..22e96bae82 100644 --- a/editor/icons/CylinderShape3D.svg +++ b/editor/icons/CylinderShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 4h14v8H1z" fill="#5fb2ff"/><ellipse cx="8" cy="4" fill="#a2d2ff" rx="7" ry="3"/><ellipse cx="8" cy="12" fill="#5fb2ff" rx="7" ry="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="M1 4h14v8H1z"/><ellipse cx="8" cy="4" fill="#a2d2ff" rx="7" ry="3"/><ellipse cx="8" cy="12" fill="#5fb2ff" rx="7" ry="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/DampedSpringJoint2D.svg b/editor/icons/DampedSpringJoint2D.svg index 88a3b41cb4..a84e99565e 100644 --- a/editor/icons/DampedSpringJoint2D.svg +++ b/editor/icons/DampedSpringJoint2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 1 4 3v2l4.8 1.8L4 8v2l4.8 1.8L4 13v2l8-2v-2L7.2 9.2 12 8V6L7.2 4.2 12 3V1" fill="#8da5f3"/><path d="m4 5 4.8 1.8L12 6 7.2 4.2M4 10l4.8 1.8L12 11 7.2 9.2" fill="#010101" fill-opacity=".235"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M12 1 4 3v2l4.8 1.8L4 8v2l4.8 1.8L4 13v2l8-2v-2L7.2 9.2 12 8V6L7.2 4.2 12 3V1"/><path fill="#010101" fill-opacity=".235" d="m4 5 4.8 1.8L12 6 7.2 4.2M4 10l4.8 1.8L12 11 7.2 9.2"/></svg>
\ No newline at end of file diff --git a/editor/icons/Debug.svg b/editor/icons/Debug.svg index e3293c1417..1956af0707 100644 --- a/editor/icons/Debug.svg +++ b/editor/icons/Debug.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a5 5 0 0 0-3.535 1.465 1 1 0 0 0 1.414 1.414 3 3 0 0 1 4.242 0 1 1 0 0 0 1.414-1.414A5 5 0 0 0 8 1zM3 4.996a1 1 0 0 0-1 1c0 .833.327 1.697.969 2.5.33.413.77.796 1.3 1.072a4 4 0 0 0-.136.432H2a1 1 0 0 0 0 2h2.131a4 4 0 0 0 .18.537c-.142.09-.279.185-.41.283-.586.44-1.108.97-1.608 1.47a1 1 0 0 0 1.414 1.413c.5-.5.978-.972 1.393-1.283.17-.127.31-.203.443-.27a4 4 0 0 0 4.914 0c.133.067.273.142.442.268.414.311.892.783 1.392 1.283a1 1 0 0 0 1.414-1.414c-.5-.5-1.022-1.03-1.607-1.469a6.236 6.236 0 0 0-.408-.28 4 4 0 0 0 .175-.54h2.133a1 1 0 0 0 0-2h-2.13a4 4 0 0 0-.135-.434 4.117 4.117 0 0 0 1.296-1.07c.643-.803.97-1.666.97-2.5a1 1 0 0 0-2 0c0 .167-.174.803-.532 1.25-.25.314-.549.55-.932.666a4 4 0 0 0-.603-.412 2 2 0 1 0-3.867 0 4 4 0 0 0-.604.408c-.383-.117-.68-.352-.931-.666-.358-.447-.532-1.083-.532-1.25a1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1a5 5 0 0 0-3.535 1.465 1 1 0 0 0 1.414 1.414 3 3 0 0 1 4.242 0 1 1 0 0 0 1.414-1.414A5 5 0 0 0 8 1zM3 4.996a1 1 0 0 0-1 1c0 .833.327 1.697.969 2.5.33.413.77.796 1.3 1.072a4 4 0 0 0-.136.432H2a1 1 0 0 0 0 2h2.131a4 4 0 0 0 .18.537c-.142.09-.279.185-.41.283-.586.44-1.108.97-1.608 1.47a1 1 0 0 0 1.414 1.413c.5-.5.978-.972 1.393-1.283.17-.127.31-.203.443-.27a4 4 0 0 0 4.914 0c.133.067.273.142.442.268.414.311.892.783 1.392 1.283a1 1 0 0 0 1.414-1.414c-.5-.5-1.022-1.03-1.607-1.469a6.236 6.236 0 0 0-.408-.28 4 4 0 0 0 .175-.54h2.133a1 1 0 0 0 0-2h-2.13a4 4 0 0 0-.135-.434 4.117 4.117 0 0 0 1.296-1.07c.643-.803.97-1.666.97-2.5a1 1 0 0 0-2 0c0 .167-.174.803-.532 1.25-.25.314-.549.55-.932.666a4 4 0 0 0-.603-.412 2 2 0 1 0-3.867 0 4 4 0 0 0-.604.408c-.383-.117-.68-.352-.931-.666-.358-.447-.532-1.083-.532-1.25a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DebugContinue.svg b/editor/icons/DebugContinue.svg index 84f1880f9c..ec7cbafa42 100644 --- a/editor/icons/DebugContinue.svg +++ b/editor/icons/DebugContinue.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 4v3H5v2h5v3l2.5-2L15 8l-2.5-2z" fill="#ff5f5f"/><circle cx="4" cy="8" fill="#e0e0e0" r="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M10 4v3H5v2h5v3l2.5-2L15 8l-2.5-2z"/><circle cx="4" cy="8" r="3" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/DebugNext.svg b/editor/icons/DebugNext.svg index 50532d6e77..034279ddbc 100644 --- a/editor/icons/DebugNext.svg +++ b/editor/icons/DebugNext.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1v10h-2l1.5 2 1.5 2 1.5-2 1.5-2h-2v-10z" fill="#ff5f5f"/><path d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="m3 1v10h-2l1.5 2 1.5 2 1.5-2 1.5-2h-2v-10z"/><path fill="#e0e0e0" d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DebugSkipBreakpointsOff.svg b/editor/icons/DebugSkipBreakpointsOff.svg index 7419b261fe..9238f11665 100644 --- a/editor/icons/DebugSkipBreakpointsOff.svg +++ b/editor/icons/DebugSkipBreakpointsOff.svg @@ -1 +1 @@ -<svg height="17" width="17" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg"><circle cx="8.5" cy="8.5" r="6" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17"><circle cx="8.5" cy="8.5" r="6" fill="#fc7f7f"/></svg>
\ No newline at end of file diff --git a/editor/icons/DebugSkipBreakpointsOn.svg b/editor/icons/DebugSkipBreakpointsOn.svg index 4bed88c0d3..bed5b8325f 100644 --- a/editor/icons/DebugSkipBreakpointsOn.svg +++ b/editor/icons/DebugSkipBreakpointsOn.svg @@ -1 +1 @@ -<svg height="17" width="17" xmlns="http://www.w3.org/2000/svg"><circle cx="8.5" cy="8.5" r="6" fill="#fc7f7f"/><path d="M1.077 14.239 14.192 1.084l1.779 1.784L2.855 16.022z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17"><circle cx="8.5" cy="8.5" r="6" fill="#fc7f7f"/><path fill="#e0e0e0" d="M1.077 14.239 14.192 1.084l1.779 1.784L2.855 16.022z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DebugStep.svg b/editor/icons/DebugStep.svg index f8d57ef693..67d4b80a67 100644 --- a/editor/icons/DebugStep.svg +++ b/editor/icons/DebugStep.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v8 2h2 1v2l2-1.5 2-1.5-2-1.5-2-1.5v2h-1v-8z" fill="#ff5f5f"/><path d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="m1 1v8 2h2 1v2l2-1.5 2-1.5-2-1.5-2-1.5v2h-1v-8z"/><path fill="#e0e0e0" d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Decal.svg b/editor/icons/Decal.svg index 17999b5956..1b37db377f 100644 --- a/editor/icons/Decal.svg +++ b/editor/icons/Decal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13.91 7A6 6 0 1 0 5 13.191z" fill="#fc7f7f"/><path d="M13.91 7A6 6 0 0 0 5 13.191z" fill="#ff5f5f"/><path d="M5 13.191A6 6 0 0 0 13.91 7z" fill="#fc7f7f" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M13.91 7A6 6 0 1 0 5 13.191z"/><path fill="#ff5f5f" d="M13.91 7A6 6 0 0 0 5 13.191z"/><path fill="#fc7f7f" fill-opacity=".4" d="M5 13.191A6 6 0 0 0 13.91 7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DefaultProjectIcon.svg b/editor/icons/DefaultProjectIcon.svg index 3fe4f4ae8c..9d8b7fa14f 100644 --- a/editor/icons/DefaultProjectIcon.svg +++ b/editor/icons/DefaultProjectIcon.svg @@ -1 +1 @@ -<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Dictionary.svg b/editor/icons/Dictionary.svg index 98c9384184..b5dbb316de 100644 --- a/editor/icons/Dictionary.svg +++ b/editor/icons/Dictionary.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2v2a3 3 0 0 0 0 6h2V2zm3 0v2h2V2zm7 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zm-2 2a3 3 0 0 0 0 6h1V8h-1a1 1 0 0 1 0-2h1V4zM8 7V6H6v4h2zM3 6v2a1 1 0 0 1 0-2z" fill="#54ed9e"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#54ed9e" d="M3 2v2a3 3 0 0 0 0 6h2V2zm3 0v2h2V2zm7 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zm-2 2a3 3 0 0 0 0 6h1V8h-1a1 1 0 0 1 0-2h1V4zM8 7V6H6v4h2zM3 6v2a1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DirAccess.svg b/editor/icons/DirAccess.svg index f3be0f00cc..e1f07f9dde 100644 --- a/editor/icons/DirAccess.svg +++ b/editor/icons/DirAccess.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M3 10v3h11V5H9.5l-1-2H3v3" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linejoin="round"/><path d="M6 11V9H1V7h5V5l3 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M3 10v3h11V5H9.5l-1-2H3v3"/><path fill="#e0e0e0" d="M6 11V9H1V7h5V5l3 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DirectionalLight2D.svg b/editor/icons/DirectionalLight2D.svg index b4204eb21f..0d7315459b 100644 --- a/editor/icons/DirectionalLight2D.svg +++ b/editor/icons/DirectionalLight2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DirectionalLight3D.svg b/editor/icons/DirectionalLight3D.svg index 61fb101ce0..024a73597a 100644 --- a/editor/icons/DirectionalLight3D.svg +++ b/editor/icons/DirectionalLight3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/DistractionFree.svg b/editor/icons/DistractionFree.svg index d4778930d2..2f78485207 100644 --- a/editor/icons/DistractionFree.svg +++ b/editor/icons/DistractionFree.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v5l1.793-1.793 2.5 2.5 1.4141-1.4141-2.5-2.5 1.793-1.793h-5zm9 0 1.793 1.793-2.5 2.5 1.4141 1.4141 2.5-2.5 1.793 1.793v-5h-5zm-4.707 8.293-2.5 2.5-1.793-1.793v5h5l-1.793-1.793 2.5-2.5-1.4141-1.4141zm5.4141 0-1.4141 1.4141 2.5 2.5-1.793 1.793h5v-5l-1.793 1.793-2.5-2.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v5l1.793-1.793 2.5 2.5 1.4141-1.4141-2.5-2.5 1.793-1.793h-5zm9 0 1.793 1.793-2.5 2.5 1.4141 1.4141 2.5-2.5 1.793 1.793v-5h-5zm-4.707 8.293-2.5 2.5-1.793-1.793v5h5l-1.793-1.793 2.5-2.5-1.4141-1.4141zm5.4141 0-1.4141 1.4141 2.5 2.5-1.793 1.793h5v-5l-1.793 1.793-2.5-2.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Duplicate.svg b/editor/icons/Duplicate.svg index a7381f919f..48b198c1e7 100644 --- a/editor/icons/Duplicate.svg +++ b/editor/icons/Duplicate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1v11h9v-6h-5v-5zm5 0v4h4zm-8 3v11h2 8v-2h-8v-9z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m5 1v11h9v-6h-5v-5zm5 0v4h4zm-8 3v11h2 8v-2h-8v-9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Edit.svg b/editor/icons/Edit.svg index 6fc7ae012d..7963e54449 100644 --- a/editor/icons/Edit.svg +++ b/editor/icons/Edit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3v-7zm1 1h1v5h-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m7 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3v-7zm1 1h1v5h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditAddRemove.svg b/editor/icons/EditAddRemove.svg index b07ba1090e..09af4f7f6c 100644 --- a/editor/icons/EditAddRemove.svg +++ b/editor/icons/EditAddRemove.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a1 1 0 0 0-1 1v2h4V2a1 1 0 0 0-1-1zM2 5v7l2 3 2-3V5zm1 1h1v5H3zm7.75-.25v2h-2v1.5h2v2h1.5v-2h2v-1.5h-2v-2zm-2 7v1.5h5.5v-1.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a1 1 0 0 0-1 1v2h4V2a1 1 0 0 0-1-1zM2 5v7l2 3 2-3V5zm1 1h1v5H3zm7.75-.25v2h-2v1.5h2v2h1.5v-2h2v-1.5h-2v-2zm-2 7v1.5h5.5v-1.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditBezier.svg b/editor/icons/EditBezier.svg index e082b17d95..9ba25e49b1 100644 --- a/editor/icons/EditBezier.svg +++ b/editor/icons/EditBezier.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.476 13.906c11.65.72 3.11-11.497 12.233-11.347" fill="none" stroke="#5fb2ff" stroke-width="2.2"/><g fill="#e0e0e0"><circle cx="13.5" cy="2.5" r="1.823"/><circle cx="2.5" cy="14" r="1.823"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-width="2.2" d="M1.476 13.906c11.65.72 3.11-11.497 12.233-11.347"/><g fill="#e0e0e0"><circle cx="13.5" cy="2.5" r="1.823"/><circle cx="2.5" cy="14" r="1.823"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/EditInternal.svg b/editor/icons/EditInternal.svg index 14e8518797..cf6a470b24 100644 --- a/editor/icons/EditInternal.svg +++ b/editor/icons/EditInternal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M3.678 1c-.554 0-1 .446-1 1v2h4V2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3V5zm1 1h1v5h-1z"/><circle cx="10.508" cy="12.678" r="2.373"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M3.678 1c-.554 0-1 .446-1 1v2h4V2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3V5zm1 1h1v5h-1z"/><circle cx="10.508" cy="12.678" r="2.373"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/EditKey.svg b/editor/icons/EditKey.svg index a30ce8f67b..b3fdbe33c5 100644 --- a/editor/icons/EditKey.svg +++ b/editor/icons/EditKey.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 1a1 1 0 0 0-1 1v2h4V2a1 1 0 0 0-1-1zM1.226 7.46a.76.76 0 0 0 0 1.078l3.236 3.236a.76.76 0 0 0 1.078 0L8.775 8.54a.76.76 0 0 0 0-1.078L5.54 4.225a.76.76 0 0 0-1.08 0zM11 5v7l2 3 2-3V5zm1 1h1v5h-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 1a1 1 0 0 0-1 1v2h4V2a1 1 0 0 0-1-1zM1.226 7.46a.76.76 0 0 0 0 1.078l3.236 3.236a.76.76 0 0 0 1.078 0L8.775 8.54a.76.76 0 0 0 0-1.078L5.54 4.225a.76.76 0 0 0-1.08 0zM11 5v7l2 3 2-3V5zm1 1h1v5h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditPivot.svg b/editor/icons/EditPivot.svg index 140fbd629f..2e2081561d 100644 --- a/editor/icons/EditPivot.svg +++ b/editor/icons/EditPivot.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v.61328l3.3711 1.3867h.62891v-2h-4zm-3 1 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291zm-1 3v4h2v-.625l-1.3887-3.375h-.61133z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v.61328l3.3711 1.3867h.62891v-2h-4zm-3 1 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291zm-1 3v4h2v-.625l-1.3887-3.375h-.61133z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Editor3DHandle.svg b/editor/icons/Editor3DHandle.svg index 7eb2fdea94..cdf01d754e 100644 --- a/editor/icons/Editor3DHandle.svg +++ b/editor/icons/Editor3DHandle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".294" r="8"/><circle cx="8" cy="8" fill="#ff5f5f" r="6" stroke="#fff" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill-opacity=".294"/><circle cx="8" cy="8" r="6" fill="#ff5f5f" stroke="#fff" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorBoneHandle.svg b/editor/icons/EditorBoneHandle.svg index f85567bcb2..81ec08526a 100644 --- a/editor/icons/EditorBoneHandle.svg +++ b/editor/icons/EditorBoneHandle.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="4" fill="#000" r="3.25" stroke-width="1.5" stroke="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><circle cx="4" cy="4" r="3.25" stroke="#fff" stroke-width="1.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorControlAnchor.svg b/editor/icons/EditorControlAnchor.svg index 46583722cd..d7d7830fe2 100644 --- a/editor/icons/EditorControlAnchor.svg +++ b/editor/icons/EditorControlAnchor.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M16 16 9.883 6.06a5 5 0 1 0-3.826 3.82z" fill-opacity=".4"/><path d="M16 16 8.832 6.144A4 4 0 1 0 6.14 8.83z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".4" d="M16 16 9.883 6.06a5 5 0 1 0-3.826 3.82z"/><path fill="#8eef97" d="M16 16 8.832 6.144A4 4 0 1 0 6.14 8.83z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorCurveHandle.svg b/editor/icons/EditorCurveHandle.svg index e57d6b5dbb..a9eb929082 100644 --- a/editor/icons/EditorCurveHandle.svg +++ b/editor/icons/EditorCurveHandle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#ffffff" r="4.4" stroke="#000000" stroke-linecap="square" stroke-width="1.6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="4.4" fill="#fff" stroke="#000" stroke-linecap="square" stroke-width="1.6"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorFileDialog.svg b/editor/icons/EditorFileDialog.svg index 6b16dbb3e9..c6076c9fcb 100644 --- a/editor/icons/EditorFileDialog.svg +++ b/editor/icons/EditorFileDialog.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm3 2h3c1 0 1 2 2 2h3v4H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm3 2h3c1 0 1 2 2 2h3v4H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorHandle.svg b/editor/icons/EditorHandle.svg index 1bd3218342..236bb05a71 100644 --- a/editor/icons/EditorHandle.svg +++ b/editor/icons/EditorHandle.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill-opacity=".294" r="5"/><circle cx="5" cy="5" fill="#ff5f5f" r="3.5" stroke="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><circle cx="5" cy="5" r="5" fill-opacity=".294"/><circle cx="5" cy="5" r="3.5" fill="#ff5f5f" stroke="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorHandleAdd.svg b/editor/icons/EditorHandleAdd.svg index a267170b8a..6c1fc48a06 100644 --- a/editor/icons/EditorHandleAdd.svg +++ b/editor/icons/EditorHandleAdd.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill-opacity=".294" r="5"/><circle cx="5" cy="5" fill="#474747" r="4"/><path d="m4 2v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><circle cx="5" cy="5" r="5" fill-opacity=".294"/><circle cx="5" cy="5" r="4" fill="#474747"/><path fill="#5fff97" d="m4 2v2h-2v2h2v2h2v-2h2v-2h-2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorHandleDisabled.svg b/editor/icons/EditorHandleDisabled.svg index 1d60e36559..ca5f0deac2 100644 --- a/editor/icons/EditorHandleDisabled.svg +++ b/editor/icons/EditorHandleDisabled.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" r="4" fill="none" stroke="#fff" stroke-width="2" stroke-opacity=".294"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><circle cx="5" cy="5" r="4" fill="none" stroke="#fff" stroke-opacity=".294" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPathSharpHandle.svg b/editor/icons/EditorPathSharpHandle.svg index 7fb35eedfb..6857db2750 100644 --- a/editor/icons/EditorPathSharpHandle.svg +++ b/editor/icons/EditorPathSharpHandle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14.869 8 8 14.869 1.131 8 8 1.131z" fill="#fff" stroke="#000" stroke-width="1.6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#000" stroke-width="1.6" d="M14.869 8 8 14.869 1.131 8 8 1.131z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPathSmoothHandle.svg b/editor/icons/EditorPathSmoothHandle.svg index d4bd434020..50f59df570 100644 --- a/editor/icons/EditorPathSmoothHandle.svg +++ b/editor/icons/EditorPathSmoothHandle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.6 2.4v11.2h-11.2v-11.2z" fill="#ffffff" stroke="#000000" stroke-linecap="square" stroke-width="1.6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#000" stroke-linecap="square" stroke-width="1.6" d="m13.6 2.4v11.2h-11.2v-11.2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPivot.svg b/editor/icons/EditorPivot.svg index 802d7c2854..816c9cf536 100644 --- a/editor/icons/EditorPivot.svg +++ b/editor/icons/EditorPivot.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0v6h-6v4h6v6h4v-6h6v-4h-6v-6zm1 7h2v2h-2z" fill="#fff" fill-opacity=".706"/><path d="m7 1v5h2v-5zm-6 6v2h5v-2zm9 0v2h5v-2zm-3 3v5h2v-5z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" fill-opacity=".706" d="m6 0v6h-6v4h6v6h4v-6h6v-4h-6v-6zm1 7h2v2h-2z"/><path fill="#ff5f5f" d="m7 1v5h2v-5zm-6 6v2h5v-2zm9 0v2h5v-2zm-3 3v5h2v-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPlugin.svg b/editor/icons/EditorPlugin.svg index 928ca7cb2e..51081a9121 100644 --- a/editor/icons/EditorPlugin.svg +++ b/editor/icons/EditorPlugin.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h3v.25a2 2 0 1 0 2 0V11h3a1 1 0 0 0 1-1V7h.25a2 2 0 1 0 0-2H11V2a1 1 0 0 0-1-1H2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h3v.25a2 2 0 1 0 2 0V11h3a1 1 0 0 0 1-1V7h.25a2 2 0 1 0 0-2H11V2a1 1 0 0 0-1-1H2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPosition.svg b/editor/icons/EditorPosition.svg index c736497384..1008328676 100644 --- a/editor/icons/EditorPosition.svg +++ b/editor/icons/EditorPosition.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 0v4.42A4 4 0 0 0 4.42 6H0v4h4.42A4 4 0 0 0 6 11.58V16h4v-4.42A4 4 0 0 0 11.58 10H16V6h-4.42A4 4 0 0 0 10 4.42V0Z" fill="#ffffff" fill-opacity=".706"/><path d="M7 1v3a4 4 0 0 1 2 0V1Zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6ZM1 7v2h3a4 4 0 0 1 0-2H1Zm11 0a4 4 0 0 1 0 2h3V7Zm-5 8h2v-3a4 4 0 0 1-2 0Z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" fill-opacity=".706" d="M6 0v4.42A4 4 0 0 0 4.42 6H0v4h4.42A4 4 0 0 0 6 11.58V16h4v-4.42A4 4 0 0 0 11.58 10H16V6h-4.42A4 4 0 0 0 10 4.42V0Z"/><path fill="#ff5f5f" d="M7 1v3a4 4 0 0 1 2 0V1Zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6ZM1 7v2h3a4 4 0 0 1 0-2H1Zm11 0a4 4 0 0 1 0 2h3V7Zm-5 8h2v-3a4 4 0 0 1-2 0Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPositionPrevious.svg b/editor/icons/EditorPositionPrevious.svg index 5cc8248d1f..04538ced6b 100644 --- a/editor/icons/EditorPositionPrevious.svg +++ b/editor/icons/EditorPositionPrevious.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3a4 4 0 0 1 2 0V1zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6zM1 7v2h2.87a4 4 0 0 1 0-2H1zm11 0a4 4 0 0 1 0 2h3V7zm-5 8h2v-3a4 4 0 0 1-2 0z" fill="#5fb2ff" fill-opacity=".698"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" fill-opacity=".698" d="M7 1v3a4 4 0 0 1 2 0V1zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6zM1 7v2h2.87a4 4 0 0 1 0-2H1zm11 0a4 4 0 0 1 0 2h3V7zm-5 8h2v-3a4 4 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/EditorPositionUnselected.svg b/editor/icons/EditorPositionUnselected.svg index 6c76f0b1a8..12334dc6bc 100644 --- a/editor/icons/EditorPositionUnselected.svg +++ b/editor/icons/EditorPositionUnselected.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 0v4.42A4 4 0 0 0 4.291 6H0v4h4.42A4 4 0 0 0 6 11.582V16h4v-4.42A4 4 0 0 0 11.709 10H16V6h-4.42A4 4 0 0 0 10 4.418V0z" fill-opacity=".411"/><path d="M7 1v3a4 4 0 0 1 2 0V1zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6zM1 7v2h2.87a4 4 0 0 1 0-2H1zm11 0a4 4 0 0 1 0 2h3V7zm-5 8h2v-3a4 4 0 0 1-2 0z" fill="#d6d6d6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".411" d="M6 0v4.42A4 4 0 0 0 4.291 6H0v4h4.42A4 4 0 0 0 6 11.582V16h4v-4.42A4 4 0 0 0 11.709 10H16V6h-4.42A4 4 0 0 0 10 4.418V0z"/><path fill="#d6d6d6" d="M7 1v3a4 4 0 0 1 2 0V1zm1 4a3 3 0 0 0 0 6 3 3 0 0 0 0-6zM1 7v2h2.87a4 4 0 0 1 0-2H1zm11 0a4 4 0 0 1 0 2h3V7zm-5 8h2v-3a4 4 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Enum.svg b/editor/icons/Enum.svg index 03b9b4ae5f..da4ca908d9 100644 --- a/editor/icons/Enum.svg +++ b/editor/icons/Enum.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a2 2 0 0 0-2 2v1a1 1 0 0 0 0 2v1a2 2 0 0 0 2 2h1V8H3V4h1V2zm3 0v8h4V8H8V7h2V5H8V4h2V2zm6 0v2h1v4h-1v2h1a2 2 0 0 0 2-2V7a1 1 0 0 0 0-2V4a2 2 0 0 0-2-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M3 2a2 2 0 0 0-2 2v1a1 1 0 0 0 0 2v1a2 2 0 0 0 2 2h1V8H3V4h1V2zm3 0v8h4V8H8V7h2V5H8V4h2V2zm6 0v2h1v4h-1v2h1a2 2 0 0 0 2-2V7a1 1 0 0 0 0-2V4a2 2 0 0 0-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Environment.svg b/editor/icons/Environment.svg index b356459829..e958323f12 100644 --- a/editor/icons/Environment.svg +++ b/editor/icons/Environment.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0"><circle cx="8" cy="8" r="6" stroke-width="2"/><path d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0"><circle cx="8" cy="8" r="6" stroke-width="2"/><path stroke-width="1.5" d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Eraser.svg b/editor/icons/Eraser.svg index 94b56969e2..ff8accec6a 100644 --- a/editor/icons/Eraser.svg +++ b/editor/icons/Eraser.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 1.5.5 11 4 14.5h4L15.5 7Zm-4.5 7 3 3-1 1h-3L3 11Z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M10 1.5.5 11 4 14.5h4L15.5 7Zm-4.5 7 3 3-1 1h-3L3 11Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Error.svg b/editor/icons/Error.svg index 198df53a92..ada7afc0bc 100644 --- a/editor/icons/Error.svg +++ b/editor/icons/Error.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><circle fill="#ff5f5f" cx="4" cy="4" r="4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><circle cx="4" cy="4" r="4" fill="#ff5f5f"/></svg>
\ No newline at end of file diff --git a/editor/icons/ErrorWarning.svg b/editor/icons/ErrorWarning.svg index 6ca6f4c8b8..833b632d6c 100644 --- a/editor/icons/ErrorWarning.svg +++ b/editor/icons/ErrorWarning.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="M4 8a1 1 0 0 1 0-8z" fill="#ff5f5f"/><path d="M4 0a1 1 0 0 1 0 8z" fill="#ffdd65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill="#ff5f5f" d="M4 8a1 1 0 0 1 0-8z"/><path fill="#ffdd65" d="M4 0a1 1 0 0 1 0 8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ExpandBottomDock.svg b/editor/icons/ExpandBottomDock.svg index 61120ec14f..67d4650bd8 100644 --- a/editor/icons/ExpandBottomDock.svg +++ b/editor/icons/ExpandBottomDock.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 4.5 1 8h2v5h2V8h2zm8 0L9 8h2v5h2V8h2zM1 1h14v2H1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 4.5 1 8h2v5h2V8h2zm8 0L9 8h2v5h2V8h2zM1 1h14v2H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ExpandTree.svg b/editor/icons/ExpandTree.svg index 1b0a9512ad..9abf5f475b 100644 --- a/editor/icons/ExpandTree.svg +++ b/editor/icons/ExpandTree.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 16-3.5-2.5H7V11h2v2.5h2.5zM8 0 4.5 2.5H7V5h2V2.5h2.5zM1 7h14v2H1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m8 16-3.5-2.5H7V11h2v2.5h2.5zM8 0 4.5 2.5H7V5h2V2.5h2.5zM1 7h14v2H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ExternalLink.svg b/editor/icons/ExternalLink.svg index a5042900b5..4a2b57fac4 100644 --- a/editor/icons/ExternalLink.svg +++ b/editor/icons/ExternalLink.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 9 5.5-5.5L8 1h7v7l-2.5-2.5L7 11zm7 6H4a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3h2a1 1 0 0 1 0 2H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2a1 1 0 0 1 2 0v2a3 3 0 0 1-3 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m5 9 5.5-5.5L8 1h7v7l-2.5-2.5L7 11zm7 6H4a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3h2a1 1 0 0 1 0 2H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2a1 1 0 0 1 2 0v2a3 3 0 0 1-3 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FadeCross.svg b/editor/icons/FadeCross.svg index 2d4f058838..2f78954d5a 100644 --- a/editor/icons/FadeCross.svg +++ b/editor/icons/FadeCross.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1v2h2.586l-3.586 3.586-4.293-4.293-1.414 1.414 4.293 4.293-4.293 4.293 1.414 1.414 4.293-4.293 3.586 3.586h-2.586v2h5a1 1 0 0 0 1-1v-5h-2v2.586l-3.586-3.586 3.586-3.586v2.586h2v-5a1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m9 1v2h2.586l-3.586 3.586-4.293-4.293-1.414 1.414 4.293 4.293-4.293 4.293 1.414 1.414 4.293-4.293 3.586 3.586h-2.586v2h5a1 1 0 0 0 1-1v-5h-2v2.586l-3.586-3.586 3.586-3.586v2.586h2v-5a1 1 0 0 0 -1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FadeDisabled.svg b/editor/icons/FadeDisabled.svg index 2333335dcd..10d295ba5e 100644 --- a/editor/icons/FadeDisabled.svg +++ b/editor/icons/FadeDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11.032091 3.1108593-1.4142134 1.4142136 1.8285784 1.8285781h-9.8600786v1.999698h9.8600786l-1.8285784 1.828578 1.4142134 1.414214 3.535534-3.5355342c.390524-.3905243.390525-1.0236891 0-1.4142136z" fill="#e0e0e0"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m11.032091 3.1108593-1.4142134 1.4142136 1.8285784 1.8285781h-9.8600786v1.999698h9.8600786l-1.8285784 1.828578 1.4142134 1.414214 3.535534-3.5355342c.390524-.3905243.390525-1.0236891 0-1.4142136z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FadeIn.svg b/editor/icons/FadeIn.svg index 3144e07d23..92578bb361 100644 --- a/editor/icons/FadeIn.svg +++ b/editor/icons/FadeIn.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1v2h2.586c-9.293 9.293-.896067.8960673-9.293 9.293l1.414 1.414c9.293-9.293 3.7072139-3.7072139 9.293-9.293v2.586h2v-5c0-.5522847-.447715-1-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m9 1v2h2.586c-9.293 9.293-.896067.8960673-9.293 9.293l1.414 1.414c9.293-9.293 3.7072139-3.7072139 9.293-9.293v2.586h2v-5c0-.5522847-.447715-1-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FadeOut.svg b/editor/icons/FadeOut.svg index 4ce90b58aa..6dc6585c89 100644 --- a/editor/icons/FadeOut.svg +++ b/editor/icons/FadeOut.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.707 2.293-1.414 1.414c9.293 9.293 1.4503342 1.4503342 9.293 9.293h-2.586v2h5c.552285 0 1-.447715 1-1v-5h-2v2.586c-9.293-9.293-2.832166-2.8321664-9.293-9.293z" fill="#e0e0e0"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m3.707 2.293-1.414 1.414c9.293 9.293 1.4503342 1.4503342 9.293 9.293h-2.586v2h5c.552285 0 1-.447715 1-1v-5h-2v2.586c-9.293-9.293-2.832166-2.8321664-9.293-9.293z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Favorites.svg b/editor/icons/Favorites.svg index a57c3da139..f4bd5f6735 100644 --- a/editor/icons/Favorites.svg +++ b/editor/icons/Favorites.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.7 5.626 5.797 1 6.895l3.236 3.408-.359 4.673 4.14-1.977 4.157 1.942-.396-4.653L15 6.895l-4.626-1.098z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1.7 5.626 5.797 1 6.895l3.236 3.408-.359 4.673 4.14-1.977 4.157 1.942-.396-4.653L15 6.895l-4.626-1.098z"/></svg>
\ No newline at end of file diff --git a/editor/icons/File.svg b/editor/icons/File.svg index 86c6e09114..11573e8adc 100644 --- a/editor/icons/File.svg +++ b/editor/icons/File.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v14h12v-9h-5v-5zm8 0v4h4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 1v14h12v-9h-5v-5zm8 0v4h4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileAccess.svg b/editor/icons/FileAccess.svg index f46a90da4d..36937ed2a4 100644 --- a/editor/icons/FileAccess.svg +++ b/editor/icons/FileAccess.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M15 6v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-3h2v2h8V7h-3a1 1 0 0 1-1-1V3H5v4H3V2a1 1 0 0 1 1-1h6zm-9 6v-2H1V8h5V6l3 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M15 6v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-3h2v2h8V7h-3a1 1 0 0 1-1-1V3H5v4H3V2a1 1 0 0 1 1-1h6zm-9 6v-2H1V8h5V6l3 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileBigThumb.svg b/editor/icons/FileBigThumb.svg index d6e2b36043..7405830ef1 100644 --- a/editor/icons/FileBigThumb.svg +++ b/editor/icons/FileBigThumb.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a1 1 0 0 0-.29-.707l-16-16a1 1 0 0 0-.707-.29V5H14zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z" fill="#fff" fill-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="#fff" fill-opacity=".6" d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a1 1 0 0 0-.29-.707l-16-16a1 1 0 0 0-.707-.29V5H14zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileBroken.svg b/editor/icons/FileBroken.svg index 4c8b7cdb74..0f7ed3841d 100644 --- a/editor/icons/FileBroken.svg +++ b/editor/icons/FileBroken.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v8.586l1.293-1.293a1 1 0 0 1 1.414 0L7 10.587l2.293-2.293a1 1 0 0 1 1.414 0L13 10.586l1-1V6H9V1H2zm8 0v4h4zm-6 9.414-2 2V15h12v-2.586l-.293.293a1 1 0 0 1-1.414 0L10 10.414l-2.293 2.293a1 1 0 0 1-1.414 0L4 10.414z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M2 1v8.586l1.293-1.293a1 1 0 0 1 1.414 0L7 10.587l2.293-2.293a1 1 0 0 1 1.414 0L13 10.586l1-1V6H9V1H2zm8 0v4h4zm-6 9.414-2 2V15h12v-2.586l-.293.293a1 1 0 0 1-1.414 0L10 10.414l-2.293 2.293a1 1 0 0 1-1.414 0L4 10.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileBrokenBigThumb.svg b/editor/icons/FileBrokenBigThumb.svg index c7edaa638b..20b0cd941a 100644 --- a/editor/icons/FileBrokenBigThumb.svg +++ b/editor/icons/FileBrokenBigThumb.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M14 5c-2.199 0-4 1.801-4 4v26.172a1 1 0 0 0 1.707.707L15 32.586l9.293 9.293a1 1 0 0 0 1.414 0L35 32.586l9.293 9.293a1 1 0 0 0 1.414 0l8-8a1 1 0 0 0 .293-.707V22a1 1 0 0 0-.293-.707l-16-16A1 1 0 0 0 37 5H14zm0 2h22v12c0 2.199 1.801 4 4 4h12v9.758l-7 7-9.293-9.293a1 1 0 0 0-1.414 0L25 39.758l-9.293-9.293a1 1 0 0 0-1.414 0L12 32.758V9c0-1.126.875-2 2-2zm.984 28.83a1 1 0 0 0-.691.293l-4 4a1 1 0 0 0-.293.707V55c0 2.199 1.801 4 4 4h36c2.199 0 4-1.801 4-4V38.83a1 1 0 0 0-1.707-.707L45 45.416l-9.293-9.293a1 1 0 0 0-1.414 0L25 45.416l-9.293-9.293a1 1 0 0 0-.723-.293zM15 38.244l9.293 9.293a1 1 0 0 0 1.414 0L35 38.244l9.293 9.293a1 1 0 0 0 1.414 0L52 41.244V55c0 1.125-.875 2-2 2H14c-1.125 0-2-.875-2-2V41.244l3-3z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="#ff5f5f" d="M14 5c-2.199 0-4 1.801-4 4v26.172a1 1 0 0 0 1.707.707L15 32.586l9.293 9.293a1 1 0 0 0 1.414 0L35 32.586l9.293 9.293a1 1 0 0 0 1.414 0l8-8a1 1 0 0 0 .293-.707V22a1 1 0 0 0-.293-.707l-16-16A1 1 0 0 0 37 5H14zm0 2h22v12c0 2.199 1.801 4 4 4h12v9.758l-7 7-9.293-9.293a1 1 0 0 0-1.414 0L25 39.758l-9.293-9.293a1 1 0 0 0-1.414 0L12 32.758V9c0-1.126.875-2 2-2zm.984 28.83a1 1 0 0 0-.691.293l-4 4a1 1 0 0 0-.293.707V55c0 2.199 1.801 4 4 4h36c2.199 0 4-1.801 4-4V38.83a1 1 0 0 0-1.707-.707L45 45.416l-9.293-9.293a1 1 0 0 0-1.414 0L25 45.416l-9.293-9.293a1 1 0 0 0-.723-.293zM15 38.244l9.293 9.293a1 1 0 0 0 1.414 0L35 38.244l9.293 9.293a1 1 0 0 0 1.414 0L52 41.244V55c0 1.125-.875 2-2 2H14c-1.125 0-2-.875-2-2V41.244l3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileDead.svg b/editor/icons/FileDead.svg index af88bd83ff..0d6d765fa6 100644 --- a/editor/icons/FileDead.svg +++ b/editor/icons/FileDead.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v14h12V6H9V1zm8 0v4h4zM5 7.793l.646-.646a.353.353 0 0 1 .707.707l-.646.646.646.646a.353.353 0 0 1-.707.707L5 9.207l-.646.646a.353.353 0 0 1-.707-.706l.646-.647-.646-.646a.353.353 0 0 1 .707-.707zm6 0 .646-.646a.353.353 0 0 1 .707.707l-.646.646.646.646a.353.353 0 0 1-.706.707L11 9.207l-.646.646a.353.353 0 0 1-.707-.706l.646-.647-.646-.646a.353.353 0 0 1 .706-.707zM3.5 11h9a.5.5 0 0 1 0 1H8a2 2 0 0 1-4 0h-.5a.5.5 0 0 1 0-1zM5 12a1 1 0 0 0 2 0z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M2 1v14h12V6H9V1zm8 0v4h4zM5 7.793l.646-.646a.353.353 0 0 1 .707.707l-.646.646.646.646a.353.353 0 0 1-.707.707L5 9.207l-.646.646a.353.353 0 0 1-.707-.706l.646-.647-.646-.646a.353.353 0 0 1 .707-.707zm6 0 .646-.646a.353.353 0 0 1 .707.707l-.646.646.646.646a.353.353 0 0 1-.706.707L11 9.207l-.646.646a.353.353 0 0 1-.707-.706l.646-.647-.646-.646a.353.353 0 0 1 .706-.707zM3.5 11h9a.5.5 0 0 1 0 1H8a2 2 0 0 1-4 0h-.5a.5.5 0 0 1 0-1zM5 12a1 1 0 0 0 2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileDeadBigThumb.svg b/editor/icons/FileDeadBigThumb.svg index 71e3e4a2e0..1dd1fd7106 100644 --- a/editor/icons/FileDeadBigThumb.svg +++ b/editor/icons/FileDeadBigThumb.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a.967.967 0 0 0-.285-.707l-16-16a1 1 0 0 0-.707-.29V5zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2zm2.951 22.002a1 1 0 0 0-.703 1.658L19.172 34l-2.924 3.342a1 1 0 0 0 1.504 1.318l2.748-3.14 2.748 3.14a1 1 0 0 0 1.504-1.318L21.828 34l2.924-3.34a1 1 0 0 0-1.504-1.318l-2.748 3.14-2.748-3.14a1 1 0 0 0-.8-.34zm23 0a1 1 0 0 0-.703 1.658L42.172 34l-2.924 3.342a1 1 0 0 0 1.504 1.318l2.748-3.14 2.748 3.14a1 1 0 0 0 1.504-1.318L44.828 34l2.924-3.34a1 1 0 0 0-1.504-1.318l-2.748 3.14-2.748-3.14a1 1 0 0 0-.8-.34zM21 43a1 1 0 0 0 0 2h3v3a5 5 0 0 0 10 0v-3h9a1 1 0 0 0 0-2zm5 2h6v3a3 3 0 0 1-6 0z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="#ff5f5f" d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a.967.967 0 0 0-.285-.707l-16-16a1 1 0 0 0-.707-.29V5zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2zm2.951 22.002a1 1 0 0 0-.703 1.658L19.172 34l-2.924 3.342a1 1 0 0 0 1.504 1.318l2.748-3.14 2.748 3.14a1 1 0 0 0 1.504-1.318L21.828 34l2.924-3.34a1 1 0 0 0-1.504-1.318l-2.748 3.14-2.748-3.14a1 1 0 0 0-.8-.34zm23 0a1 1 0 0 0-.703 1.658L42.172 34l-2.924 3.342a1 1 0 0 0 1.504 1.318l2.748-3.14 2.748 3.14a1 1 0 0 0 1.504-1.318L44.828 34l2.924-3.34a1 1 0 0 0-1.504-1.318l-2.748 3.14-2.748-3.14a1 1 0 0 0-.8-.34zM21 43a1 1 0 0 0 0 2h3v3a5 5 0 0 0 10 0v-3h9a1 1 0 0 0 0-2zm5 2h6v3a3 3 0 0 1-6 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileDeadMediumThumb.svg b/editor/icons/FileDeadMediumThumb.svg index 8f5099c92d..8f468033c2 100644 --- a/editor/icons/FileDeadMediumThumb.svg +++ b/editor/icons/FileDeadMediumThumb.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a3 3 0 0 0-3 3v24a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V11.191a1 1 0 0 0-.293-.707l-9.182-9.19A1 1 0 0 0 19.818 1H5zm0 2h14v6a3 3 0 0 0 3 3h6v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1.986 11.002a1 1 0 0 0-.693 1.705L7.586 17l-1.293 1.293a1 1 0 0 0 1.414 1.414L9 18.414l1.293 1.293a1 1 0 0 0 1.414-1.414L10.414 17l1.293-1.293a1 1 0 0 0-1.414-1.414L9 15.586l-1.293-1.293a1 1 0 0 0-.72-.291zm14 0a1 1 0 0 0-.693 1.705L21.586 17l-1.293 1.293a1 1 0 0 0 1.414 1.414L23 18.414l1.293 1.293a1 1 0 0 0 1.414-1.414L24.414 17l1.293-1.293a1 1 0 0 0-1.414-1.414L23 15.586l-1.293-1.293a1 1 0 0 0-.72-.291zM7 22a1 1 0 0 0 0 2h1a4 4 0 0 0 8 0h9a1 1 0 0 0 0-2zm3 2h4a2 2 0 0 1-4 0z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#ff5f5f" d="M5 1a3 3 0 0 0-3 3v24a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V11.191a1 1 0 0 0-.293-.707l-9.182-9.19A1 1 0 0 0 19.818 1H5zm0 2h14v6a3 3 0 0 0 3 3h6v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1.986 11.002a1 1 0 0 0-.693 1.705L7.586 17l-1.293 1.293a1 1 0 0 0 1.414 1.414L9 18.414l1.293 1.293a1 1 0 0 0 1.414-1.414L10.414 17l1.293-1.293a1 1 0 0 0-1.414-1.414L9 15.586l-1.293-1.293a1 1 0 0 0-.72-.291zm14 0a1 1 0 0 0-.693 1.705L21.586 17l-1.293 1.293a1 1 0 0 0 1.414 1.414L23 18.414l1.293 1.293a1 1 0 0 0 1.414-1.414L24.414 17l1.293-1.293a1 1 0 0 0-1.414-1.414L23 15.586l-1.293-1.293a1 1 0 0 0-.72-.291zM7 22a1 1 0 0 0 0 2h1a4 4 0 0 0 8 0h9a1 1 0 0 0 0-2zm3 2h4a2 2 0 0 1-4 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileDialog.svg b/editor/icons/FileDialog.svg index 6b16dbb3e9..c6076c9fcb 100644 --- a/editor/icons/FileDialog.svg +++ b/editor/icons/FileDialog.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm3 2h3c1 0 1 2 2 2h3v4H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm3 2h3c1 0 1 2 2 2h3v4H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileList.svg b/editor/icons/FileList.svg index 3ba4915350..a79a5cfd11 100644 --- a/editor/icons/FileList.svg +++ b/editor/icons/FileList.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileMediumThumb.svg b/editor/icons/FileMediumThumb.svg index 9b59f7c8d0..65ec659135 100644 --- a/editor/icons/FileMediumThumb.svg +++ b/editor/icons/FileMediumThumb.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a3 3 0 0 0-3 3v24a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V11.191a1 1 0 0 0-.293-.707l-9.182-9.182A1 1 0 0 0 19.818 1zm0 2h14v6a3 3 0 0 0 3 3h6v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z" fill="#fff" fill-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#fff" fill-opacity=".6" d="M5 1a3 3 0 0 0-3 3v24a3 3 0 0 0 3 3h22a3 3 0 0 0 3-3V11.191a1 1 0 0 0-.293-.707l-9.182-9.182A1 1 0 0 0 19.818 1zm0 2h14v6a3 3 0 0 0 3 3h6v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileThumbnail.svg b/editor/icons/FileThumbnail.svg index 5cf0ddc3f8..00d98c0721 100644 --- a/editor/icons/FileThumbnail.svg +++ b/editor/icons/FileThumbnail.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v5h5v-5zm7 0v5h5v-5zm-7 7v5h5v-5zm7 0v5h5v-5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 2v5h5v-5zm7 0v5h5v-5zm-7 7v5h5v-5zm7 0v5h5v-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FileTree.svg b/editor/icons/FileTree.svg index 995715c993..9a5c9de294 100644 --- a/editor/icons/FileTree.svg +++ b/editor/icons/FileTree.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v2h2v5h2v5h8v-2h-6v-3h6v-2h-8v-3h8v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 2v2h2v5h2v5h8v-2h-6v-3h6v-2h-8v-3h8v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Filesystem.svg b/editor/icons/Filesystem.svg index a5e1c2f8a9..0ef84a2d6b 100644 --- a/editor/icons/Filesystem.svg +++ b/editor/icons/Filesystem.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v5h2v8h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-2h3v-4h-2l-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v5h2v8h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-2h3v-4h-2l-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FlowContainer.svg b/editor/icons/FlowContainer.svg index f8e48db134..d3c6fa55c7 100644 --- a/editor/icons/FlowContainer.svg +++ b/editor/icons/FlowContainer.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#8eef97" stroke-width="2" transform="rotate(45 4.241 9.083) scale(.737)"><rect x="2" y="2" width="12" height="12" rx="1"/><path d="M5 5h2m3 0h1M5 8h0m3 0h3m-6 3h4" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#8eef97" stroke-width="2" transform="rotate(45 4.241 9.083)scale(.737)"><rect width="12" height="12" x="2" y="2" rx="1"/><path stroke-linecap="round" d="M5 5h2m3 0h1M5 8h0m3 0h3m-6 3h4"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/FogMaterial.svg b/editor/icons/FogMaterial.svg index 5fb9951d21..cd2e3791f6 100644 --- a/editor/icons/FogMaterial.svg +++ b/editor/icons/FogMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M2.5 8S1 8 1 6.5 3 5 3 5s0-4 3.5-4S10 4 10 4s1.26-2 3-1 .5 3 .5 3S15 6 15 7s-1 1-1 1z" fill="url(#a)"/><path d="M4.5 9.5h8m-9 2h5m2 0H13m-7.5 2h5" stroke="url(#a)" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M2.5 8S1 8 1 6.5 3 5 3 5s0-4 3.5-4S10 4 10 4s1.26-2 3-1 .5 3 .5 3S15 6 15 7s-1 1-1 1z"/><path stroke="url(#a)" stroke-linecap="round" d="M4.5 9.5h8m-9 2h5m2 0H13m-7.5 2h5"/></svg>
\ No newline at end of file diff --git a/editor/icons/FogVolume.svg b/editor/icons/FogVolume.svg index 4a796d6134..7ff8e78d04 100644 --- a/editor/icons/FogVolume.svg +++ b/editor/icons/FogVolume.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 8S1 8 1 6.5 3 5 3 5s0-4 3.5-4S10 4 10 4s1.26-2 3-1 .5 3 .5 3S15 6 15 7s-1 1-1 1z" fill="#fc7f7f"/><path d="M4.5 9.5h8m-9 2h5m2 0H13m-7.5 2h5" stroke="#fc7f7f" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2.5 8S1 8 1 6.5 3 5 3 5s0-4 3.5-4S10 4 10 4s1.26-2 3-1 .5 3 .5 3S15 6 15 7s-1 1-1 1z"/><path stroke="#fc7f7f" stroke-linecap="round" d="M4.5 9.5h8m-9 2h5m2 0H13m-7.5 2h5"/></svg>
\ No newline at end of file diff --git a/editor/icons/Folder.svg b/editor/icons/Folder.svg index dab1cfbf16..168e26b28c 100644 --- a/editor/icons/Folder.svg +++ b/editor/icons/Folder.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V3a1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V3a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FolderBigThumb.svg b/editor/icons/FolderBigThumb.svg index 403c491a84..d02c247368 100644 --- a/editor/icons/FolderBigThumb.svg +++ b/editor/icons/FolderBigThumb.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M12 10a4 4 0 0 0-4 4v36a4 4 0 0 0 4 4h40a4 4 0 0 0 4-4V22a4 4 0 0 0-4-4H36l-2-4c-1-2-2-4-4-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="#e0e0e0" d="M12 10a4 4 0 0 0-4 4v36a4 4 0 0 0 4 4h40a4 4 0 0 0 4-4V22a4 4 0 0 0-4-4H36l-2-4c-1-2-2-4-4-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FolderCreate.svg b/editor/icons/FolderCreate.svg index 80a3f90e2a..1c525584d5 100644 --- a/editor/icons/FolderCreate.svg +++ b/editor/icons/FolderCreate.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8v-1H8v-4h2V8h4v2h1V7a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V4a1 1 0 0 0-1-1Z" fill="#e0e0e0"/><path d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z" fill="#5fff97"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8v-1H8v-4h2V8h4v2h1V7a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V4a1 1 0 0 0-1-1Z"/><path fill="#5fff97" d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FolderMediumThumb.svg b/editor/icons/FolderMediumThumb.svg index 7647d6d057..5578739e39 100644 --- a/editor/icons/FolderMediumThumb.svg +++ b/editor/icons/FolderMediumThumb.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M6 5a2 2 0 0 0-2 2v18.5h.065A2 2 0 0 0 6 27h20a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2h-8l-1-2c-.5-1-1-2-2-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#e0e0e0" d="M6 5a2 2 0 0 0-2 2v18.5h.065A2 2 0 0 0 6 27h20a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2h-8l-1-2c-.5-1-1-2-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Font.svg b/editor/icons/Font.svg index f66f65822c..e7e4999b73 100644 --- a/editor/icons/Font.svg +++ b/editor/icons/Font.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FontFile.svg b/editor/icons/FontFile.svg index b9a81cdc2c..448b1ff73c 100644 --- a/editor/icons/FontFile.svg +++ b/editor/icons/FontFile.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 7.5h-1A.491.491 0 0 0 6 8v.5h-.5V9a1 1 0 0 1-1 1v1H8V9.854A1 1 0 0 1 7.5 9zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1z" fill="#e0e0e0"/><path d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7.5 7.5h-1A.491.491 0 0 0 6 8v.5h-.5V9a1 1 0 0 1-1 1v1H8V9.854A1 1 0 0 1 7.5 9zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1z"/><path fill="#ff5f5f" d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FontItem.svg b/editor/icons/FontItem.svg index afdb9123e8..000c22ebdf 100644 --- a/editor/icons/FontItem.svg +++ b/editor/icons/FontItem.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FontSize.svg b/editor/icons/FontSize.svg index f8f2424fb8..70f42254c6 100644 --- a/editor/icons/FontSize.svg +++ b/editor/icons/FontSize.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 6.992h6.025v2.4h-.43a.861 1.2 0 0 0-.861-1.2H4.62v3.913a1.214.93 0 0 0 1.214.93v.465H2.19v-.465a1.214.93 0 0 0 1.214-.93V8.192H2.29a.861 1.2 0 0 0-.861 1.2h-.43zm3-3.961h10.773v3.078h-.77a1.539 1.539 0 0 0-1.539-1.539h-2.308v6.926a1.539 1.539 0 0 0 1.539 1.539v.465H7.078v-.465a1.539 1.539 0 0 0 1.539-1.539V4.57H6.309A1.539 1.539 0 0 0 4.77 6.109H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 6.992h6.025v2.4h-.43a.861 1.2 0 0 0-.861-1.2H4.62v3.913a1.214.93 0 0 0 1.214.93v.465H2.19v-.465a1.214.93 0 0 0 1.214-.93V8.192H2.29a.861 1.2 0 0 0-.861 1.2h-.43zm3-3.961h10.773v3.078h-.77a1.539 1.539 0 0 0-1.539-1.539h-2.308v6.926a1.539 1.539 0 0 0 1.539 1.539v.465H7.078v-.465a1.539 1.539 0 0 0 1.539-1.539V4.57H6.309A1.539 1.539 0 0 0 4.77 6.109H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/FontVariation.svg b/editor/icons/FontVariation.svg index 1915bb3b3c..042c968792 100644 --- a/editor/icons/FontVariation.svg +++ b/editor/icons/FontVariation.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5.975 11 7.21 7.5H5.916a.75 1 0 0 0-.416.152V9a1 1 0 0 1-1 1v1zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1z" fill="#e0e0e0"/><path d="M4.621 5 3.563 8h1a.84 1.192 50 0 1 1.353-1h2L5.8 13a.84 1.192 50 0 1-1.353 1l-.353 1h4l.353-1a.84 1.192 50 0 1-.647-1l2.116-6h2a.84 1.192 50 0 1 .647 1h1l1.058-3z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5.975 11 7.21 7.5H5.916a.75 1 0 0 0-.416.152V9a1 1 0 0 1-1 1v1zM1.5 1v3h1a1 1 0 0 1 1-1h2v1.5h2V3h2a1 1 0 0 1 1 1h1V1z"/><path fill="#ff5f5f" d="M4.621 5 3.563 8h1a.84 1.192 50 0 1 1.353-1h2L5.8 13a.84 1.192 50 0 1-1.353 1l-.353 1h4l.353-1a.84 1.192 50 0 1-.647-1l2.116-6h2a.84 1.192 50 0 1 .647 1h1l1.058-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Forward.svg b/editor/icons/Forward.svg index 278e26f4fb..33dd0d20e7 100644 --- a/editor/icons/Forward.svg +++ b/editor/icons/Forward.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m2 2 4 6-4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 2 4 6-4 6"/></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticles2D.svg b/editor/icons/GPUParticles2D.svg index 6678128313..91cf5dbb8f 100644 --- a/editor/icons/GPUParticles2D.svg +++ b/editor/icons/GPUParticles2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticles3D.svg b/editor/icons/GPUParticles3D.svg index 0b0860e93e..dafb2dcc88 100644 --- a/editor/icons/GPUParticles3D.svg +++ b/editor/icons/GPUParticles3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesAttractorBox3D.svg b/editor/icons/GPUParticlesAttractorBox3D.svg index a1f307cb52..8304823736 100644 --- a/editor/icons/GPUParticlesAttractorBox3D.svg +++ b/editor/icons/GPUParticlesAttractorBox3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fc7f7f" r="1"/><g fill="none" stroke="#fc7f7f"><ellipse cx="8" cy="8" rx="4.8" ry="2.4"/><ellipse cx="8" cy="8" rx="2.4" ry="4.8"/><path d="m1.5 1.5h13v13h-13z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="1" fill="#fc7f7f"/><g fill="none" stroke="#fc7f7f"><ellipse cx="8" cy="8" rx="4.8" ry="2.4"/><ellipse cx="8" cy="8" rx="2.4" ry="4.8"/><path d="m1.5 1.5h13v13h-13z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesAttractorSphere3D.svg b/editor/icons/GPUParticlesAttractorSphere3D.svg index e3371f4110..4ec1555958 100644 --- a/editor/icons/GPUParticlesAttractorSphere3D.svg +++ b/editor/icons/GPUParticlesAttractorSphere3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fc7f7f" r="1"/><g fill="none" stroke="#fc7f7f"><circle cx="8" cy="8" r="6.5"/><ellipse cx="11.314" rx="2.4" ry="4.8" transform="rotate(45)"/><ellipse cy="11.314" rx="2.4" ry="4.8" transform="rotate(-45)"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="1" fill="#fc7f7f"/><g fill="none" stroke="#fc7f7f"><circle cx="8" cy="8" r="6.5"/><ellipse cx="11.314" rx="2.4" ry="4.8" transform="rotate(45)"/><ellipse cy="11.314" rx="2.4" ry="4.8" transform="rotate(-45)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesAttractorVectorField3D.svg b/editor/icons/GPUParticlesAttractorVectorField3D.svg index 610a39c42b..4f1d38b9ac 100644 --- a/editor/icons/GPUParticlesAttractorVectorField3D.svg +++ b/editor/icons/GPUParticlesAttractorVectorField3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><ellipse cx="6.673" cy="9.387" fill="none" rx="2.4" ry="4.8" stroke="#fc7f7f"/><ellipse cx="6.672" cy="9.387" fill="none" rx="4.8" ry="2.4" stroke="#fc7f7f"/><g fill="#fc7f7f"><circle cx="6.664" cy="9.3" r="1"/><path d="m11.8 15 2.4-2.4.8.8V11h-2.4l.8.8-2.4 2.4zM11 6l3-3 1 1V1h-3l1 1-3 3zM1.8 5l2.4-2.4.8.8V1H2.6l.8.8L1 4.2z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><ellipse cx="6.673" cy="9.387" fill="none" stroke="#fc7f7f" rx="2.4" ry="4.8"/><ellipse cx="6.672" cy="9.387" fill="none" stroke="#fc7f7f" rx="4.8" ry="2.4"/><g fill="#fc7f7f"><circle cx="6.664" cy="9.3" r="1"/><path d="m11.8 15 2.4-2.4.8.8V11h-2.4l.8.8-2.4 2.4zM11 6l3-3 1 1V1h-3l1 1-3 3zM1.8 5l2.4-2.4.8.8V1H2.6l.8.8L1 4.2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesCollisionBox3D.svg b/editor/icons/GPUParticlesCollisionBox3D.svg index e79be6eeba..c803bfba3c 100644 --- a/editor/icons/GPUParticlesCollisionBox3D.svg +++ b/editor/icons/GPUParticlesCollisionBox3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.5 4 5.25 2.625v5.25L7.5 14.5l-5.25-2.625v-5.25zm0 10.5V9.25l5.25-2.625M7.5 9.25 2.25 6.625" fill="none" stroke-width="1.75" stroke="#fc7f7f"/><g fill="#fc7f7f"><circle cx="1.875" cy="3.75" r="1"/><circle cx="13.125" cy="3.75" r="1"/><circle cx="9.375" cy="1.875" r="1"/><circle cx="5.625" cy="1.875" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-width="1.75" d="m7.5 4 5.25 2.625v5.25L7.5 14.5l-5.25-2.625v-5.25zm0 10.5V9.25l5.25-2.625M7.5 9.25 2.25 6.625"/><g fill="#fc7f7f"><circle cx="1.875" cy="3.75" r="1"/><circle cx="13.125" cy="3.75" r="1"/><circle cx="9.375" cy="1.875" r="1"/><circle cx="5.625" cy="1.875" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesCollisionHeightField3D.svg b/editor/icons/GPUParticlesCollisionHeightField3D.svg index 8bdc98a84b..f6cbccd1c7 100644 --- a/editor/icons/GPUParticlesCollisionHeightField3D.svg +++ b/editor/icons/GPUParticlesCollisionHeightField3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m1 10c1-1 3-2 3-4s2-4 4-4 4 2 4 4 2 3 3 4l-7 5z"/><circle cx="2" cy="6" r="1"/><circle cx="14" cy="6" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="4" cy="2" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fc7f7f"><path d="m1 10c1-1 3-2 3-4s2-4 4-4 4 2 4 4 2 3 3 4l-7 5z"/><circle cx="2" cy="6" r="1"/><circle cx="14" cy="6" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="4" cy="2" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesCollisionSDF3D.svg b/editor/icons/GPUParticlesCollisionSDF3D.svg index c1eba98c91..51366192de 100644 --- a/editor/icons/GPUParticlesCollisionSDF3D.svg +++ b/editor/icons/GPUParticlesCollisionSDF3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V5s3 4 6 4 6-4 6-4z" fill="none" stroke="#fc7f7f" stroke-linejoin="round" stroke-width="2"/><g fill="#fc7f7f"><circle cx="2" cy="2" r="1"/><circle cx="14" cy="2" r="1"/><circle cx="10" cy="5" r="1"/><circle cx="6" cy="5" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-linejoin="round" stroke-width="2" d="M14 14H2V5s3 4 6 4 6-4 6-4z"/><g fill="#fc7f7f"><circle cx="2" cy="2" r="1"/><circle cx="14" cy="2" r="1"/><circle cx="10" cy="5" r="1"/><circle cx="6" cy="5" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GPUParticlesCollisionSphere3D.svg b/editor/icons/GPUParticlesCollisionSphere3D.svg index 4eeec807f6..c69545242e 100644 --- a/editor/icons/GPUParticlesCollisionSphere3D.svg +++ b/editor/icons/GPUParticlesCollisionSphere3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M 8 4 a 5 5 0 0 0 0 10 a 5 5 0 0 0 0 -10 v 10 m -4.95 -5.6 a 5 2 0 0 0 9.9 0" fill="none" stroke-width="1.667" stroke="#fc7f7f"/><g fill="#fc7f7f"><circle cx="2" cy="5" r="1"/><circle cx="14" cy="5" r="1"/><circle cx="10" cy="2" r="1"/><circle cx="6" cy="2" r="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-width="1.667" d="M 8 4 a 5 5 0 0 0 0 10 a 5 5 0 0 0 0 -10 v 10 m -4.95 -5.6 a 5 2 0 0 0 9.9 0"/><g fill="#fc7f7f"><circle cx="2" cy="5" r="1"/><circle cx="14" cy="5" r="1"/><circle cx="10" cy="2" r="1"/><circle cx="6" cy="2" r="1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Generic6DOFJoint3D.svg b/editor/icons/Generic6DOFJoint3D.svg index 061189d17d..dc15f55b64 100644 --- a/editor/icons/Generic6DOFJoint3D.svg +++ b/editor/icons/Generic6DOFJoint3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v12M3 6l10 5M3 11l10-5" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke="#fc7f7f" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 2v12M3 6l10 5M3 11l10-5"/></svg>
\ No newline at end of file diff --git a/editor/icons/GeometryInstance3D.svg b/editor/icons/GeometryInstance3D.svg index a211490d4a..548d1dc6ea 100644 --- a/editor/icons/GeometryInstance3D.svg +++ b/editor/icons/GeometryInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4z" fill="#b56d6d"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b56d6d" d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Gizmo3DSamplePlayer.svg b/editor/icons/Gizmo3DSamplePlayer.svg index f6fe444e47..db729dec22 100644 --- a/editor/icons/Gizmo3DSamplePlayer.svg +++ b/editor/icons/Gizmo3DSamplePlayer.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M63.766 8a8 8 0 0 0-5.42 2.336L28.682 40H16a8 8 0 0 0-8 8v32a8 8 0 0 0 8 8h12.682l29.664 29.664A8 8 0 0 0 72 112V16a8 8 0 0 0-8.234-8zM112 12a8 8 0 0 0-8 8v88a8 8 0 0 0 16 0V20a8 8 0 0 0-8-8zM88 36a8 8 0 0 0-8 8v40a8 8 0 0 0 16 0V44a8 8 0 0 0-8-8z" fill-opacity=".294"/><path d="M63.883 12.004a4 4 0 0 0-2.71 1.168l-30.829 30.83H16a4 4 0 0 0-4 4v32a4 4 0 0 0 4 4h14.344l30.828 30.828c2.52 2.518 6.827.734 6.828-2.828V16a4 4 0 0 0-4.117-3.996zM112 16a4 4 0 0 0-4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4-4V20a4 4 0 0 0-4-4zM88 40a4 4 0 0 0-4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4-4V44a4 4 0 0 0-4-4z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M63.766 8a8 8 0 0 0-5.42 2.336L28.682 40H16a8 8 0 0 0-8 8v32a8 8 0 0 0 8 8h12.682l29.664 29.664A8 8 0 0 0 72 112V16a8 8 0 0 0-8.234-8zM112 12a8 8 0 0 0-8 8v88a8 8 0 0 0 16 0V20a8 8 0 0 0-8-8zM88 36a8 8 0 0 0-8 8v40a8 8 0 0 0 16 0V44a8 8 0 0 0-8-8z"/><path fill="#f7f5cf" d="M63.883 12.004a4 4 0 0 0-2.71 1.168l-30.829 30.83H16a4 4 0 0 0-4 4v32a4 4 0 0 0 4 4h14.344l30.828 30.828c2.52 2.518 6.827.734 6.828-2.828V16a4 4 0 0 0-4.117-3.996zM112 16a4 4 0 0 0-4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4-4V20a4 4 0 0 0-4-4zM88 40a4 4 0 0 0-4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4-4V44a4 4 0 0 0-4-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoAudioListener3D.svg b/editor/icons/GizmoAudioListener3D.svg index 2f310cb446..c5ca3e4fad 100644 --- a/editor/icons/GizmoAudioListener3D.svg +++ b/editor/icons/GizmoAudioListener3D.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M48 8A40 40 0 0 0 8 48h16a24 24 0 0 1 48 0c0 14-4.33 18.86-9.12 22.852-2.396 1.996-5.038 3.53-7.814 5.536-1.388 1-2.866 2.126-4.304 3.94-1.44 1.774-2.762 4.63-2.762 7.63 0 10.22-2.54 12.59-5.118 14.138-2.578 1.546-6.882 1.86-10.882 1.86h-8v16h8c4 0 11.696.31 19.116-4.14 7.06-4.238 12.2-13.28 12.696-26 .184-.166.148-.156.62-.498 1.724-1.244 5.084-3.21 8.688-6.214C80.33 77.096 88 65.958 88 47.958A40 40 0 0 0 48 8zm63.426 8L97.52 24a48 48 0 0 1 .016 47.942l13.89 8a64 64 0 0 0 0-64z" stroke="#000" stroke-opacity=".294" stroke-width="8" stroke-linejoin="round" fill="none"/><path d="M48 8A40 40 0 0 0 8 48h16a24 24 0 0 1 48 0c0 14-4.33 18.86-9.12 22.852-2.396 1.996-5.038 3.53-7.814 5.536-1.388 1-2.866 2.126-4.304 3.94-1.44 1.774-2.762 4.63-2.762 7.63 0 10.22-2.54 12.59-5.118 14.138-2.578 1.546-6.882 1.86-10.882 1.86h-8v16h8c4 0 11.696.31 19.116-4.14 7.06-4.238 12.2-13.28 12.696-26 .184-.166.148-.156.62-.498 1.724-1.244 5.084-3.21 8.688-6.214C80.33 77.096 88 65.958 88 47.958A40 40 0 0 0 48 8zm63.426 8L97.52 24a48 48 0 0 1 .016 47.942l13.89 8a64 64 0 0 0 0-64z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill="none" stroke="#000" stroke-linejoin="round" stroke-opacity=".294" stroke-width="8" d="M48 8A40 40 0 0 0 8 48h16a24 24 0 0 1 48 0c0 14-4.33 18.86-9.12 22.852-2.396 1.996-5.038 3.53-7.814 5.536-1.388 1-2.866 2.126-4.304 3.94-1.44 1.774-2.762 4.63-2.762 7.63 0 10.22-2.54 12.59-5.118 14.138-2.578 1.546-6.882 1.86-10.882 1.86h-8v16h8c4 0 11.696.31 19.116-4.14 7.06-4.238 12.2-13.28 12.696-26 .184-.166.148-.156.62-.498 1.724-1.244 5.084-3.21 8.688-6.214C80.33 77.096 88 65.958 88 47.958A40 40 0 0 0 48 8zm63.426 8L97.52 24a48 48 0 0 1 .016 47.942l13.89 8a64 64 0 0 0 0-64z"/><path fill="#f7f5cf" d="M48 8A40 40 0 0 0 8 48h16a24 24 0 0 1 48 0c0 14-4.33 18.86-9.12 22.852-2.396 1.996-5.038 3.53-7.814 5.536-1.388 1-2.866 2.126-4.304 3.94-1.44 1.774-2.762 4.63-2.762 7.63 0 10.22-2.54 12.59-5.118 14.138-2.578 1.546-6.882 1.86-10.882 1.86h-8v16h8c4 0 11.696.31 19.116-4.14 7.06-4.238 12.2-13.28 12.696-26 .184-.166.148-.156.62-.498 1.724-1.244 5.084-3.21 8.688-6.214C80.33 77.096 88 65.958 88 47.958A40 40 0 0 0 48 8zm63.426 8L97.52 24a48 48 0 0 1 .016 47.942l13.89 8a64 64 0 0 0 0-64z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoCPUParticles3D.svg b/editor/icons/GizmoCPUParticles3D.svg index 3dc8702e18..3ae607c632 100644 --- a/editor/icons/GizmoCPUParticles3D.svg +++ b/editor/icons/GizmoCPUParticles3D.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M36.688 4a6.112 6.112 0 0 0-6.112 6.112v4.8h-9.6a6.112 6.112 0 0 0-6.112 6.112v9.6h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v36h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v9.6a6.112 6.112 0 0 0 6.112 6.112h9.6v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2A6.112 6.112 0 0 0 46 117.984v-4.8h36v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2a6.112 6.112 0 0 0 6.112-6.112v-4.8h9.6a6.112 6.112 0 0 0 6.112-6.112v-9.6h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-36h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-9.6a6.112 6.112 0 0 0-6.112-6.104h-9.6v-4.8a6.112 6.112 0 0 0-6.112-6.112h-3.2A6.112 6.112 0 0 0 82 10.12v4.8H46v-4.8a6.112 6.112 0 0 0-6.112-6.112z" stroke="#000" stroke-width="8" stroke-opacity=".3" fill="none"/><path d="M36.688 4a6.112 6.112 0 0 0-6.112 6.112v4.8h-9.6a6.112 6.112 0 0 0-6.112 6.112v9.6h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v36h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v9.6a6.112 6.112 0 0 0 6.112 6.112h9.6v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2A6.112 6.112 0 0 0 46 117.984v-4.8h36v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2a6.112 6.112 0 0 0 6.112-6.112v-4.8h9.6a6.112 6.112 0 0 0 6.112-6.112v-9.6h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-36h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-9.6a6.112 6.112 0 0 0-6.112-6.104h-9.6v-4.8a6.112 6.112 0 0 0-6.112-6.112h-3.2A6.112 6.112 0 0 0 82 10.12v4.8H46v-4.8a6.112 6.112 0 0 0-6.112-6.112z" fill="#f7f5cf"/><path d="M88 82a18 18 0 0 0 2.484-35.814 27 30 0 0 0-52.944 0 18 18 0 0 0 2.484 35.802zm-48 6a6 6 0 0 0 0 12 6 6 0 0 0 0-12zm48 0a6 6 0 0 0 0 12 6 6 0 0 0 0-12zm-24 6a6 6 0 0 0 0 12 6 6 0 0 0 0-12z" fill="#e1b44c"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill="none" stroke="#000" stroke-opacity=".3" stroke-width="8" d="M36.688 4a6.112 6.112 0 0 0-6.112 6.112v4.8h-9.6a6.112 6.112 0 0 0-6.112 6.112v9.6h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v36h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v9.6a6.112 6.112 0 0 0 6.112 6.112h9.6v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2A6.112 6.112 0 0 0 46 117.984v-4.8h36v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2a6.112 6.112 0 0 0 6.112-6.112v-4.8h9.6a6.112 6.112 0 0 0 6.112-6.112v-9.6h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-36h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-9.6a6.112 6.112 0 0 0-6.112-6.104h-9.6v-4.8a6.112 6.112 0 0 0-6.112-6.112h-3.2A6.112 6.112 0 0 0 82 10.12v4.8H46v-4.8a6.112 6.112 0 0 0-6.112-6.112z"/><path fill="#f7f5cf" d="M36.688 4a6.112 6.112 0 0 0-6.112 6.112v4.8h-9.6a6.112 6.112 0 0 0-6.112 6.112v9.6h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v36h-4.8a6.112 6.112 0 0 0-6.112 6.112v3.2a6.112 6.112 0 0 0 6.112 6.112h4.8v9.6a6.112 6.112 0 0 0 6.112 6.112h9.6v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2A6.112 6.112 0 0 0 46 117.984v-4.8h36v4.8a6.112 6.112 0 0 0 6.112 6.112h3.2a6.112 6.112 0 0 0 6.112-6.112v-4.8h9.6a6.112 6.112 0 0 0 6.112-6.112v-9.6h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-36h4.8a6.112 6.112 0 0 0 6.112-6.112v-3.2a6.112 6.112 0 0 0-6.112-6.112h-4.8v-9.6a6.112 6.112 0 0 0-6.112-6.104h-9.6v-4.8a6.112 6.112 0 0 0-6.112-6.112h-3.2A6.112 6.112 0 0 0 82 10.12v4.8H46v-4.8a6.112 6.112 0 0 0-6.112-6.112z"/><path fill="#e1b44c" d="M88 82a18 18 0 0 0 2.484-35.814 27 30 0 0 0-52.944 0 18 18 0 0 0 2.484 35.802zm-48 6a6 6 0 0 0 0 12 6 6 0 0 0 0-12zm48 0a6 6 0 0 0 0 12 6 6 0 0 0 0-12zm-24 6a6 6 0 0 0 0 12 6 6 0 0 0 0-12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoCamera3D.svg b/editor/icons/GizmoCamera3D.svg index 6a686cb8a5..79941c504b 100644 --- a/editor/icons/GizmoCamera3D.svg +++ b/editor/icons/GizmoCamera3D.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M76 20a24 24 0 0 0-24 22.216 24 24 0 1 0-24 40.376V100a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-8l24 16V60L92 76V61.84A24 24 0 0 0 76 20zM44 96a4 4 0 0 1-4-4V75a3 3 0 0 0-3-3 12 12 0 1 1 9-19 9.5 9.5 0 0 0 18-6 12 12 0 1 1 18 7 3 3 0 0 0-2 3v35a4 4 0 0 1-4 4z" stroke="#000" stroke-width="8" stroke-linejoin="round" stroke-opacity=".294" fill="none"/><path d="M76 20a24 24 0 0 0-24 22.216 24 24 0 1 0-24 40.376V100a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-8l24 16V60L92 76V61.84A24 24 0 0 0 76 20zM44 96a4 4 0 0 1-4-4V75a3 3 0 0 0-3-3 12 12 0 1 1 9-19 9.5 9.5 0 0 0 18-6 12 12 0 1 1 18 7 3 3 0 0 0-2 3v35a4 4 0 0 1-4 4z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill="none" stroke="#000" stroke-linejoin="round" stroke-opacity=".294" stroke-width="8" d="M76 20a24 24 0 0 0-24 22.216 24 24 0 1 0-24 40.376V100a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-8l24 16V60L92 76V61.84A24 24 0 0 0 76 20zM44 96a4 4 0 0 1-4-4V75a3 3 0 0 0-3-3 12 12 0 1 1 9-19 9.5 9.5 0 0 0 18-6 12 12 0 1 1 18 7 3 3 0 0 0-2 3v35a4 4 0 0 1-4 4z"/><path fill="#f7f5cf" d="M76 20a24 24 0 0 0-24 22.216 24 24 0 1 0-24 40.376V100a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-8l24 16V60L92 76V61.84A24 24 0 0 0 76 20zM44 96a4 4 0 0 1-4-4V75a3 3 0 0 0-3-3 12 12 0 1 1 9-19 9.5 9.5 0 0 0 18-6 12 12 0 1 1 18 7 3 3 0 0 0-2 3v35a4 4 0 0 1-4 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoDecal.svg b/editor/icons/GizmoDecal.svg index bd3b3f608f..986fec8363 100644 --- a/editor/icons/GizmoDecal.svg +++ b/editor/icons/GizmoDecal.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><circle cx="64" cy="64" fill="none" stroke="#000" stroke-width="8" stroke-opacity=".3" r="48"/><path d="M111.313 55.934a48 48 0 1 0-71.28 49.528z" fill="#f7f5cf"/><path d="M111.313 55.934a48 48 0 0 0-71.28 49.528z" fill="#e1b44c"/><path d="M40.033 105.462a48 48 0 0 0 71.28-49.528z" fill="#f7f5cf" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><circle cx="64" cy="64" r="48" fill="none" stroke="#000" stroke-opacity=".3" stroke-width="8"/><path fill="#f7f5cf" d="M111.313 55.934a48 48 0 1 0-71.28 49.528z"/><path fill="#e1b44c" d="M111.313 55.934a48 48 0 0 0-71.28 49.528z"/><path fill="#f7f5cf" fill-opacity=".4" d="M40.033 105.462a48 48 0 0 0 71.28-49.528z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoDirectionalLight.svg b/editor/icons/GizmoDirectionalLight.svg index aa2a98c7c6..7fee901dc0 100644 --- a/editor/icons/GizmoDirectionalLight.svg +++ b/editor/icons/GizmoDirectionalLight.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M56 28a8 8 0 0 0 16 0V12a8 8 0 0 0-16 0zM32.886 44.2A8 8 0 0 0 44.2 32.886L32.886 21.575a7.975 7.975 0 0 0-11.312 11.312zm50.913-11.313a8 8 0 0 0 11.314 11.314l11.312-11.314a8 8 0 0 0-11.312-11.312zM64 40a24 24 0 0 0 0 48 24 24 0 0 0 0-48zM12 56a8 8 0 0 0 0 16h16a8 8 0 0 0 0-16zm88 0a8 8 0 0 0 0 16h16a8 8 0 0 0 0-16zM21.574 95.113a7.98 7.98 0 0 0 11.312 11.312L44.2 95.113a8 8 0 0 0-11.314-11.314zm73.538 11.312a8 8 0 0 0 11.312-11.312L95.112 83.799a8 8 0 0 0-11.314 11.314zM56 116a8 8 0 0 0 16 0v-16a8 8 0 0 0-16 0z" fill-opacity=".294"/><path d="M60 28a4 4 0 0 0 8 0V12a4 4 0 0 0-8 0zM35.714 41.373a4 4 0 0 0 5.658-5.658L30.058 24.403a4 4 0 0 0-5.656 5.656zm50.913-5.658a4 4 0 0 0 5.658 5.658l11.313-11.314a4 4 0 0 0-5.657-5.656zM64 44a20 20 0 0 0 0 40 20 20 0 0 0 0-40zM12 60a4 4 0 0 0 0 8h16a4 4 0 0 0 0-8zm88 0a1 1 0 0 0 0 8h16a1 1 0 0 0 0-8zM24.402 97.94a4 4 0 0 0 5.656 5.656l11.314-11.313a4 4 0 0 0-5.658-5.656zm73.538 5.658a4 4 0 0 0 5.656-5.656L92.283 86.628a4 4 0 0 0-5.657 5.657zM60 116a4 4 0 0 0 8 0v-16a4 4 0 0 0-8 0z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M56 28a8 8 0 0 0 16 0V12a8 8 0 0 0-16 0zM32.886 44.2A8 8 0 0 0 44.2 32.886L32.886 21.575a7.975 7.975 0 0 0-11.312 11.312zm50.913-11.313a8 8 0 0 0 11.314 11.314l11.312-11.314a8 8 0 0 0-11.312-11.312zM64 40a24 24 0 0 0 0 48 24 24 0 0 0 0-48zM12 56a8 8 0 0 0 0 16h16a8 8 0 0 0 0-16zm88 0a8 8 0 0 0 0 16h16a8 8 0 0 0 0-16zM21.574 95.113a7.98 7.98 0 0 0 11.312 11.312L44.2 95.113a8 8 0 0 0-11.314-11.314zm73.538 11.312a8 8 0 0 0 11.312-11.312L95.112 83.799a8 8 0 0 0-11.314 11.314zM56 116a8 8 0 0 0 16 0v-16a8 8 0 0 0-16 0z"/><path fill="#fff" d="M60 28a4 4 0 0 0 8 0V12a4 4 0 0 0-8 0zM35.714 41.373a4 4 0 0 0 5.658-5.658L30.058 24.403a4 4 0 0 0-5.656 5.656zm50.913-5.658a4 4 0 0 0 5.658 5.658l11.313-11.314a4 4 0 0 0-5.657-5.656zM64 44a20 20 0 0 0 0 40 20 20 0 0 0 0-40zM12 60a4 4 0 0 0 0 8h16a4 4 0 0 0 0-8zm88 0a1 1 0 0 0 0 8h16a1 1 0 0 0 0-8zM24.402 97.94a4 4 0 0 0 5.656 5.656l11.314-11.313a4 4 0 0 0-5.658-5.656zm73.538 5.658a4 4 0 0 0 5.656-5.656L92.283 86.628a4 4 0 0 0-5.657 5.657zM60 116a4 4 0 0 0 8 0v-16a4 4 0 0 0-8 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoFogVolume.svg b/editor/icons/GizmoFogVolume.svg index 17dbdb7cbb..670ad1170a 100644 --- a/editor/icons/GizmoFogVolume.svg +++ b/editor/icons/GizmoFogVolume.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M20 68S8 68 8 56s16-12 16-12 0-32 28-32 28 24 28 24 10.08-16 24-8 4 24 4 24 12 0 12 8-8 8-8 8zm16 8a4 4 0 0 0 0 8h64a4 4 0 0 0 0-8zm-8 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8zm56 0a4 4 0 0 0 0 8h20a4 4 0 0 0 0-8zm-40 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8z" stroke="#000" stroke-width="8" stroke-opacity=".3" fill="none"/><path d="M20 68S8 68 8 56s16-12 16-12 0-32 28-32 28 24 28 24 10.08-16 24-8 4 24 4 24 12 0 12 8-8 8-8 8zm16 8a4 4 0 0 0 0 8h64a4 4 0 0 0 0-8zm-8 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8zm56 0a4 4 0 0 0 0 8h20a4 4 0 0 0 0-8zm-40 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill="none" stroke="#000" stroke-opacity=".3" stroke-width="8" d="M20 68S8 68 8 56s16-12 16-12 0-32 28-32 28 24 28 24 10.08-16 24-8 4 24 4 24 12 0 12 8-8 8-8 8zm16 8a4 4 0 0 0 0 8h64a4 4 0 0 0 0-8zm-8 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8zm56 0a4 4 0 0 0 0 8h20a4 4 0 0 0 0-8zm-40 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8z"/><path fill="#f7f5cf" d="M20 68S8 68 8 56s16-12 16-12 0-32 28-32 28 24 28 24 10.08-16 24-8 4 24 4 24 12 0 12 8-8 8-8 8zm16 8a4 4 0 0 0 0 8h64a4 4 0 0 0 0-8zm-8 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8zm56 0a4 4 0 0 0 0 8h20a4 4 0 0 0 0-8zm-40 16a4 4 0 0 0 0 8h40a4 4 0 0 0 0-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoGPUParticles3D.svg b/editor/icons/GizmoGPUParticles3D.svg index 3e96123d00..e8f6107984 100644 --- a/editor/icons/GizmoGPUParticles3D.svg +++ b/editor/icons/GizmoGPUParticles3D.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M63.998 4c-18.429.005-34.029 13.88-38.557 32.926C13.041 39.934 4.014 51.006 4 63.996V64c0 15.417 12.583 28 28 28h64c15.417 0 28-12.583 28-28v-.004c-.015-13-9.055-24.076-21.467-27.074C98.006 17.889 82.421 4.019 64.004 4zM96 92c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm-64 0c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm32 8c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12z" fill-opacity=".294"/><path d="M64 8a36 40 0 0 0-35.311 32.256A24 24 0 0 0 8 64a24 24 0 0 0 24 24h64a24 24 0 0 0 24-24 24 24 0 0 0-20.715-23.746A36 40 0 0 0 64 8zM32 96a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm64 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm-32 8a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M63.998 4c-18.429.005-34.029 13.88-38.557 32.926C13.041 39.934 4.014 51.006 4 63.996V64c0 15.417 12.583 28 28 28h64c15.417 0 28-12.583 28-28v-.004c-.015-13-9.055-24.076-21.467-27.074C98.006 17.889 82.421 4.019 64.004 4zM96 92c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm-64 0c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm32 8c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12z"/><path fill="#f7f5cf" d="M64 8a36 40 0 0 0-35.311 32.256A24 24 0 0 0 8 64a24 24 0 0 0 24 24h64a24 24 0 0 0 24-24 24 24 0 0 0-20.715-23.746A36 40 0 0 0 64 8zM32 96a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm64 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm-32 8a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoLight.svg b/editor/icons/GizmoLight.svg index 8009af81a5..48e565e5eb 100644 --- a/editor/icons/GizmoLight.svg +++ b/editor/icons/GizmoLight.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M64 2a44 44 0 0 0-44 44 44 44 0 0 0 24 39.189v13.81a10.97 10.97 0 0 0 8 10.579v16.421h24v-16.421a10.97 10.97 0 0 0 8-10.579V85.142A44 44 0 0 0 108 46 44 44 0 0 0 64 2zm0 20a24 24 0 0 1 24 24 24 24 0 0 1-24 24 24 24 0 0 1-24-24 24 24 0 0 1 24-24z" fill-opacity=".294"/><path d="M64 6a40 40 0 0 0-40 40 40 40 0 0 0 24 36.607V98a8 8 0 0 0 8 8h16a8 8 0 0 0 8-8V82.637A40 40 0 0 0 104 46 40 40 0 0 0 64 6zm0 12a28 28 0 0 1 28 28 28 28 0 0 1-28 28 28 28 0 0 1-28-28 28 28 0 0 1 28-28zm-8 96v8h16v-8z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M64 2a44 44 0 0 0-44 44 44 44 0 0 0 24 39.189v13.81a10.97 10.97 0 0 0 8 10.579v16.421h24v-16.421a10.97 10.97 0 0 0 8-10.579V85.142A44 44 0 0 0 108 46 44 44 0 0 0 64 2zm0 20a24 24 0 0 1 24 24 24 24 0 0 1-24 24 24 24 0 0 1-24-24 24 24 0 0 1 24-24z"/><path fill="#fff" d="M64 6a40 40 0 0 0-40 40 40 40 0 0 0 24 36.607V98a8 8 0 0 0 8 8h16a8 8 0 0 0 8-8V82.637A40 40 0 0 0 104 46 40 40 0 0 0 64 6zm0 12a28 28 0 0 1 28 28 28 28 0 0 1-28 28 28 28 0 0 1-28-28 28 28 0 0 1 28-28zm-8 96v8h16v-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoLightmapGI.svg b/editor/icons/GizmoLightmapGI.svg index 885920138a..1be1a9b167 100644 --- a/editor/icons/GizmoLightmapGI.svg +++ b/editor/icons/GizmoLightmapGI.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M18 8a4 4 0 0 0-4 4v20H8a4 4 0 0 0-4 4v71a17 17 0 0 0 17 17h61a4 4 0 0 0 4-4v-12a4 4 0 0 0-4-4H24V64h20v12a4 4 0 0 0 4 4h32a4 4 0 0 0 4-4V64h20v4a4 4 0 0 0 .576 2.059A20 20 0 0 0 92 105.756v2.238a8 8 0 0 0 4 6.75V120a4 4 0 0 0 4 4h8a4 4 0 0 0 4-4v-5.248a8 8 0 0 0 4-6.752v-2.234A20 20 0 0 0 112.541 72H120a4 4 0 0 0 4-4V36a4 4 0 0 0-4-4h-6V12a4 4 0 0 0-4-4zm8 38a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm25 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm26 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm25 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm2 38a1 1 0 0 1 0 12 1 1 0 0 1 0-12z" fill-opacity=".294"/><path d="M18 12v16h92V12zM8 36v71.076A13 13 0 0 0 20.924 120H82v-12H20V60h88v8h12V36zm18 6a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm25 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm26 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm25 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zM48 68v8h32v-8zm48 40a4 4 0 0 0 4 4h8a4 4 0 0 0 4-4v-4.16a16 16 0 1 0-16 0zm8-28a10 10 0 0 1 0 20 10 10 0 0 1 0-20zm-4 36v4h8v-4z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M18 8a4 4 0 0 0-4 4v20H8a4 4 0 0 0-4 4v71a17 17 0 0 0 17 17h61a4 4 0 0 0 4-4v-12a4 4 0 0 0-4-4H24V64h20v12a4 4 0 0 0 4 4h32a4 4 0 0 0 4-4V64h20v4a4 4 0 0 0 .576 2.059A20 20 0 0 0 92 105.756v2.238a8 8 0 0 0 4 6.75V120a4 4 0 0 0 4 4h8a4 4 0 0 0 4-4v-5.248a8 8 0 0 0 4-6.752v-2.234A20 20 0 0 0 112.541 72H120a4 4 0 0 0 4-4V36a4 4 0 0 0-4-4h-6V12a4 4 0 0 0-4-4zm8 38a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm25 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm26 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm25 0a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm2 38a1 1 0 0 1 0 12 1 1 0 0 1 0-12z"/><path fill="#f7f5cf" d="M18 12v16h92V12zM8 36v71.076A13 13 0 0 0 20.924 120H82v-12H20V60h88v8h12V36zm18 6a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm25 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm26 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm25 0a6 6 0 1 1 0 12 6 6 0 0 1 0-12zM48 68v8h32v-8zm48 40a4 4 0 0 0 4 4h8a4 4 0 0 0 4-4v-4.16a16 16 0 1 0-16 0zm8-28a10 10 0 0 1 0 20 10 10 0 0 1 0-20zm-4 36v4h8v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoLightmapProbe.svg b/editor/icons/GizmoLightmapProbe.svg index 8890649c4d..4609e9d1e6 100644 --- a/editor/icons/GizmoLightmapProbe.svg +++ b/editor/icons/GizmoLightmapProbe.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M8 72h24V56H8zm16.4 20.28 11.32 11.312L47.032 92.28 35.72 80.968zm0-56.56 11.32 11.312L47.032 35.72 35.72 24.4zM40 64a24 24 0 0 0 48 0 24 24 0 0 0-48 0zm24 56A56 56 0 0 0 64 8v18.672a37.328 37.328 0 0 1 0 74.656z" stroke="#000" stroke-width="8" stroke-opacity=".3" fill="none"/><path d="M8 72h24V56H8zm16.4 20.28 11.32 11.312L47.032 92.28 35.72 80.968zm0-56.56 11.32 11.312L47.032 35.72 35.72 24.4zM40 64a24 24 0 0 0 48 0 24 24 0 0 0-48 0zm24 56A56 56 0 0 0 64 8v18.672a37.328 37.328 0 0 1 0 74.656z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill="none" stroke="#000" stroke-opacity=".3" stroke-width="8" d="M8 72h24V56H8zm16.4 20.28 11.32 11.312L47.032 92.28 35.72 80.968zm0-56.56 11.32 11.312L47.032 35.72 35.72 24.4zM40 64a24 24 0 0 0 48 0 24 24 0 0 0-48 0zm24 56A56 56 0 0 0 64 8v18.672a37.328 37.328 0 0 1 0 74.656z"/><path fill="#f7f5cf" d="M8 72h24V56H8zm16.4 20.28 11.32 11.312L47.032 92.28 35.72 80.968zm0-56.56 11.32 11.312L47.032 35.72 35.72 24.4zM40 64a24 24 0 0 0 48 0 24 24 0 0 0-48 0zm24 56A56 56 0 0 0 64 8v18.672a37.328 37.328 0 0 1 0 74.656z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoReflectionProbe.svg b/editor/icons/GizmoReflectionProbe.svg index ee8138295c..38d69aa3d2 100644 --- a/editor/icons/GizmoReflectionProbe.svg +++ b/editor/icons/GizmoReflectionProbe.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M12 4c-4.37 0-8 3.63-8 8v28h16V20h88v8h16V12c0-4.37-3.63-8-8-8zm76 28c-4.37 0-8 3.63-8 8s3.63 8 8 8h10.035L63.549 88.236 18.828 43.513 7.516 54.829l50.828 50.828c3.254 3.251 8.737 3.04 11.73-.453L108 60.96v7.039c0 4.37 3.63 8 8 8s8-3.63 8-8v-28c0-4.37-3.63-8-8-8zM4 84v32c0 4.37 3.63 8 8 8h104c4.37 0 8-3.63 8-8V84h-16v24H20V84z" fill-opacity=".294"/><path d="M12 8a4 4 0 0 0-4 4v24h8V16h96v8h8V12a4 4 0 0 0-4-4zm76 28a4 4 0 0 0 0 8h18.732L63.775 94.119 18.828 49.172l-5.656 5.658 48 48a4 4 0 0 0 5.865-.226L112 50.147v17.854a4 4 0 0 0 8 0v-28a4 4 0 0 0-4-4zM8 88v28a4 4 0 0 0 4 4h104a4 4 0 0 0 4-4V88h-8v24H16V88z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M12 4c-4.37 0-8 3.63-8 8v28h16V20h88v8h16V12c0-4.37-3.63-8-8-8zm76 28c-4.37 0-8 3.63-8 8s3.63 8 8 8h10.035L63.549 88.236 18.828 43.513 7.516 54.829l50.828 50.828c3.254 3.251 8.737 3.04 11.73-.453L108 60.96v7.039c0 4.37 3.63 8 8 8s8-3.63 8-8v-28c0-4.37-3.63-8-8-8zM4 84v32c0 4.37 3.63 8 8 8h104c4.37 0 8-3.63 8-8V84h-16v24H20V84z"/><path fill="#f7f5cf" d="M12 8a4 4 0 0 0-4 4v24h8V16h96v8h8V12a4 4 0 0 0-4-4zm76 28a4 4 0 0 0 0 8h18.732L63.775 94.119 18.828 49.172l-5.656 5.658 48 48a4 4 0 0 0 5.865-.226L112 50.147v17.854a4 4 0 0 0 8 0v-28a4 4 0 0 0-4-4zM8 88v28a4 4 0 0 0 4 4h104a4 4 0 0 0 4-4V88h-8v24H16V88z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoSpotLight.svg b/editor/icons/GizmoSpotLight.svg index 3c986aedd4..e0e1b22e30 100644 --- a/editor/icons/GizmoSpotLight.svg +++ b/editor/icons/GizmoSpotLight.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M52 4a12 12 0 0 0-12 12v26.625A38 38 0 0 0 20 76v4h28.578a16 16 0 0 0 30.856 0H108v-4a38 38 0 0 0-20-33.385V16A12 12 0 0 0 76 4zM40.311 82a8 8 0 0 0-4.559 1.055l-10.393 6a8 8 0 0 0 8 13.86l10.394-6A8 8 0 0 0 40.311 82zm47.379 0a8 8 0 0 0-3.441 14.93l10.393 6a8 8 0 0 0 8-13.86l-10.393-6a8 8 0 0 0-4.559-1.054zM64 96a8 8 0 0 0-8 8v12a8 8 0 0 0 16 0v-12a8 8 0 0 0-8-8z" fill-opacity=".294"/><path d="M52 8a8 8 0 0 0-8 8v28.875A40 36 0 0 0 24 76h28a12 12 0 0 0 24 0h28a40 36 0 0 0-20-31.141V16a8 8 0 0 0-8-8zM40.031 86a4 4 0 0 0-2.28.53l-10.392 6a4 4 0 0 0 4 6.929l10.393-6a4 4 0 0 0-1.721-7.453zm47.938 0a4 4 0 0 0-1.721 7.465l10.393 6a4 4 0 0 0 4-6.93l-10.393-6a4 4 0 0 0-2.279-.529zM64 100a4 4 0 0 0-4 4v12a4 4 0 0 0 8 0v-12a4 4 0 0 0-4-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M52 4a12 12 0 0 0-12 12v26.625A38 38 0 0 0 20 76v4h28.578a16 16 0 0 0 30.856 0H108v-4a38 38 0 0 0-20-33.385V16A12 12 0 0 0 76 4zM40.311 82a8 8 0 0 0-4.559 1.055l-10.393 6a8 8 0 0 0 8 13.86l10.394-6A8 8 0 0 0 40.311 82zm47.379 0a8 8 0 0 0-3.441 14.93l10.393 6a8 8 0 0 0 8-13.86l-10.393-6a8 8 0 0 0-4.559-1.054zM64 96a8 8 0 0 0-8 8v12a8 8 0 0 0 16 0v-12a8 8 0 0 0-8-8z"/><path fill="#fff" d="M52 8a8 8 0 0 0-8 8v28.875A40 36 0 0 0 24 76h28a12 12 0 0 0 24 0h28a40 36 0 0 0-20-31.141V16a8 8 0 0 0-8-8zM40.031 86a4 4 0 0 0-2.28.53l-10.392 6a4 4 0 0 0 4 6.929l10.393-6a4 4 0 0 0-1.721-7.453zm47.938 0a4 4 0 0 0-1.721 7.465l10.393 6a4 4 0 0 0 4-6.93l-10.393-6a4 4 0 0 0-2.279-.529zM64 100a4 4 0 0 0-4 4v12a4 4 0 0 0 8 0v-12a4 4 0 0 0-4-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GizmoVoxelGI.svg b/editor/icons/GizmoVoxelGI.svg index 498f477bca..d701e6dce4 100644 --- a/editor/icons/GizmoVoxelGI.svg +++ b/editor/icons/GizmoVoxelGI.svg @@ -1 +1 @@ -<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="M12 4a8 8 0 0 0-8 8v104a8 8 0 0 0 8 8h64v-16H20V20h88v7.768A36 36 0 0 0 72 89.9V98a9.977 9.977 0 0 0 8 9.8V124h24v-16.2a9.977 9.977 0 0 0 8-9.8v-8.088A36 36 0 0 0 108.477 28H124V12a8 8 0 0 0-8-8H12zm34.432 38.928a8 8 0 0 0 8-13.856l-10.393-6a1 1 0 0 0-8 13.856zM92 44a16 16 0 0 1 0 32 16 16 0 0 1 0-32zm-60 8a8 8 0 0 0 0 16h12a8 8 0 0 0 0-16zm4.039 31.076a8 8 0 0 0 8 13.856l10.393-6a8 8 0 0 0-8.001-13.856z" fill-opacity=".294"/><path d="M12 8a4 4 0 0 0-4 4v104a4 4 0 0 0 4 4h60v-8H16V16h96v8h8V12a4 4 0 0 0-4-4zm36.558 31.539a4 4 0 0 0 4-6.93L41.91 26.461a4 4 0 0 0-4 6.93zM92 28a32 32 0 0 0-16 59.668V96a8 8 0 0 0 8 8h16a8 8 0 0 0 8-8v-8.323A32 32 0 0 0 92 28zm0 12a20 20 0 0 1 0 40 20 20 0 0 1 0-40zM31.852 56a4 4 0 0 0 0 8h12.297a4 4 0 0 0 0-8zm6.058 30.61a4 4 0 0 0 4 6.93l10.648-6.148a4 4 0 0 0-4-6.93zM84 112v8h16v-8z" fill="#f7f5cf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path fill-opacity=".294" d="M12 4a8 8 0 0 0-8 8v104a8 8 0 0 0 8 8h64v-16H20V20h88v7.768A36 36 0 0 0 72 89.9V98a9.977 9.977 0 0 0 8 9.8V124h24v-16.2a9.977 9.977 0 0 0 8-9.8v-8.088A36 36 0 0 0 108.477 28H124V12a8 8 0 0 0-8-8H12zm34.432 38.928a8 8 0 0 0 8-13.856l-10.393-6a1 1 0 0 0-8 13.856zM92 44a16 16 0 0 1 0 32 16 16 0 0 1 0-32zm-60 8a8 8 0 0 0 0 16h12a8 8 0 0 0 0-16zm4.039 31.076a8 8 0 0 0 8 13.856l10.393-6a8 8 0 0 0-8.001-13.856z"/><path fill="#f7f5cf" d="M12 8a4 4 0 0 0-4 4v104a4 4 0 0 0 4 4h60v-8H16V16h96v8h8V12a4 4 0 0 0-4-4zm36.558 31.539a4 4 0 0 0 4-6.93L41.91 26.461a4 4 0 0 0-4 6.93zM92 28a32 32 0 0 0-16 59.668V96a8 8 0 0 0 8 8h16a8 8 0 0 0 8-8v-8.323A32 32 0 0 0 92 28zm0 12a20 20 0 0 1 0 40 20 20 0 0 1 0-40zM31.852 56a4 4 0 0 0 0 8h12.297a4 4 0 0 0 0-8zm6.058 30.61a4 4 0 0 0 4 6.93l10.648-6.148a4 4 0 0 0-4-6.93zM84 112v8h16v-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Godot.svg b/editor/icons/Godot.svg index 588b7e612a..1fd90b8aa2 100644 --- a/editor/icons/Godot.svg +++ b/editor/icons/Godot.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g transform="scale(.015625)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fff" transform="scale(.01563)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="scale(.01563)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GodotFile.svg b/editor/icons/GodotFile.svg index 13a364ece2..5b715fadcd 100644 --- a/editor/icons/GodotFile.svg +++ b/editor/icons/GodotFile.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><g transform="scale(.03) translate(555 725)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g><path d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a1 1 0 0 0-.285-.707l-16-16A1 1 0 0 0 37 5zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z" fill="#fff" fill-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><g fill="#fff" transform="matrix(.03 0 0 .03 16.65 21.75)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="matrix(.03 0 0 .03 16.65 21.75)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g><path fill="#fff" fill-opacity=".6" d="M14 5a4 4 0 0 0-4 4v46a4 4 0 0 0 4 4h36a4 4 0 0 0 4-4V22a1 1 0 0 0-.285-.707l-16-16A1 1 0 0 0 37 5zm0 2h22v12a4 4 0 0 0 4 4h12v32a2 2 0 0 1-2 2H14a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GodotMonochrome.svg b/editor/icons/GodotMonochrome.svg index a8e2d38986..c2429b852e 100644 --- a/editor/icons/GodotMonochrome.svg +++ b/editor/icons/GodotMonochrome.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" transform="scale(.01563)"><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69zM725 436a90 90 0 0 1 0 180 90 90 0 0 1 0-180zM299 436a90 90 0 0 1 0 180 90 90 0 0 1 0-180zM483 514c0-34 58-34 58 0v86c0 34-58 34-58 0z"/><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fff" transform="scale(.01563)"><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69zM725 436a90 90 0 0 1 0 180 90 90 0 0 1 0-180zM299 436a90 90 0 0 1 0 180 90 90 0 0 1 0-180zM483 514c0-34 58-34 58 0v86c0 34-58 34-58 0z"/><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Gradient.svg b/editor/icons/Gradient.svg index 0dff9daa72..4c2073ba4a 100644 --- a/editor/icons/Gradient.svg +++ b/editor/icons/Gradient.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm4.5 2.5h1v1h-1zm-4-2v9h3v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1zm4 0h1v1h-1zm0 6h1v1h-1zm0-2h1v1h-1zm0 4h1v1h-1zm1-7h1v1h-1zm0 2h1v1h-1zm0 2h1v1h-1zm0 2h1v1h-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm4.5 2.5h1v1h-1zm-4-2v9h3v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1h1v-1h-1v-1zm4 0h1v1h-1zm0 6h1v1h-1zm0-2h1v1h-1zm0 4h1v1h-1zm1-7h1v1h-1zm0 2h1v1h-1zm0 2h1v1h-1zm0 2h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GradientTexture1D.svg b/editor/icons/GradientTexture1D.svg index 13da8ab001..7278585113 100644 --- a/editor/icons/GradientTexture1D.svg +++ b/editor/icons/GradientTexture1D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.5 10.5v-7h-3v1h-1v1h1v1h-1v1h1v1h-1v1h1v1zm-4-1h-1v1h1zm-1 0v-1h-1v1zm0-1h1v-1h-1zm0-1v-1h-1v1zm0-1h1v-1h-1zm0-1v-1h-1v1zm0-1h1v-1h-1zM2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12.5 10.5v-7h-3v1h-1v1h1v1h-1v1h1v1h-1v1h1v1zm-4-1h-1v1h1zm-1 0v-1h-1v1zm0-1h1v-1h-1zm0-1v-1h-1v1zm0-1h1v-1h-1zm0-1v-1h-1v1zm0-1h1v-1h-1zM2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GradientTexture2D.svg b/editor/icons/GradientTexture2D.svg index 8a03f34ec3..efb922680e 100644 --- a/editor/icons/GradientTexture2D.svg +++ b/editor/icons/GradientTexture2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3Zm2.5.5v1h1v-1zm1 1v1h1v-1zm1 0h1v1h-1v1h1v1h1v1h1v-1h1v1h1v-5h-5zm4 4h-1v1h1zm0 1v1h1v-1zm-1 0h-1v1h1zm-1 0v-1h-1v1zm-1-1v-1h-1v1zm-1 0h-1v1h1zm0-1v-1h-1v1zm-1-1v-1h-1v1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3Zm2.5.5v1h1v-1zm1 1v1h1v-1zm1 0h1v1h-1v1h1v1h1v1h1v-1h1v1h1v-5h-5zm4 4h-1v1h1zm0 1v1h1v-1zm-1 0h-1v1h1zm-1 0v-1h-1v1zm-1-1v-1h-1v1zm-1 0h-1v1h1zm0-1v-1h-1v1zm-1-1v-1h-1v1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GraphEdit.svg b/editor/icons/GraphEdit.svg index 24685e0caf..a85fbf266d 100644 --- a/editor/icons/GraphEdit.svg +++ b/editor/icons/GraphEdit.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM6.732 5A2 2 0 0 1 7 6v1.117L9.268 6A2 2 0 0 1 9 5V3.883zM2 5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm5 3.883V10a2 2 0 0 1-.268 1L9 12.117V11a2 2 0 0 1 .268-1zM11 10a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M11 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM6.732 5A2 2 0 0 1 7 6v1.117L9.268 6A2 2 0 0 1 9 5V3.883zM2 5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm5 3.883V10a2 2 0 0 1-.268 1L9 12.117V11a2 2 0 0 1 .268-1zM11 10a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GraphElement.svg b/editor/icons/GraphElement.svg index f579f59656..78f667e06f 100644 --- a/editor/icons/GraphElement.svg +++ b/editor/icons/GraphElement.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="2" fill="#8eef97"/><circle cx="8" cy="8" r="5" stroke-width="2" stroke="#8eef97" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="2" fill="#8eef97"/><circle cx="8" cy="8" r="5" fill="none" stroke="#8eef97" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GraphFrame.svg b/editor/icons/GraphFrame.svg index cd25c84756..169bd5f0c2 100644 --- a/editor/icons/GraphFrame.svg +++ b/editor/icons/GraphFrame.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1c-1.108 0-2 .892-2 2v10c0 1.108.892 2 2 2h10c1.108 0 2-.892 2-2V3c0-1.108-.892-2-2-2zm1.25 2h6.5c.692 0 1.25.558 1.25 1.25V5c-1.645 0-3 1.355-3 3s1.355 3 3 3v.75c0 .692-.558 1.25-1.25 1.25h-6.5C3.558 13 3 12.442 3 11.75v-7.5C3 3.558 3.558 3 4.25 3zM12 6a2 2 0 110 4 2 2 0 010-4z" fill="#8eef97" paint-order="stroke markers fill"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1c-1.108 0-2 .892-2 2v10c0 1.108.892 2 2 2h10c1.108 0 2-.892 2-2V3c0-1.108-.892-2-2-2zm1.25 2h6.5c.692 0 1.25.558 1.25 1.25V5c-1.645 0-3 1.355-3 3s1.355 3 3 3v.75c0 .692-.558 1.25-1.25 1.25h-6.5C3.558 13 3 12.442 3 11.75v-7.5C3 3.558 3.558 3 4.25 3zM12 6a2 2 0 110 4 2 2 0 010-4z" paint-order="stroke markers fill"/></svg>
\ No newline at end of file diff --git a/editor/icons/GraphNode.svg b/editor/icons/GraphNode.svg index 83f666ed06..c1d4ed19b2 100644 --- a/editor/icons/GraphNode.svg +++ b/editor/icons/GraphNode.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M5 2a2 2 0 0 0-2 2h10a2 2 0 0 0-2-2zM3 5v1a3 3 0 0 1 0 6 2 2 0 0 0 2 2h6a2 2 0 0 0 2-2 3 3 0 0 1 0-6V5zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm10 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5 2a2 2 0 0 0-2 2h10a2 2 0 0 0-2-2zM3 5v1a3 3 0 0 1 0 6 2 2 0 0 0 2 2h6a2 2 0 0 0 2-2 3 3 0 0 1 0-6V5zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm10 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Grid.svg b/editor/icons/Grid.svg index 7781793a5a..0f3bd7f5c8 100644 --- a/editor/icons/Grid.svg +++ b/editor/icons/Grid.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h14V1zm2 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v14h14V1zm2 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GridContainer.svg b/editor/icons/GridContainer.svg index 25b27409de..99e7e9307b 100644 --- a/editor/icons/GridContainer.svg +++ b/editor/icons/GridContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GridLayout.svg b/editor/icons/GridLayout.svg index 754c3c9d40..192463c488 100644 --- a/editor/icons/GridLayout.svg +++ b/editor/icons/GridLayout.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1.87 6.541h2.917v2.917H1.87zm4.666 0h2.917v2.917H6.536zm4.666 0h2.917v2.917h-2.917zm-5.77-5.429-1.95 1.95 1.95 1.95m-1.95-1.95h9.386m-2.137 8.05 1.95 1.95-1.95 1.95m-7.437-1.95h9.387" fill="none" stroke="#e0e0e0" stroke-width="1.3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-width="1.3" d="M1.87 6.541h2.917v2.917H1.87zm4.666 0h2.917v2.917H6.536zm4.666 0h2.917v2.917h-2.917zm-5.77-5.429-1.95 1.95 1.95 1.95m-1.95-1.95h9.386m-2.137 8.05 1.95 1.95-1.95 1.95m-7.437-1.95h9.387"/></svg>
\ No newline at end of file diff --git a/editor/icons/GridMinimap.svg b/editor/icons/GridMinimap.svg index 854fec6a7f..31e71a932a 100644 --- a/editor/icons/GridMinimap.svg +++ b/editor/icons/GridMinimap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 2.199v2.615l-2.625 1.313V3.512zM2 6.264l2.625 1.312v2.551L2 8.814zm12 0v2.55l-2.625 1.313V7.576zM6 7.719h4v2.64H6zm-4 2.56 2.625 1.313v2.521L2 12.801zm12 0v2.522l-2.625 1.312v-2.521zm-8 1.455h4v2.641H6zm4-8.109v2.734H5.844s-.749.647-.875.641c-.131-.007-1.51-1.456-1.51-1.456L2 4.814V2.199l.117.06s-.064-.775.424-1.216L1.279.441A.626.626 0 0 0 .375 1v12c0 .237.134.453.346.559l4 2a.626.626 0 0 0 .279.066h6a.626.626 0 0 0 .279-.066l4-2a.625.625 0 0 0 .346-.559V1a.625.625 0 0 0-.904-.559l-3.869 1.934H7.888s.084.624-.218 1.25z" fill="#e0e0e0"/><path d="M5 6.25c-4-3.5-2-6 0-6s4 2.5 0 6z" fill="#fff" fill-opacity=".686"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14 2.199v2.615l-2.625 1.313V3.512zM2 6.264l2.625 1.312v2.551L2 8.814zm12 0v2.55l-2.625 1.313V7.576zM6 7.719h4v2.64H6zm-4 2.56 2.625 1.313v2.521L2 12.801zm12 0v2.522l-2.625 1.312v-2.521zm-8 1.455h4v2.641H6zm4-8.109v2.734H5.844s-.749.647-.875.641c-.131-.007-1.51-1.456-1.51-1.456L2 4.814V2.199l.117.06s-.064-.775.424-1.216L1.279.441A.626.626 0 0 0 .375 1v12c0 .237.134.453.346.559l4 2a.626.626 0 0 0 .279.066h6a.626.626 0 0 0 .279-.066l4-2a.625.625 0 0 0 .346-.559V1a.625.625 0 0 0-.904-.559l-3.869 1.934H7.888s.084.624-.218 1.25z"/><path fill="#fff" fill-opacity=".686" d="M5 6.25c-4-3.5-2-6 0-6s4 2.5 0 6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GridToggle.svg b/editor/icons/GridToggle.svg index e3c38ba680..ff755eaf7b 100644 --- a/editor/icons/GridToggle.svg +++ b/editor/icons/GridToggle.svg @@ -1 +1 @@ -<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 0v2H0v1h2v4H0v1h2v4H0v1h2v2h1v-2h3.125A5.5 5 0 0 1 6 12H3V8h4v1.143a5.5 5 0 0 1 1-.99V8h.223A5.5 5 0 0 1 11.5 7H8V3h4v4h-.5a5.5 5 0 0 1 3.297 1H15V7h-2V3h2V2h-2V0h-1v2H8V0H7v2H3V0H2zm1 3h4v4H3V3zm8.485 5.261c-1.648 0-3.734 1.256-4.485 3.68a.645.645 0 0 0-.004.367C7.721 14.846 9.873 16 11.486 16c1.612 0 3.764-1.154 4.489-3.692a.645.645 0 0 0 0-.356c-.71-2.443-2.842-3.691-4.49-3.691zm0 1.29a2.58 2.58 0 0 1 0 5.16 2.58 2.58 0 0 1 0-5.16zm0 1.29a1.29 1.29 0 0 0 0 2.58 1.29 1.29 0 0 0 0-2.58z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 0v2H0v1h2v4H0v1h2v4H0v1h2v2h1v-2h3.125A5.5 5 0 0 1 6 12H3V8h4v1.143a5.5 5 0 0 1 1-.99V8h.223A5.5 5 0 0 1 11.5 7H8V3h4v4h-.5a5.5 5 0 0 1 3.297 1H15V7h-2V3h2V2h-2V0h-1v2H8V0H7v2H3V0H2zm1 3h4v4H3V3zm8.485 5.261c-1.648 0-3.734 1.256-4.485 3.68a.645.645 0 0 0-.004.367C7.721 14.846 9.873 16 11.486 16c1.612 0 3.764-1.154 4.489-3.692a.645.645 0 0 0 0-.356c-.71-2.443-2.842-3.691-4.49-3.691zm0 1.29a2.58 2.58 0 0 1 0 5.16 2.58 2.58 0 0 1 0-5.16zm0 1.29a1.29 1.29 0 0 0 0 2.58 1.29 1.29 0 0 0 0-2.58z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GrooveJoint2D.svg b/editor/icons/GrooveJoint2D.svg index 95c183a239..0073226854 100644 --- a/editor/icons/GrooveJoint2D.svg +++ b/editor/icons/GrooveJoint2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M15 1h-5v6H5v2h5v6h5zM8 1H1v14h7v-4H3V5h5z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M15 1h-5v6H5v2h5v6h5zM8 1H1v14h7v-4H3V5h5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Group.svg b/editor/icons/Group.svg index 133695e3fc..0e21ed7173 100644 --- a/editor/icons/Group.svg +++ b/editor/icons/Group.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z" fill="#e0e0e0" fill-opacity=".4"/><path d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" fill-opacity=".4" d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z"/><path fill="#fff" d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GroupViewport.svg b/editor/icons/GroupViewport.svg index e2af5f1159..31d4d3c439 100644 --- a/editor/icons/GroupViewport.svg +++ b/editor/icons/GroupViewport.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v4h4V0zm6 0v6H0v10h10v-6h6V0zm4 4h2v2h-2zm2 8v4h4v-4z" fill-opacity=".4"/><path d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z" fill="#e0e0e0"/><path d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".4" d="M0 0v4h4V0zm6 0v6H0v10h10v-6h6V0zm4 4h2v2h-2zm2 8v4h4v-4z"/><path fill="#e0e0e0" d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z"/><path fill="#fff" d="M1 1v2h2V1H1zm12 0v2h2V1h-2zM1 13v2h2v-2H1zm12 0v2h2v-2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Groups.svg b/editor/icons/Groups.svg index eac5b7b45b..67c786e792 100644 --- a/editor/icons/Groups.svg +++ b/editor/icons/Groups.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v10H3zm5 2a3 3 0 0 0 0 6 3 3 0 0 0 0-6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v10H3zm5 2a3 3 0 0 0 0 6 3 3 0 0 0 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiChecked.svg b/editor/icons/GuiChecked.svg index 91a3d68c50..d196de2e88 100644 --- a/editor/icons/GuiChecked.svg +++ b/editor/icons/GuiChecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.33" height="14" width="14" fill="#699ce8"/><path d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#699ce8" rx="2.33"/><path fill="#fff" d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiCheckedDisabled.svg b/editor/icons/GuiCheckedDisabled.svg index 0bea714755..1112a94c34 100644 --- a/editor/icons/GuiCheckedDisabled.svg +++ b/editor/icons/GuiCheckedDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.33" height="14" width="14" fill="#808080"/><path d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z" fill="#b3b3b3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="gray" rx="2.33"/><path fill="#b3b3b3" d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiClose.svg b/editor/icons/GuiClose.svg index 81822a3aaf..3cef5e1fb8 100644 --- a/editor/icons/GuiClose.svg +++ b/editor/icons/GuiClose.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3 10 10M3 13 13 3" fill="none" stroke="#fff" stroke-width="2" stroke-opacity=".898"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-opacity=".898" stroke-width="2" d="m3 3 10 10M3 13 13 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiDropdown.svg b/editor/icons/GuiDropdown.svg index 92caa8c057..a9f1e43947 100644 --- a/editor/icons/GuiDropdown.svg +++ b/editor/icons/GuiDropdown.svg @@ -1 +1 @@ -<svg height="14" width="14" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"><path d="m4 7 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".6" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".6" stroke-width="2" d="m4 7 3 3 3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiEllipsis.svg b/editor/icons/GuiEllipsis.svg index 25c3a4d6b2..0c22993588 100644 --- a/editor/icons/GuiEllipsis.svg +++ b/editor/icons/GuiEllipsis.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 14 8" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M3.86 0A3.851 3.851 0 0 0 0 3.86v.28A3.851 3.851 0 0 0 3.86 8h6.28A3.851 3.851 0 0 0 14 4.14v-.28A3.851 3.851 0 0 0 10.14 0zM3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="8"><path fill="#fff" fill-opacity=".4" d="M3.86 0A3.851 3.851 0 0 0 0 3.86v.28A3.851 3.851 0 0 0 3.86 8h6.28A3.851 3.851 0 0 0 14 4.14v-.28A3.851 3.851 0 0 0 10.14 0zM3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiGraphNodePort.svg b/editor/icons/GuiGraphNodePort.svg index 04645d97b7..586781ed4d 100644 --- a/editor/icons/GuiGraphNodePort.svg +++ b/editor/icons/GuiGraphNodePort.svg @@ -1 +1 @@ -<svg height="24" width="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" fill="#fff" r="10"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle cx="12" cy="12" r="10" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiHsplitter.svg b/editor/icons/GuiHsplitter.svg index cf42f057c6..7caa24777c 100644 --- a/editor/icons/GuiHsplitter.svg +++ b/editor/icons/GuiHsplitter.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 2 64" width="2" xmlns="http://www.w3.org/2000/svg"><path d="M1 2v60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="2" height="64"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2" d="M1 2v60"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiIndeterminate.svg b/editor/icons/GuiIndeterminate.svg index ce4b204fdd..057907a479 100644 --- a/editor/icons/GuiIndeterminate.svg +++ b/editor/icons/GuiIndeterminate.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.33" height="14" width="14" fill="#699ce8"/><path d="M3 7h10v2H3z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#699ce8" rx="2.33"/><path fill="#fff" d="M3 7h10v2H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiIndeterminateDisabled.svg b/editor/icons/GuiIndeterminateDisabled.svg index edaf69f7a1..a2e2f5a142 100644 --- a/editor/icons/GuiIndeterminateDisabled.svg +++ b/editor/icons/GuiIndeterminateDisabled.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.33" height="14" width="14" fill="#808080"/><path d="M3 7h10v2H3z" fill="#b3b3b3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="gray" rx="2.33"/><path fill="#b3b3b3" d="M3 7h10v2H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiMiniCheckerboard.svg b/editor/icons/GuiMiniCheckerboard.svg index 40e6aa1dd0..2dd71a6add 100644 --- a/editor/icons/GuiMiniCheckerboard.svg +++ b/editor/icons/GuiMiniCheckerboard.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v8h8V0zm8 8v8h8V8z" fill="gray"/><path d="M8 0v8h8V0zm0 8H0v8h8z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M0 0v8h8V0zm8 8v8h8V8z"/><path fill="#fff" d="M8 0v8h8V0zm0 8H0v8h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiOptionArrow.svg b/editor/icons/GuiOptionArrow.svg index 25fbe567a7..3758846ff3 100644 --- a/editor/icons/GuiOptionArrow.svg +++ b/editor/icons/GuiOptionArrow.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 4 4 4 4-4" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 4 4 4 4-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiProgressBar.svg b/editor/icons/GuiProgressBar.svg index 8d65bf5a2c..3b4f0e3e71 100644 --- a/editor/icons/GuiProgressBar.svg +++ b/editor/icons/GuiProgressBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" height="14" width="14" rx="1" stroke="#e0e0e0" stroke-width="2" fill="none" stroke-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="none" stroke="#e0e0e0" stroke-opacity=".4" stroke-width="2" rx="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiProgressFill.svg b/editor/icons/GuiProgressFill.svg index d623a58b42..8d22fd6a20 100644 --- a/editor/icons/GuiProgressFill.svg +++ b/editor/icons/GuiProgressFill.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" fill-opacity=".4" height="8" ry="1" width="8" x="4" y="4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="8" height="8" x="4" y="4" fill="#e0e0e0" fill-opacity=".4" ry="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiRadioChecked.svg b/editor/icons/GuiRadioChecked.svg index 6f9160b5ce..9a68094e7f 100644 --- a/editor/icons/GuiRadioChecked.svg +++ b/editor/icons/GuiRadioChecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#699ce8"/><circle cx="8" cy="8" r="4" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#699ce8"/><circle cx="8" cy="8" r="4" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiRadioCheckedDisabled.svg b/editor/icons/GuiRadioCheckedDisabled.svg index 30c0e013e1..6356bac3a1 100644 --- a/editor/icons/GuiRadioCheckedDisabled.svg +++ b/editor/icons/GuiRadioCheckedDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#808080"/><circle cx="8" cy="8" r="4" fill="#b3b3b3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="gray"/><circle cx="8" cy="8" r="4" fill="#b3b3b3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiRadioUnchecked.svg b/editor/icons/GuiRadioUnchecked.svg index d60f0a3fca..89c5f17110 100644 --- a/editor/icons/GuiRadioUnchecked.svg +++ b/editor/icons/GuiRadioUnchecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#e0e0e0" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#e0e0e0" fill-opacity=".2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiRadioUncheckedDisabled.svg b/editor/icons/GuiRadioUncheckedDisabled.svg index 9c5a6a7ff0..90ce73c543 100644 --- a/editor/icons/GuiRadioUncheckedDisabled.svg +++ b/editor/icons/GuiRadioUncheckedDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#808080" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="gray" fill-opacity=".2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiResizer.svg b/editor/icons/GuiResizer.svg index e6e3f1c957..6f0e68e778 100644 --- a/editor/icons/GuiResizer.svg +++ b/editor/icons/GuiResizer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 11h7V4" fill="none" stroke="#fff" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".6" stroke-width="2" d="M4 11h7V4"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiResizerTopLeft.svg b/editor/icons/GuiResizerTopLeft.svg index fe4dbf54fa..f75bf58d87 100644 --- a/editor/icons/GuiResizerTopLeft.svg +++ b/editor/icons/GuiResizerTopLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 11V4h7" fill="none" stroke="#fff" stroke-width="2" stroke-linejoin="round" stroke-linecap="round" stroke-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".6" stroke-width="2" d="M4 11V4h7"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollArrowLeft.svg b/editor/icons/GuiScrollArrowLeft.svg index 86ff31f548..8d3cbc9500 100644 --- a/editor/icons/GuiScrollArrowLeft.svg +++ b/editor/icons/GuiScrollArrowLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 14A6 6 0 0 0 8 2a6 6 0 0 0 0 12zM5.293 8.707a1 1 0 0 1 0-1.414l3-3a1 1 0 0 1 1.414 1.414L7.414 8l2.293 2.293a1 1 0 0 1-1.414 1.414z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 14A6 6 0 0 0 8 2a6 6 0 0 0 0 12zM5.293 8.707a1 1 0 0 1 0-1.414l3-3a1 1 0 0 1 1.414 1.414L7.414 8l2.293 2.293a1 1 0 0 1-1.414 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollArrowLeftHl.svg b/editor/icons/GuiScrollArrowLeftHl.svg index bd0ee8558f..dfb27d1b64 100644 --- a/editor/icons/GuiScrollArrowLeftHl.svg +++ b/editor/icons/GuiScrollArrowLeftHl.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 14A6 6 0 0 0 8 2a6 6 0 0 0 0 12zM5.293 8.707a1 1 0 0 1 0-1.414l3-3a1 1 0 0 1 1.414 1.414L7.414 8l2.293 2.293a1 1 0 0 1-1.414 1.414z" fill="#e0e0e0" fill-opacity=".8"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" fill-opacity=".8" d="M8 14A6 6 0 0 0 8 2a6 6 0 0 0 0 12zM5.293 8.707a1 1 0 0 1 0-1.414l3-3a1 1 0 0 1 1.414 1.414L7.414 8l2.293 2.293a1 1 0 0 1-1.414 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollArrowRight.svg b/editor/icons/GuiScrollArrowRight.svg index 8c779f7f89..1de1251617 100644 --- a/editor/icons/GuiScrollArrowRight.svg +++ b/editor/icons/GuiScrollArrowRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2zm2.707 5.293a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 8 6.293 5.707a1 1 0 0 1 1.414-1.414z" fill="#e0e0e0" fill-opacity=".8"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" fill-opacity=".8" d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2zm2.707 5.293a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 8 6.293 5.707a1 1 0 0 1 1.414-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollArrowRightHl.svg b/editor/icons/GuiScrollArrowRightHl.svg index 1776d0839c..f89ef07c71 100644 --- a/editor/icons/GuiScrollArrowRightHl.svg +++ b/editor/icons/GuiScrollArrowRightHl.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2zm2.707 5.293a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 8 6.293 5.707a1 1 0 0 1 1.414-1.414z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2zm2.707 5.293a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 8 6.293 5.707a1 1 0 0 1 1.414-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollBg.svg b/editor/icons/GuiScrollBg.svg index e2550c48c2..312b71d747 100644 --- a/editor/icons/GuiScrollBg.svg +++ b/editor/icons/GuiScrollBg.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#fff" fill-opacity=".082" r="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="2" fill="#fff" fill-opacity=".082"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollGrabber.svg b/editor/icons/GuiScrollGrabber.svg index 54888dcee5..b3c00c4bcc 100644 --- a/editor/icons/GuiScrollGrabber.svg +++ b/editor/icons/GuiScrollGrabber.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#fff" fill-opacity=".29" r="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="3" fill="#fff" fill-opacity=".29"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollGrabberHl.svg b/editor/icons/GuiScrollGrabberHl.svg index 8ec0790ed1..25a4a3cb0a 100644 --- a/editor/icons/GuiScrollGrabberHl.svg +++ b/editor/icons/GuiScrollGrabberHl.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#f9f9f9" fill-opacity=".73" r="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="3" fill="#f9f9f9" fill-opacity=".73"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiScrollGrabberPressed.svg b/editor/icons/GuiScrollGrabberPressed.svg index 21f953ff47..64787f8ba9 100644 --- a/editor/icons/GuiScrollGrabberPressed.svg +++ b/editor/icons/GuiScrollGrabberPressed.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#b3b3b3" fill-opacity=".729" r="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><circle cx="6" cy="6" r="3" fill="#b3b3b3" fill-opacity=".729"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiSliderGrabber.svg b/editor/icons/GuiSliderGrabber.svg index 8922ffafd7..88e4998c56 100644 --- a/editor/icons/GuiSliderGrabber.svg +++ b/editor/icons/GuiSliderGrabber.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".9" r="3" fill="#fff"/><circle cx="8" cy="8" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-opacity=".29" r="6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="3" fill="#fff" fill-opacity=".9"/><circle cx="8" cy="8" r="6" fill="none" stroke="#e0e0e0" stroke-opacity=".29" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiSliderGrabberHl.svg b/editor/icons/GuiSliderGrabberHl.svg index 171b6ae404..4cd1478428 100644 --- a/editor/icons/GuiSliderGrabberHl.svg +++ b/editor/icons/GuiSliderGrabberHl.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".9" r="3" fill="#fff"/><circle cx="8" cy="8" fill="none" stroke="#e0e0e0" stroke-width="2" r="6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="3" fill="#fff" fill-opacity=".9"/><circle cx="8" cy="8" r="6" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiSpace.svg b/editor/icons/GuiSpace.svg index 4f3a56fffd..73883c70a6 100644 --- a/editor/icons/GuiSpace.svg +++ b/editor/icons/GuiSpace.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="4" fill="#fff" fill-opacity=".2" r="1.5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><circle cx="4" cy="4" r="1.5" fill="#fff" fill-opacity=".2"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiSpinboxUpdown.svg b/editor/icons/GuiSpinboxUpdown.svg index c057f8ee89..f56febd8c1 100644 --- a/editor/icons/GuiSpinboxUpdown.svg +++ b/editor/icons/GuiSpinboxUpdown.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 6 4-4 4 4m0 4-4 4-4-4" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".8"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".8" stroke-width="2" d="m4 6 4-4 4 4m0 4-4 4-4-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiSpinboxUpdownDisabled.svg b/editor/icons/GuiSpinboxUpdownDisabled.svg index c6328e1408..49ec14d487 100644 --- a/editor/icons/GuiSpinboxUpdownDisabled.svg +++ b/editor/icons/GuiSpinboxUpdownDisabled.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m4 6 4-4 4 4m0 4-4 4-4-4" fill="none" stroke="#b3b3b3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".8"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#b3b3b3" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".8" stroke-width="2" d="m4 6 4-4 4 4m0 4-4 4-4-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTab.svg b/editor/icons/GuiTab.svg index e6be35a32c..a582f90feb 100644 --- a/editor/icons/GuiTab.svg +++ b/editor/icons/GuiTab.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="M6 0v8h2V0zM1 0a1 1 0 0 0-.693 1.705L2.6 3.998.307 6.291A1 1 0 0 0 1.72 7.705l3-3a1 1 0 0 0 0-1.414l-3-3A1 1 0 0 0 1 0z" fill="#fff" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill="#fff" fill-opacity=".2" d="M6 0v8h2V0zM1 0a1 1 0 0 0-.693 1.705L2.6 3.998.307 6.291A1 1 0 0 0 1.72 7.705l3-3a1 1 0 0 0 0-1.414l-3-3A1 1 0 0 0 1 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTabDropMark.svg b/editor/icons/GuiTabDropMark.svg index c85b165c71..d68967ca64 100644 --- a/editor/icons/GuiTabDropMark.svg +++ b/editor/icons/GuiTabDropMark.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 16 32" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 2h6v30h-6z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="32"><path fill="#fff" d="m5 2h6v30h-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTabMenu.svg b/editor/icons/GuiTabMenu.svg index 86138c63d5..39fdc665b1 100644 --- a/editor/icons/GuiTabMenu.svg +++ b/editor/icons/GuiTabMenu.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#e0e0e0" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" fill-opacity=".4" d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTabMenuHl.svg b/editor/icons/GuiTabMenuHl.svg index c6d28dfa56..7d45e7e1c5 100644 --- a/editor/icons/GuiTabMenuHl.svg +++ b/editor/icons/GuiTabMenuHl.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOff.svg b/editor/icons/GuiToggleOff.svg index 86e2eed5fc..de14ac5114 100644 --- a/editor/icons/GuiToggleOff.svg +++ b/editor/icons/GuiToggleOff.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 38 16" width="38" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><rect fill-opacity=".2" height="14" width="36" rx="7" x="1" y="1"/><circle cx="8" cy="8" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><g fill="#e0e0e0"><rect width="36" height="14" x="1" y="1" fill-opacity=".2" rx="7"/><circle cx="8" cy="8" r="5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOffDisabled.svg b/editor/icons/GuiToggleOffDisabled.svg index f2c96808d8..35dfa775b1 100644 --- a/editor/icons/GuiToggleOffDisabled.svg +++ b/editor/icons/GuiToggleOffDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 38 16" width="38" xmlns="http://www.w3.org/2000/svg"><g fill="#808080"><rect fill-opacity=".2" height="14" rx="7" width="36" x="1" y="1"/><circle cx="8" cy="8" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><g fill="gray"><rect width="36" height="14" x="1" y="1" fill-opacity=".2" rx="7"/><circle cx="8" cy="8" r="5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOffDisabledMirrored.svg b/editor/icons/GuiToggleOffDisabledMirrored.svg index 700825c025..cc4e053467 100644 --- a/editor/icons/GuiToggleOffDisabledMirrored.svg +++ b/editor/icons/GuiToggleOffDisabledMirrored.svg @@ -1 +1 @@ -<svg width="38" height="16" viewBox="0 0 38 16" xmlns="http://www.w3.org/2000/svg"><g fill="#808080"><rect height="14" rx="7" width="36" x="1" y="1" fill-opacity=".2"/><circle cx="30" cy="8" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><g fill="gray"><rect width="36" height="14" x="1" y="1" fill-opacity=".2" rx="7"/><circle cx="30" cy="8" r="5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOffMirrored.svg b/editor/icons/GuiToggleOffMirrored.svg index bbf9b0d95d..4e7f63d573 100644 --- a/editor/icons/GuiToggleOffMirrored.svg +++ b/editor/icons/GuiToggleOffMirrored.svg @@ -1 +1 @@ -<svg width="38" height="16" viewBox="0 0 38 16" xmlns="http://www.w3.org/2000/svg"><rect height="14" rx="7" width="36" x="1" y="1" fill="#808080"/><circle cx="8" cy="8" fill="#b3b3b3" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><rect width="36" height="14" x="1" y="1" fill="gray" rx="7"/><circle cx="8" cy="8" r="5" fill="#b3b3b3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOn.svg b/editor/icons/GuiToggleOn.svg index 983838e743..e45dbcf46e 100644 --- a/editor/icons/GuiToggleOn.svg +++ b/editor/icons/GuiToggleOn.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 38 16" width="38" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="36" height="14" rx="7" fill="#699ce8"/><circle cx="30" cy="8" fill="#fff" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><rect width="36" height="14" x="1" y="1" fill="#699ce8" rx="7"/><circle cx="30" cy="8" r="5" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOnDisabled.svg b/editor/icons/GuiToggleOnDisabled.svg index 93ecf1aa74..9477f2de25 100644 --- a/editor/icons/GuiToggleOnDisabled.svg +++ b/editor/icons/GuiToggleOnDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 38 16" width="38" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="36" height="14" rx="7" fill="#808080"/><circle cx="30" cy="8" fill="#b3b3b3" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><rect width="36" height="14" x="1" y="1" fill="gray" rx="7"/><circle cx="30" cy="8" r="5" fill="#b3b3b3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOnDisabledMirrored.svg b/editor/icons/GuiToggleOnDisabledMirrored.svg index bbf9b0d95d..4e7f63d573 100644 --- a/editor/icons/GuiToggleOnDisabledMirrored.svg +++ b/editor/icons/GuiToggleOnDisabledMirrored.svg @@ -1 +1 @@ -<svg width="38" height="16" viewBox="0 0 38 16" xmlns="http://www.w3.org/2000/svg"><rect height="14" rx="7" width="36" x="1" y="1" fill="#808080"/><circle cx="8" cy="8" fill="#b3b3b3" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><rect width="36" height="14" x="1" y="1" fill="gray" rx="7"/><circle cx="8" cy="8" r="5" fill="#b3b3b3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiToggleOnMirrored.svg b/editor/icons/GuiToggleOnMirrored.svg index 8aea5b9250..67e318d276 100644 --- a/editor/icons/GuiToggleOnMirrored.svg +++ b/editor/icons/GuiToggleOnMirrored.svg @@ -1 +1 @@ -<svg width="38" height="16" viewBox="0 0 38 16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="36" height="14" rx="7" fill="#699ce8"/><circle cx="8" cy="8" fill="#fff" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="38" height="16"><rect width="36" height="14" x="1" y="1" fill="#699ce8" rx="7"/><circle cx="8" cy="8" r="5" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTreeArrowDown.svg b/editor/icons/GuiTreeArrowDown.svg index 3b19a096af..9c08eba184 100644 --- a/editor/icons/GuiTreeArrowDown.svg +++ b/editor/icons/GuiTreeArrowDown.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m3 5 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2" d="m3 5 3 3 3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTreeArrowLeft.svg b/editor/icons/GuiTreeArrowLeft.svg index 92f7f74de0..2a9eceea20 100644 --- a/editor/icons/GuiTreeArrowLeft.svg +++ b/editor/icons/GuiTreeArrowLeft.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M7 3 4 6l3 3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2" d="M7 3 4 6l3 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTreeArrowRight.svg b/editor/icons/GuiTreeArrowRight.svg index 4e48fff81e..340d4e22ed 100644 --- a/editor/icons/GuiTreeArrowRight.svg +++ b/editor/icons/GuiTreeArrowRight.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m5 9 3-3-3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".4" stroke-width="2" d="m5 9 3-3-3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiTreeUpdown.svg b/editor/icons/GuiTreeUpdown.svg index b71f95b297..b79e025f8d 100644 --- a/editor/icons/GuiTreeUpdown.svg +++ b/editor/icons/GuiTreeUpdown.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m5 6 3-3 3 3m0 4-3 3-3-3" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke="#fff" stroke-opacity=".6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".6" stroke-width="2" d="m5 6 3-3 3 3m0 4-3 3-3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiUnchecked.svg b/editor/icons/GuiUnchecked.svg index 4ce9a164ae..ac9be6117b 100644 --- a/editor/icons/GuiUnchecked.svg +++ b/editor/icons/GuiUnchecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.333" width="14" height="14" fill="#e0e0e0" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#e0e0e0" fill-opacity=".2" rx="2.333"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiUncheckedDisabled.svg b/editor/icons/GuiUncheckedDisabled.svg index ae6d476301..79bebdf120 100644 --- a/editor/icons/GuiUncheckedDisabled.svg +++ b/editor/icons/GuiUncheckedDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.333" width="14" height="14" fill="#808080" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="gray" fill-opacity=".2" rx="2.333"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiViewportHdiagsplitter.svg b/editor/icons/GuiViewportHdiagsplitter.svg index 2bba6d77c0..f68f22c8e2 100644 --- a/editor/icons/GuiViewportHdiagsplitter.svg +++ b/editor/icons/GuiViewportHdiagsplitter.svg @@ -1 +1 @@ -<svg height="34" viewBox="0 0 64 34" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32 2V32M2 2h60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="34"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2" d="M32 2V32M2 2h60"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiViewportVdiagsplitter.svg b/editor/icons/GuiViewportVdiagsplitter.svg index 6cc8ef1a03..6752a6d3e3 100644 --- a/editor/icons/GuiViewportVdiagsplitter.svg +++ b/editor/icons/GuiViewportVdiagsplitter.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 34 64" width="34" xmlns="http://www.w3.org/2000/svg"><path d="M32 32H2m30-30v60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="34" height="64"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2" d="M32 32H2m30-30v60"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiViewportVhsplitter.svg b/editor/icons/GuiViewportVhsplitter.svg index f915f70933..cca8a86e3d 100644 --- a/editor/icons/GuiViewportVhsplitter.svg +++ b/editor/icons/GuiViewportVhsplitter.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32 2v60M2 32h60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2" d="M32 2v60M2 32h60"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiVisibilityHidden.svg b/editor/icons/GuiVisibilityHidden.svg index 3a5c959b1d..a9da2efc90 100644 --- a/editor/icons/GuiVisibilityHidden.svg +++ b/editor/icons/GuiVisibilityHidden.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.96 7.727-1.921.548c.32 1.12.824 2.06 1.432 2.84l-.834.834 1.414 1.414.843-.843c.986.747 2.077 1.206 3.106 1.386V15h2v-1.094c1.029-.18 2.12-.639 3.105-1.386l.844.843 1.414-1.414-.834-.834a8.285 8.285 0 0 0 1.432-2.84l-1.922-.548C12.163 10.79 9.499 12 7.999 12s-4.163-1.209-5.038-4.273z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2.96 7.727-1.921.548c.32 1.12.824 2.06 1.432 2.84l-.834.834 1.414 1.414.843-.843c.986.747 2.077 1.206 3.106 1.386V15h2v-1.094c1.029-.18 2.12-.639 3.105-1.386l.844.843 1.414-1.414-.834-.834a8.285 8.285 0 0 0 1.432-2.84l-1.922-.548C12.163 10.79 9.499 12 7.999 12s-4.163-1.209-5.038-4.273z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiVisibilityVisible.svg b/editor/icons/GuiVisibilityVisible.svg index 18c2cbbe14..3f953efff1 100644 --- a/editor/icons/GuiVisibilityVisible.svg +++ b/editor/icons/GuiVisibilityVisible.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/GuiVisibilityXray.svg b/editor/icons/GuiVisibilityXray.svg index 52d7dd90ad..67d5d28b87 100644 --- a/editor/icons/GuiVisibilityXray.svg +++ b/editor/icons/GuiVisibilityXray.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M8 14c2.557 0 5.79-1.948 6.955-5.705a1 1 0 0 0 0-.55C13.837 3.789 10.5 2 8 2v2a4 4 0 0 1 0 8zm0-4a2 2 0 0 0 0-4z" fill-opacity=".4"/><path d="M8 2C5.443 2 2.21 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14v-2a4 4 0 0 1 0-8zm0 4a2 2 0 0 0 0 4z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".4" d="M8 14c2.557 0 5.79-1.948 6.955-5.705a1 1 0 0 0 0-.55C13.837 3.789 10.5 2 8 2v2a4 4 0 0 1 0 8zm0-4a2 2 0 0 0 0-4z"/><path d="M8 2C5.443 2 2.21 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14v-2a4 4 0 0 1 0-8zm0 4a2 2 0 0 0 0 4z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/GuiVsplitter.svg b/editor/icons/GuiVsplitter.svg index b7850e76f0..45b6769a13 100644 --- a/editor/icons/GuiVsplitter.svg +++ b/editor/icons/GuiVsplitter.svg @@ -1 +1 @@ -<svg height="2" viewBox="0 0 64 2" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M2 1h60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="2"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".4" stroke-width="2" d="M2 1h60"/></svg>
\ No newline at end of file diff --git a/editor/icons/HBoxContainer.svg b/editor/icons/HBoxContainer.svg index 30e06d8849..940638091e 100644 --- a/editor/icons/HBoxContainer.svg +++ b/editor/icons/HBoxContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v10H3zm4 0h2v10H7zm4 0h2v10h-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v10H3zm4 0h2v10H7zm4 0h2v10h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HFlowContainer.svg b/editor/icons/HFlowContainer.svg index 2b58cdf6f7..81d23c4f5a 100644 --- a/editor/icons/HFlowContainer.svg +++ b/editor/icons/HFlowContainer.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#8eef97" stroke-width="2"><rect x="2" y="2" width="12" height="12" rx="1"/><path d="M5 5h2m3 0h1M5 8h0m3 0h3m-6 3h4" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#8eef97" stroke-width="2"><rect width="12" height="12" x="2" y="2" rx="1"/><path stroke-linecap="round" d="M5 5h2m3 0h1M5 8h0m3 0h3m-6 3h4"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/HScrollBar.svg b/editor/icons/HScrollBar.svg index 429b0fd83d..34266f12b7 100644 --- a/editor/icons/HScrollBar.svg +++ b/editor/icons/HScrollBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M15 5a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-1 2.988a1 1 0 0 1-.168.567l-2 3a1 1 0 1 1-1.664-1.11L11.797 8l-1.629-2.445a1 1 0 1 1 1.664-1.11l2 3a1 1 0 0 1 .168.543zM6.008 4.99a1 1 0 0 1-.176.565L4.202 8l1.63 2.445a1 1 0 1 1-1.664 1.11l-2-3a1 1 0 0 1 0-1.11l2-3a1 1 0 0 1 1.84.545z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M15 5a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-1 2.988a1 1 0 0 1-.168.567l-2 3a1 1 0 1 1-1.664-1.11L11.797 8l-1.629-2.445a1 1 0 1 1 1.664-1.11l2 3a1 1 0 0 1 .168.543zM6.008 4.99a1 1 0 0 1-.176.565L4.202 8l1.63 2.445a1 1 0 1 1-1.664 1.11l-2-3a1 1 0 0 1 0-1.11l2-3a1 1 0 0 1 1.84.545z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HSeparator.svg b/editor/icons/HSeparator.svg index 2111c1961b..43eff6ed2c 100644 --- a/editor/icons/HSeparator.svg +++ b/editor/icons/HSeparator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 2v3h6V2zM1 7v2h14V7zm4 4v3h6v-3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5 2v3h6V2zM1 7v2h14V7zm4 4v3h6v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HSlider.svg b/editor/icons/HSlider.svg index a583dfe3f2..07c82a2054 100644 --- a/editor/icons/HSlider.svg +++ b/editor/icons/HSlider.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 11a2 2 0 0 0 4 0 2 2 0 0 0-4 0zm0-5a1 1 0 0 0 2 0V4a1 1 0 0 0-2 0zm5.867 4a4 4 0 0 1 0 2h7.13a1 1 0 0 0 0-2zM7 5a1 1 0 1 0 2 0 1 1 0 0 0-2 0zm6 1a1 1 0 0 0 2 0V4a1 1 0 0 0-2 0z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M1 11a2 2 0 0 0 4 0 2 2 0 0 0-4 0zm0-5a1 1 0 0 0 2 0V4a1 1 0 0 0-2 0zm5.867 4a4 4 0 0 1 0 2h7.13a1 1 0 0 0 0-2zM7 5a1 1 0 1 0 2 0 1 1 0 0 0-2 0zm6 1a1 1 0 0 0 2 0V4a1 1 0 0 0-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HSplitContainer.svg b/editor/icons/HSplitContainer.svg index f6bd3fed67..8e3ad1d078 100644 --- a/editor/icons/HSplitContainer.svg +++ b/editor/icons/HSplitContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h4v3L5 8l2 2v3H3zm6 0h4v10H9v-3l2-2-2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h4v3L5 8l2 2v3H3zm6 0h4v10H9v-3l2-2-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HTTPRequest.svg b/editor/icons/HTTPRequest.svg index 34912dcd2b..561419a75b 100644 --- a/editor/icons/HTTPRequest.svg +++ b/editor/icons/HTTPRequest.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-3 4h2v3h2v-3h2zm7 0v3h-2l3 4 3-4h-2v-3zm-10 9v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2zm4 0v1h1v4h1v-4h1v-1zm4 0v1h1v4h1v-4h1v-1zm4 0v2 1 2h1v-2h1 1v-1-2h-2zm1 1h1v1h-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m4 1-3 4h2v3h2v-3h2zm7 0v3h-2l3 4 3-4h-2v-3zm-10 9v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2zm4 0v1h1v4h1v-4h1v-1zm4 0v1h1v4h1v-4h1v-1zm4 0v2 1 2h1v-2h1 1v-1-2h-2zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Heart.svg b/editor/icons/Heart.svg index 117e31116d..59274b5a84 100644 --- a/editor/icons/Heart.svg +++ b/editor/icons/Heart.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.781 9.155C2.72 9.102 1 7.531 1 5.656 1 3.367 2.398 2 4.734 2 6.102 2 7.383 3.39 8 4c.617-.61 1.898-2 3.266-2C13.602 2 15 3.367 15 5.656c0 1.875-1.719 3.446-1.79 3.516l-4.866 4.687a.485.485 0 0 1-.688 0z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2.781 9.155C2.72 9.102 1 7.531 1 5.656 1 3.367 2.398 2 4.734 2 6.102 2 7.383 3.39 8 4c.617-.61 1.898-2 3.266-2C13.602 2 15 3.367 15 5.656c0 1.875-1.719 3.446-1.79 3.516l-4.866 4.687a.485.485 0 0 1-.688 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HeightMapShape3D.svg b/editor/icons/HeightMapShape3D.svg index 330cee9273..7aad9809a8 100644 --- a/editor/icons/HeightMapShape3D.svg +++ b/editor/icons/HeightMapShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x2="0" y1="7" y2="10"><stop offset="0" stop-color="#a2d2ff"/><stop offset="1" stop-color="#5fb2ff"/></linearGradient><path d="m1 10 7 3 7-3-7-3z" fill="#5fb2ff"/><path d="M3 10c1-1 2-2 2-4s1-3 3-3 3 1 3 3 1 3 2 4z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="7" y2="10" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a2d2ff"/><stop offset="1" stop-color="#5fb2ff"/></linearGradient><path fill="#5fb2ff" d="m1 10 7 3 7-3-7-3z"/><path fill="url(#a)" d="M3 10c1-1 2-2 2-4s1-3 3-3 3 1 3 3 1 3 2 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Help.svg b/editor/icons/Help.svg index ecb9d3e359..dbd46f96db 100644 --- a/editor/icons/Help.svg +++ b/editor/icons/Help.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2C6 .7 4 .7 2 2v7c2-1.3 4-1.3 6 0 2-1.3 4-1.3 6 0V2C12 .7 10.2.9 9 1.5V6H8zm-8 8v6h2a3 3 0 0 0 0-6zm5 3a3 3 0 0 0 6 0 3 3 0 0 0-6 0zm9 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0 0 6zM2 12a1 1 0 0 1 0 2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 2C6 .7 4 .7 2 2v7c2-1.3 4-1.3 6 0 2-1.3 4-1.3 6 0V2C12 .7 10.2.9 9 1.5V6H8zm-8 8v6h2a3 3 0 0 0 0-6zm5 3a3 3 0 0 0 6 0 3 3 0 0 0-6 0zm9 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0 0 6zM2 12a1 1 0 0 1 0 2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HelpSearch.svg b/editor/icons/HelpSearch.svg index f0935aceef..f95bf5c3c1 100644 --- a/editor/icons/HelpSearch.svg +++ b/editor/icons/HelpSearch.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.973 7.441a4 4 0 1 0-1.414-1.414L3.293 8.293l1.414 1.414zM9 2a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-9 8v6h2a3 3 0 1 0 0-6zm5 3a3 3 0 1 0 6 0 3 3 0 0 0-6 0zm6 0a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0-3 3zm-9-1a1 1 0 0 1 0 2zm6 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6.973 7.441a4 4 0 1 0-1.414-1.414L3.293 8.293l1.414 1.414zM9 2a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-9 8v6h2a3 3 0 1 0 0-6zm5 3a3 3 0 1 0 6 0 3 3 0 0 0-6 0zm6 0a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 0-2h1v-2h-1a3 3 0 0 0-3 3zm-9-1a1 1 0 0 1 0 2zm6 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/HingeJoint3D.svg b/editor/icons/HingeJoint3D.svg index 9302e56a33..d1d48ac15a 100644 --- a/editor/icons/HingeJoint3D.svg +++ b/editor/icons/HingeJoint3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6.403 1.84-3.69 6.39a4 4 0 0 1 2.349-.068L8.135 2.84a1 1 0 0 0-1.732-1zM4 15h10a1 1 0 0 0 0-2H6.826A3 3 0 1 0 4 15zm0-4a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m6.403 1.84-3.69 6.39a4 4 0 0 1 2.349-.068L8.135 2.84a1 1 0 0 0-1.732-1zM4 15h10a1 1 0 0 0 0-2H6.826A3 3 0 1 0 4 15zm0-4a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/History.svg b/editor/icons/History.svg index 0d2ec493b1..fc9fb8435a 100644 --- a/editor/icons/History.svg +++ b/editor/icons/History.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4zm3-3h2v2h2v2H8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4zm3-3h2v2h2v2H8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Hsize.svg b/editor/icons/Hsize.svg index cf805fce50..923d96fb3a 100644 --- a/editor/icons/Hsize.svg +++ b/editor/icons/Hsize.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 7v-2l-3 3 3 3v-2h8v2l3-3-3-3v2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m4 7v-2l-3 3 3 3v-2h8v2l3-3-3-3v2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/IOSDeviceWired.svg b/editor/icons/IOSDeviceWired.svg index a138458849..f487e78509 100644 --- a/editor/icons/IOSDeviceWired.svg +++ b/editor/icons/IOSDeviceWired.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" viewBox="0 0 16 16"><path fill="#e0e0e0" d="M7 1a2 2 0 0 0-2 2v7.5h-.4a2 2 0 0 0-2-1.5v.8H1v.8h1.6v1.2H1v.8h1.6v.8a2 2 0 0 0 2-1.5H5V13a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="M7 1a2 2 0 0 0-2 2v7.5h-.4a2 2 0 0 0-2-1.5v.8H1v.8h1.6v1.2H1v.8h1.6v.8a2 2 0 0 0 2-1.5H5V13a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/IOSDeviceWireless.svg b/editor/icons/IOSDeviceWireless.svg index a07fa85a6b..ac121b2860 100644 --- a/editor/icons/IOSDeviceWireless.svg +++ b/editor/icons/IOSDeviceWireless.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16" viewBox="0 0 16 16"><path fill="#e0e0e0" d="M7 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z"/><path d="M3.75 9a1.75 1.75 0 0 1 0-2.5m-1 4a3.5 3.5 0 0 1 0-5.5" fill="none" stroke="#e0e0e0" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="M7 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z"/><path fill="none" stroke="#e0e0e0" stroke-linecap="round" d="M3.75 9a1.75 1.75 0 0 1 0-2.5m-1 4a3.5 3.5 0 0 1 0-5.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/IOSSimulator.svg b/editor/icons/IOSSimulator.svg index cb5e877a84..8cb88e74d8 100644 --- a/editor/icons/IOSSimulator.svg +++ b/editor/icons/IOSSimulator.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 16 16" width="16"><path d="M5 3H1v10h4z" fill="#4bb7f8"/><path d="M1.7 3.5v9h2.6v-.8H2.5v-1.3h1.8v-.8H2.5V4.3h1.8v-.8zM7 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#4bb7f8" d="M5 3H1v10h4z"/><path fill="#e0e0e0" d="M1.7 3.5v9h2.6v-.8H2.5v-1.3h1.8v-.8H2.5V4.3h1.8v-.8zM7 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h1v.6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V3h1v10H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Image.svg b/editor/icons/Image.svg index a990974a4f..e5459f623b 100644 --- a/editor/icons/Image.svg +++ b/editor/icons/Image.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm1 2h10v8h-10zm6 2-1.5 2.5-.70117 1.168-.099609-.16797-.89844-1.5-.90039 1.5-.90039 1.5h1.8008.19922 1.5996 1.4004 3l-1.5-2.5-1.5-2.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm1 2h10v8h-10zm6 2-1.5 2.5-.70117 1.168-.099609-.16797-.89844-1.5-.90039 1.5-.90039 1.5h1.8008.19922 1.5996 1.4004 3l-1.5-2.5-1.5-2.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImageTexture.svg b/editor/icons/ImageTexture.svg index 17fc57d31d..cdf82022ee 100644 --- a/editor/icons/ImageTexture.svg +++ b/editor/icons/ImageTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm6 2v1H8v1H6v1H5v1H4v1h8V8h-1V6h-1V5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm6 2v1H8v1H6v1H5v1H4v1h8V8h-1V6h-1V5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImageTexture3D.svg b/editor/icons/ImageTexture3D.svg index 7cb4d46f8d..94233651e5 100644 --- a/editor/icons/ImageTexture3D.svg +++ b/editor/icons/ImageTexture3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6V4.75L14 3v6.25zm-1-7.25h-8L5 2h8zM7.675 6l3 4-3 1-1.5-.5-1.75.75-1.75-.75L4.25 8l.875 1.25z" fill="#e0e0e0"/><path d="M7.675 6v5L6 10.5l-.875-1.25zM4.25 8v3.25L2.5 10.5" fill="#000" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6V4.75L14 3v6.25zm-1-7.25h-8L5 2h8zM7.675 6l3 4-3 1-1.5-.5-1.75.75-1.75-.75L4.25 8l.875 1.25z"/><path fill-opacity=".4" d="M7.675 6v5L6 10.5l-.875-1.25zM4.25 8v3.25L2.5 10.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImmediateMesh.svg b/editor/icons/ImmediateMesh.svg index ceedc008ec..2eb7024625 100644 --- a/editor/icons/ImmediateMesh.svg +++ b/editor/icons/ImmediateMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 2v2h5V2zm5 2v3h2V4zm2-2v2h5V2zM7 9v3h2V9zm-5 3v2h5v-2zm7 0v2h5v-2z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M2 2v2h5V2zm5 2v3h2V4zm2-2v2h5V2zM7 9v3h2V9zm-5 3v2h5v-2zm7 0v2h5v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImportCheck.svg b/editor/icons/ImportCheck.svg index 83668e3eaa..ea5f8dbc60 100644 --- a/editor/icons/ImportCheck.svg +++ b/editor/icons/ImportCheck.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 8 4 4 8-8" fill="none" stroke="#5fff97" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fff97" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 8 4 4 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImportFail.svg b/editor/icons/ImportFail.svg index 734340860c..bab9f5c950 100644 --- a/editor/icons/ImportFail.svg +++ b/editor/icons/ImportFail.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3 13 13M13 3 3 13" fill="none" stroke="#ff5f5f" stroke-width="2" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ff5f5f" stroke-linecap="round" stroke-width="2" d="M3 3 13 13M13 3 3 13"/></svg>
\ No newline at end of file diff --git a/editor/icons/ImporterMeshInstance3D.svg b/editor/icons/ImporterMeshInstance3D.svg index e112b48482..a56032ca64 100644 --- a/editor/icons/ImporterMeshInstance3D.svg +++ b/editor/icons/ImporterMeshInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zM4 4h8v8H4zm3 3h2v4H7zm0-2h2v1H7z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zM4 4h8v8H4zm3 3h2v4H7zm0-2h2v1H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Info.svg b/editor/icons/Info.svg index 1a16f74069..de179237b4 100644 --- a/editor/icons/Info.svg +++ b/editor/icons/Info.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1m1 12H7v-2h2v2M4.5 6a3.5 3.4 0 1 1 7 0C11.3 8.9 9 8.5 9 10H7c.1-2.6 2.4-2.8 2.5-4a1.5 1.4 0 0 0-3 0z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1m1 12H7v-2h2v2M4.5 6a3.5 3.4 0 1 1 7 0C11.3 8.9 9 8.5 9 10H7c.1-2.6 2.4-2.8 2.5-4a1.5 1.4 0 0 0-3 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventAction.svg b/editor/icons/InputEventAction.svg index 55ffe84d47..13d5213038 100644 --- a/editor/icons/InputEventAction.svg +++ b/editor/icons/InputEventAction.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zM8.5 6.2l.282 1.129.345.14.994-.597.707.707-.598.997.143.342L11.5 9.2v1l-1.129.282-.14.344.597.995-.707.707-.997-.598-.343.143-.28 1.127h-1l-.283-1.13-.344-.139-.995.597-.707-.707.598-.997-.143-.343L4.5 10.2v-1l1.13-.282.139-.344-.597-.995.707-.707.997.598.343-.143L7.5 6.2z" fill="#69c4d4"/><circle cx="8" cy="9.675" r="1" fill="#69c4d4"/><path d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z" fill="#e0e0e0"/><path d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#69c4d4" d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zM8.5 6.2l.282 1.129.345.14.994-.597.707.707-.598.997.143.342L11.5 9.2v1l-1.129.282-.14.344.597.995-.707.707-.997-.598-.343.143-.28 1.127h-1l-.283-1.13-.344-.139-.995.597-.707-.707.598-.997-.143-.343L4.5 10.2v-1l1.13-.282.139-.344-.597-.995.707-.707.997.598.343-.143L7.5 6.2z"/><circle cx="8" cy="9.675" r="1" fill="#69c4d4"/><path fill="#e0e0e0" d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z"/><path fill="none" stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventJoypadButton.svg b/editor/icons/InputEventJoypadButton.svg index 72b023872a..b7a501485d 100644 --- a/editor/icons/InputEventJoypadButton.svg +++ b/editor/icons/InputEventJoypadButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5.25 3h2.3A1.15 1.15 0 0 1 8.7 4.15v9.2a1.15 1.15 0 0 1-1.15 1.15h-2.3a1.15 1.15 0 0 1-1.15-1.15v-2.3H1.8A1.15 1.15 0 0 1 .65 9.9V7.6A1.15 1.15 0 0 1 1.8 6.45h2.3v-2.3A1.15 1.15 0 0 1 5.25 3zM6.4 7.025a1.15 1.15 0 0 0 0 3.45 1.15 1.15 0 0 0 0-3.45Z" fill="#e0e0e0"/><path d="M8.7 6.3H11a1.15 1.15 0 0 1 1.15 1.15v2.3A1.15 1.15 0 0 1 11 10.9H8.7" fill="#69c4d4"/><path d="m13.25 7.25 1.7-.4m-2.2-1.35 1.3-1.3M11 5l.4-1.7" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5.25 3h2.3A1.15 1.15 0 0 1 8.7 4.15v9.2a1.15 1.15 0 0 1-1.15 1.15h-2.3a1.15 1.15 0 0 1-1.15-1.15v-2.3H1.8A1.15 1.15 0 0 1 .65 9.9V7.6A1.15 1.15 0 0 1 1.8 6.45h2.3v-2.3A1.15 1.15 0 0 1 5.25 3zM6.4 7.025a1.15 1.15 0 0 0 0 3.45 1.15 1.15 0 0 0 0-3.45Z"/><path fill="#69c4d4" d="M8.7 6.3H11a1.15 1.15 0 0 1 1.15 1.15v2.3A1.15 1.15 0 0 1 11 10.9H8.7"/><path stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m13.25 7.25 1.7-.4m-2.2-1.35 1.3-1.3M11 5l.4-1.7"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventJoypadMotion.svg b/editor/icons/InputEventJoypadMotion.svg index d1e4544335..698cd70803 100644 --- a/editor/icons/InputEventJoypadMotion.svg +++ b/editor/icons/InputEventJoypadMotion.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="2" x2="9"><stop offset="0" stop-color="#69c4d4" stop-opacity="0"/><stop offset=".6" stop-color="#69c4d4"/></linearGradient><path d="M11.5 16v-1.5a1 1 0 0 0-1-1H10l1.6-4a4 4 0 1 0-3.5-1.4l-2.2 5.4h-.7a1 1 0 0 0-1 1V16z" fill="#e0e0e0"/><path d="M5.25 12.2 2 4a8 8 0 0 1 7-3 5 5 0 0 0-2.1 7.2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x1="2" x2="9" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#69c4d4" stop-opacity="0"/><stop offset=".6" stop-color="#69c4d4"/></linearGradient><path fill="#e0e0e0" d="M11.5 16v-1.5a1 1 0 0 0-1-1H10l1.6-4a4 4 0 1 0-3.5-1.4l-2.2 5.4h-.7a1 1 0 0 0-1 1V16z"/><path fill="url(#a)" d="M5.25 12.2 2 4a8 8 0 0 1 7-3 5 5 0 0 0-2.1 7.2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventKey.svg b/editor/icons/InputEventKey.svg index 4c5b0c01c9..be821e6918 100644 --- a/editor/icons/InputEventKey.svg +++ b/editor/icons/InputEventKey.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zm.65 1.503h1.75v2.2l2-2.2h2.1L8.166 9.675l2.884 3.172h-2.1l-2-2.2v2.2H5.2z" fill="#69c4d4"/><path d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z" fill="#e0e0e0"/><path d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#69c4d4" d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zm.65 1.503h1.75v2.2l2-2.2h2.1L8.166 9.675l2.884 3.172h-2.1l-2-2.2v2.2H5.2z"/><path fill="#e0e0e0" d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z"/><path fill="none" stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventMIDI.svg b/editor/icons/InputEventMIDI.svg index 4d955259f3..e1313d2ad6 100644 --- a/editor/icons/InputEventMIDI.svg +++ b/editor/icons/InputEventMIDI.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 14.5v-4H9v-4h1.5v4h.5v4z" fill="#69c4d4" fill-opacity=".8"/><path d="M.5 15.5h15v-9a2 2 0 0 0-2-2h-11a2 2 0 0 0-2 2zm1-1v-8h2v4H4v4zm3.5 0v-4h.5v-4H7v4h.5v4zm7 0v-4h.5v-4h2v8zm-3.5 0v-4H9v-4h1.5v4h.5v4z" fill="#e0e0e0"/><path d="M4.5 4.127a2 2 0 0 0-2-2 2 2 0 0 1-2-2" stroke-linecap="square" stroke="#e0e0e0" fill="none"/><path d="m11.75 3.3.75-1.5M7.75 3.3 7 1.8m2.75 1.1V1.2" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#69c4d4" fill-opacity=".8" d="M8.5 14.5v-4H9v-4h1.5v4h.5v4z"/><path fill="#e0e0e0" d="M.5 15.5h15v-9a2 2 0 0 0-2-2h-11a2 2 0 0 0-2 2zm1-1v-8h2v4H4v4zm3.5 0v-4h.5v-4H7v4h.5v4zm7 0v-4h.5v-4h2v8zm-3.5 0v-4H9v-4h1.5v4h.5v4z"/><path fill="none" stroke="#e0e0e0" stroke-linecap="square" d="M4.5 4.127a2 2 0 0 0-2-2 2 2 0 0 1-2-2"/><path stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m11.75 3.3.75-1.5M7.75 3.3 7 1.8m2.75 1.1V1.2"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventMagnifyGesture.svg b/editor/icons/InputEventMagnifyGesture.svg index dbf434c2a6..0bedae8573 100644 --- a/editor/icons/InputEventMagnifyGesture.svg +++ b/editor/icons/InputEventMagnifyGesture.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm1 0v8h12V3zm0 9v1h5.5v-1zm6.5 0v1H14v-1z" fill="#e0e0e0"/><path d="M6.4 3.8a1.7 1.7 0 1 1 3.2 0C8.1 7 8.1 7 9.6 10.2a1.7 1.7 0 1 1-3.2 0C7.9 7 7.9 7 6.4 3.8z" transform="rotate(66 8 7)" fill="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm1 0v8h12V3zm0 9v1h5.5v-1zm6.5 0v1H14v-1z"/><path fill="#69c4d4" d="M6.4 3.8a1.7 1.7 0 1 1 3.2 0C8.1 7 8.1 7 9.6 10.2a1.7 1.7 0 1 1-3.2 0C7.9 7 7.9 7 6.4 3.8z" transform="rotate(66 8 7)"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventMouseButton.svg b/editor/icons/InputEventMouseButton.svg index 26ff7413b4..4c6034b3a1 100644 --- a/editor/icons/InputEventMouseButton.svg +++ b/editor/icons/InputEventMouseButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 8.5v2.75a4 4 0 0 0 8 0V8.5zm3-1V4a4 4 0 0 0-3 3.5z" fill="#e0e0e0"/><path d="M7.5 4.127a2 2 0 0 0-2-2H4a2 2 0 0 1-2-2" stroke-linecap="round" stroke="#e0e0e0" fill="none"/><path d="M11.5 7.5a4 4 0 0 0-3-3.5v3.5z" fill="#69c4d4"/><path d="m12.2 5.5 1.6-.8m-2.5-.75 1.3-1.3m-2.85.4.8-1.6" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3.5 8.5v2.75a4 4 0 0 0 8 0V8.5zm3-1V4a4 4 0 0 0-3 3.5z"/><path fill="none" stroke="#e0e0e0" stroke-linecap="round" d="M7.5 4.127a2 2 0 0 0-2-2H4a2 2 0 0 1-2-2"/><path fill="#69c4d4" d="M11.5 7.5a4 4 0 0 0-3-3.5v3.5z"/><path stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m12.2 5.5 1.6-.8m-2.5-.75 1.3-1.3m-2.85.4.8-1.6"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventMouseMotion.svg b/editor/icons/InputEventMouseMotion.svg index 9a8a17fb89..af8ba32830 100644 --- a/editor/icons/InputEventMouseMotion.svg +++ b/editor/icons/InputEventMouseMotion.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="0.5" x2="6"><stop offset="0" stop-color="#69c4d4" stop-opacity="0"/><stop offset=".6" stop-color="#69c4d4"/></linearGradient><path d="M6 8v3a4 4 0 0 0 8 0V8a4 4 0 0 0-3-3.873V7.5a1 1 0 0 1-2 0V4.127A4 4 0 0 0 6 8" fill="#e0e0e0"/><path d="M10 4.127a2 2 0 0 0-2-2H7a2 2 0 0 1-2-2" stroke-linecap="round" stroke="#e0e0e0" fill="none"/><path d="M5 6a4 4 0 0 0-.4 1.5v4a4 4 0 0 0 1.2 2.8l-4 .8q-1.3.26-1.3-2V8q0-1.1 1.3-1.36Z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x1=".5" x2="6" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#69c4d4" stop-opacity="0"/><stop offset=".6" stop-color="#69c4d4"/></linearGradient><path fill="#e0e0e0" d="M6 8v3a4 4 0 0 0 8 0V8a4 4 0 0 0-3-3.873V7.5a1 1 0 0 1-2 0V4.127A4 4 0 0 0 6 8"/><path fill="none" stroke="#e0e0e0" stroke-linecap="round" d="M10 4.127a2 2 0 0 0-2-2H7a2 2 0 0 1-2-2"/><path fill="url(#a)" d="M5 6a4 4 0 0 0-.4 1.5v4a4 4 0 0 0 1.2 2.8l-4 .8q-1.3.26-1.3-2V8q0-1.1 1.3-1.36Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventPanGesture.svg b/editor/icons/InputEventPanGesture.svg index b093b3ed83..76c7f13424 100644 --- a/editor/icons/InputEventPanGesture.svg +++ b/editor/icons/InputEventPanGesture.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm1 0v8h12V3zm0 9v1h5.5v-1zm6.5 0v1H14v-1z" fill="#e0e0e0"/><path d="M11.25 4a1.3 1.3 0 1 1 0 2.5 31 31 0 0 0-7.75-.85.4.4 0 1 1 0-.8A31 31 0 0 0 11.25 4zm0 3.5a1.3 1.3 0 1 1 0 2.5 31 31 0 0 0-7.75-.85.4.4 0 1 1 0-.8 31 31 0 0 0 7.75-.85z" fill="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm1 0v8h12V3zm0 9v1h5.5v-1zm6.5 0v1H14v-1z"/><path fill="#69c4d4" d="M11.25 4a1.3 1.3 0 1 1 0 2.5 31 31 0 0 0-7.75-.85.4.4 0 1 1 0-.8A31 31 0 0 0 11.25 4zm0 3.5a1.3 1.3 0 1 1 0 2.5 31 31 0 0 0-7.75-.85.4.4 0 1 1 0-.8 31 31 0 0 0 7.75-.85z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventScreenDrag.svg b/editor/icons/InputEventScreenDrag.svg index 949eb3b67b..3b57166af4 100644 --- a/editor/icons/InputEventScreenDrag.svg +++ b/editor/icons/InputEventScreenDrag.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm1 0v10.75h8V2M8 13.125a.625.625 0 0 0 0 1.5.625.625 0 0 0 0-1.5z" fill="#e0e0e0"/><path d="M6 4.1a1.8 1.8 0 1 1 3.3.9 6 6 0 0 0 .3 6.4.6.6 0 1 1-1.2.6A15 15 0 0 1 6 4.1z" transform="rotate(40 8 6.76)" fill="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm1 0v10.75h8V2M8 13.125a.625.625 0 0 0 0 1.5.625.625 0 0 0 0-1.5z"/><path fill="#69c4d4" d="M6 4.1a1.8 1.8 0 1 1 3.3.9 6 6 0 0 0 .3 6.4.6.6 0 1 1-1.2.6A15 15 0 0 1 6 4.1z" transform="rotate(40 8 6.76)"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventScreenTouch.svg b/editor/icons/InputEventScreenTouch.svg index 9226818f7c..f338a585f1 100644 --- a/editor/icons/InputEventScreenTouch.svg +++ b/editor/icons/InputEventScreenTouch.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm1 0v10.75h8V2M8 13.125a.625.625 0 0 0 0 1.5.625.625 0 0 0 0-1.5z" fill="#e0e0e0"/><circle cx="8" cy="6.5" r="1.25" fill="#69c4d4"/><circle cx="8" cy="6.5" r="2.25" fill="none" stroke-width=".75" stroke="#69c4d4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm1 0v10.75h8V2M8 13.125a.625.625 0 0 0 0 1.5.625.625 0 0 0 0-1.5z"/><circle cx="8" cy="6.5" r="1.25" fill="#69c4d4"/><circle cx="8" cy="6.5" r="2.25" fill="none" stroke="#69c4d4" stroke-width=".75"/></svg>
\ No newline at end of file diff --git a/editor/icons/InputEventShortcut.svg b/editor/icons/InputEventShortcut.svg index 363e4b180a..6e5cbffd67 100644 --- a/editor/icons/InputEventShortcut.svg +++ b/editor/icons/InputEventShortcut.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zM7 7h2.55L8.7 9.55h1.7L7 12.95l.85-2.55h-1.7z" fill="#69c4d4"/><path d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z" fill="#e0e0e0"/><path d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5" stroke-width="1.25" stroke-linecap="round" stroke="#69c4d4" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#69c4d4" d="M4.55 5a.85.85 0 0 0-.85.85v7.65a.85.85 0 0 0 .85.85h6.8a.85.85 0 0 0 .85-.85V5.85a.85.85 0 0 0-.85-.85zM7 7h2.55L8.7 9.55h1.7L7 12.95l.85-2.55h-1.7z"/><path fill="#e0e0e0" d="M2 6.36v7.65a1.7 1.7 0 0 0 1.7 1.7h8.5a1.7 1.7 0 0 0 1.7-1.7V6.36h-.85v7.65a.85.85 0 0 1-.85.85H3.7a.85.85 0 0 1-.85-.85V6.36z"/><path fill="none" stroke="#69c4d4" stroke-linecap="round" stroke-width="1.25" d="m10.5 3.6.75-1.5M5.5 3.6l-.75-1.5M8 3.2V1.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/InsertAfter.svg b/editor/icons/InsertAfter.svg index 055d974444..4b002be1b8 100644 --- a/editor/icons/InsertAfter.svg +++ b/editor/icons/InsertAfter.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 1a1 1 0 0 0-.697 1.717l.283.283H9v2h2.586l-.283.283a1 1 0 1 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2A1 1 0 0 0 12 1zM3 1a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2z" fill="#e0e0e0"/><path d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 1a1 1 0 0 0-.697 1.717l.283.283H9v2h2.586l-.283.283a1 1 0 1 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2A1 1 0 0 0 12 1zM3 1a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2z"/><path fill="#5fff97" d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InsertBefore.svg b/editor/icons/InsertBefore.svg index 4feab40c94..f6a246dd46 100644 --- a/editor/icons/InsertBefore.svg +++ b/editor/icons/InsertBefore.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 7a1 1 0 0 0 .697-1.717L4.414 5H7V3H4.414l.283-.283a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414l2 2A1 1 0 0 0 4 7zm9 0a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2z" fill="#e0e0e0"/><path d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 7a1 1 0 0 0 .697-1.717L4.414 5H7V3H4.414l.283-.283a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414l2 2A1 1 0 0 0 4 7zm9 0a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2z"/><path fill="#5fff97" d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Instance.svg b/editor/icons/Instance.svg index c0ddfcb8b1..e61808edea 100644 --- a/editor/icons/Instance.svg +++ b/editor/icons/Instance.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9.545 3.627a1 1 0 0 1 2.84 2.818L9.98 8.85a4 4 0 1 0-2.83-2.83zm-5.238 6.664a1 1 0 0 0 1.414 1.414l6-6a1 1 0 0 0-1.414-1.414zm2.148 2.082a2 2 0 0 1-2.84-2.818L6.02 7.15a4 4 0 1 0 2.83 2.828z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M9.545 3.627a1 1 0 0 1 2.84 2.818L9.98 8.85a4 4 0 1 0-2.83-2.83zm-5.238 6.664a1 1 0 0 0 1.414 1.414l6-6a1 1 0 0 0-1.414-1.414zm2.148 2.082a2 2 0 0 1-2.84-2.818L6.02 7.15a4 4 0 1 0 2.83 2.828z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InstanceOptions.svg b/editor/icons/InstanceOptions.svg index 6ea0536443..91142dc084 100644 --- a/editor/icons/InstanceOptions.svg +++ b/editor/icons/InstanceOptions.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 7v6a2 2 0 0 0 2 2h12V7zm4 2h6l-3 4zM.711 4 1 5.98l2.244-.328-.818-1.902L.711 4zm3.694-.539.818 1.902 1.979-.289-.818-1.901zm3.958-.577.818 1.902 1.98-.29-.82-1.9zm3.958-.578.818 1.902 1.714-.25-.288-1.979-2.244.327z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 7v6a2 2 0 0 0 2 2h12V7zm4 2h6l-3 4zM.711 4 1 5.98l2.244-.328-.818-1.902L.711 4zm3.694-.539.818 1.902 1.979-.289-.818-1.901zm3.958-.577.818 1.902 1.98-.29-.82-1.9zm3.958-.578.818 1.902 1.714-.25-.288-1.979-2.244.327z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InterpCubic.svg b/editor/icons/InterpCubic.svg index f2e43bd941..ba0b5db0ed 100644 --- a/editor/icons/InterpCubic.svg +++ b/editor/icons/InterpCubic.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6c5 0 3-4 6-4s1 4 6 4" fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-width="2" d="M2 6c5 0 3-4 6-4s1 4 6 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/InterpCubicAngle.svg b/editor/icons/InterpCubicAngle.svg index 428230f315..b3dfdb8363 100644 --- a/editor/icons/InterpCubicAngle.svg +++ b/editor/icons/InterpCubicAngle.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#5fff95" stroke-linecap="round"><path d="m2 6c5 0 3-4 6-4s1 4 6 4" stroke-width="2"/><circle cx="14" cy="2" r="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><g fill="none" stroke="#5fff95" stroke-linecap="round"><path stroke-width="2" d="m2 6c5 0 3-4 6-4s1 4 6 4"/><circle cx="14" cy="2" r="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/InterpLinear.svg b/editor/icons/InterpLinear.svg index 8974f545d4..ee3aba2c78 100644 --- a/editor/icons/InterpLinear.svg +++ b/editor/icons/InterpLinear.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 6 6-4 6 4" fill="none" stroke="#ffca5f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="none" stroke="#ffca5f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 6 6-4 6 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/InterpLinearAngle.svg b/editor/icons/InterpLinearAngle.svg index 09609ef5f9..3bbf94a5d9 100644 --- a/editor/icons/InterpLinearAngle.svg +++ b/editor/icons/InterpLinearAngle.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#fd995f" stroke-linecap="round" stroke-linejoin="round"><path d="m2 6 6-4 6 4" stroke-width="2"/><circle cx="14" cy="2" r="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><g fill="none" stroke="#fd995f" stroke-linecap="round" stroke-linejoin="round"><path stroke-width="2" d="m2 6 6-4 6 4"/><circle cx="14" cy="2" r="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/InterpRaw.svg b/editor/icons/InterpRaw.svg index 1ec57d0aa9..d82fdbe815 100644 --- a/editor/icons/InterpRaw.svg +++ b/editor/icons/InterpRaw.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6h3V2h6v4h3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2 6h3V2h6v4h3"/></svg>
\ No newline at end of file diff --git a/editor/icons/InterpWrapClamp.svg b/editor/icons/InterpWrapClamp.svg index 9fab4fc249..1adcc266ca 100644 --- a/editor/icons/InterpWrapClamp.svg +++ b/editor/icons/InterpWrapClamp.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v6h2V1zm2 3.014a1 1 0 0 0 .293.693l2 2a1 1 0 0 0 1.414-1.414L6.414 5h3.172l-.293.293a1 1 0 0 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2a1 1 0 0 0-1.414 1.414L9.586 3H6.414l.293-.293a1 1 0 0 0-1.414-1.414l-2 2a1 1 0 0 0-.293.72zm10-3v6h2v-6h-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="#fc7f7f" d="M1 1v6h2V1zm2 3.014a1 1 0 0 0 .293.693l2 2a1 1 0 0 0 1.414-1.414L6.414 5h3.172l-.293.293a1 1 0 0 0 1.414 1.414l2-2a1 1 0 0 0 0-1.414l-2-2a1 1 0 0 0-1.414 1.414L9.586 3H6.414l.293-.293a1 1 0 0 0-1.414-1.414l-2 2a1 1 0 0 0-.293.72zm10-3v6h2v-6h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/InterpWrapLoop.svg b/editor/icons/InterpWrapLoop.svg index 672a3cd39b..9736754111 100644 --- a/editor/icons/InterpWrapLoop.svg +++ b/editor/icons/InterpWrapLoop.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 0 6 2l3 2V3h3a1 1 0 0 1 0 2v2a3 3 0 0 0 0-6H9zM4 1a3 3 0 0 0 0 6h3v1l3-2-3-2v1H4a1 1 0 0 1 0-2z" fill="#c38ef1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="#c38ef1" d="M9 0 6 2l3 2V3h3a1 1 0 0 1 0 2v2a3 3 0 0 0 0-6H9zM4 1a3 3 0 0 0 0 6h3v1l3-2-3-2v1H4a1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ItemList.svg b/editor/icons/ItemList.svg index ddad01f487..aefe7342d6 100644 --- a/editor/icons/ItemList.svg +++ b/editor/icons/ItemList.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 1v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM4 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm-6 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 1v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM4 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm-6 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/JoyAxis.svg b/editor/icons/JoyAxis.svg index c36aacb869..665b2c211f 100644 --- a/editor/icons/JoyAxis.svg +++ b/editor/icons/JoyAxis.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12V1zm4 2h2a1 1 0 0 1 1 1v2h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-2H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h2V4a1 1 0 0 1 1-1z"/><circle cx="8" cy="8" r="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12V1zm4 2h2a1 1 0 0 1 1 1v2h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2v2a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-2H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h2V4a1 1 0 0 1 1-1z"/><circle cx="8" cy="8" r="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/JoyButton.svg b/editor/icons/JoyButton.svg index d7eafadee4..e69248020a 100644 --- a/editor/icons/JoyButton.svg +++ b/editor/icons/JoyButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm7 1a2 2 0 0 1 0 4 2 2 0 0 1 0-4zM4 6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm8 0a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-4 4a2 2 0 0 1 0 4 2 2 0 0 1 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v14h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm7 1a2 2 0 0 1 0 4 2 2 0 0 1 0-4zM4 6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm8 0a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-4 4a2 2 0 0 1 0 4 2 2 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Joypad.svg b/editor/icons/Joypad.svg index 1ac10605b5..6d24dfb2f4 100644 --- a/editor/icons/Joypad.svg +++ b/editor/icons/Joypad.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm2 2h2v2h2v2H5v2H3V9H1V7h2zm10.5 0a1.5 1.5 0 0 1 0 3 1.5 1.5 0 0 1 0-3zm-3 3a1.5 1.5 0 0 1 0 3 1.5 1.5 0 0 1 0-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm2 2h2v2h2v2H5v2H3V9H1V7h2zm10.5 0a1.5 1.5 0 0 1 0 3 1.5 1.5 0 0 1 0-3zm-3 3a1.5 1.5 0 0 1 0 3 1.5 1.5 0 0 1 0-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Key.svg b/editor/icons/Key.svg index d0838b68cd..72d4dd345c 100644 --- a/editor/icons/Key.svg +++ b/editor/icons/Key.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M1 7v2h1v2h3V9h2.133a4 4 0 1 0 0-2zm10-1a2 2 0 0 1 0 4 2 2 0 0 1 0-4z"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 7v2h1v2h3V9h2.133a4 4 0 1 0 0-2zm10-1a2 2 0 0 1 0 4 2 2 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyAnimation.svg b/editor/icons/KeyAnimation.svg index ac59a5215a..6d3d549662 100644 --- a/editor/icons/KeyAnimation.svg +++ b/editor/icons/KeyAnimation.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#a448f0" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#a448f0" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyAudio.svg b/editor/icons/KeyAudio.svg index cf69940904..012032f1c1 100644 --- a/editor/icons/KeyAudio.svg +++ b/editor/icons/KeyAudio.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#eae440" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#eae440" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyBezier.svg b/editor/icons/KeyBezier.svg index caa39dee77..2ee075a8e3 100644 --- a/editor/icons/KeyBezier.svg +++ b/editor/icons/KeyBezier.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#2877f6" height="6.1" ry=".763" transform="rotate(-45 5 5)" width="6.1" x="1.95" y="1.95"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.1" height="6.1" x="1.95" y="1.95" fill="#2877f6" ry=".763" transform="rotate(-45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyBezierHandle.svg b/editor/icons/KeyBezierHandle.svg index e2c95d720f..09a9a1eea6 100644 --- a/editor/icons/KeyBezierHandle.svg +++ b/editor/icons/KeyBezierHandle.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="M7.762 3.434a.8.8 45 0 1 0 1.132L4.566 7.762a.8.8 45 0 1-1.132 0L.238 4.566a.8.8 45 0 1 0-1.132L3.434.238a.8.8 45 0 1 1.132 0zM4.354.974a.5.5 45 0 0-.708 0L.974 3.646a.5.5 45 0 0 0 .708l2.672 2.672a.5.5 45 0 0 .708 0l2.672-2.672a.5.5 45 0 0 0-.708z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill="#e0e0e0" d="M7.762 3.434a.8.8 45 0 1 0 1.132L4.566 7.762a.8.8 45 0 1-1.132 0L.238 4.566a.8.8 45 0 1 0-1.132L3.434.238a.8.8 45 0 1 1.132 0zM4.354.974a.5.5 45 0 0-.708 0L.974 3.646a.5.5 45 0 0 0 .708l2.672 2.672a.5.5 45 0 0 .708 0l2.672-2.672a.5.5 45 0 0 0-.708z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyBezierPoint.svg b/editor/icons/KeyBezierPoint.svg index fa926c26fa..7fcafbf5a4 100644 --- a/editor/icons/KeyBezierPoint.svg +++ b/editor/icons/KeyBezierPoint.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="4.96" width="4.96" x="1.52" y="1.52" rx=".6" transform="rotate(45 4 4)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><rect width="4.96" height="4.96" x="1.52" y="1.52" fill="#e0e0e0" rx=".6" transform="rotate(45 4 4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyBezierSelected.svg b/editor/icons/KeyBezierSelected.svg index e26888d1d3..62fd8a55a5 100644 --- a/editor/icons/KeyBezierSelected.svg +++ b/editor/icons/KeyBezierSelected.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="4.96" width="4.96" x="1.52" y="1.52" ry=".6" transform="rotate(45 4 4)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><rect width="4.96" height="4.96" x="1.52" y="1.52" fill="#5fb2ff" ry=".6" transform="rotate(45 4 4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyBlendShape.svg b/editor/icons/KeyBlendShape.svg index e8d39e4fa0..92cc7829c8 100644 --- a/editor/icons/KeyBlendShape.svg +++ b/editor/icons/KeyBlendShape.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5ad5c4" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#5ad5c4" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyCall.svg b/editor/icons/KeyCall.svg index 8101b01201..1466753fb6 100644 --- a/editor/icons/KeyCall.svg +++ b/editor/icons/KeyCall.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#3cf34e" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#3cf34e" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyEasedSelected.svg b/editor/icons/KeyEasedSelected.svg index 55ce51fdd0..a1d693ded9 100644 --- a/editor/icons/KeyEasedSelected.svg +++ b/editor/icons/KeyEasedSelected.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="10" rx="1" width="10"/><rect fill="#003e7a" height="5.6" rx=".5" width="5.6" x="2.1" y="2.1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="10" height="10" fill="#5fb2ff" rx="1"/><rect width="5.6" height="5.6" x="2.1" y="2.1" fill="#003e7a" rx=".5"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyInvalid.svg b/editor/icons/KeyInvalid.svg index 135e7de181..b580da7772 100644 --- a/editor/icons/KeyInvalid.svg +++ b/editor/icons/KeyInvalid.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m1 1 6 6M1 7 7 1" fill="none" stroke="#ff5f5f" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill="none" stroke="#ff5f5f" stroke-width="2" d="m1 1 6 6M1 7 7 1"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyNext.svg b/editor/icons/KeyNext.svg index 47387c875a..0c68b66605 100644 --- a/editor/icons/KeyNext.svg +++ b/editor/icons/KeyNext.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#5fff97"/><path d="m11 1a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 2.8672 2.8691v-.86914h3.6387a4 4 0 0 0 1.3613-3 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z"/><path fill="#e0e0e0" d="m11 1a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 2.8672 2.8691v-.86914h3.6387a4 4 0 0 0 1.3613-3 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyPosition.svg b/editor/icons/KeyPosition.svg index c96df83523..6b22b83b16 100644 --- a/editor/icons/KeyPosition.svg +++ b/editor/icons/KeyPosition.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM8 9a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm5-2a1 1 0 0 0 0 4h-2v2h2a1 1 0 0 0 0-4h2V9zM0 9h2a2.7 2.7 0 0 1 0 5.4V16H0zm2 3.7a1 1 0 0 0 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM8 9a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm5-2a1 1 0 0 0 0 4h-2v2h2a1 1 0 0 0 0-4h2V9zM0 9h2a2.7 2.7 0 0 1 0 5.4V16H0zm2 3.7a1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyRotation.svg b/editor/icons/KeyRotation.svg index 88fc22bafd..f125d35ee5 100644 --- a/editor/icons/KeyRotation.svg +++ b/editor/icons/KeyRotation.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM11 7v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1v-1h2V9h-2V7zm0 5a3 3 0 0 0-6 0 3 3 0 0 0 6 0zM4 9a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1h1V9zm4 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM11 7v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1v-1h2V9h-2V7zm0 5a3 3 0 0 0-6 0 3 3 0 0 0 6 0zM4 9a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1h1V9zm4 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyScale.svg b/editor/icons/KeyScale.svg index bd36c83b30..6acb36a568 100644 --- a/editor/icons/KeyScale.svg +++ b/editor/icons/KeyScale.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM11 7v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1V7zM3 9a2 2 0 1 0 0 4H1v2h2a2 2 0 1 0 0-4h2V9zm6 0a3 3 0 1 0 0 6h1v-2H9a1 1 0 0 1 0-2h1V9z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.226 3.46a.76.76 0 0 0 0 1.078L7.46 7.775a.76.76 0 0 0 1.078 0l3.236-3.236a.76.76 0 0 0 0-1.078L8.54.225a.76.76 0 0 0-1.08 0zM11 7v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1V7zM3 9a2 2 0 1 0 0 4H1v2h2a2 2 0 1 0 0-4h2V9zm6 0a3 3 0 1 0 0 6h1v-2H9a1 1 0 0 1 0-2h1V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeySelected.svg b/editor/icons/KeySelected.svg index 9315dc67b1..bab2e9a7dd 100644 --- a/editor/icons/KeySelected.svg +++ b/editor/icons/KeySelected.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="7.5" width="7.5" x="1.25" y="1.25" ry="1" transform="rotate(45 5 5)"/><rect fill="#003e7a" height="4.2" width="4.2" x="2.9" y="2.9" ry=".5" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="7.5" height="7.5" x="1.25" y="1.25" fill="#5fb2ff" ry="1" transform="rotate(45 5 5)"/><rect width="4.2" height="4.2" x="2.9" y="2.9" fill="#003e7a" ry=".5" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyTrackBlendShape.svg b/editor/icons/KeyTrackBlendShape.svg index bdc7318d52..c5a93201c2 100644 --- a/editor/icons/KeyTrackBlendShape.svg +++ b/editor/icons/KeyTrackBlendShape.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><path d="M4.523 1.134A3.909 3.909 0 0 0 .656 5.033a3.909 3.909 0 0 0 3.117 3.816l.18-1.27a2.607 2.607 0 0 1-2.018-2.546 2.608 2.608 0 0 1 2.54-2.616h.2l.18-1.28zM6.2 1.15 6 2.45h1.35a.1.1 0 0 1 .1.1v5a.1.1 0 0 1-.1.1H5.3l-.2 1.3h2.25a1.4 1.4 0 0 0 1.4-1.4v-5a1.4 1.4 0 0 0-1.4-1.4z" fill="#5ad5c4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><path fill="#5ad5c4" d="M4.523 1.134A3.909 3.909 0 0 0 .656 5.033a3.909 3.909 0 0 0 3.117 3.816l.18-1.27a2.607 2.607 0 0 1-2.018-2.546 2.608 2.608 0 0 1 2.54-2.616h.2l.18-1.28zM6.2 1.15 6 2.45h1.35a.1.1 0 0 1 .1.1v5a.1.1 0 0 1-.1.1H5.3l-.2 1.3h2.25a1.4 1.4 0 0 0 1.4-1.4v-5a1.4 1.4 0 0 0-1.4-1.4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyTrackPosition.svg b/editor/icons/KeyTrackPosition.svg index 019c0d9c01..ba6efd29ff 100644 --- a/editor/icons/KeyTrackPosition.svg +++ b/editor/icons/KeyTrackPosition.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><g fill="#ea7940"><circle cx="5" cy="5" r="1.25"/><path d="M5 .625a.625.625 0 0 0-.432.182l-1.25 1.25.884.884.808-.808.808.808.884-.884-1.25-1.25A.625.625 0 0 0 5 .625zM2.068 3.307l-1.25 1.25a.625.625 0 0 0 0 .884l1.25 1.25.884-.884-.808-.808.808-.808-.884-.884zm5.884 0-.884.884.808.808-.808.808.884.883 1.25-1.25a.625.625 0 0 0 0-.883l-1.25-1.25zm-3.75 3.75-.884.884 1.25 1.25a.625.625 0 0 0 .884 0l1.25-1.25-.884-.884-.808.808-.808-.808z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g fill="#ea7940"><circle cx="5" cy="5" r="1.25"/><path d="M5 .625a.625.625 0 0 0-.432.182l-1.25 1.25.884.884.808-.808.808.808.884-.884-1.25-1.25A.625.625 0 0 0 5 .625zM2.068 3.307l-1.25 1.25a.625.625 0 0 0 0 .884l1.25 1.25.884-.884-.808-.808.808-.808-.884-.884zm5.884 0-.884.884.808.808-.808.808.884.883 1.25-1.25a.625.625 0 0 0 0-.883l-1.25-1.25zm-3.75 3.75-.884.884 1.25 1.25a.625.625 0 0 0 .884 0l1.25-1.25-.884-.884-.808.808-.808-.808z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/KeyTrackRotation.svg b/editor/icons/KeyTrackRotation.svg index 1e086e006e..b940f0ee7a 100644 --- a/editor/icons/KeyTrackRotation.svg +++ b/editor/icons/KeyTrackRotation.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><g fill="#ff2b88"><circle cx="5" cy="5" r="1.25"/><path d="M5 .625a4.375 4.375 0 0 0-3.114 7.499h-.692v1.25h2.5a.625.625 0 0 0 .607-.777l-.625-2.5-1.213.304.175.7a3.125 3.125 0 1 1 4.514.106l.885.885A4.375 4.375 0 0 0 5 .625z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g fill="#ff2b88"><circle cx="5" cy="5" r="1.25"/><path d="M5 .625a4.375 4.375 0 0 0-3.114 7.499h-.692v1.25h2.5a.625.625 0 0 0 .607-.777l-.625-2.5-1.213.304.175.7a3.125 3.125 0 1 1 4.514.106l.885.885A4.375 4.375 0 0 0 5 .625z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/KeyTrackScale.svg b/editor/icons/KeyTrackScale.svg index bc8be26b97..7f339edfda 100644 --- a/editor/icons/KeyTrackScale.svg +++ b/editor/icons/KeyTrackScale.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><g fill="#eac840"><circle cx="5" cy="5" r="1.25"/><path d="M5.625.625a.625.625 0 0 0 0 1.25h1.616l-.808.808.884.884.808-.808v1.616a.625.625 0 0 0 1.25 0V1.25A.625.625 0 0 0 8.75.625zm-3.75 5a.625.625 0 0 0-1.25 0V8.75a.625.625 0 0 0 .625.625h3.125a.625.625 0 0 0 0-1.25H2.759l.808-.808-.884-.884-.808.808V5.625z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><g fill="#eac840"><circle cx="5" cy="5" r="1.25"/><path d="M5.625.625a.625.625 0 0 0 0 1.25h1.616l-.808.808.884.884.808-.808v1.616a.625.625 0 0 0 1.25 0V1.25A.625.625 0 0 0 8.75.625zm-3.75 5a.625.625 0 0 0-1.25 0V8.75a.625.625 0 0 0 .625.625h3.125a.625.625 0 0 0 0-1.25H2.759l.808-.808-.884-.884-.808.808V5.625z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/KeyValue.svg b/editor/icons/KeyValue.svg index 23bfe93130..89ffbfe3c5 100644 --- a/editor/icons/KeyValue.svg +++ b/editor/icons/KeyValue.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#e0e0e0" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyValueEased.svg b/editor/icons/KeyValueEased.svg index 725d7ffda0..129b6a4ab8 100644 --- a/editor/icons/KeyValueEased.svg +++ b/editor/icons/KeyValueEased.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="8" rx="1" ry="1" width="8" x="1" y="1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="8" height="8" x="1" y="1" fill="#e0e0e0" rx="1" ry="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyXPosition.svg b/editor/icons/KeyXPosition.svg index 0d186d3dde..933ca62fb5 100644 --- a/editor/icons/KeyXPosition.svg +++ b/editor/icons/KeyXPosition.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#ea7940" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#ea7940" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyXRotation.svg b/editor/icons/KeyXRotation.svg index 97c610901a..dffea9997f 100644 --- a/editor/icons/KeyXRotation.svg +++ b/editor/icons/KeyXRotation.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#ff2b88" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#ff2b88" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyXScale.svg b/editor/icons/KeyXScale.svg index a0e3b4529a..e41d77f2a0 100644 --- a/editor/icons/KeyXScale.svg +++ b/editor/icons/KeyXScale.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#eac840" height="6.2" width="6.2" x="1.9" y="1.9" ry=".75" transform="rotate(45 5 5)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.2" height="6.2" x="1.9" y="1.9" fill="#eac840" ry=".75" transform="rotate(45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/Keyboard.svg b/editor/icons/Keyboard.svg index 4a0e6f6483..1be2ab54bc 100644 --- a/editor/icons/Keyboard.svg +++ b/editor/icons/Keyboard.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6.584 5.135 6.17 4.059l-.412 1.076h.826zm3.203 2.976a.95 1.06 0 0 0 0 2.14.95 1.06 0 0 0 0-2.14zM4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 .995 1h8a1 1 0 0 0 1-1V3A1 1 0 0 0 12 2.007H4Zm1.475.646H6.89l1.865 4.27H7.268l-.286-.744H5.36l-.287.744H3.61l1.866-4.27Zm2.939 8.401a2.42 2.24 0 1 1 2.41.168c.296.465.837-.109 1.06-.007l.544.642c-.64.756-1.883.677-2.605.084-.394-.448-.866-.673-1.409-.887ZM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6.584 5.135 6.17 4.059l-.412 1.076h.826zm3.203 2.976a.95 1.06 0 0 0 0 2.14.95 1.06 0 0 0 0-2.14zM4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 .995 1h8a1 1 0 0 0 1-1V3A1 1 0 0 0 12 2.007H4Zm1.475.646H6.89l1.865 4.27H7.268l-.286-.744H5.36l-.287.744H3.61l1.866-4.27Zm2.939 8.401a2.42 2.24 0 1 1 2.41.168c.296.465.837-.109 1.06-.007l.544.642c-.64.756-1.883.677-2.605.084-.394-.448-.866-.673-1.409-.887ZM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyboardError.svg b/editor/icons/KeyboardError.svg index bc2ed119df..72f647b336 100644 --- a/editor/icons/KeyboardError.svg +++ b/editor/icons/KeyboardError.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H4Zm4.223 1.262c1.06.005 2.29.257 2.92 1.197.532.862.275 2.057-.484 2.703-.346.382-.862.629-1.075 1.117.055.345-.33.172-.537.213H7.148c-.037-.749.503-1.335 1.026-1.796.406-.253.744-1.002.129-1.22-.626-.25-1.374.117-1.645.715l-2.08-1.039c.599-1.147 1.868-1.818 3.136-1.872.17-.013.339-.018.509-.018Zm.127 5.697c.798-.057 1.616.616 1.54 1.45-.023.81-.841 1.413-1.623 1.328-.833.022-1.6-.771-1.443-1.613.097-.721.83-1.195 1.526-1.165zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H4Zm4.223 1.262c1.06.005 2.29.257 2.92 1.197.532.862.275 2.057-.484 2.703-.346.382-.862.629-1.075 1.117.055.345-.33.172-.537.213H7.148c-.037-.749.503-1.335 1.026-1.796.406-.253.744-1.002.129-1.22-.626-.25-1.374.117-1.645.715l-2.08-1.039c.599-1.147 1.868-1.818 3.136-1.872.17-.013.339-.018.509-.018Zm.127 5.697c.798-.057 1.616.616 1.54 1.45-.023.81-.841 1.413-1.623 1.328-.833.022-1.6-.771-1.443-1.613.097-.721.83-1.195 1.526-1.165zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyboardLabel.svg b/editor/icons/KeyboardLabel.svg index 33c92445f8..9500b1c0fc 100644 --- a/editor/icons/KeyboardLabel.svg +++ b/editor/icons/KeyboardLabel.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M4 1.977a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-9a1 1 0 0 0-1-1zm5.8 2 .58.58-.58.58-.58-.58zm-.6 1 .6.6-.6.6-.6-.6zm1.2 0 .6.6-.6.6-.6-.6zm.717 1.436h1.06c.053.217.093.428.122.63.028.201.043.395.043.58a2.363 2.363 0 0 1-.133.724 1.425 1.425 0 0 1-.31.515c-.249.265-.598.399-1.05.399-.331 0-.594-.08-.785-.235a1.091 1.091 0 0 1-.236-.275c-.063.1-.14.19-.236.265-.206.163-.467.245-.787.245-.252 0-.457-.057-.614-.166a2.75 2.75 0 0 1-.095.42 1.936 1.936 0 0 1-.403.722c-.2.22-.452.383-.756.49-.303.11-.654.166-1.052.166-.466 0-.865-.089-1.2-.265a1.817 1.817 0 0 1-.765-.752c-.18-.327-.27-.715-.27-1.164 0-.256.027-.525.082-.809.055-.284.126-.545.21-.781h1.001c-.062.232-.112.46-.15.684a3.87 3.87 0 0 0-.053.613c0 .37.1.643.3.82.204.177.523.264.96.264.222 0 .425-.03.61-.092a.97.97 0 0 0 .439-.299.803.803 0 0 0 .166-.521 5.463 5.463 0 0 0-.051-.725 11.61 11.61 0 0 0-.068-.482A26.51 26.51 0 0 0 7 6.778h1.135l.043.276c.047.32.123.532.228.634.105.1.24.15.402.15.165 0 .284-.04.358-.124.076-.086.115-.224.115-.412v-.524h1.027v.524c0 .203.032.351.096.447.065.095.202.142.412.142a.637.637 0 0 0 .33-.078c.089-.052.133-.15.133-.297 0-.128-.019-.295-.054-.498zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 1.977a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-9a1 1 0 0 0-1-1zm5.8 2 .58.58-.58.58-.58-.58zm-.6 1 .6.6-.6.6-.6-.6zm1.2 0 .6.6-.6.6-.6-.6zm.717 1.436h1.06c.053.217.093.428.122.63.028.201.043.395.043.58a2.363 2.363 0 0 1-.133.724 1.425 1.425 0 0 1-.31.515c-.249.265-.598.399-1.05.399-.331 0-.594-.08-.785-.235a1.091 1.091 0 0 1-.236-.275c-.063.1-.14.19-.236.265-.206.163-.467.245-.787.245-.252 0-.457-.057-.614-.166a2.75 2.75 0 0 1-.095.42 1.936 1.936 0 0 1-.403.722c-.2.22-.452.383-.756.49-.303.11-.654.166-1.052.166-.466 0-.865-.089-1.2-.265a1.817 1.817 0 0 1-.765-.752c-.18-.327-.27-.715-.27-1.164 0-.256.027-.525.082-.809.055-.284.126-.545.21-.781h1.001c-.062.232-.112.46-.15.684a3.87 3.87 0 0 0-.053.613c0 .37.1.643.3.82.204.177.523.264.96.264.222 0 .425-.03.61-.092a.97.97 0 0 0 .439-.299.803.803 0 0 0 .166-.521 5.463 5.463 0 0 0-.051-.725 11.61 11.61 0 0 0-.068-.482A26.51 26.51 0 0 0 7 6.778h1.135l.043.276c.047.32.123.532.228.634.105.1.24.15.402.15.165 0 .284-.04.358-.124.076-.086.115-.224.115-.412v-.524h1.027v.524c0 .203.032.351.096.447.065.095.202.142.412.142a.637.637 0 0 0 .33-.078c.089-.052.133-.15.133-.297 0-.128-.019-.295-.054-.498zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/KeyboardPhysical.svg b/editor/icons/KeyboardPhysical.svg index 1a8bcf93c4..a5e26f406f 100644 --- a/editor/icons/KeyboardPhysical.svg +++ b/editor/icons/KeyboardPhysical.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1ZM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Zm5.762-.232h2.476l3.264 7.464H9.898l-.502-1.3H6.561l-.502 1.3H3.498Zm1.217 2.474L7.254 8.12h1.45z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1ZM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Zm5.762-.232h2.476l3.264 7.464H9.898l-.502-1.3H6.561l-.502 1.3H3.498Zm1.217 2.474L7.254 8.12h1.45z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Label.svg b/editor/icons/Label.svg index 6712927421..fc879aa146 100644 --- a/editor/icons/Label.svg +++ b/editor/icons/Label.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Label3D.svg b/editor/icons/Label3D.svg index 7f2a46a58c..1980e2d2b2 100644 --- a/editor/icons/Label3D.svg +++ b/editor/icons/Label3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h8a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LabelSettings.svg b/editor/icons/LabelSettings.svg index 478e655b80..5dbf80cf88 100644 --- a/editor/icons/LabelSettings.svg +++ b/editor/icons/LabelSettings.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h2.184C7.25 10.75 9.75 8.75 11.25 6.5a.85.85 0 0 1 1.5 0c1.5 2.25 2 2.5 2.25 3V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#8eef97"/><path d="M12 7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="#8eef97" d="M6 3a1 1 0 0 0-.707.293l-4 4a1 1 0 0 0 0 1.414l4 4A1 1 0 0 0 6 13h2.184C7.25 10.75 9.75 8.75 11.25 6.5a.85.85 0 0 1 1.5 0c1.5 2.25 2 2.5 2.25 3V4a1 1 0 0 0-1-1H6zM5 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/><path fill="url(#a)" d="M12 7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LightOccluder2D.svg b/editor/icons/LightOccluder2D.svg index 1e1c189c4f..571fe38e53 100644 --- a/editor/icons/LightOccluder2D.svg +++ b/editor/icons/LightOccluder2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 9a3 3 0 0 1 0-6zm-1 5v1h2v-1z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 9a3 3 0 0 1 0-6zm-1 5v1h2v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LightmapGI.svg b/editor/icons/LightmapGI.svg index 78f0a64a7b..51101d88db 100644 --- a/editor/icons/LightmapGI.svg +++ b/editor/icons/LightmapGI.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LightmapGIData.svg b/editor/icons/LightmapGIData.svg index f5dcfb618b..beb731f696 100644 --- a/editor/icons/LightmapGIData.svg +++ b/editor/icons/LightmapGIData.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h2v-2zm4 0v2h6v-2zm-7 3v2h2v-2zm3 0v2h2v-2zm4 0v3h5v6h-5v2h5a2 2 0 0 0 2-2v-9zm1 1h1v1h-1zm3 0h1v1h-1zm-11 2v2h2v-2zm3 0v2h2v-2zm4 1v1h2v-1zm-7 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v2h2v-2zm3 0v2h2v-2zm4 0v2h6v-2zm-7 3v2h2v-2zm3 0v2h2v-2zm4 0v3h5v6h-5v2h5a2 2 0 0 0 2-2v-9zm1 1h1v1h-1zm3 0h1v1h-1zm-11 2v2h2v-2zm3 0v2h2v-2zm4 1v1h2v-1zm-7 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LightmapProbe.svg b/editor/icons/LightmapProbe.svg index a6f9879082..dea5c30d21 100644 --- a/editor/icons/LightmapProbe.svg +++ b/editor/icons/LightmapProbe.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 9h3V7H1zm2.05 2.535 1.415 1.414 1.414-1.414-1.414-1.414zm0-7.07 1.415 1.414 1.414-1.414L4.465 3.05zM5 8a3 3 0 0 0 6 0 3 3 0 0 0-6 0zm3 7A7 7 0 0 0 8 1v2.334a1 1 0 0 1 0 9.332z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M1 9h3V7H1zm2.05 2.535 1.415 1.414 1.414-1.414-1.414-1.414zm0-7.07 1.415 1.414 1.414-1.414L4.465 3.05zM5 8a3 3 0 0 0 6 0 3 3 0 0 0-6 0zm3 7A7 7 0 0 0 8 1v2.334a1 1 0 0 1 0 9.332z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Line.svg b/editor/icons/Line.svg index 0b440b8db7..78efa4d0b2 100644 --- a/editor/icons/Line.svg +++ b/editor/icons/Line.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 10 8-8" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-width="2" d="m2 10 8-8"/></svg>
\ No newline at end of file diff --git a/editor/icons/Line2D.svg b/editor/icons/Line2D.svg index f38f8aee98..f8bdb44982 100644 --- a/editor/icons/Line2D.svg +++ b/editor/icons/Line2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 9 3 4L8 3l3 6 3-2" fill="none" stroke="#8da5f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#8da5f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 9 3 4L8 3l3 6 3-2"/></svg>
\ No newline at end of file diff --git a/editor/icons/LineEdit.svg b/editor/icons/LineEdit.svg index 36847bfd19..a0e3faeac3 100644 --- a/editor/icons/LineEdit.svg +++ b/editor/icons/LineEdit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 4v5h2V4zm-1 7a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M2 4v5h2V4zm-1 7a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LinkButton.svg b/editor/icons/LinkButton.svg index 7f85602787..31a1c7b4a6 100644 --- a/editor/icons/LinkButton.svg +++ b/editor/icons/LinkButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 3a5 5 0 0 0 0 10h1v-2H6a3 3 0 0 1 0-6h1V3zm3 0v2h1a3 3 0 0 1 0 6H9v2h1a5 5 0 0 0 0-10zM6 7a1 1 0 0 0 0 2h4a1 1 0 0 0 0-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M6 3a5 5 0 0 0 0 10h1v-2H6a3 3 0 0 1 0-6h1V3zm3 0v2h1a3 3 0 0 1 0 6H9v2h1a5 5 0 0 0 0-10zM6 7a1 1 0 0 0 0 2h4a1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ListSelect.svg b/editor/icons/ListSelect.svg index f1dac744d4..f918e8dbd4 100644 --- a/editor/icons/ListSelect.svg +++ b/editor/icons/ListSelect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h8.2578l-.82227-2h-5.4355v-2h4.6113l-.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977-.49805v-.0019531a1.5002 1.5002 0 0 1 .58594.11133l.94531.38867h.48438v.19922l2 .82227v-7.0215h-11zm2 2h7v2h-7zm5 5 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v14h8.2578l-.82227-2h-5.4355v-2h4.6113l-.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977-.49805v-.0019531a1.5002 1.5002 0 0 1 .58594.11133l.94531.38867h.48438v.19922l2 .82227v-7.0215h-11zm2 2h7v2h-7zm5 5 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Load.svg b/editor/icons/Load.svg index a4a6b30d2d..6f738a8a7e 100644 --- a/editor/icons/Load.svg +++ b/editor/icons/Load.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9c1.105 0 1.818-.91 2-2l1-6a1 1 0 0 0-1-1H6c-.552 0-.909.455-1 1l-1 6c-.091.545-.448 1-1 1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1 1 1 0 0 0 1 1h5a1 1 0 0 0-1-1H7a2 2 0 0 0-2-2H3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 2a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9c1.105 0 1.818-.91 2-2l1-6a1 1 0 0 0-1-1H6c-.552 0-.909.455-1 1l-1 6c-.091.545-.448 1-1 1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1 1 1 0 0 0 1 1h5a1 1 0 0 0-1-1H7a2 2 0 0 0-2-2H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Lock.svg b/editor/icons/Lock.svg index df66e524c2..2d17af347e 100644 --- a/editor/icons/Lock.svg +++ b/editor/icons/Lock.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 6A5 5 0 0 0 3 6v2H2v7h12V8h-1V6zM5 6a3 3 0 0 1 6 0v2H5zm2 4h2v3H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M13 6A5 5 0 0 0 3 6v2H2v7h12V8h-1V6zM5 6a3 3 0 0 1 6 0v2H5zm2 4h2v3H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/LockViewport.svg b/editor/icons/LockViewport.svg index c29d1415a3..b60f9c5911 100644 --- a/editor/icons/LockViewport.svg +++ b/editor/icons/LockViewport.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6v1H1v9h14V7h-1V6A6 6 0 0 0 2 6zm8 0v1H6V6a1 1 0 0 1 4 0z" fill-opacity=".392"/><path d="M3 6v2H2v7h12V8h-1V6A5 5 0 0 0 3 6zm8 0v2H5V6a3 3 0 0 1 6 0zm-4 4h2v3H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill-opacity=".392" d="M2 6v1H1v9h14V7h-1V6A6 6 0 0 0 2 6zm8 0v1H6V6a1 1 0 0 1 4 0z"/><path fill="#e0e0e0" d="M3 6v2H2v7h12V8h-1V6A5 5 0 0 0 3 6zm8 0v2H5V6a3 3 0 0 1 6 0zm-4 4h2v3H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Logo.svg b/editor/icons/Logo.svg index 647262559f..607577496f 100644 --- a/editor/icons/Logo.svg +++ b/editor/icons/Logo.svg @@ -1 +1 @@ -<svg height="69" viewBox="0 0 187 69" width="187" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M96.116 30.781c-1.847-.029-3.96.356-3.96.356v3.605h2.125l-.024 1.606q0 .893-1.767.894-1.767-.001-3.12-1.493-1.358-1.495-1.356-4.372 0-2.884 1.32-4.255 1.32-1.372 3.448-1.372a6.3 6.3 0 0 1 1.852.292q.96.291 1.287.546c.217.176.422.258.618.258q.29.002.94-.685.654-.687 1.169-2.074c.342-.929.514-1.64.514-2.145 0-.501-.011-.847-.034-1.029q-.72-.788-2.66-1.252-1.936-.464-4.338-.463-5.282 0-8.265 3.327-2.986 3.328-2.985 8.644 0 6.244 3.051 9.467 3.055 3.224 8.028 3.223 2.674 0 4.75-.463 2.075-.462 2.762-.943l.137-10.734c0-.623-1.646-.906-3.492-.938m17.018-5.01q-1.645 0-2.762 1.509-1.114 1.509-1.114 4.234 0 2.73 1.064 4.186 1.063 1.46 2.795 1.46t2.812-1.478q1.081-1.473 1.082-4.218c.001-2.745-.373-3.237-1.116-4.22q-1.114-1.473-2.761-1.473m-.017 18.074q-4.819 0-7.856-3.153-3.033-3.156-3.033-9.21 0-6.056 3.068-9.178 3.07-3.12 7.924-3.12 4.854-.002 7.837 3.072c1.991 2.045 2.985 5.146 2.985 9.294q0 6.224-3.053 9.263-3.053 3.032-7.872 3.032M133.71 26.01v10.26q0 .717.104.907.103.189.616.189 1.888 0 2.865-1.408.978-1.404.976-4.68-.001-3.278-1.01-4.27-1.013-.996-3.208-.998zm-6.585 15.917V21.348q-.001-.858.43-1.359.427-.496 1.114-.497h5.728q5.454.001 8.281 2.747 2.832 2.742 2.832 8.642 0 12.622-10.772 12.622h-5.864q-1.749.001-1.75-1.577m31.623-16.155q-1.648 0-2.763 1.509-1.113 1.509-1.113 4.234 0 2.73 1.063 4.186 1.062 1.46 2.795 1.46c1.733 0 2.093-.492 2.813-1.478q1.08-1.473 1.081-4.218c.001-2.745-.372-3.237-1.115-4.22q-1.114-1.473-2.761-1.473m-.018 18.074q-4.819 0-7.854-3.153-3.036-3.156-3.036-9.21 0-6.056 3.069-9.178 3.07-3.12 7.925-3.12 4.853-.002 7.837 3.072c1.99 2.045 2.984 5.146 2.984 9.294q0 6.224-3.053 9.263-3.053 3.032-7.872 3.032m23.773-.842c0 .454-1.13.685-3.395.685q-3.396-.001-3.397-.685v-17.22h-4.115q-.584.001-.823-1.58a11 11 0 0 1-.101-1.542q-.001-.787.1-1.543c.16-1.05.435-1.58.824-1.58h14.92q.584.002.825 1.58a11.6 11.6 0 0 1 0 3.086q-.242 1.58-.824 1.579h-4.014z"/><path fill="#e0e0e0" d="M88.866 57.973q-.284.585-1.048 1.069-.764.486-1.942.486-1.554.002-2.503-.987-.946-.983-.947-2.833v-3.073q0-1.808.895-2.776c.596-.64 1.395-.966 2.392-.966q1.462.002 2.265.764.8.765.837 2.128l-.013.04h-.796q-.041-1.042-.61-1.612-.568-.565-1.683-.566-1.128 0-1.782.765-.652.762-.651 2.215v3.091q0 1.507.702 2.3.701.785 1.894.785.873.001 1.398-.313.526-.312.732-.763v-2.692h-2.144v-.748h3.004zm3.95.789q.708.001 1.26-.406.55-.41.777-1.04v-1.661H93.49q-.87 0-1.393.493a1.6 1.6 0 0 0-.522 1.22q0 .616.327 1.006.327.389.915.388m2.165.62a20 20 0 0 1-.097-.652 4 4 0 0 1-.03-.518 3 3 0 0 1-.906.945q-.555.374-1.238.373-.952 0-1.47-.591-.517-.594-.518-1.603 0-1.07.751-1.707.753-.636 2.038-.636h1.342v-.943q-.001-.815-.41-1.28-.415-.457-1.152-.459-.687 0-1.133.441a1.46 1.46 0 0 0-.442 1.078l-.797-.007-.014-.042q-.033-.865.659-1.544.69-.678 1.77-.677 1.064 0 1.719.646.65.653.651 1.86v3.767q0 .412.037.795a5 5 0 0 0 .127.753zm3.415-7.698.072 1.191a2.46 2.46 0 0 1 .808-.989q.505-.345 1.186-.345.697 0 1.17.408.475.408.697 1.237.284-.766.805-1.207.524-.438 1.259-.438 1.01 0 1.566.818.557.819.557 2.518v4.485h-.857v-4.5q-.001-1.413-.384-1.987-.383-.573-1.093-.574-.745-.002-1.165.637-.417.639-.511 1.605v4.82h-.853v-4.497q0-1.381-.393-1.97a1.25 1.25 0 0 0-1.096-.59q-.674.001-1.083.409t-.585 1.119v5.528h-.853v-7.679zm12.414.61q-.801 0-1.317.73c-.516.73-.522 1.089-.536 1.805h3.542v-.328q0-.952-.446-1.58-.449-.628-1.243-.627m.12 7.218q-1.24 0-2.03-.933-.787-.931-.787-2.382V54.92q0-1.454.79-2.42.792-.96 1.907-.959 1.206 0 1.872.858.67.86.67 2.31v.842h-4.395v.639q0 1.115.532 1.856.534.741 1.442.74.631 0 1.09-.22a2.25 2.25 0 0 0 .783-.632l.349.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265m9.375-7.218q-.804 0-1.32.73-.512.73-.535 1.805h3.543V54.5q0-.952-.447-1.58-.446-.629-1.241-.627m.12 7.218q-1.243 0-2.03-.933-.79-.932-.79-2.382V54.92q.001-1.454.79-2.42.794-.96 1.91-.959 1.205 0 1.872.858.668.86.668 2.31v.842h-4.395v.639q0 1.115.535 1.856.53.741 1.44.74.632 0 1.088-.22a2.3 2.3 0 0 0 .787-.632l.347.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265m4.684-7.828.07 1.269q.306-.677.814-1.044a1.97 1.97 0 0 1 1.19-.368q1.028 0 1.576.763.552.764.551 2.374v4.684h-.858v-4.677q0-1.314-.384-1.845-.382-.534-1.113-.533-.655-.001-1.095.43-.441.426-.66 1.144v5.481h-.852v-7.678zm6.72 4.523q0 1.17.447 1.86.445.697 1.348.696.617.001 1.044-.335.424-.338.673-.935V53.69q-.24-.614-.655-.994-.415-.376-1.047-.377-.902 0-1.355.786-.456.79-.455 2.053zm-.86-1.05q0-1.631.66-2.62.659-.984 1.825-.984c.43 0 .81.105 1.132.316.324.207.592.51.807.895l.083-1.068h.723v7.686q0 1.475-.686 2.286c-.46.537-1.111.81-1.953.81q-.454-.001-.976-.14a4 4 0 0 1-.927-.365l.236-.748a2.9 2.9 0 0 0 .774.347 3 3 0 0 0 .879.124q.916 0 1.355-.587.44-.592.44-1.727v-.93a2.3 2.3 0 0 1-.802.795 2.15 2.15 0 0 1-1.1.276q-1.157 0-1.813-.906-.657-.905-.658-2.41zm8.12 4.226h-.862v-7.7h.862zm0-9.892h-.862v-1.213h.862zm2.782 2.193.07 1.269q.307-.677.813-1.044a2 2 0 0 1 1.19-.368q1.03 0 1.58.763.55.764.549 2.374v4.684h-.858v-4.677q0-1.314-.384-1.845-.383-.534-1.114-.533-.654-.001-1.093.43-.441.426-.66 1.144v5.481h-.853v-7.678zm8.499.61q-.804 0-1.317.73-.514.73-.537 1.805h3.543V54.5q0-.952-.446-1.58-.447-.629-1.243-.627m.122 7.218q-1.245 0-2.03-.933-.789-.932-.788-2.382V54.92q0-1.454.79-2.42.792-.96 1.906-.959 1.207 0 1.875.858.666.86.667 2.31v.842h-4.396v.639q.002 1.115.534 1.856.531.741 1.442.74.63 0 1.087-.22a2.25 2.25 0 0 0 .787-.632l.348.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265"/><g transform="scale(.0727) translate(-37-37)"><g fill="#fefefe"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="187" height="69"><path fill="#fff" d="M96.116 30.781c-1.847-.029-3.96.356-3.96.356v3.605h2.125l-.024 1.606q0 .893-1.767.894-1.767-.001-3.12-1.493-1.358-1.495-1.356-4.372 0-2.884 1.32-4.255 1.32-1.372 3.448-1.372a6.3 6.3 0 0 1 1.852.292q.96.291 1.287.546c.217.176.422.258.618.258q.29.002.94-.685.654-.687 1.169-2.074c.342-.929.514-1.64.514-2.145 0-.501-.011-.847-.034-1.029q-.72-.788-2.66-1.252-1.936-.464-4.338-.463-5.282 0-8.265 3.327-2.986 3.328-2.985 8.644 0 6.244 3.051 9.467 3.055 3.224 8.028 3.223 2.674 0 4.75-.463 2.075-.462 2.762-.943l.137-10.734c0-.623-1.646-.906-3.492-.938m17.018-5.01q-1.645 0-2.762 1.509-1.114 1.509-1.114 4.234 0 2.73 1.064 4.186 1.063 1.46 2.795 1.46t2.812-1.478q1.081-1.473 1.082-4.218c.001-2.745-.373-3.237-1.116-4.22q-1.114-1.473-2.761-1.473m-.017 18.074q-4.819 0-7.856-3.153-3.033-3.156-3.033-9.21 0-6.056 3.068-9.178 3.07-3.12 7.924-3.12 4.854-.002 7.837 3.072c1.991 2.045 2.985 5.146 2.985 9.294q0 6.224-3.053 9.263-3.053 3.032-7.872 3.032M133.71 26.01v10.26q0 .717.104.907.103.189.616.189 1.888 0 2.865-1.408.978-1.404.976-4.68-.001-3.278-1.01-4.27-1.013-.996-3.208-.998zm-6.585 15.917V21.348q-.001-.858.43-1.359.427-.496 1.114-.497h5.728q5.454.001 8.281 2.747 2.832 2.742 2.832 8.642 0 12.622-10.772 12.622h-5.864q-1.749.001-1.75-1.577m31.623-16.155q-1.648 0-2.763 1.509-1.113 1.509-1.113 4.234 0 2.73 1.063 4.186 1.062 1.46 2.795 1.46c1.733 0 2.093-.492 2.813-1.478q1.08-1.473 1.081-4.218c.001-2.745-.372-3.237-1.115-4.22q-1.114-1.473-2.761-1.473m-.018 18.074q-4.819 0-7.854-3.153-3.036-3.156-3.036-9.21 0-6.056 3.069-9.178 3.07-3.12 7.925-3.12 4.853-.002 7.837 3.072c1.99 2.045 2.984 5.146 2.984 9.294q0 6.224-3.053 9.263-3.053 3.032-7.872 3.032m23.773-.842c0 .454-1.13.685-3.395.685q-3.396-.001-3.397-.685v-17.22h-4.115q-.584.001-.823-1.58a11 11 0 0 1-.101-1.542q-.001-.787.1-1.543c.16-1.05.435-1.58.824-1.58h14.92q.584.002.825 1.58a11.6 11.6 0 0 1 0 3.086q-.242 1.58-.824 1.579h-4.014z"/><path fill="#e0e0e0" d="M88.866 57.973q-.284.585-1.048 1.069-.764.486-1.942.486-1.554.002-2.503-.987-.946-.983-.947-2.833v-3.073q0-1.808.895-2.776c.596-.64 1.395-.966 2.392-.966q1.462.002 2.265.764.8.765.837 2.128l-.013.04h-.796q-.041-1.042-.61-1.612-.568-.565-1.683-.566-1.128 0-1.782.765-.652.762-.651 2.215v3.091q0 1.507.702 2.3.701.785 1.894.785.873.001 1.398-.313.526-.312.732-.763v-2.692h-2.144v-.748h3.004zm3.95.789q.708.001 1.26-.406.55-.41.777-1.04v-1.661H93.49q-.87 0-1.393.493a1.6 1.6 0 0 0-.522 1.22q0 .616.327 1.006.327.389.915.388m2.165.62a20 20 0 0 1-.097-.652 4 4 0 0 1-.03-.518 3 3 0 0 1-.906.945q-.555.374-1.238.373-.952 0-1.47-.591-.517-.594-.518-1.603 0-1.07.751-1.707.753-.636 2.038-.636h1.342v-.943q-.001-.815-.41-1.28-.415-.457-1.152-.459-.687 0-1.133.441a1.46 1.46 0 0 0-.442 1.078l-.797-.007-.014-.042q-.033-.865.659-1.544.69-.678 1.77-.677 1.064 0 1.719.646.65.653.651 1.86v3.767q0 .412.037.795a5 5 0 0 0 .127.753zm3.415-7.698.072 1.191a2.46 2.46 0 0 1 .808-.989q.505-.345 1.186-.345.697 0 1.17.408.475.408.697 1.237.284-.766.805-1.207.524-.438 1.259-.438 1.01 0 1.566.818.557.819.557 2.518v4.485h-.857v-4.5q-.001-1.413-.384-1.987-.383-.573-1.093-.574-.745-.002-1.165.637-.417.639-.511 1.605v4.82h-.853v-4.497q0-1.381-.393-1.97a1.25 1.25 0 0 0-1.096-.59q-.674.001-1.083.409t-.585 1.119v5.528h-.853v-7.679zm12.414.61q-.801 0-1.317.73c-.516.73-.522 1.089-.536 1.805h3.542v-.328q0-.952-.446-1.58-.449-.628-1.243-.627m.12 7.218q-1.24 0-2.03-.933-.787-.931-.787-2.382V54.92q0-1.454.79-2.42.792-.96 1.907-.959 1.206 0 1.872.858.67.86.67 2.31v.842h-4.395v.639q0 1.115.532 1.856.534.741 1.442.74.631 0 1.09-.22a2.25 2.25 0 0 0 .783-.632l.349.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265m9.375-7.218q-.804 0-1.32.73-.512.73-.535 1.805h3.543V54.5q0-.952-.447-1.58-.446-.629-1.241-.627m.12 7.218q-1.243 0-2.03-.933-.79-.932-.79-2.382V54.92q.001-1.454.79-2.42.794-.96 1.91-.959 1.205 0 1.872.858.668.86.668 2.31v.842h-4.395v.639q0 1.115.535 1.856.53.741 1.44.74.632 0 1.088-.22a2.3 2.3 0 0 0 .787-.632l.347.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265m4.684-7.828.07 1.269q.306-.677.814-1.044a1.97 1.97 0 0 1 1.19-.368q1.028 0 1.576.763.552.764.551 2.374v4.684h-.858v-4.677q0-1.314-.384-1.845-.382-.534-1.113-.533-.655-.001-1.095.43-.441.426-.66 1.144v5.481h-.852v-7.678zm6.72 4.523q0 1.17.447 1.86.445.697 1.348.696.617.001 1.044-.335.424-.338.673-.935V53.69q-.24-.614-.655-.994-.415-.376-1.047-.377-.902 0-1.355.786-.456.79-.455 2.053zm-.86-1.05q0-1.631.66-2.62.659-.984 1.825-.984c.43 0 .81.105 1.132.316.324.207.592.51.807.895l.083-1.068h.723v7.686q0 1.475-.686 2.286c-.46.537-1.111.81-1.953.81q-.454-.001-.976-.14a4 4 0 0 1-.927-.365l.236-.748a2.9 2.9 0 0 0 .774.347 3 3 0 0 0 .879.124q.916 0 1.355-.587.44-.592.44-1.727v-.93a2.3 2.3 0 0 1-.802.795 2.15 2.15 0 0 1-1.1.276q-1.157 0-1.813-.906-.657-.905-.658-2.41zm8.12 4.226h-.862v-7.7h.862zm0-9.892h-.862v-1.213h.862zm2.782 2.193.07 1.269q.307-.677.813-1.044a2 2 0 0 1 1.19-.368q1.03 0 1.58.763.55.764.549 2.374v4.684h-.858v-4.677q0-1.314-.384-1.845-.383-.534-1.114-.533-.654-.001-1.093.43-.441.426-.66 1.144v5.481h-.853v-7.678zm8.499.61q-.804 0-1.317.73-.514.73-.537 1.805h3.543V54.5q0-.952-.446-1.58-.447-.629-1.243-.627m.122 7.218q-1.245 0-2.03-.933-.789-.932-.788-2.382V54.92q0-1.454.79-2.42.792-.96 1.906-.959 1.207 0 1.875.858.666.86.667 2.31v.842h-4.396v.639q.002 1.115.534 1.856.531.741 1.442.74.63 0 1.087-.22a2.25 2.25 0 0 0 .787-.632l.348.604a2.5 2.5 0 0 1-.9.708q-.548.264-1.322.265"/><g fill="#fefefe" transform="translate(-2.69 -2.69)scale(.0727)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(-2.69 -2.69)scale(.0727)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Loop.svg b/editor/icons/Loop.svg index cef695602f..1dc018d22e 100644 --- a/editor/icons/Loop.svg +++ b/editor/icons/Loop.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1v2H6a5 5 0 0 0-4 8l1.414-1.414A3 3 0 0 1 6 5h2v2l4-3-4-3zm6 4-1.414 1.414A3 3 0 0 1 10 11H8V9l-4 3 4 3v-2h2a5 5 0 0 0 4-8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1v2H6a5 5 0 0 0-4 8l1.414-1.414A3 3 0 0 1 6 5h2v2l4-3-4-3zm6 4-1.414 1.414A3 3 0 0 1 10 11H8V9l-4 3 4 3v-2h2a5 5 0 0 0 4-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MainMovieWrite.svg b/editor/icons/MainMovieWrite.svg index 55d4809bdb..fac7cc8192 100644 --- a/editor/icons/MainMovieWrite.svg +++ b/editor/icons/MainMovieWrite.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 14a2 2 0 0 0 2 2h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 1 0-2 4.465zM8 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm3.441 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4.488 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm.024 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.904 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 11a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 14a2 2 0 0 0 2 2h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 1 0-2 4.465zM8 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm3.441 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4.488 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm.024 4a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.904 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 11a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MainPlay.svg b/editor/icons/MainPlay.svg index 340d44fda8..c8fb9b36ff 100644 --- a/editor/icons/MainPlay.svg +++ b/editor/icons/MainPlay.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 12V4l7 4z" fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M4 12V4l7 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MakeFloating.svg b/editor/icons/MakeFloating.svg index 916b1566e9..52af3adbc1 100644 --- a/editor/icons/MakeFloating.svg +++ b/editor/icons/MakeFloating.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="5" height="10" width="11" rx="1.5" fill="#919191"/><path d="M5.5 1A1.5 1.5 0 0 0 4 2.5V3h11v-.5A1.5 1.5 0 0 0 13.5 1zM4 4v5.5A1.5 1.5 0 0 0 5.5 11h8A1.5 1.5 0 0 0 15 9.5V4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="11" height="10" x="1" y="5" fill="#919191" rx="1.5"/><path fill="#e0e0e0" d="M5.5 1A1.5 1.5 0 0 0 4 2.5V3h11v-.5A1.5 1.5 0 0 0 13.5 1zM4 4v5.5A1.5 1.5 0 0 0 5.5 11h8A1.5 1.5 0 0 0 15 9.5V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MarginContainer.svg b/editor/icons/MarginContainer.svg index aa9372159c..dfe7e3c5ff 100644 --- a/editor/icons/MarginContainer.svg +++ b/editor/icons/MarginContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 3v4l2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 3v4l2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Marker2D.svg b/editor/icons/Marker2D.svg index aa7836c3ef..17b9b2297b 100644 --- a/editor/icons/Marker2D.svg +++ b/editor/icons/Marker2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Marker3D.svg b/editor/icons/Marker3D.svg index bbc531cc3e..511b56ebec 100644 --- a/editor/icons/Marker3D.svg +++ b/editor/icons/Marker3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MatchCase.svg b/editor/icons/MatchCase.svg index 62e8bc9218..c8ea7494b3 100644 --- a/editor/icons/MatchCase.svg +++ b/editor/icons/MatchCase.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 1a4 4 0 0 0-4 4v10h2v-4h4v4h2V5a4 4 0 0 0-4-4zm5 11a3 3 0 0 0 4 2.824V15h2V9a3 3 0 0 0-3-3h-1v2h1a1 1 0 0 1 1 1v.174A3 3 0 0 0 9 12zM4 3a2 2 0 0 1 2 2v4H2V5a2 2 0 0 1 2-2zm8 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 1a4 4 0 0 0-4 4v10h2v-4h4v4h2V5a4 4 0 0 0-4-4zm5 11a3 3 0 0 0 4 2.824V15h2V9a3 3 0 0 0-3-3h-1v2h1a1 1 0 0 1 1 1v.174A3 3 0 0 0 9 12zM4 3a2 2 0 0 1 2 2v4H2V5a2 2 0 0 1 2-2zm8 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MaterialPreviewCube.svg b/editor/icons/MaterialPreviewCube.svg index 68d4595bc2..4741cb2a81 100644 --- a/editor/icons/MaterialPreviewCube.svg +++ b/editor/icons/MaterialPreviewCube.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1 7 3v8l-7 3-7-3V4z" fill="none" stroke="#000" stroke-opacity=".8" stroke-width="2" stroke-linejoin="round"/><path d="M8 1 1 4v8l7 3 7-3V4z" fill="#d6d6d6"/><path d="m1 4 7 3 7-3-7-3z" fill="#f9f9f9"/><path d="m8 15-7-3V4l7 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#000" stroke-linejoin="round" stroke-opacity=".8" stroke-width="2" d="m8 1 7 3v8l-7 3-7-3V4z"/><path fill="#d6d6d6" d="M8 1 1 4v8l7 3 7-3V4z"/><path fill="#f9f9f9" d="m1 4 7 3 7-3-7-3z"/><path fill="#e0e0e0" d="m8 15-7-3V4l7 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MaterialPreviewLight1.svg b/editor/icons/MaterialPreviewLight1.svg index ef21a4ecd7..8c7776afde 100644 --- a/editor/icons/MaterialPreviewLight1.svg +++ b/editor/icons/MaterialPreviewLight1.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#000" stroke-width="2" stroke-opacity=".8" stroke-linejoin="round"><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2z"/><circle cx="8" cy="8" r="3.5" fill="#000"/></g><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2zm1-7.875a.75.75 0 0 1 1.145.625V11h-1.5V7.152l-1 .667-.75-1.2z" fill="#f9f9f9"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#000" stroke-linejoin="round" stroke-opacity=".8" stroke-width="2"><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2z"/><circle cx="8" cy="8" r="3.5" fill="#000"/></g><path fill="#f9f9f9" d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2zm1-7.875a.75.75 0 0 1 1.145.625V11h-1.5V7.152l-1 .667-.75-1.2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MaterialPreviewLight2.svg b/editor/icons/MaterialPreviewLight2.svg index 7714864840..8d0e0b35a6 100644 --- a/editor/icons/MaterialPreviewLight2.svg +++ b/editor/icons/MaterialPreviewLight2.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#000" stroke-width="2" stroke-opacity=".8" stroke-linejoin="round"><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2z"/><circle cx="8" cy="8" r="3.5" fill="#000"/></g><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2zM5.9 6.45a1.98 1.98 0 1 1 3.4 1.8L8.05 9.5h2V11H6.8a.9.9 0 0 1-.75-1.5L8.3 7.25a.62.62 0 1 0-1.1-.45z" fill="#f9f9f9"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#000" stroke-linejoin="round" stroke-opacity=".8" stroke-width="2"><path d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2z"/><circle cx="8" cy="8" r="3.5" fill="#000"/></g><path fill="#f9f9f9" d="M7 1v2h2V1zM3.758 2.344 2.344 3.758l1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM8 4a4 4 0 0 0 0 8 4 4 0 0 0 0-8zM1 7v2h2V7zm12 0v2h2V7zm-9.242 3.828-1.414 1.414 1.414 1.414 1.414-1.414zm8.484 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 13v2h2v-2zM5.9 6.45a1.98 1.98 0 1 1 3.4 1.8L8.05 9.5h2V11H6.8a.9.9 0 0 1-.75-1.5L8.3 7.25a.62.62 0 1 0-1.1-.45z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MaterialPreviewSphere.svg b/editor/icons/MaterialPreviewSphere.svg index e3c58fefe3..bfe8e15630 100644 --- a/editor/icons/MaterialPreviewSphere.svg +++ b/editor/icons/MaterialPreviewSphere.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="8" fill="#000" fill-opacity=".8"/><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM6 7a2 2 0 0 1 0-4 2 2 0 0 1 0 4" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill-opacity=".8"/><path fill="#e0e0e0" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM6 7a2 2 0 0 1 0-4 2 2 0 0 1 0 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberAnnotation.svg b/editor/icons/MemberAnnotation.svg index 5578ef92c9..27930b6736 100644 --- a/editor/icons/MemberAnnotation.svg +++ b/editor/icons/MemberAnnotation.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13.821 12.756c-5 3.915-12.551 2.248-12.49-4.538.674-11.471 17.312-7.45 12.446 2.117-.8 1.196-2.074 1.462-3.198.433-.3-.3-.448-1.16-.382-1.509.4-1.894 1.088-4.078-.722-4.723-2.417-.865-4.559 1.65-4.97 4.02-.473 2.734 2.285 3.374 4.15 1.987.455-.363 1.55-1.38 1.68-1.974" fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="1.493"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="1.493" d="M13.821 12.756c-5 3.915-12.551 2.248-12.49-4.538.674-11.471 17.312-7.45 12.446 2.117-.8 1.196-2.074 1.462-3.198.433-.3-.3-.448-1.16-.382-1.509.4-1.894 1.088-4.078-.722-4.723-2.417-.865-4.559 1.65-4.97 4.02-.473 2.734 2.285 3.374 4.15 1.987.455-.363 1.55-1.38 1.68-1.974"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberConstant.svg b/editor/icons/MemberConstant.svg index ec5dc67c3e..cc59eb4400 100644 --- a/editor/icons/MemberConstant.svg +++ b/editor/icons/MemberConstant.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.5 3.67a5 5 0 1 0 0 8.66l-1-1.73a3 3 0 1 1 0-5.2zM3 11a1 1 0 1 0 0 2 1 1 0 0 0 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12.5 3.67a5 5 0 1 0 0 8.66l-1-1.73a3 3 0 1 1 0-5.2zM3 11a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberMethod.svg b/editor/icons/MemberMethod.svg index 01cc265332..5e325d5180 100644 --- a/editor/icons/MemberMethod.svg +++ b/editor/icons/MemberMethod.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.021 3A3 3 0 0 0 3 6v7h2v-3h2V8H5V6a1 1 0 0 1 1.707-.707l1.414-1.414A3 3 0 0 0 6.021 3zM9 6c-1.326 2.659-1.34 4.325 0 7h2c-1.34-2.675-1.326-4.341 0-7zm4 0c1.326 2.659 1.34 4.325 0 7h2c1.34-2.675 1.326-4.341 0-7zM1 11a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6.021 3A3 3 0 0 0 3 6v7h2v-3h2V8H5V6a1 1 0 0 1 1.707-.707l1.414-1.414A3 3 0 0 0 6.021 3zM9 6c-1.326 2.659-1.34 4.325 0 7h2c-1.34-2.675-1.326-4.341 0-7zm4 0c1.326 2.659 1.34 4.325 0 7h2c1.34-2.675 1.326-4.341 0-7zM1 11a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberProperty.svg b/editor/icons/MemberProperty.svg index ebd9cc330b..a2ea8f5668 100644 --- a/editor/icons/MemberProperty.svg +++ b/editor/icons/MemberProperty.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 4v9h2v-3h1a3 3 0 0 0 0-6zm2 2h1a1 1 0 0 1 0 2H9zm-5 5a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 4v9h2v-3h1a3 3 0 0 0 0-6zm2 2h1a1 1 0 0 1 0 2H9zm-5 5a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberSignal.svg b/editor/icons/MemberSignal.svg index 21bbdad3ce..f043c7f229 100644 --- a/editor/icons/MemberSignal.svg +++ b/editor/icons/MemberSignal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 6 1zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-5 2a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 6 1zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-5 2a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MemberTheme.svg b/editor/icons/MemberTheme.svg index 70b6518467..949621b30f 100644 --- a/editor/icons/MemberTheme.svg +++ b/editor/icons/MemberTheme.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 11a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm7-9C7.6 6 6 6.79 6 9s1.83 4 4 4 4-1.79 4-4-1.6-3-4-7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 11a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm7-9C7.6 6 6 6.79 6 9s1.83 4 4 4 4-1.79 4-4-1.6-3-4-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MenuBar.svg b/editor/icons/MenuBar.svg index 0a53f07f85..cdd99c95bb 100644 --- a/editor/icons/MenuBar.svg +++ b/editor/icons/MenuBar.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1Zm1 2h10v2H3Zm0 3h10v2H3ZM1 1v4h6V1Zm1 1h4L4 4Z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M2 6a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1Zm1 2h10v2H3Zm0 3h10v2H3ZM1 1v4h6V1Zm1 1h4L4 4Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MenuButton.svg b/editor/icons/MenuButton.svg index cb1d9e8382..13d1a3566a 100644 --- a/editor/icons/MenuButton.svg +++ b/editor/icons/MenuButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h14v-4zm5 1h4l-2 2zm-4 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m1 1v4h14v-4zm5 1h4l-2 2zm-4 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Mesh.svg b/editor/icons/Mesh.svg index 9aeb8408c5..0449925643 100644 --- a/editor/icons/Mesh.svg +++ b/editor/icons/Mesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MeshInstance2D.svg b/editor/icons/MeshInstance2D.svg index a0d94e2344..989ad63157 100644 --- a/editor/icons/MeshInstance2D.svg +++ b/editor/icons/MeshInstance2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MeshInstance3D.svg b/editor/icons/MeshInstance3D.svg index 7edb7fcd06..adb95b24fc 100644 --- a/editor/icons/MeshInstance3D.svg +++ b/editor/icons/MeshInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MeshItem.svg b/editor/icons/MeshItem.svg index d475aec908..d231559bb6 100644 --- a/editor/icons/MeshItem.svg +++ b/editor/icons/MeshItem.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541A2 2 0 1 0 14 11.27V4.729A2 2 0 1 0 11.27 2Zm.683 2h5.857a2 2 0 0 0 .729.73v5.856L5.412 4zM3.999 5.414 10.584 12H4.727a2 2 0 0 0-.729-.73V5.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MeshLibrary.svg b/editor/icons/MeshLibrary.svg index 62a2b3efcc..5c8ccd8f73 100644 --- a/editor/icons/MeshLibrary.svg +++ b/editor/icons/MeshLibrary.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.729 2A2 2 0 1 0 2 4.73v6.542A2 2 0 1 0 4.73 14H7v-2H4.728A2 2 0 0 0 4 11.27V5.414l3 3V8a2 2 0 0 1 .809-1.606L5.414 4h5.858a2 2 0 0 0 .728.73V6a2 2 0 0 1 1 .271A2 2 0 0 1 14 6V4.728A2 2 0 1 0 11.27 2zM9 8v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M4.729 2A2 2 0 1 0 2 4.73v6.542A2 2 0 1 0 4.73 14H7v-2H4.728A2 2 0 0 0 4 11.27V5.414l3 3V8a2 2 0 0 1 .809-1.606L5.414 4h5.858a2 2 0 0 0 .728.73V6a2 2 0 0 1 1 .271A2 2 0 0 1 14 6V4.728A2 2 0 1 0 11.27 2zM9 8v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MeshTexture.svg b/editor/icons/MeshTexture.svg index 4068d13040..c6417e542d 100644 --- a/editor/icons/MeshTexture.svg +++ b/editor/icons/MeshTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4zM8.75 6.125v.75H8v.75H6.5v.75h-.75v.75H5v.75h6v-1.5h-.75v-1.5H9.5v-.75z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4zM8.75 6.125v.75H8v.75H6.5v.75h-.75v.75H5v.75h6v-1.5h-.75v-1.5H9.5v-.75z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MethodOverride.svg b/editor/icons/MethodOverride.svg index 39e069df55..dd69f0074a 100644 --- a/editor/icons/MethodOverride.svg +++ b/editor/icons/MethodOverride.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 12.5h3V10c0-2.5.5-4.2 3.5-4.2H10V3l5 3.8-5 3.8V8H8.5C7.25 8 7 9 7 10v2.5h3v2H2z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="M2 12.5h3V10c0-2.5.5-4.2 3.5-4.2H10V3l5 3.8-5 3.8V8H8.5C7.25 8 7 9 7 10v2.5h3v2H2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MethodOverrideAndSlot.svg b/editor/icons/MethodOverrideAndSlot.svg index eb9729b04d..871ce3ce84 100644 --- a/editor/icons/MethodOverrideAndSlot.svg +++ b/editor/icons/MethodOverrideAndSlot.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M.5 13.5H2V11c0-2.5.5-4.2 3.5-4.2H6V4l5 3.8-5 3.8V9h-.5C4.25 9 4 10 4 11v2.5h4.5v2h-8z" fill="#5fb2ff"/><path d="M9 3h6v10H9v-2h4V5H9z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="M.5 13.5H2V11c0-2.5.5-4.2 3.5-4.2H6V4l5 3.8-5 3.8V9h-.5C4.25 9 4 10 4 11v2.5h4.5v2h-8z"/><path fill="#5fff97" d="M9 3h6v10H9v-2h4V5H9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MiniObject.svg b/editor/icons/MiniObject.svg index 3bba3bc1a3..5859189fc8 100644 --- a/editor/icons/MiniObject.svg +++ b/editor/icons/MiniObject.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 2v8h2a3 3 0 0 0 0-6V2zM6 7a3 3 0 0 0-6 0 3 3 0 0 0 6 0zm7-1v3a1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V6zM3 6a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2zm4-4h2v2h-2z" fill="#55f3e3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#55f3e3" d="M7 2v8h2a3 3 0 0 0 0-6V2zM6 7a3 3 0 0 0-6 0 3 3 0 0 0 6 0zm7-1v3a1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V6zM3 6a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2zm4-4h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MirrorX.svg b/editor/icons/MirrorX.svg index 11572ac11e..c73996a398 100644 --- a/editor/icons/MirrorX.svg +++ b/editor/icons/MirrorX.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 6 2 8l2 2M2 8h11m-1-2 2 2-2 2" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6 2 8l2 2M2 8h11m-1-2 2 2-2 2"/></svg>
\ No newline at end of file diff --git a/editor/icons/MirrorY.svg b/editor/icons/MirrorY.svg index 2ca5cbb2ff..7f8787231d 100644 --- a/editor/icons/MirrorY.svg +++ b/editor/icons/MirrorY.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 4 8 2 6 4m2-2v11m2-1-2 2-2-2" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 4 8 2 6 4m2-2v11m2-1-2 2-2-2"/></svg>
\ No newline at end of file diff --git a/editor/icons/MissingNode.svg b/editor/icons/MissingNode.svg index 734340860c..bab9f5c950 100644 --- a/editor/icons/MissingNode.svg +++ b/editor/icons/MissingNode.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3 13 13M13 3 3 13" fill="none" stroke="#ff5f5f" stroke-width="2" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ff5f5f" stroke-linecap="round" stroke-width="2" d="M3 3 13 13M13 3 3 13"/></svg>
\ No newline at end of file diff --git a/editor/icons/MissingResource.svg b/editor/icons/MissingResource.svg index 734340860c..bab9f5c950 100644 --- a/editor/icons/MissingResource.svg +++ b/editor/icons/MissingResource.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3 13 13M13 3 3 13" fill="none" stroke="#ff5f5f" stroke-width="2" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ff5f5f" stroke-linecap="round" stroke-width="2" d="M3 3 13 13M13 3 3 13"/></svg>
\ No newline at end of file diff --git a/editor/icons/Mouse.svg b/editor/icons/Mouse.svg index cc144ea510..8e63a84144 100644 --- a/editor/icons/Mouse.svg +++ b/editor/icons/Mouse.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1a5 5 0 0 0-4 5h4zm2 0a5 5 0 0 1 4 5H9zM3 8v2a5 5 0 0 0 10 0V8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 1a5 5 0 0 0-4 5h4zm2 0a5 5 0 0 1 4 5H9zM3 8v2a5 5 0 0 0 10 0V8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MoveDown.svg b/editor/icons/MoveDown.svg index 0a91867a67..943e576811 100644 --- a/editor/icons/MoveDown.svg +++ b/editor/icons/MoveDown.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 2H6m2 4v8M4 9l4 5 4-5" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 2H6m2 4v8M4 9l4 5 4-5"/></svg>
\ No newline at end of file diff --git a/editor/icons/MoveLeft.svg b/editor/icons/MoveLeft.svg index e1d30bc41a..785c71f471 100644 --- a/editor/icons/MoveLeft.svg +++ b/editor/icons/MoveLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 10V6m-4 2H2m5-4L2 8l5 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 10V6m-4 2H2m5-4L2 8l5 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/MovePoint.svg b/editor/icons/MovePoint.svg index 2da6a22287..add743bdaa 100644 --- a/editor/icons/MovePoint.svg +++ b/editor/icons/MovePoint.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 1 0 1.213 13.893l-2.6-6.32a1.5 1.5 0 0 1 1.957-1.96l6.319 2.6A7 7 0 0 0 8 1z" fill="#fff"/><path d="M8 3a5 5 0 1 0 .426 9.979L6.613 8.572A1.5 1.5 0 0 1 8.57 6.613l4.409 1.813A5 5 0 0 0 8 3z" fill="#ff5f5f"/><path d="M16 11.3 8 8.009l3.291 8 .947-2.82 1.884 1.883.942-.941-1.884-1.884z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="M8 1a7 7 0 1 0 1.213 13.893l-2.6-6.32a1.5 1.5 0 0 1 1.957-1.96l6.319 2.6A7 7 0 0 0 8 1z"/><path fill="#ff5f5f" d="M8 3a5 5 0 1 0 .426 9.979L6.613 8.572A1.5 1.5 0 0 1 8.57 6.613l4.409 1.813A5 5 0 0 0 8 3z"/><path fill="#e0e0e0" d="M16 11.3 8 8.009l3.291 8 .947-2.82 1.884 1.883.942-.941-1.884-1.884z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MoveRight.svg b/editor/icons/MoveRight.svg index 8ecc793c6a..fa98b93248 100644 --- a/editor/icons/MoveRight.svg +++ b/editor/icons/MoveRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6v4m4-2h8m-5 4 5-4-5-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2 6v4m4-2h8m-5 4 5-4-5-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/MoveUp.svg b/editor/icons/MoveUp.svg index d6ebf054f8..609db3f03d 100644 --- a/editor/icons/MoveUp.svg +++ b/editor/icons/MoveUp.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 14h4m-2-4V2m4 5L8 2 4 7" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 14h4m-2-4V2m4 5L8 2 4 7"/></svg>
\ No newline at end of file diff --git a/editor/icons/MultiMesh.svg b/editor/icons/MultiMesh.svg index 23c26c741f..96303c1e41 100644 --- a/editor/icons/MultiMesh.svg +++ b/editor/icons/MultiMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MultiMeshInstance2D.svg b/editor/icons/MultiMeshInstance2D.svg index 9cd07c2dcd..2972a9ea64 100644 --- a/editor/icons/MultiMeshInstance2D.svg +++ b/editor/icons/MultiMeshInstance2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MultiMeshInstance3D.svg b/editor/icons/MultiMeshInstance3D.svg index 85f515d077..03507674f0 100644 --- a/editor/icons/MultiMeshInstance3D.svg +++ b/editor/icons/MultiMeshInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4.73 2A2 2 0 1 0 2 4.73v6.541a2 2 0 1 0 2.73 2.73H6v-2H4.73a2 2 0 0 0-.73-.73V5.437l3.564 3.564H9V7.565L5.436 4.001h5.834a2 2 0 0 0 .73.73V6h2V4.731A2 2 0 1 0 11.27 2zM11 8v3H8v2h3v3h2v-3h3v-2h-3V8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MultiplayerSpawner.svg b/editor/icons/MultiplayerSpawner.svg index 05bff5480c..714e92a903 100644 --- a/editor/icons/MultiplayerSpawner.svg +++ b/editor/icons/MultiplayerSpawner.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.936 7.429a4 4 0 0 1 6.128 0M1.872 4.858a8 8 0 0 1 12.256 0" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linecap="round"/><path d="M7 9v2H5v2h2v2h2v-2h2v-2H9V9Z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M4.936 7.429a4 4 0 0 1 6.128 0M1.872 4.858a8 8 0 0 1 12.256 0"/><path fill="#5fff97" d="M7 9v2H5v2h2v2h2v-2h2v-2H9V9Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/MultiplayerSynchronizer.svg b/editor/icons/MultiplayerSynchronizer.svg index 072f625960..cc640f8d75 100644 --- a/editor/icons/MultiplayerSynchronizer.svg +++ b/editor/icons/MultiplayerSynchronizer.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 10-2 4-2-4Z" fill="#5fff97"/><path d="m12 14-2-4-2 4Z" fill="#ff5f5f"/><path d="M4.936 7.429a4 4 0 0 1 6.128 0M1.872 4.858a8 8 0 0 1 12.256 0" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-linecap="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="m8 10-2 4-2-4Z"/><path fill="#ff5f5f" d="m12 14-2-4-2 4Z"/><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M4.936 7.429a4 4 0 0 1 6.128 0M1.872 4.858a8 8 0 0 1 12.256 0"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationAgent2D.svg b/editor/icons/NavigationAgent2D.svg index ad11096afc..4e0d00f4ad 100644 --- a/editor/icons/NavigationAgent2D.svg +++ b/editor/icons/NavigationAgent2D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1v2.5a2.5 2.5 0 0 1 0 5V15c2-3 5-6 5-9s-2-5-5-5z" fill="#8da5f3"/><path d="M8 1C5 1 3 3 3 6s3 6 5 9V8.5a1 1 0 0 1 0-5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M8 1v2.5a2.5 2.5 0 0 1 0 5V15c2-3 5-6 5-9s-2-5-5-5z"/><path fill="#e0e0e0" d="M8 1C5 1 3 3 3 6s3 6 5 9V8.5a1 1 0 0 1 0-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationAgent3D.svg b/editor/icons/NavigationAgent3D.svg index 6f887611a9..ecda3b960f 100644 --- a/editor/icons/NavigationAgent3D.svg +++ b/editor/icons/NavigationAgent3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1C5 1 3 3 3 6s3 6 5 9V8.5a1 1 0 0 1 0-5z" fill="#e0e0e0"/><path d="M8 1v2.5a2.5 2.5 0 0 1 0 5V15c2-3 5-6 5-9s-2-5-5-5z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1C5 1 3 3 3 6s3 6 5 9V8.5a1 1 0 0 1 0-5z"/><path fill="#fc7f7f" d="M8 1v2.5a2.5 2.5 0 0 1 0 5V15c2-3 5-6 5-9s-2-5-5-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationLink2D.svg b/editor/icons/NavigationLink2D.svg index 9b7b9859f6..8aed54a9f2 100644 --- a/editor/icons/NavigationLink2D.svg +++ b/editor/icons/NavigationLink2D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h3.2a3.25 3.25 0 0 1-.2-5l5-5a3.25 3.25 0 0 1 5 .2V2a1 1 0 0 0-1-1zm7.15 6.65a2 2 0 0 1 1.207.207l1.25-1.25a1 1 0 0 1 1.75 1.75l-2 2a1 1 0 0 1-1.5 0 .5.5 0 0 0-.707.707 2 2 0 0 0 2.914 0l2-2A2 2 0 0 0 10.9 5.9zm1.628 4.628a2 2 0 0 1-1.207-.207l-1.25 1.25a1.237 1.237 0 0 1-1.75-1.75l2-2a1 1 0 0 1 1.5 0 .5.5 0 0 0 .707-.707 2 2 0 0 0-2.914 0l-2 2a2.237 2.237 0 0 0 3.164 3.164z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h3.2a3.25 3.25 0 0 1-.2-5l5-5a3.25 3.25 0 0 1 5 .2V2a1 1 0 0 0-1-1zm7.15 6.65a2 2 0 0 1 1.207.207l1.25-1.25a1 1 0 0 1 1.75 1.75l-2 2a1 1 0 0 1-1.5 0 .5.5 0 0 0-.707.707 2 2 0 0 0 2.914 0l2-2A2 2 0 0 0 10.9 5.9zm1.628 4.628a2 2 0 0 1-1.207-.207l-1.25 1.25a1.237 1.237 0 0 1-1.75-1.75l2-2a1 1 0 0 1 1.5 0 .5.5 0 0 0 .707-.707 2 2 0 0 0-2.914 0l-2 2a2.237 2.237 0 0 0 3.164 3.164z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationLink3D.svg b/editor/icons/NavigationLink3D.svg index 9115b8ff9a..4ac3cce9af 100644 --- a/editor/icons/NavigationLink3D.svg +++ b/editor/icons/NavigationLink3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h3.2a3.25 3.25 0 0 1-.2-5l5-5a3.25 3.25 0 0 1 5 .2V2a1 1 0 0 0-1-1zm7.15 6.65a2 2 0 0 1 1.207.207l1.25-1.25a1 1 0 0 1 1.75 1.75l-2 2a1 1 0 0 1-1.5 0 .5.5 0 0 0-.707.707 2 2 0 0 0 2.914 0l2-2A2 2 0 0 0 10.9 5.9zm1.628 4.628a2 2 0 0 1-1.207-.207l-1.25 1.25a1.237 1.237 0 0 1-1.75-1.75l2-2a1 1 0 0 1 1.5 0 .5.5 0 0 0 .707-.707 2 2 0 0 0-2.914 0l-2 2a2.237 2.237 0 0 0 3.164 3.164z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h3.2a3.25 3.25 0 0 1-.2-5l5-5a3.25 3.25 0 0 1 5 .2V2a1 1 0 0 0-1-1zm7.15 6.65a2 2 0 0 1 1.207.207l1.25-1.25a1 1 0 0 1 1.75 1.75l-2 2a1 1 0 0 1-1.5 0 .5.5 0 0 0-.707.707 2 2 0 0 0 2.914 0l2-2A2 2 0 0 0 10.9 5.9zm1.628 4.628a2 2 0 0 1-1.207-.207l-1.25 1.25a1.237 1.237 0 0 1-1.75-1.75l2-2a1 1 0 0 1 1.5 0 .5.5 0 0 0 .707-.707 2 2 0 0 0-2.914 0l-2 2a2.237 2.237 0 0 0 3.164 3.164z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationMesh.svg b/editor/icons/NavigationMesh.svg index c5f16596a6..9d54230de2 100644 --- a/editor/icons/NavigationMesh.svg +++ b/editor/icons/NavigationMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h2.5078l.75-2h-3.2598a2 2 0 0 0 -.72852-.73047v-5.8555l4.6973 4.6973.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 .72852.73047v.27148a2.0002 2.0002 0 0 1 .023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l.12695.33789v-1.9082a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm9 6-3 8 3-2 3 2z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h2.5078l.75-2h-3.2598a2 2 0 0 0 -.72852-.73047v-5.8555l4.6973 4.6973.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 .72852.73047v.27148a2.0002 2.0002 0 0 1 .023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l.12695.33789v-1.9082a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm9 6-3 8 3-2 3 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationObstacle2D.svg b/editor/icons/NavigationObstacle2D.svg index e47a1f2a98..bc2a2c78b6 100644 --- a/editor/icons/NavigationObstacle2D.svg +++ b/editor/icons/NavigationObstacle2D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 .875C7.375.875 6.75 1.25 6.5 2l-3 10H8V9H5.5l1-4H8zM2 13c-1 0-1 2 0 2h6v-2z" fill="#e0e0e0"/><path d="M8 .875V5h1.5l1 4H8v3h4.5l-3-10C9.25 1.25 8.625.875 8 .875zM8 13v2h6c1 0 1-2 0-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 .875C7.375.875 6.75 1.25 6.5 2l-3 10H8V9H5.5l1-4H8zM2 13c-1 0-1 2 0 2h6v-2z"/><path fill="#8da5f3" d="M8 .875V5h1.5l1 4H8v3h4.5l-3-10C9.25 1.25 8.625.875 8 .875zM8 13v2h6c1 0 1-2 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationObstacle3D.svg b/editor/icons/NavigationObstacle3D.svg index 52080bf3fc..103b5d050e 100644 --- a/editor/icons/NavigationObstacle3D.svg +++ b/editor/icons/NavigationObstacle3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 .875C7.375.875 6.75 1.25 6.5 2l-3 10H8V9H5.5l1-4H8zM2 13c-1 0-1 2 0 2h6v-2z" fill="#e0e0e0"/><path d="M8 .875V5h1.5l1 4H8v3h4.5l-3-10C9.25 1.25 8.625.875 8 .875zM8 13v2h6c1 0 1-2 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 .875C7.375.875 6.75 1.25 6.5 2l-3 10H8V9H5.5l1-4H8zM2 13c-1 0-1 2 0 2h6v-2z"/><path fill="#fc7f7f" d="M8 .875V5h1.5l1 4H8v3h4.5l-3-10C9.25 1.25 8.625.875 8 .875zM8 13v2h6c1 0 1-2 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationPolygon.svg b/editor/icons/NavigationPolygon.svg index c120b4ba5e..faa950f7ef 100644 --- a/editor/icons/NavigationPolygon.svg +++ b/editor/icons/NavigationPolygon.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.902a2.1 2.1 0 0 1 .131-.736L7.508 13H3V3h8.586L7.293 7.293a1 1 0 0 0 0 1.414l1.326 1.326 1.414-3.77a2.1 2.1 0 0 1 1.992-1.36 2.1 2.1 0 0 1 .436.05l2.246-2.246A1 1 0 0 0 14 1H2zm13 14-3-8-3 8 3-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.902a2.1 2.1 0 0 1 .131-.736L7.508 13H3V3h8.586L7.293 7.293a1 1 0 0 0 0 1.414l1.326 1.326 1.414-3.77a2.1 2.1 0 0 1 1.992-1.36 2.1 2.1 0 0 1 .436.05l2.246-2.246A1 1 0 0 0 14 1H2zm13 14-3-8-3 8 3-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationRegion2D.svg b/editor/icons/NavigationRegion2D.svg index bbd9f122c9..156b160c36 100644 --- a/editor/icons/NavigationRegion2D.svg +++ b/editor/icons/NavigationRegion2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.885a2.118 2.118 0 0 1 .133-.744l3-8a2.118 2.118 0 0 1 3.964 0L15 8.969V2a.992.992 0 0 0-1-1zm10 6-3 8 3-2 3 2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.885a2.118 2.118 0 0 1 .133-.744l3-8a2.118 2.118 0 0 1 3.964 0L15 8.969V2a.992.992 0 0 0-1-1zm10 6-3 8 3-2 3 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NavigationRegion3D.svg b/editor/icons/NavigationRegion3D.svg index 34b2e98491..b6915e210d 100644 --- a/editor/icons/NavigationRegion3D.svg +++ b/editor/icons/NavigationRegion3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.885a2.118 2.118 0 0 1 .133-.744l3-8a2.118 2.118 0 0 1 3.964 0L15 8.969V2a.992.992 0 0 0-1-1zm10 6-3 8 3-2 3 2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4.885a2.118 2.118 0 0 1 .133-.744l3-8a2.118 2.118 0 0 1 3.964 0L15 8.969V2a.992.992 0 0 0-1-1zm10 6-3 8 3-2 3 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/New.svg b/editor/icons/New.svg index 99d74ab05b..8ac4eea4dc 100644 --- a/editor/icons/New.svg +++ b/editor/icons/New.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v14h8v-1H8v-4h2V8h4V6H9V1zm8 0v4h4z" fill="#e0e0e0"/><path d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1v14h8v-1H8v-4h2V8h4V6H9V1zm8 0v4h4z"/><path fill="#5fff97" d="M11 9v2H9v2h2v2h2v-2h2v-2h-2V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NewKey.svg b/editor/icons/NewKey.svg index cc7e7aa2a1..a69744f3b3 100644 --- a/editor/icons/NewKey.svg +++ b/editor/icons/NewKey.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2zm-3 .723A2 2 0 1 1 13 8h1v2h.445a4 4 0 1 0-7.314-3H1v2h1v2h3V9h2.133A4 4 0 0 0 8 10.627V10h2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2zm-3 .723A2 2 0 1 1 13 8h1v2h.445a4 4 0 1 0-7.314-3H1v2h1v2h3V9h2.133A4 4 0 0 0 8 10.627V10h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NewRoot.svg b/editor/icons/NewRoot.svg index 66c5b6188a..b06f667060 100644 --- a/editor/icons/NewRoot.svg +++ b/editor/icons/NewRoot.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 5v1.5a2 2 0 1 0 2.75 2.75h1.5A2 2 0 0 0 7 10v1.5a2 2 0 1 0 2.75 2.75h1.5a2 2 0 1 0 0-2h-1.5A2 2 0 0 0 9 11.5V10a2 2 0 1 0-2.75-2.75h-1.5A2 2 0 0 0 4 6.5V5z" fill="#e0e0e0"/><path d="M2 5a2 2 0 1 1 2 0z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 5v1.5a2 2 0 1 0 2.75 2.75h1.5A2 2 0 0 0 7 10v1.5a2 2 0 1 0 2.75 2.75h1.5a2 2 0 1 0 0-2h-1.5A2 2 0 0 0 9 11.5V10a2 2 0 1 0-2.75-2.75h-1.5A2 2 0 0 0 4 6.5V5z"/><path fill="#5fff97" d="M2 5a2 2 0 1 1 2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Nil.svg b/editor/icons/Nil.svg index 32a6ebcff3..01c729bd8e 100644 --- a/editor/icons/Nil.svg +++ b/editor/icons/Nil.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v2h2V2zm3 0v5a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1-1-1V2zM1 4v6h2V6h1a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm7 2v4h2V6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M8 2v2h2V2zm3 0v5a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1-1-1V2zM1 4v6h2V6h1a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm7 2v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NinePatchRect.svg b/editor/icons/NinePatchRect.svg index 18b9f3b8e4..77a42c1edf 100644 --- a/editor/icons/NinePatchRect.svg +++ b/editor/icons/NinePatchRect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1h14v14H1zm2 2v2h2V3zm3 0v2h4V3zm5 0v2h2V3zM3 6v4h2V6zm3 0v4h4V6zm5 0v4h2V6zm-8 5v2h2v-2zm3 0v2h4v-2zm5 0v2h2v-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M1 1h14v14H1zm2 2v2h2V3zm3 0v2h4V3zm5 0v2h2V3zM3 6v4h2V6zm3 0v4h4V6zm5 0v4h2V6zm-8 5v2h2v-2zm3 0v2h4v-2zm5 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Node.svg b/editor/icons/Node.svg index faa87eed24..e960599451 100644 --- a/editor/icons/Node.svg +++ b/editor/icons/Node.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/Node2D.svg b/editor/icons/Node2D.svg index 09dbb82552..249b3c998f 100644 --- a/editor/icons/Node2D.svg +++ b/editor/icons/Node2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5" fill="none" stroke="#8da5f3" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/Node3D.svg b/editor/icons/Node3D.svg index 10de207625..1e3f32c000 100644 --- a/editor/icons/Node3D.svg +++ b/editor/icons/Node3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5" fill="none" stroke="#fc7f7f" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeDisabled.svg b/editor/icons/NodeDisabled.svg index 68a7407d21..b3ec9cc57a 100644 --- a/editor/icons/NodeDisabled.svg +++ b/editor/icons/NodeDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="#919191"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5" fill="none" stroke="#919191" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeInfo.svg b/editor/icons/NodeInfo.svg index 732bccf0d0..81fa0aba07 100644 --- a/editor/icons/NodeInfo.svg +++ b/editor/icons/NodeInfo.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 4h2v2H7zm0 3h2v5H7z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 4h2v2H7zm0 3h2v5H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodePath.svg b/editor/icons/NodePath.svg index 2d3153372f..0773476995 100644 --- a/editor/icons/NodePath.svg +++ b/editor/icons/NodePath.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 2v8h2V8a3 3 0 0 0 0-6zm6 0v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V6h2V4H8V2zm5 0v8h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3V2zM2 4a1 1 0 0 1 0 2z" fill="#417aec"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#417aec" d="M0 2v8h2V8a3 3 0 0 0 0-6zm6 0v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V6h2V4H8V2zm5 0v8h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3V2zM2 4a1 1 0 0 1 0 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeWarning.svg b/editor/icons/NodeWarning.svg index 1f7b9004ba..051f28dd46 100644 --- a/editor/icons/NodeWarning.svg +++ b/editor/icons/NodeWarning.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" fill="#ffdd65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffdd65" d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeWarnings2.svg b/editor/icons/NodeWarnings2.svg index ea2b3b0072..6b8c0ddde3 100644 --- a/editor/icons/NodeWarnings2.svg +++ b/editor/icons/NodeWarnings2.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0v16h16V8.24A3 3 0 0 1 11 6V0z" fill="#fff"/></mask><path d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" fill="#ffdd65" mask="url(#a)"/><path d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z" fill="#f95252"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fff" d="M0 0v16h16V8.24A3 3 0 0 1 11 6V0z"/></mask><path fill="#ffdd65" d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" mask="url(#a)"/><path fill="#f95252" d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeWarnings3.svg b/editor/icons/NodeWarnings3.svg index b6804d59ba..77ad1d093e 100644 --- a/editor/icons/NodeWarnings3.svg +++ b/editor/icons/NodeWarnings3.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0v16h16v-3.76A3 3 0 0 1 11.77 8a3 3 0 0 1 0-4V0z" fill="#fff"/></mask><path d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" fill="#ffdd65" mask="url(#a)"/><path d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z" fill="#f95252"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fff" d="M0 0v16h16v-3.76A3 3 0 0 1 11.77 8a3 3 0 0 1 0-4V0z"/></mask><path fill="#ffdd65" d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" mask="url(#a)"/><path fill="#f95252" d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NodeWarnings4Plus.svg b/editor/icons/NodeWarnings4Plus.svg index 4a7afe590a..79ec2d8752 100644 --- a/editor/icons/NodeWarnings4Plus.svg +++ b/editor/icons/NodeWarnings4Plus.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0v16h11.77a3 3 0 0 1 0-4 3 3 0 0 1 0-4 3 3 0 0 1 0-4V0z" fill="#fff"/></mask><path d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" fill="#ffdd65" mask="url(#a)"/><path d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z" fill="#f95252"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fff" d="M0 0v16h11.77a3 3 0 0 1 0-4 3 3 0 0 1 0-4 3 3 0 0 1 0-4V0z"/></mask><path fill="#ffdd65" d="M8 2a1 1 0 0 0-.85.484l-6 10A1 1 0 0 0 2 14h12a1 1 0 0 0 .857-1.514l-6-10a1 1 0 0 0-.85-.484zM7 5h2v5H7zm0 6h2v2H7z" mask="url(#a)"/><path fill="#f95252" d="M14 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm1.447 4.621a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0zm0 4a3 3 0 0 1-2.892 0 2 2 0 1 0 2.892 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NonFavorite.svg b/editor/icons/NonFavorite.svg index dc52338369..8743ab418c 100644 --- a/editor/icons/NonFavorite.svg +++ b/editor/icons/NonFavorite.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.725 5.625 5.822 1 6.92l3.236 3.406L3.876 15l4.14-1.977 4.158 1.942-.397-4.652L15 6.92l-4.625-1.098L8 1.725zM8 4l1.658 2.777 3.233.744-2.25 2.301.275 3.155-2.904-1.317L5.119 13l.252-3.168-2.262-2.31 3.233-.745L8 4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1.725 5.625 5.822 1 6.92l3.236 3.406L3.876 15l4.14-1.977 4.158 1.942-.397-4.652L15 6.92l-4.625-1.098L8 1.725zM8 4l1.658 2.777 3.233.744-2.25 2.301.275 3.155-2.904-1.317L5.119 13l.252-3.168-2.262-2.31 3.233-.745L8 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Notification.svg b/editor/icons/Notification.svg index 5849a60144..939214c303 100644 --- a/editor/icons/Notification.svg +++ b/editor/icons/Notification.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.755 1.795a3 3 0 0 0-4.061 1.517L4.968 6.919s-.864 1.804-1.668 1.3a1 1 0 0 0-.958 2l9.02 4.318a1 1 0 0 0 .957-2c-.902-.432-.038-2.236-.038-2.236l1.727-3.608a3 3 0 0 0-1.41-4 1 1 0 0 0-1.843-.898zM7 13a1.352 1.352 0 1 0 2.438 1.167z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none"><path fill="#e0e0e0" d="M10.755 1.795a3 3 0 0 0-4.061 1.517L4.968 6.919s-.864 1.804-1.668 1.3a1 1 0 0 0-.958 2l9.02 4.318a1 1 0 0 0 .957-2c-.902-.432-.038-2.236-.038-2.236l1.727-3.608a3 3 0 0 0-1.41-4 1 1 0 0 0-1.843-.898zM7 13a1.352 1.352 0 1 0 2.438 1.167z"/></svg>
\ No newline at end of file diff --git a/editor/icons/NotificationDisabled.svg b/editor/icons/NotificationDisabled.svg index f81be947f6..6852a4499e 100644 --- a/editor/icons/NotificationDisabled.svg +++ b/editor/icons/NotificationDisabled.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M13.5 1H1v10.5zm-11 14H15V4.5z" fill="#fff"/></mask><path d="M10.755 1.795a3 3 0 0 0-4.061 1.517L4.968 6.919s-.864 1.804-1.668 1.3a1 1 0 0 0-.958 2l9.02 4.318a1 1 0 0 0 .957-2c-.902-.432-.038-2.236-.038-2.236l1.727-3.608a3 3 0 0 0-1.41-4 1 1 0 0 0-1.843-.898zM7 13a1.352 1.352 0 1 0 2.438 1.167z" fill="#e0e0e0" mask="url(#a)"/><path d="M2 13 14 3" stroke-linecap="round" stroke-width="2" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none"><mask id="a"><path fill="#fff" d="M13.5 1H1v10.5zm-11 14H15V4.5z"/></mask><path fill="#e0e0e0" d="M10.755 1.795a3 3 0 0 0-4.061 1.517L4.968 6.919s-.864 1.804-1.668 1.3a1 1 0 0 0-.958 2l9.02 4.318a1 1 0 0 0 .957-2c-.902-.432-.038-2.236-.038-2.236l1.727-3.608a3 3 0 0 0-1.41-4 1 1 0 0 0-1.843-.898zM7 13a1.352 1.352 0 1 0 2.438 1.167z" mask="url(#a)"/><path stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M2 13 14 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/ORMMaterial3D.svg b/editor/icons/ORMMaterial3D.svg index a70c44fe7d..99b8bee60a 100644 --- a/editor/icons/ORMMaterial3D.svg +++ b/editor/icons/ORMMaterial3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.75 3.375 4 5.25l3.75 1.875L11.5 5.25z" fill="#80ff45"/><path d="M3.375 6.5v3.75L7 12.063v-3.75z" fill="#ff4545"/><path d="M12.125 6.5 8.5 8.313v3.75l3.625-1.813z" fill="#45d7ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#80ff45" d="M7.75 3.375 4 5.25l3.75 1.875L11.5 5.25z"/><path fill="#ff4545" d="M3.375 6.5v3.75L7 12.063v-3.75z"/><path fill="#45d7ff" d="M12.125 6.5 8.5 8.313v3.75l3.625-1.813z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Object.svg b/editor/icons/Object.svg index 2578fbed40..1fd1b109f1 100644 --- a/editor/icons/Object.svg +++ b/editor/icons/Object.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.553 4.104A1 1 0 0 0 1 5v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 15 11V5a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zm6.447-1 3.764 1.882L8 6.868 4.236 4.986zm-5 3.5 4 2v3.766l-4-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1.553 4.104A1 1 0 0 0 1 5v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 15 11V5a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zm6.447-1 3.764 1.882L8 6.868 4.236 4.986zm-5 3.5 4 2v3.766l-4-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ObjectDisabled.svg b/editor/icons/ObjectDisabled.svg index 7388a97910..75f483e815 100644 --- a/editor/icons/ObjectDisabled.svg +++ b/editor/icons/ObjectDisabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.553 4.104A1 1 0 0 0 1 5v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 15 11V5a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zm6.447-1 3.764 1.882L8 6.868 4.236 4.986zm-5 3.5 4 2v3.766l-4-2z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M1.553 4.104A1 1 0 0 0 1 5v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 15 11V5a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zm6.447-1 3.764 1.882L8 6.868 4.236 4.986zm-5 3.5 4 2v3.766l-4-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Occluder3D.svg b/editor/icons/Occluder3D.svg index 5cdcb899e6..e8d2cccd4d 100644 --- a/editor/icons/Occluder3D.svg +++ b/editor/icons/Occluder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8.242 2a4.5 4.5 0 0 1 .729 2h2.3a2 2 0 0 0 .729.73v5.856L8.307 6.893a4.5 4.5 0 0 1-1.414 1.414L10.586 12H4.729A2 2 0 0 0 4 11.27V8.965a4.5 4.5 0 0 1-2-.729v3.035A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M8.242 2a4.5 4.5 0 0 1 .729 2h2.3a2 2 0 0 0 .729.73v5.856L8.307 6.893a4.5 4.5 0 0 1-1.414 1.414L10.586 12H4.729A2 2 0 0 0 4 11.27V8.965a4.5 4.5 0 0 1-2-.729v3.035A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OccluderInstance3D.svg b/editor/icons/OccluderInstance3D.svg index d3064e7091..c0f10e0a23 100644 --- a/editor/icons/OccluderInstance3D.svg +++ b/editor/icons/OccluderInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.607 1.139A4.5 4.5 0 1 1 1.141 6.61a7 7 0 1 0 5.466-5.47z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6.607 1.139A4.5 4.5 0 1 1 1.141 6.61a7 7 0 1 0 5.466-5.47z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OccluderPolygon2D.svg b/editor/icons/OccluderPolygon2D.svg index e30590b199..f282360565 100644 --- a/editor/icons/OccluderPolygon2D.svg +++ b/editor/icons/OccluderPolygon2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 9 6 6h8V7L9 1H1z" fill="#8da5f3"/><path d="m9 1 6 6v8H7L1 9h8L6 5z" fill-opacity=".235"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m1 9 6 6h8V7L9 1H1z"/><path fill-opacity=".235" d="m9 1 6 6v8H7L1 9h8L6 5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OmniLight3D.svg b/editor/icons/OmniLight3D.svg index b9f4d9635b..004ada837e 100644 --- a/editor/icons/OmniLight3D.svg +++ b/editor/icons/OmniLight3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6zM7 14v1h2v-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6zM7 14v1h2v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OneWayTile.svg b/editor/icons/OneWayTile.svg index a095ce9230..1cc5838f0a 100644 --- a/editor/icons/OneWayTile.svg +++ b/editor/icons/OneWayTile.svg @@ -1 +1 @@ -<svg height="16" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10.959 1.5 8.002 4.436 5.043 1.502 4 2.529 8 6.5l4-3.967zm0 8-2.957 2.936-2.959-2.934L4 10.529 8 14.5l4-3.967z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" stroke-linecap="round" stroke-linejoin="round"><path fill="#fff" d="M10.959 1.5 8.002 4.436 5.043 1.502 4 2.529 8 6.5l4-3.967zm0 8-2.957 2.936-2.959-2.934L4 10.529 8 14.5l4-3.967z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Onion.svg b/editor/icons/Onion.svg index bbe66af020..274c178568 100644 --- a/editor/icons/Onion.svg +++ b/editor/icons/Onion.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1C6 3 1 5 1 9s3 6 7 6C1 12 1.4 7.25 8 2c-2.25 4-5.5 9 0 13 5-4.25 2.75-8.25 1-12 5.5 4.75 5.5 8.75-1 12 4 0 7-2 7-6s-5-6-7-8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1C6 3 1 5 1 9s3 6 7 6C1 12 1.4 7.25 8 2c-2.25 4-5.5 9 0 13 5-4.25 2.75-8.25 1-12 5.5 4.75 5.5 8.75-1 12 4 0 7-2 7-6s-5-6-7-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OptionButton.svg b/editor/icons/OptionButton.svg index 42abe88762..663e475916 100644 --- a/editor/icons/OptionButton.svg +++ b/editor/icons/OptionButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm7.293 3.307a1 1 0 0 1 1.424 1.414l-3 3a1 1 0 0 1-1.414 0l-3-3a1 1 0 0 1 1.414-1.414L8 8.6z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm7.293 3.307a1 1 0 0 1 1.424 1.414l-3 3a1 1 0 0 1-1.414 0l-3-3a1 1 0 0 1 1.414-1.414L8 8.6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/OverbrightIndicator.svg b/editor/icons/OverbrightIndicator.svg index 35ad59fbfb..a8eea32f2b 100644 --- a/editor/icons/OverbrightIndicator.svg +++ b/editor/icons/OverbrightIndicator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m.5.5v10l10-10z" fill="#fff" stroke="#000000"/><path d="m0 12 12-12h-1.714286l-10.285714 10.285714z" fill="#000003" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#000" d="m.5.5v10l10-10z"/><path fill="#000003" d="m0 12 12-12h-1.714286l-10.285714 10.285714z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Override.svg b/editor/icons/Override.svg index cfa9313d8e..a09c0c5e0d 100644 --- a/editor/icons/Override.svg +++ b/editor/icons/Override.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.108 0-2 .89199-2 2v1h4v-1h2v1h4v-1c0-1.108-.89199-2-2-2zm-2 5c-1.108 0-2 .89199-2 2v5c0 1.108.89199 2 2 2h10c1.108 0 2-.89199 2-2v-5c0-1.108-.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m5 1c-1.108 0-2 .89199-2 2v1h4v-1h2v1h4v-1c0-1.108-.89199-2-2-2zm-2 5c-1.108 0-2 .89199-2 2v5c0 1.108.89199 2 2 2h10c1.108 0 2-.89199 2-2v-5c0-1.108-.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedByteArray.svg b/editor/icons/PackedByteArray.svg index d7fa7fcfc5..df53aa6726 100644 --- a/editor/icons/PackedByteArray.svg +++ b/editor/icons/PackedByteArray.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M5 3a3 3 0 0 0-3 3v3h2V6a1 1 0 0 1 1-1h1v4h2a3 3 0 0 0 1-.176V9h2a3 3 0 0 0 3-3V3h-2v3a1 1 0 0 1-1 1V3H9v3a1 1 0 0 1-1 1V3z" fill="#5fff97"/><path d="M6 9V3h2v4a1 1 0 0 0 1-1V3h2v4a1 1 0 0 0 1-1V3h2v3a3 3 0 0 1-3 3H9v-.176A3 3 0 0 1 8 9z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#5fff97" d="M5 3a3 3 0 0 0-3 3v3h2V6a1 1 0 0 1 1-1h1v4h2a3 3 0 0 0 1-.176V9h2a3 3 0 0 0 3-3V3h-2v3a1 1 0 0 1-1 1V3H9v3a1 1 0 0 1-1 1V3z"/><path fill="#fff" fill-opacity=".4" d="M6 9V3h2v4a1 1 0 0 0 1-1V3h2v4a1 1 0 0 0 1-1V3h2v3a3 3 0 0 1-3 3H9v-.176A3 3 0 0 1 8 9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedColorArray.svg b/editor/icons/PackedColorArray.svg index 9f9616ea5c..f85196ada4 100644 --- a/editor/icons/PackedColorArray.svg +++ b/editor/icons/PackedColorArray.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M6 3.5a3 3 0 0 0 0 6h1v-2H6a1 1 0 0 1 0-2h1v-2z" fill="#ff4545"/><path d="M7 1.5v5a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1v-5z" fill="#80ff45"/><path d="M13 3.5a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1z" fill="#45d7ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#ff4545" d="M6 3.5a3 3 0 0 0 0 6h1v-2H6a1 1 0 0 1 0-2h1v-2z"/><path fill="#80ff45" d="M7 1.5v5a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1v-5z"/><path fill="#45d7ff" d="M13 3.5a3 3 0 0 0-3 3v3h2v-3a1 1 0 0 1 1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedDataContainer.svg b/editor/icons/PackedDataContainer.svg index 12d3cfc9b5..87789e3a56 100644 --- a/editor/icons/PackedDataContainer.svg +++ b/editor/icons/PackedDataContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v10H3zm1 1v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM4 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm-6 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v10H3zm1 1v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM4 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm-6 3v2h2v-2zm3 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedFloat32Array.svg b/editor/icons/PackedFloat32Array.svg index da6433f909..305e1ef5a3 100644 --- a/editor/icons/PackedFloat32Array.svg +++ b/editor/icons/PackedFloat32Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M6 2a3 3 0 0 0-3 3v5h2V8h1V6H5V5a1 1 0 0 1 1-1zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zm3 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z" fill="#35d4f4"/><path d="M7 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#35d4f4" d="M6 2a3 3 0 0 0-3 3v5h2V8h1V6H5V5a1 1 0 0 1 1-1zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zm3 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z"/><path fill="#fff" fill-opacity=".4" d="M7 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedFloat64Array.svg b/editor/icons/PackedFloat64Array.svg index da6433f909..305e1ef5a3 100644 --- a/editor/icons/PackedFloat64Array.svg +++ b/editor/icons/PackedFloat64Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M6 2a3 3 0 0 0-3 3v5h2V8h1V6H5V5a1 1 0 0 1 1-1zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zm3 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z" fill="#35d4f4"/><path d="M7 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#35d4f4" d="M6 2a3 3 0 0 0-3 3v5h2V8h1V6H5V5a1 1 0 0 1 1-1zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zm3 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z"/><path fill="#fff" fill-opacity=".4" d="M7 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedInt32Array.svg b/editor/icons/PackedInt32Array.svg index 018fc23723..18404c6af6 100644 --- a/editor/icons/PackedInt32Array.svg +++ b/editor/icons/PackedInt32Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M3 2v2h2V2zm2 2v2H3v4h4V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2h-2z" fill="#5abbef"/><path d="M5 4v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#5abbef" d="M3 2v2h2V2zm2 2v2H3v4h4V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2h-2z"/><path fill="#fff" fill-opacity=".4" d="M5 4v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedInt64Array.svg b/editor/icons/PackedInt64Array.svg index 018fc23723..18404c6af6 100644 --- a/editor/icons/PackedInt64Array.svg +++ b/editor/icons/PackedInt64Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M3 2v2h2V2zm2 2v2H3v4h4V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2h-2z" fill="#5abbef"/><path d="M5 4v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#5abbef" d="M3 2v2h2V2zm2 2v2H3v4h4V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2h-2z"/><path fill="#fff" fill-opacity=".4" d="M5 4v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedScene.svg b/editor/icons/PackedScene.svg index 935c159dfe..d7ffd1bc4b 100644 --- a/editor/icons/PackedScene.svg +++ b/editor/icons/PackedScene.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h12V7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h12V7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedStringArray.svg b/editor/icons/PackedStringArray.svg index 7d4b685547..cbc2b8ee72 100644 --- a/editor/icons/PackedStringArray.svg +++ b/editor/icons/PackedStringArray.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M5 2a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H2v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3v3a3 3 0 0 0 3 3h2V7a1 1 0 0 1 1-1V4a3 3 0 0 0-3 3v1a1 1 0 0 1-1-1V6h1V4h-1V2z" fill="#4593ec"/><path d="M8 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#4593ec" d="M5 2a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H2v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3v3a3 3 0 0 0 3 3h2V7a1 1 0 0 1 1-1V4a3 3 0 0 0-3 3v1a1 1 0 0 1-1-1V6h1V4h-1V2z"/><path fill="#fff" fill-opacity=".4" d="M8 2v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedVector2Array.svg b/editor/icons/PackedVector2Array.svg index bf502f4868..fa25fb62bb 100644 --- a/editor/icons/PackedVector2Array.svg +++ b/editor/icons/PackedVector2Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M9 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6zM3 3v6h2a3 3 0 0 0 3-3V3H6v3a1 1 0 0 1-1 1V3z" fill="#ac73f1"/><path d="M9 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#ac73f1" d="M9 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6zM3 3v6h2a3 3 0 0 0 3-3V3H6v3a1 1 0 0 1-1 1V3z"/><path fill="#fff" fill-opacity=".4" d="M9 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedVector3Array.svg b/editor/icons/PackedVector3Array.svg index 9f4df41008..6f44ef63ee 100644 --- a/editor/icons/PackedVector3Array.svg +++ b/editor/icons/PackedVector3Array.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z" fill="#e0e0e0"/><path d="M8 1v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 3V1zm0 2H6v3a1 1 0 0 1-1 1V3H3v6h2a3 3 0 0 0 3-3z" fill="#de66f0"/><path d="M8 1v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 3V1z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="M0 0v12h4v-2H2V2h2V0zm12 0v2h2v8h-2v2h4V0z"/><path fill="#de66f0" d="M8 1v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 3V1zm0 2H6v3a1 1 0 0 1-1 1V3H3v6h2a3 3 0 0 0 3-3z"/><path fill="#fff" fill-opacity=".4" d="M8 1v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 3V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PackedVector4Array.svg b/editor/icons/PackedVector4Array.svg index 3b550c6005..d12eb59aed 100644 --- a/editor/icons/PackedVector4Array.svg +++ b/editor/icons/PackedVector4Array.svg @@ -1 +1 @@ -<svg width="16" height="12" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="M8 3h2v2h1v-3h2v8h-2v-3h-3zM3 3v6h2a3 3 0 003-3v-3h-2v3a1 1 0 01-1 1v-4z" fill="#ac73f1"/><path d="M8 3h2v2h1v-3h2v8h-2v-3h-3z" fill="#fff" fill-opacity=".3922"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#e0e0e0" d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z"/><path fill="#ac73f1" d="M8 3h2v2h1v-3h2v8h-2v-3h-3zM3 3v6h2a3 3 0 003-3v-3h-2v3a1 1 0 01-1 1v-4z"/><path fill="#fff" fill-opacity=".392" d="M8 3h2v2h1v-3h2v8h-2v-3h-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PageFirst.svg b/editor/icons/PageFirst.svg index 59088486c3..3f75438050 100644 --- a/editor/icons/PageFirst.svg +++ b/editor/icons/PageFirst.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M6 3 3 6l3 3m3-6v6" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 3 3 6l3 3m3-6v6"/></svg>
\ No newline at end of file diff --git a/editor/icons/PageLast.svg b/editor/icons/PageLast.svg index fc154cf7f2..64a68123ba 100644 --- a/editor/icons/PageLast.svg +++ b/editor/icons/PageLast.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m6 9 3-3-3-3M3 9V3" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke="#e0e0e0" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9 3-3-3-3M3 9V3"/></svg>
\ No newline at end of file diff --git a/editor/icons/PageNext.svg b/editor/icons/PageNext.svg index b76b80898f..b0097516a5 100644 --- a/editor/icons/PageNext.svg +++ b/editor/icons/PageNext.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m4.5 9 3-3-3-3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m4.5 9 3-3-3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/PagePrevious.svg b/editor/icons/PagePrevious.svg index d83a4a9fff..9aecb27c63 100644 --- a/editor/icons/PagePrevious.svg +++ b/editor/icons/PagePrevious.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m7.5 3-3 3 3 3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7.5 3-3 3 3 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/Paint.svg b/editor/icons/Paint.svg index eb0c621296..51dc521acb 100644 --- a/editor/icons/Paint.svg +++ b/editor/icons/Paint.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.92 10c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.3-1.64 2.4 2.4 6.8-6.8a1.7 1.7 0 0 0-2.4-2.45z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2.92 10c-.263.3-.42.73-.42 1.238 0 1.628-3.138-.178-.337 2.67.884.9 2.654.67 3.538-.228a2.33 2.33 0 0 0 0-3.256c-1.1-1.119-2.2-1.084-2.78-.424zm2.3-1.64 2.4 2.4 6.8-6.8a1.7 1.7 0 0 0-2.4-2.45z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panel.svg b/editor/icons/Panel.svg index d39c1a8662..ae03c52da3 100644 --- a/editor/icons/Panel.svg +++ b/editor/icons/Panel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" height="14" width="14" rx="2" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#8eef97" rx="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/PanelContainer.svg b/editor/icons/PanelContainer.svg index 7786778396..a1bc05b39a 100644 --- a/editor/icons/PanelContainer.svg +++ b/editor/icons/PanelContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels1.svg b/editor/icons/Panels1.svg index a6fc65a6a5..33a511a22b 100644 --- a/editor/icons/Panels1.svg +++ b/editor/icons/Panels1.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0h16v16h-16z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels2.svg b/editor/icons/Panels2.svg index 620a2c41c3..2621c36c57 100644 --- a/editor/icons/Panels2.svg +++ b/editor/icons/Panels2.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h16v-7zm0 9v7h16v-7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0v7h16v-7zm0 9v7h16v-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels2Alt.svg b/editor/icons/Panels2Alt.svg index 8d76c78552..0a6c6b6c04 100644 --- a/editor/icons/Panels2Alt.svg +++ b/editor/icons/Panels2Alt.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v16h7v-16zm9 0v16h7v-16z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0v16h7v-16zm9 0v16h7v-16z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels3.svg b/editor/icons/Panels3.svg index 1155b5b217..5ee8b7f120 100644 --- a/editor/icons/Panels3.svg +++ b/editor/icons/Panels3.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h16v-7zm0 9v7h7v-7zm9 0v7h7v-7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0v7h16v-7zm0 9v7h7v-7zm9 0v7h7v-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels3Alt.svg b/editor/icons/Panels3Alt.svg index 3ab3b19106..dc373c6fc5 100644 --- a/editor/icons/Panels3Alt.svg +++ b/editor/icons/Panels3Alt.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h7v-7zm9 0v16h7v-16zm-9 9v7h7v-7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0v7h7v-7zm9 0v16h7v-16zm-9 9v7h7v-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Panels4.svg b/editor/icons/Panels4.svg index 3b12eae80a..e0ff57de4d 100644 --- a/editor/icons/Panels4.svg +++ b/editor/icons/Panels4.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h7v-7zm9 0v7h7v-7zm-9 9v7h7v-7zm9 0v7h7v-7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m0 0v7h7v-7zm9 0v7h7v-7zm-9 9v7h7v-7zm9 0v7h7v-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PanoramaSkyMaterial.svg b/editor/icons/PanoramaSkyMaterial.svg index d230ba5820..1ae40e3df5 100644 --- a/editor/icons/PanoramaSkyMaterial.svg +++ b/editor/icons/PanoramaSkyMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1 2q7 4 14 0v12q-7-4-14 0zm2 7a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm8 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H9a1 1 0 0 0 0 2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1 2q7 4 14 0v12q-7-4-14 0zm2 7a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm8 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H9a1 1 0 0 0 0 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Parallax2D.svg b/editor/icons/Parallax2D.svg index 8d41102a86..86a8cc61cd 100644 --- a/editor/icons/Parallax2D.svg +++ b/editor/icons/Parallax2D.svg @@ -1 +1 @@ -<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-10a2 2 0 00-2-2zm10 2v10h-10v-10zM7 5v6l-3-3zm2 0v6l3-3z" fill="#8da5f3"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m3 1a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-10a2 2 0 00-2-2zm10 2v10h-10v-10zM7 5v6l-3-3zm2 0v6l3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ParallaxBackground.svg b/editor/icons/ParallaxBackground.svg index d1badf5fe5..f2aa449dc4 100644 --- a/editor/icons/ParallaxBackground.svg +++ b/editor/icons/ParallaxBackground.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1.5" y="1.5" width="13" height="13" rx="1" fill="none" stroke="#e0e0e0"/><path d="M7 5v6L4 8zm2 0v6l3-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="13" height="13" x="1.5" y="1.5" fill="none" stroke="#e0e0e0" rx="1"/><path fill="#e0e0e0" d="M7 5v6L4 8zm2 0v6l3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ParallaxLayer.svg b/editor/icons/ParallaxLayer.svg index 06e6317746..1c3a3abd1b 100644 --- a/editor/icons/ParallaxLayer.svg +++ b/editor/icons/ParallaxLayer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm4 4v6L4 8zm2 0 3 3-3 3z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm4 4v6L4 8zm2 0 3 3-3 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ParticleProcessMaterial.svg b/editor/icons/ParticleProcessMaterial.svg index 530c459335..cff26a458f 100644 --- a/editor/icons/ParticleProcessMaterial.svg +++ b/editor/icons/ParticleProcessMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M12 11a3 3 0 0 0 .414-5.969 4.5 5 0 0 0-8.824 0 3 3 0 0 0 .414 5.967zm-8 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm8 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-4 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Path2D.svg b/editor/icons/Path2D.svg index c8ae7433d2..481e23c38e 100644 --- a/editor/icons/Path2D.svg +++ b/editor/icons/Path2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 1a2 2 0 0 0-1.15 3.633c-.193.885-.554 1.34-.987 1.642-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c.892-.625 1.532-1.654 1.818-3.098A2 2 0 0 0 13 1z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M13 1a2 2 0 0 0-1.15 3.633c-.193.885-.554 1.34-.987 1.642-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c.892-.625 1.532-1.654 1.818-3.098A2 2 0 0 0 13 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Path3D.svg b/editor/icons/Path3D.svg index 7d47e834e9..5f973c81b3 100644 --- a/editor/icons/Path3D.svg +++ b/editor/icons/Path3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 1a2 2 0 0 0-1.15 3.633c-.193.885-.554 1.34-.987 1.642-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c.892-.625 1.532-1.654 1.818-3.098A2 2 0 0 0 13 1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M13 1a2 2 0 0 0-1.15 3.633c-.193.885-.554 1.34-.987 1.642-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c.892-.625 1.532-1.654 1.818-3.098A2 2 0 0 0 13 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PathFollow2D.svg b/editor/icons/PathFollow2D.svg index ffb3fa3f57..7c9decc909 100644 --- a/editor/icons/PathFollow2D.svg +++ b/editor/icons/PathFollow2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 0-3 4h1.947c-.138 1.32-.558 1.907-1.084 2.275-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c1.053-.737 1.755-2.032 1.937-3.914H16l-3-4z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m13 0-3 4h1.947c-.138 1.32-.558 1.907-1.084 2.275-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c1.053-.737 1.755-2.032 1.937-3.914H16l-3-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PathFollow3D.svg b/editor/icons/PathFollow3D.svg index 5468d2dfc4..94bca801f6 100644 --- a/editor/icons/PathFollow3D.svg +++ b/editor/icons/PathFollow3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 0-3 4h1.947c-.138 1.32-.558 1.907-1.084 2.275-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c1.053-.737 1.755-2.032 1.937-3.914H16l-3-4z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m13 0-3 4h1.947c-.138 1.32-.558 1.907-1.084 2.275-.644.451-1.713.606-2.963.73s-2.681.221-3.912 1.083c-.892.625-1.532 1.652-1.818 3.096a2 2 0 1 0 1.98.183c.193-.885.553-1.337.987-1.64.644-.451 1.713-.606 2.963-.73s2.681-.221 3.912-1.083c1.053-.737 1.755-2.032 1.937-3.914H16l-3-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Pause.svg b/editor/icons/Pause.svg index c97799fa96..2906917909 100644 --- a/editor/icons/Pause.svg +++ b/editor/icons/Pause.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm6 0a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm6 0a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Performance.svg b/editor/icons/Performance.svg index 71af7790cf..4029b5b052 100644 --- a/editor/icons/Performance.svg +++ b/editor/icons/Performance.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 12.533-1.5 1.5a6.375 6.375 0 1 1 9 0l-1.5-1.5M2 9.5h2m10 0h-2M3.5 4.967l1.5 1.5m7.5-1.5-1.5 1.5M8 3.52v2" fill="none" stroke="#e0e0e0" stroke-width="1.25"/><path d="M7.125 8.93a1.033 1.033 0 1 0 1.867.716l.478-3.03-.672-.258z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-width="1.25" d="m5 12.533-1.5 1.5a6.375 6.375 0 1 1 9 0l-1.5-1.5M2 9.5h2m10 0h-2M3.5 4.967l1.5 1.5m7.5-1.5-1.5 1.5M8 3.52v2"/><path fill="#e0e0e0" d="M7.125 8.93a1.033 1.033 0 1 0 1.867.716l.478-3.03-.672-.258z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PhysicalBone2D.svg b/editor/icons/PhysicalBone2D.svg index b236d3eaaf..496b03d1d8 100644 --- a/editor/icons/PhysicalBone2D.svg +++ b/editor/icons/PhysicalBone2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10.478 1a2.466 2.466 0 0 0-1.9.878L10.15 4.15l-1.766.674-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1zm-9.32 1.77.96 4.827 1.397-.525zm2.763-1.743.961 4.827 1.396-.525zM7.133.899l.711 3.514 1.397-.525z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M10.478 1a2.466 2.466 0 0 0-1.9.878L10.15 4.15l-1.766.674-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1zm-9.32 1.77.96 4.827 1.397-.525zm2.763-1.743.961 4.827 1.396-.525zM7.133.899l.711 3.514 1.397-.525z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PhysicalBone3D.svg b/editor/icons/PhysicalBone3D.svg index 51b6077c95..0fedcffd46 100644 --- a/editor/icons/PhysicalBone3D.svg +++ b/editor/icons/PhysicalBone3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10.478 1a2.466 2.466 0 0 0-1.9.878L10.15 4.15l-1.766.674-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1zm-9.32 1.77.96 4.827 1.397-.525zm2.763-1.743.961 4.827 1.396-.525zM7.133.899l.711 3.514 1.397-.525z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M10.478 1a2.466 2.466 0 0 0-1.9.878L10.15 4.15l-1.766.674-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l3.56-3.56a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1zm-9.32 1.77.96 4.827 1.397-.525zm2.763-1.743.961 4.827 1.396-.525zM7.133.899l.711 3.514 1.397-.525z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PhysicalBoneSimulator3D.svg b/editor/icons/PhysicalBoneSimulator3D.svg index 583c377328..dcbf64cc11 100644 --- a/editor/icons/PhysicalBoneSimulator3D.svg +++ b/editor/icons/PhysicalBoneSimulator3D.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 16 16" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m15.209 5.934c-.018.574-.181 1.149-.521 1.662-.594.891-1.588 1.424-2.661 1.424-.343 0-.681-.055-1.002-.162l-2.169 2.169c.061.185.104.374.132.565.117.844-.102 1.684-.616 2.363-.515.681-1.263 1.12-2.107 1.236-.113.016-.224.02-.335.023.469.557 1.201.872 1.975.765 1.2-.167 2.036-1.274 1.87-2.473-.045-.326-.163-.639-.346-.913l3.164-3.163c1.008.67 2.369.396 3.039-.612.625-.939.422-2.176-.423-2.884z"/><path d="m13.452 4.173c-.005.599-.173 1.204-.529 1.738-.593.893-1.588 1.426-2.66 1.426-.344 0-.682-.055-1.003-.162l-2.169 2.169c.062.185.105.374.132.565.118.844-.101 1.684-.615 2.363-.514.681-1.262 1.12-2.107 1.237-.09.013-.179.014-.269.019.47.5 1.165.774 1.896.673 1.2-.166 2.037-1.274 1.87-2.472-.045-.327-.164-.64-.346-.913l3.165-3.164c1.008.67 2.368.396 3.039-.612.619-.931.423-2.157-.404-2.867z"/><path d="m8.432.09c-.651-.004-1.27.283-1.689.78l1.397 2.02-1.57.6-3.164 3.163c-1.008-.67-2.369-.396-3.039.612-.67 1.007-.396 2.369.611 3.039.274.183.586.301.912.346.167 1.199 1.274 2.036 2.473 1.87 1.199-.167 2.036-1.274 1.869-2.473-.044-.326-.163-.639-.345-.913l3.164-3.164c1.008.67 2.369.396 3.039-.612.671-1.008.397-2.368-.61-3.039-.274-.182-.587-.3-.913-.345-.152-1.068-1.056-1.867-2.135-1.884zm-8.285 1.573.854 4.291 1.242-.467zm2.457-1.549.854 4.291 1.241-.466zm2.854-.114.632 3.124 1.242-.466z"/></g></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fc7f7f"><path d="m15.209 5.934c-.018.574-.181 1.149-.521 1.662-.594.891-1.588 1.424-2.661 1.424-.343 0-.681-.055-1.002-.162l-2.169 2.169c.061.185.104.374.132.565.117.844-.102 1.684-.616 2.363-.515.681-1.263 1.12-2.107 1.236-.113.016-.224.02-.335.023.469.557 1.201.872 1.975.765 1.2-.167 2.036-1.274 1.87-2.473-.045-.326-.163-.639-.346-.913l3.164-3.163c1.008.67 2.369.396 3.039-.612.625-.939.422-2.176-.423-2.884z"/><path d="m13.452 4.173c-.005.599-.173 1.204-.529 1.738-.593.893-1.588 1.426-2.66 1.426-.344 0-.682-.055-1.003-.162l-2.169 2.169c.062.185.105.374.132.565.118.844-.101 1.684-.615 2.363-.514.681-1.262 1.12-2.107 1.237-.09.013-.179.014-.269.019.47.5 1.165.774 1.896.673 1.2-.166 2.037-1.274 1.87-2.472-.045-.327-.164-.64-.346-.913l3.165-3.164c1.008.67 2.368.396 3.039-.612.619-.931.423-2.157-.404-2.867z"/><path d="m8.432.09c-.651-.004-1.27.283-1.689.78l1.397 2.02-1.57.6-3.164 3.163c-1.008-.67-2.369-.396-3.039.612-.67 1.007-.396 2.369.611 3.039.274.183.586.301.912.346.167 1.199 1.274 2.036 2.473 1.87 1.199-.167 2.036-1.274 1.869-2.473-.044-.326-.163-.639-.345-.913l3.164-3.164c1.008.67 2.369.396 3.039-.612.671-1.008.397-2.368-.61-3.039-.274-.182-.587-.3-.913-.345-.152-1.068-1.056-1.867-2.135-1.884zm-8.285 1.573.854 4.291 1.242-.467zm2.457-1.549.854 4.291 1.241-.466zm2.854-.114.632 3.124 1.242-.466z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/PhysicalSkyMaterial.svg b/editor/icons/PhysicalSkyMaterial.svg index 48763a5284..b15a6fe0b0 100644 --- a/editor/icons/PhysicalSkyMaterial.svg +++ b/editor/icons/PhysicalSkyMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1 3h14v10H1m2-4a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm8 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H9a1 1 0 0 0 0 2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1 3h14v10H1m2-4a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm8 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H9a1 1 0 0 0 0 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PhysicsMaterial.svg b/editor/icons/PhysicsMaterial.svg index bdb41a1d27..e9fe293b2c 100644 --- a/editor/icons/PhysicsMaterial.svg +++ b/editor/icons/PhysicsMaterial.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0"><path d="M14 8.5v4L8 15l-6-2.5v-4M8 11v4" stroke-opacity=".6" stroke-linejoin="round" stroke-width="2"/><path d="m8 6 6 2.5L8 11 2 8.5z" stroke-linejoin="round" stroke-width="2"/><path d="M3.5 2l1 1.8M8 1v2m4.5-1-1 1.8" stroke-linecap="round" stroke-width="1.75"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0"><path stroke-linejoin="round" stroke-opacity=".6" stroke-width="2" d="M14 8.5v4L8 15l-6-2.5v-4M8 11v4"/><path stroke-linejoin="round" stroke-width="2" d="m8 6 6 2.5L8 11 2 8.5z"/><path stroke-linecap="round" stroke-width="1.75" d="M3.5 2l1 1.8M8 1v2m4.5-1-1 1.8"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/PickerCursor.svg b/editor/icons/PickerCursor.svg index 9754a8a137..2eaad3c128 100644 --- a/editor/icons/PickerCursor.svg +++ b/editor/icons/PickerCursor.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.5" stroke="#fff" fill="none"/><circle cx="8" cy="8" r="4.5" stroke="#000" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.5" fill="none" stroke="#fff"/><circle cx="8" cy="8" r="4.5" fill="none" stroke="#000"/></svg>
\ No newline at end of file diff --git a/editor/icons/PickerShapeCircle.svg b/editor/icons/PickerShapeCircle.svg index 1f45259fc5..de104121c8 100644 --- a/editor/icons/PickerShapeCircle.svg +++ b/editor/icons/PickerShapeCircle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 2.5a5.5 5.5 0 0 0 0 11 5.5 5.5 0 0 0 0-11m6.5 0h2v11h-2z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eaeaea" d="M6.5 2.5a5.5 5.5 0 0 0 0 11 5.5 5.5 0 0 0 0-11m6.5 0h2v11h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PickerShapeRectangle.svg b/editor/icons/PickerShapeRectangle.svg index 4eb335758a..642b9f789d 100644 --- a/editor/icons/PickerShapeRectangle.svg +++ b/editor/icons/PickerShapeRectangle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M.5 2.5h11v11H.5zm12 0h2v11h-2z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eaeaea" d="M.5 2.5h11v11H.5zm12 0h2v11h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PickerShapeRectangleWheel.svg b/editor/icons/PickerShapeRectangleWheel.svg index 3b70538f1e..e46cc41402 100644 --- a/editor/icons/PickerShapeRectangleWheel.svg +++ b/editor/icons/PickerShapeRectangleWheel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.25" fill="none" stroke-width="1.75" stroke="#eaeaea"/><path d="M4.9 4.9h6.2v6.2H4.9z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.25" fill="none" stroke="#eaeaea" stroke-width="1.75"/><path fill="#eaeaea" d="M4.9 4.9h6.2v6.2H4.9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Pin.svg b/editor/icons/Pin.svg index 8e5935c42f..c20ffd5f19 100644 --- a/editor/icons/Pin.svg +++ b/editor/icons/Pin.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PinJoint2D.svg b/editor/icons/PinJoint2D.svg index b84ec93427..a1a873f841 100644 --- a/editor/icons/PinJoint2D.svg +++ b/editor/icons/PinJoint2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1.272-.707.707v1.414L6.172 5.516l4.242 4.242 2.121-2.121h1.414l.707-.707zm-3.535 4.95L1.93 6.93 9 14l.707-3.535zM4.05 10.466 2.636 11.88 1.93 14l2.12-.707 1.415-1.414z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m9 1.272-.707.707v1.414L6.172 5.516l4.242 4.242 2.121-2.121h1.414l.707-.707zm-3.535 4.95L1.93 6.93 9 14l.707-3.535zM4.05 10.466 2.636 11.88 1.93 14l2.12-.707 1.415-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PinJoint3D.svg b/editor/icons/PinJoint3D.svg index ee3601504c..593899f267 100644 --- a/editor/icons/PinJoint3D.svg +++ b/editor/icons/PinJoint3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1.272-.707.707v1.414L6.172 5.516l4.242 4.242 2.121-2.121h1.414l.707-.707zm-3.535 4.95L1.93 6.93 9 14l.707-3.535zM4.05 10.466 2.636 11.88 1.93 14l2.12-.707 1.415-1.414z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m9 1.272-.707.707v1.414L6.172 5.516l4.242 4.242 2.121-2.121h1.414l.707-.707zm-3.535 4.95L1.93 6.93 9 14l.707-3.535zM4.05 10.466 2.636 11.88 1.93 14l2.12-.707 1.415-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PinPressed.svg b/editor/icons/PinPressed.svg index 8e5935c42f..c20ffd5f19 100644 --- a/editor/icons/PinPressed.svg +++ b/editor/icons/PinPressed.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PingPongLoop.svg b/editor/icons/PingPongLoop.svg index 61578683f6..98bcb2705f 100644 --- a/editor/icons/PingPongLoop.svg +++ b/editor/icons/PingPongLoop.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 7H6V5L2 8l4 3V9h4v2l4-3-4-3zM0 1v14h2V1zm14 0v14h2V1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M10 7H6V5L2 8l4 3V9h4v2l4-3-4-3zM0 1v14h2V1zm14 0v14h2V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlaceholderMaterial.svg b/editor/icons/PlaceholderMaterial.svg index 3b5a803e05..9eda66246b 100644 --- a/editor/icons/PlaceholderMaterial.svg +++ b/editor/icons/PlaceholderMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><g stroke="url(#a)"><path stroke-linejoin="round" fill="none" stroke-width="2" d="M3 3h10v10H3z"/><path d="M7 5.5 5.5 7m5-1.5-5 5m5-1.5L9 10.5" stroke-linecap="round" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><g stroke="url(#a)"><path fill="none" stroke-linejoin="round" stroke-width="2" d="M3 3h10v10H3z"/><path stroke-linecap="round" stroke-width="1.5" d="M7 5.5 5.5 7m5-1.5-5 5m5-1.5L9 10.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/PlaceholderMesh.svg b/editor/icons/PlaceholderMesh.svg index c36156eb6f..df18b0d3ee 100644 --- a/editor/icons/PlaceholderMesh.svg +++ b/editor/icons/PlaceholderMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4z" fill="#ffca5f"/><path d="m7.25 5.25-2 2M10.5 5.5l-5 5m5.25-1.75-2 2" stroke-width="1.5" stroke-linecap="round" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M4.729 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.73 14h6.541a2 2 0 1 0 2.698-2.75H14V4.729A2 2 0 1 0 11.27 2H4.729zm6.542 2a2 2 0 0 0 .729.729v6.542a2 2 0 0 0-.729.729H4.729A2 2 0 0 0 4 11.271V4.729A2 2 0 0 0 4.729 4z"/><path stroke="#ffca5f" stroke-linecap="round" stroke-width="1.5" d="m7.25 5.25-2 2M10.5 5.5l-5 5m5.25-1.75-2 2"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlaceholderTexture2D.svg b/editor/icons/PlaceholderTexture2D.svg index 3e7a3754fe..2185844df5 100644 --- a/editor/icons/PlaceholderTexture2D.svg +++ b/editor/icons/PlaceholderTexture2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z" fill="#e0e0e0"/><path d="M7 4.25 4.25 7m6.5-2.75-5.5 5.5M11.75 7 9 9.75" stroke-width="1.5" stroke-linecap="round" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z"/><path stroke="#e0e0e0" stroke-linecap="round" stroke-width="1.5" d="M7 4.25 4.25 7m6.5-2.75-5.5 5.5M11.75 7 9 9.75"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlaceholderTexture3D.svg b/editor/icons/PlaceholderTexture3D.svg index 93014b92ac..441e11f653 100644 --- a/editor/icons/PlaceholderTexture3D.svg +++ b/editor/icons/PlaceholderTexture3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13z" fill="#e0e0e0"/><path d="M5.25 6.25 3.5 8m5.375-1.75-4.5 4.5M9.75 9 8 10.75" stroke-width="1.5" stroke-linecap="round" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13z"/><path stroke="#e0e0e0" stroke-linecap="round" stroke-width="1.5" d="M5.25 6.25 3.5 8m5.375-1.75-4.5 4.5M9.75 9 8 10.75"/></svg>
\ No newline at end of file diff --git a/editor/icons/Plane.svg b/editor/icons/Plane.svg index eb3c5482a4..98d6105721 100644 --- a/editor/icons/Plane.svg +++ b/editor/icons/Plane.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 2v8h2V8a3 3 0 0 0 0-6zm6 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zM3 4a1 1 0 0 1 0 2zm8 0v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z" fill="#f74949"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f74949" d="M1 2v8h2V8a3 3 0 0 0 0-6zm6 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V2zM3 4a1 1 0 0 1 0 2zm8 0v6h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlaneMesh.svg b/editor/icons/PlaneMesh.svg index 857583d278..1d4bd8dfb0 100644 --- a/editor/icons/PlaneMesh.svg +++ b/editor/icons/PlaneMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 5 5 3-5 3-5-3z" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="m8 5 5 3-5 3-5-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Play.svg b/editor/icons/Play.svg index 385d5013b1..4f10756483 100644 --- a/editor/icons/Play.svg +++ b/editor/icons/Play.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 4 4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 4 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayBackwards.svg b/editor/icons/PlayBackwards.svg index 8ab80c7714..34d3e7c295 100644 --- a/editor/icons/PlayBackwards.svg +++ b/editor/icons/PlayBackwards.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 12a1 1 0 0 1-1.555.832l-6-4a1 1 0 0 1 0-1.664l6-4A1 1 0 0 1 12 4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 12a1 1 0 0 1-1.555.832l-6-4a1 1 0 0 1 0-1.664l6-4A1 1 0 0 1 12 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayCustom.svg b/editor/icons/PlayCustom.svg index 118545ec62..a67c9c5dda 100644 --- a/editor/icons/PlayCustom.svg +++ b/editor/icons/PlayCustom.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25-.28906-1.9785zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812-.81836-1.9004zm-1.4258 3.2285v6a2 2 0 0 0 2 2h12v-8zm3 1h4v1h4v5h-4-4v-5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25-.28906-1.9785zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812-.81836-1.9004zm-1.4258 3.2285v6a2 2 0 0 0 2 2h12v-8zm3 1h4v1h4v5h-4-4v-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayOverlay.svg b/editor/icons/PlayOverlay.svg index 9ff59b1170..06fd0ff661 100644 --- a/editor/icons/PlayOverlay.svg +++ b/editor/icons/PlayOverlay.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><rect fill="#699ce8" fill-opacity=".75" height="64" rx="5" width="64"/><path d="m16 16 32 16-32 16" fill="#ffffff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><rect width="64" height="64" fill="#699ce8" fill-opacity=".75" rx="5"/><path fill="#fff" d="m16 16 32 16-32 16"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayRemote.svg b/editor/icons/PlayRemote.svg index 78e5ae8552..40374ac081 100644 --- a/editor/icons/PlayRemote.svg +++ b/editor/icons/PlayRemote.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M3 2.5a2 2 0 0 0-2 2V9a2 2 0 0 0 2 2h4v1H5.4v.4H3v2h2.4v.4h5.2v-.4H13v-2h-2.4V12H9v-1h4a2 2 0 0 0 2-2V4.5a2 2 0 0 0-2-2zm2.75 1.25 5 3-5 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 2.5a2 2 0 0 0-2 2V9a2 2 0 0 0 2 2h4v1H5.4v.4H3v2h2.4v.4h5.2v-.4H13v-2h-2.4V12H9v-1h4a2 2 0 0 0 2-2V4.5a2 2 0 0 0-2-2zm2.75 1.25 5 3-5 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayScene.svg b/editor/icons/PlayScene.svg index 7de0736bf8..52b9506a3a 100644 --- a/editor/icons/PlayScene.svg +++ b/editor/icons/PlayScene.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h12V7zm5 1 5 3-5 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m14.564 2-2.244.328.818 1.9 1.715-.25zm-4.223.615-1.978.29.818 1.902 1.979-.29zm-3.959.578-1.978.29.818 1.902 1.979-.29zm-3.957.578-1.714.25L1 6l2.244-.328zM1 7v6a2 2 0 0 0 2 2h12V7zm5 1 5 3-5 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayStart.svg b/editor/icons/PlayStart.svg index ef2408464b..8fec994d52 100644 --- a/editor/icons/PlayStart.svg +++ b/editor/icons/PlayStart.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm4.975 0A1 1 0 0 0 7 3.998v8a1 1 0 0 0 1.625.781l5-4a1 1 0 0 0 0-1.56l-5-4A1 1 0 0 0 7.975 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm4.975 0A1 1 0 0 0 7 3.998v8a1 1 0 0 0 1.625.781l5-4a1 1 0 0 0 0-1.56l-5-4A1 1 0 0 0 7.975 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayStartBackwards.svg b/editor/icons/PlayStartBackwards.svg index eaf4327558..d5ccb9d721 100644 --- a/editor/icons/PlayStartBackwards.svg +++ b/editor/icons/PlayStartBackwards.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zM8.025 3A1 1 0 0 1 9 3.998v8a1 1 0 0 1-1.625.781l-5-4a1 1 0 0 1 0-1.56l5-4A1 1 0 0 1 8.025 3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M13 3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zM8.025 3A1 1 0 0 1 9 3.998v8a1 1 0 0 1-1.625.781l-5-4a1 1 0 0 1 0-1.56l5-4A1 1 0 0 1 8.025 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PlayTravel.svg b/editor/icons/PlayTravel.svg index 77d89f08e2..0a4e6b86a4 100644 --- a/editor/icons/PlayTravel.svg +++ b/editor/icons/PlayTravel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.739 5.44a.595.595 0 0 0-.586.593v4.75a.593.593 0 0 0 .923.494l3.56-2.373h4.25V8h-4.25l-3.56-2.461a.593.593 0 0 0-.336-.098zm8.746 0a.595.595 0 0 0-.587.592v4.746a.593.593 0 0 0 .923.494l3.559-2.373a.593.593 0 0 0 0-1l-3.56-2.373a.593.593 0 0 0-.335-.099z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1.739 5.44a.595.595 0 0 0-.586.593v4.75a.593.593 0 0 0 .923.494l3.56-2.373h4.25V8h-4.25l-3.56-2.461a.593.593 0 0 0-.336-.098zm8.746 0a.595.595 0 0 0-.587.592v4.746a.593.593 0 0 0 .923.494l3.559-2.373a.593.593 0 0 0 0-1l-3.56-2.373a.593.593 0 0 0-.335-.099z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PluginScript.svg b/editor/icons/PluginScript.svg index afcedb4763..3e2f7420fb 100644 --- a/editor/icons/PluginScript.svg +++ b/editor/icons/PluginScript.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1-.565 2.258a4.947 4.947 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994c-.112.221-.207.45-.285.685L1 7v2l2.258.564c.048.15.115.292.177.436H4c.54-.684 1.222-1.246 2-1.596a2.037 2.037 0 1 1 4 0A4.766 4.766 0 0 1 12 10h.58c.064-.145.132-.287.182-.438L15.014 9V7l-2.257-.565a4.992 4.992 0 0 0-.28-.687l1.194-1.99-1.414-1.414-1.994 1.195a5.012 5.012 0 0 0-.686-.285L9.016 1h-2zm1 6a1 1 0 0 0-1 1v2.174A3 3 0 0 0 5 13h1v2h1v-2h2v2h1v-2h1a3 3 0 0 0-2-2.826V7.998a1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m7 1-.565 2.258a4.947 4.947 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994c-.112.221-.207.45-.285.685L1 7v2l2.258.564c.048.15.115.292.177.436H4c.54-.684 1.222-1.246 2-1.596a2.037 2.037 0 1 1 4 0A4.766 4.766 0 0 1 12 10h.58c.064-.145.132-.287.182-.438L15.014 9V7l-2.257-.565a4.992 4.992 0 0 0-.28-.687l1.194-1.99-1.414-1.414-1.994 1.195a5.012 5.012 0 0 0-.686-.285L9.016 1h-2zm1 6a1 1 0 0 0-1 1v2.174A3 3 0 0 0 5 13h1v2h1v-2h2v2h1v-2h1a3 3 0 0 0-2-2.826V7.998a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PointLight2D.svg b/editor/icons/PointLight2D.svg index 270769cc33..a8beb2b2c2 100644 --- a/editor/icons/PointLight2D.svg +++ b/editor/icons/PointLight2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6zM7 14v1h2v-1z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M6 10.576V13h4v-2.42a5 5 0 1 0-4 0zM8 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6zM7 14v1h2v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PointMesh.svg b/editor/icons/PointMesh.svg index 2cafedcae3..d0eb7f0bf7 100644 --- a/editor/icons/PointMesh.svg +++ b/editor/icons/PointMesh.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#ffca5f"><circle cx="3.75" cy="3" r="2"/><circle cx="11.75" cy="6.25" r="2"/><circle cx="6.5" cy="12.5" r="2"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#ffca5f"><circle cx="3.75" cy="3" r="2"/><circle cx="11.75" cy="6.25" r="2"/><circle cx="6.5" cy="12.5" r="2"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Polygon2D.svg b/editor/icons/Polygon2D.svg index 0fdd5ef3d6..532c71d495 100644 --- a/editor/icons/Polygon2D.svg +++ b/editor/icons/Polygon2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 14H2V2h12L8 8z" fill="#8da5f3" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" stroke="#8da5f3" stroke-linejoin="round" stroke-width="2" d="M14 14H2V2h12L8 8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PolygonOccluder3D.svg b/editor/icons/PolygonOccluder3D.svg index f4cbec07cd..92895e36f6 100644 --- a/editor/icons/PolygonOccluder3D.svg +++ b/editor/icons/PolygonOccluder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.328 1A4.5 4.5 0 1 1 1 7.314V14a1 1 0 0 0 1 1h12a1 1 0 0 0 .707-1.707L9.414 8l5.293-5.293A1 1 0 0 0 14 1z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M7.328 1A4.5 4.5 0 1 1 1 7.314V14a1 1 0 0 0 1 1h12a1 1 0 0 0 .707-1.707L9.414 8l5.293-5.293A1 1 0 0 0 14 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PolygonPathFinder.svg b/editor/icons/PolygonPathFinder.svg index 50c5ffc014..adc917d834 100644 --- a/editor/icons/PolygonPathFinder.svg +++ b/editor/icons/PolygonPathFinder.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v1h2V1zm3 0v2h2V1zm4 0v2h2V1zm4 0v2h2V2a1 1 0 0 0-1-1zm0 4h2v2h-2ZM1 5v2h2V5zm11 3-3 7 3-1.5 3 1.5zM1 9v2h2V9zm0 4v1a1 1 0 0 0 1 1h1v-2zm4 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v1h2V1zm3 0v2h2V1zm4 0v2h2V1zm4 0v2h2V2a1 1 0 0 0-1-1zm0 4h2v2h-2ZM1 5v2h2V5zm11 3-3 7 3-1.5 3 1.5zM1 9v2h2V9zm0 4v1a1 1 0 0 0 1 1h1v-2zm4 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Popup.svg b/editor/icons/Popup.svg index a6cfe0715f..6e8daa2785 100644 --- a/editor/icons/Popup.svg +++ b/editor/icons/Popup.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm4 2h2v6H7zm0 8h2v2H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm4 2h2v6H7zm0 8h2v2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PopupMenu.svg b/editor/icons/PopupMenu.svg index dd729e472b..fc0dcf7328 100644 --- a/editor/icons/PopupMenu.svg +++ b/editor/icons/PopupMenu.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PopupPanel.svg b/editor/icons/PopupPanel.svg index 075cad678e..16617eab74 100644 --- a/editor/icons/PopupPanel.svg +++ b/editor/icons/PopupPanel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4c-.55228 0-1 .44772-1 1v7c0 .55228.44772 1 1 1h12c.55228 0 1-.44772 1-1v-7c0-.55228-.44772-1-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4c-.55228 0-1 .44772-1 1v7c0 .55228.44772 1 1 1h12c.55228 0 1-.44772 1-1v-7c0-.55228-.44772-1-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PortableCompressedTexture2D.svg b/editor/icons/PortableCompressedTexture2D.svg index 3f63ddae51..931acb6ad6 100644 --- a/editor/icons/PortableCompressedTexture2D.svg +++ b/editor/icons/PortableCompressedTexture2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h7v-4H3V3h6V1zm6 5v1H6v1H5v1H4v1h5V6zm3-5h4v4h-4Zm0 5h4v4h-4Zm0 5h4v4h-4Z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h7v-4H3V3h6V1zm6 5v1H6v1H5v1H4v1h5V6zm3-5h4v4h-4Zm0 5h4v4h-4Zm0 5h4v4h-4Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PreviewEnvironment.svg b/editor/icons/PreviewEnvironment.svg index b356459829..e958323f12 100644 --- a/editor/icons/PreviewEnvironment.svg +++ b/editor/icons/PreviewEnvironment.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0"><circle cx="8" cy="8" r="6" stroke-width="2"/><path d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0"><circle cx="8" cy="8" r="6" stroke-width="2"/><path stroke-width="1.5" d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/PreviewRotate.svg b/editor/icons/PreviewRotate.svg index 9e0da46169..69be8a0f0d 100644 --- a/editor/icons/PreviewRotate.svg +++ b/editor/icons/PreviewRotate.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#000" stroke-width="2" opacity=".8" stroke-linejoin="round"><circle cx="8" cy="8" r="2"/><path d="M8 1a7 7 0 00-4.982 11.998H1.911v2h4a1 1 0 00.97-1.242l-1-4-1.94.486.28 1.121a5 5 0 117.223.168l1.416 1.416A7 7 0 008 1z"/></g><g fill="#f9f9f9"><circle cx="8" cy="8" r="2"/><path d="M8 1a7 7 0 00-4.982 11.998H1.911v2h4a1 1 0 00.97-1.242l-1-4-1.94.486.28 1.121a5 5 0 117.223.168l1.416 1.416A7 7 0 008 1z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><path id="a" d="M8 1a7 7 0 00-4.982 11.998H1.911v2h4a1 1 0 00.97-1.242l-1-4-1.94.486.28 1.121a5 5 0 117.223.168l1.416 1.416A7 7 0 008 1z"/></defs><g fill="none" stroke="#000" stroke-linejoin="round" stroke-width="2" opacity=".8"><circle cx="8" cy="8" r="2"/><use xlink:href="#a"/></g><g fill="#f9f9f9"><circle cx="8" cy="8" r="2"/><use xlink:href="#a"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/PreviewSun.svg b/editor/icons/PreviewSun.svg index fe96065292..e2d89465fe 100644 --- a/editor/icons/PreviewSun.svg +++ b/editor/icons/PreviewSun.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 1v3h2V1zM4.465 3.05 3.05 4.466 4.464 5.88l1.414-1.414zm7.07 0-1.414 1.415 1.414 1.414 1.414-1.414zM8 5a2 2 0 0 0 0 6 2 2 0 0 0 0-6zM1 7v2h3V7zm11 0v2h3V7zm-7.535 3.121L3.05 11.535l1.414 1.414 1.414-1.414zm7.07 0-1.414 1.414 1.414 1.414 1.414-1.414zM7 12v3h2v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/PrismMesh.svg b/editor/icons/PrismMesh.svg index 6481b26a70..d204e89c27 100644 --- a/editor/icons/PrismMesh.svg +++ b/editor/icons/PrismMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 2 6 3-3 9-6-3zm6 3 3 6-6 3" fill="none" stroke-width="2" stroke-linejoin="round" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-linejoin="round" stroke-width="2" d="m5 2 6 3-3 9-6-3zm6 3 3 6-6 3"/></svg>
\ No newline at end of file diff --git a/editor/icons/ProceduralSkyMaterial.svg b/editor/icons/ProceduralSkyMaterial.svg index 87d61dead3..22144bc371 100644 --- a/editor/icons/ProceduralSkyMaterial.svg +++ b/editor/icons/ProceduralSkyMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1.685 13a7 7 0 1 1 12.631 0zM3 10a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm7 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H8a1 1 0 0 0 0 2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1.685 13a7 7 0 1 1 12.631 0zM3 10a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2zm7 0a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2h-2a1 1 0 0 0-1 1H8a1 1 0 0 0 0 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Progress1.svg b/editor/icons/Progress1.svg index 8385bf05c4..15442fd0c6 100644 --- a/editor/icons/Progress1.svg +++ b/editor/icons/Progress1.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1v3.055a4 4 0 0 1 1.027.426l2.159-2.159A7 7 0 0 0 9 1z"/><path d="M7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.08zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.815zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.186l2.158-2.159A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.159A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z" fill-opacity=".2"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M9 1v3.055a4 4 0 0 1 1.027.426l2.159-2.159A7 7 0 0 0 9 1z"/><path fill-opacity=".2" d="M7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.08zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.815zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.186l2.158-2.159A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.159A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress2.svg b/editor/icons/Progress2.svg index 9d48f48f9a..534459889a 100644 --- a/editor/icons/Progress2.svg +++ b/editor/icons/Progress2.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zM1.08 9a7 7 0 0 0 1.32 3.185l2.159-2.158A4 4 0 0 1 4.131 9H1.08zm10.787 0a4 4 0 0 1-.426 1.027l2.159 2.158A7 7 0 0 0 14.922 9h-3.055zm-5.894 2.441L3.814 13.6A7 7 0 0 0 7 14.922v-3.055a4 4 0 0 1-1.027-.426zm4.054 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.186-1.32l-2.159-2.158z" fill-opacity=".2"/><path d="m13.6 3.8-2.158 2.158a4 4 0 0 1 .428 1.028h3.05A7 7 0 0 0 13.6 3.8z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zM1.08 9a7 7 0 0 0 1.32 3.185l2.159-2.158A4 4 0 0 1 4.131 9H1.08zm10.787 0a4 4 0 0 1-.426 1.027l2.159 2.158A7 7 0 0 0 14.922 9h-3.055zm-5.894 2.441L3.814 13.6A7 7 0 0 0 7 14.922v-3.055a4 4 0 0 1-1.027-.426zm4.054 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.186-1.32l-2.159-2.158z"/><path d="m13.6 3.8-2.158 2.158a4 4 0 0 1 .428 1.028h3.05A7 7 0 0 0 13.6 3.8z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress3.svg b/editor/icons/Progress3.svg index c0ac80af79..08f77ca4bd 100644 --- a/editor/icons/Progress3.svg +++ b/editor/icons/Progress3.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm4.892 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z" fill-opacity=".2"/><path d="M11.867 9a4 4 0 0 1-.426 1.027l2.158 2.159A7 7 0 0 0 14.922 9h-3.055z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm4.892 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z"/><path d="M11.867 9a4 4 0 0 1-.426 1.027l2.158 2.159A7 7 0 0 0 14.922 9h-3.055z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress4.svg b/editor/icons/Progress4.svg index b5162d0a81..04ad78e182 100644 --- a/editor/icons/Progress4.svg +++ b/editor/icons/Progress4.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426z" fill-opacity=".2"/><path d="M10.027 11.4A4 4 0 0 1 9 11.828v3.05a7 7 0 0 0 3.185-1.32z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426z"/><path d="M10.027 11.4A4 4 0 0 1 9 11.828v3.05a7 7 0 0 0 3.185-1.32z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress5.svg b/editor/icons/Progress5.svg index f7b8f7a46f..85fee0c633 100644 --- a/editor/icons/Progress5.svg +++ b/editor/icons/Progress5.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-1.84 2.441a4 4 0 0 1-1.027.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z" fill-opacity=".2"/><path d="m5.973 11.4-2.159 2.158A7 7 0 0 0 7 14.88v-3.054a4 4 0 0 1-1.027-.426z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-1.84 2.441a4 4 0 0 1-1.027.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z"/><path d="m5.973 11.4-2.159 2.158A7 7 0 0 0 7 14.88v-3.054a4 4 0 0 1-1.027-.426z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress6.svg b/editor/icons/Progress6.svg index 485c477f7b..24306b6397 100644 --- a/editor/icons/Progress6.svg +++ b/editor/icons/Progress6.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM11.867 9a4 4 0 0 1-.426 1.027l2.158 2.158A7 7 0 0 0 14.922 9h-3.055zm-5.895 2.441L3.814 13.6A7 7 0 0 0 7 14.922v-3.055a4 4 0 0 1-1.028-.426zm4.055 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.185-1.32l-2.158-2.158z" fill-opacity=".2"/><path d="M1.08 9a7 7 0 0 0 1.32 3.186l2.159-2.159A4 4 0 0 1 4.131 9H1.08z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM11.867 9a4 4 0 0 1-.426 1.027l2.158 2.158A7 7 0 0 0 14.922 9h-3.055zm-5.895 2.441L3.814 13.6A7 7 0 0 0 7 14.922v-3.055a4 4 0 0 1-1.028-.426zm4.055 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.185-1.32l-2.158-2.158z"/><path d="M1.08 9a7 7 0 0 0 1.32 3.186l2.159-2.159A4 4 0 0 1 4.131 9H1.08z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress7.svg b/editor/icons/Progress7.svg index 5a15ad8b34..094feff653 100644 --- a/editor/icons/Progress7.svg +++ b/editor/icons/Progress7.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zm6.6 2.734-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.787 0a4 4 0 0 1-.426 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.054zm-5.895 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.185-1.32l-2.158-2.158z" fill-opacity=".2"/><path d="M2.4 3.8a7 7 0 0 0-1.322 3.186h3.055a4 4 0 0 1 .426-1.028L2.4 3.8z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM7 1.08A7 7 0 0 0 3.814 2.4l2.159 2.159A4 4 0 0 1 7 4.13V1.079zm6.6 2.734-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.787 0a4 4 0 0 1-.426 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.054zm-5.895 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0A4 4 0 0 1 9 11.869v3.05a7 7 0 0 0 3.185-1.32l-2.158-2.158z"/><path d="M2.4 3.8a7 7 0 0 0-1.322 3.186h3.055a4 4 0 0 1 .426-1.028L2.4 3.8z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Progress8.svg b/editor/icons/Progress8.svg index 06d0204b53..2e8260e82f 100644 --- a/editor/icons/Progress8.svg +++ b/editor/icons/Progress8.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z" fill-opacity=".2"/><path d="M7 1a7 7 0 0 0-3.186 1.32l2.159 2.159A4 4 0 0 1 7 4.05z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path fill-opacity=".2" d="M9 1.078v3.055a4 4 0 0 1 1.027.426L12.186 2.4A7 7 0 0 0 9 1.078zM2.4 3.814A7 7 0 0 0 1.078 7h3.055a4 4 0 0 1 .426-1.027L2.4 3.814zm11.2 0-2.159 2.159A4 4 0 0 1 11.869 7h3.05a7 7 0 0 0-1.32-3.186zM1.08 9a7 7 0 0 0 1.32 3.185l2.158-2.158A4 4 0 0 1 4.13 9H1.08zm10.786 0a4 4 0 0 1-.425 1.027l2.158 2.158A7 7 0 0 0 14.921 9h-3.055zm-5.894 2.441L3.814 13.6a7 7 0 0 0 3.185 1.322v-3.055a4 4 0 0 1-1.027-.426zm4.055 0a4 4 0 0 1-1.028.428v3.05a7 7 0 0 0 3.186-1.32l-2.158-2.158z"/><path d="M7 1a7 7 0 0 0-3.186 1.32l2.159 2.159A4 4 0 0 1 7 4.05z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ProgressBar.svg b/editor/icons/ProgressBar.svg index 894def26d8..df36fef9a4 100644 --- a/editor/icons/ProgressBar.svg +++ b/editor/icons/ProgressBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h10v6H3zm1 1v4h1V6zm2 0v4h1V6zm2 0v4h1V6z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h10v6H3zm1 1v4h1V6zm2 0v4h1V6zm2 0v4h1V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ProjectIconLoading.svg b/editor/icons/ProjectIconLoading.svg index 505eddaa94..c571bac640 100644 --- a/editor/icons/ProjectIconLoading.svg +++ b/editor/icons/ProjectIconLoading.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><rect width="64" height="64" rx="8" fill="#e0e0e0" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><rect width="64" height="64" fill="#e0e0e0" fill-opacity=".2" rx="8"/></svg>
\ No newline at end of file diff --git a/editor/icons/ProjectList.svg b/editor/icons/ProjectList.svg index ee72c39c7d..bca02891e4 100644 --- a/editor/icons/ProjectList.svg +++ b/editor/icons/ProjectList.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h14v-14zm3 7c1.104 0 2 .896 2 2s-.896 2-2 2-2-.896-2-2 .896-2 2-2zm9 1v2h-6v-2zm-9-7c1.104 0 2 .896 2 2s-.896 2-2 2-2-.896-2-2 .896-2 2-2zm3 1h6v2h-6z" fill="#e0e0e0" fill-rule="nonzero"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m1 1v14h14v-14zm3 7c1.104 0 2 .896 2 2s-.896 2-2 2-2-.896-2-2 .896-2 2-2zm9 1v2h-6v-2zm-9-7c1.104 0 2 .896 2 2s-.896 2-2 2-2-.896-2-2 .896-2 2-2zm3 1h6v2h-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Projection.svg b/editor/icons/Projection.svg index aa415cdedf..45c46b8a93 100644 --- a/editor/icons/Projection.svg +++ b/editor/icons/Projection.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 2v8h2V8a3 3 0 0 0 2-.779V10h2V7a1 1 0 0 1 1-1h1V4H7a3 3 0 0 0-2.02.795A3 3 0 0 0 2 2zm8 4v2a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2zm6-4v2h2V2zM2 4a1 1 0 0 1 0 2zm8 2h1v2h-1zm4 0v3a1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V6z" fill="#44bd44"/><path d="M7 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#44bd44" d="M0 2v8h2V8a3 3 0 0 0 2-.779V10h2V7a1 1 0 0 1 1-1h1V4H7a3 3 0 0 0-2.02.795A3 3 0 0 0 2 2zm8 4v2a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2zm6-4v2h2V2zM2 4a1 1 0 0 1 0 2zm8 2h1v2h-1zm4 0v3a1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V6z"/><path fill="#fff" fill-opacity=".4" d="M7 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Quad.svg b/editor/icons/Quad.svg index 5627876bfb..cde5b79a2e 100644 --- a/editor/icons/Quad.svg +++ b/editor/icons/Quad.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 10 2h2 12v-2-12h-12zm3.4141 2h8.5859v8.5859zm-1.4141 1.4141 8.5859 8.5859h-8.5859z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m1 1v2 10 2h2 12v-2-12h-12zm3.4141 2h8.5859v8.5859zm-1.4141 1.4141 8.5859 8.5859h-8.5859z"/></svg>
\ No newline at end of file diff --git a/editor/icons/QuadMesh.svg b/editor/icons/QuadMesh.svg index c9f762c362..04b1a58069 100644 --- a/editor/icons/QuadMesh.svg +++ b/editor/icons/QuadMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 2h12v12H2zm0 0l12 12" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="M2 2h12v12H2zm0 0l12 12"/></svg>
\ No newline at end of file diff --git a/editor/icons/QuadOccluder3D.svg b/editor/icons/QuadOccluder3D.svg index 1f91cde416..cd6720fc38 100644 --- a/editor/icons/QuadOccluder3D.svg +++ b/editor/icons/QuadOccluder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7.328 1a4.5 4.5 0 0 1 1.414 2H13v8.586L8.307 6.893a4.5 4.5 0 0 1-1.414 1.414L11.586 13H3V8.732a4.5 4.5 0 0 1-2-1.418V15h14V1z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M7.328 1a4.5 4.5 0 0 1 1.414 2H13v8.586L8.307 6.893a4.5 4.5 0 0 1-1.414 1.414L11.586 13H3V8.732a4.5 4.5 0 0 1-2-1.418V15h14V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Quaternion.svg b/editor/icons/Quaternion.svg index 39b4937420..37c10ae369 100644 --- a/editor/icons/Quaternion.svg +++ b/editor/icons/Quaternion.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a3 3 0 0 0 0 6v2h2V8.236A3 3 0 0 0 7 9h2v-.764A3 3 0 0 0 11 9h2V6a3 3 0 0 0 3 3V7a1 1 0 0 1-1-1V5h1V3h-1V1h-2v2h-2a3 3 0 0 0-2 .764V3H7v4a1 1 0 0 1-1-1V3zm0 4a1 1 0 0 1 0-2zm8 0a1 1 0 0 1 0-2z" fill="#ec418e"/><path d="M4 3v3a3 3 0 0 0 3 3h2V3H7v4a1 1 0 0 1-1-1V3z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#ec418e" d="M3 3a3 3 0 0 0 0 6v2h2V8.236A3 3 0 0 0 7 9h2v-.764A3 3 0 0 0 11 9h2V6a3 3 0 0 0 3 3V7a1 1 0 0 1-1-1V5h1V3h-1V1h-2v2h-2a3 3 0 0 0-2 .764V3H7v4a1 1 0 0 1-1-1V3zm0 4a1 1 0 0 1 0-2zm8 0a1 1 0 0 1 0-2z"/><path fill="#fff" fill-opacity=".4" d="M4 3v3a3 3 0 0 0 3 3h2V3H7v4a1 1 0 0 1-1-1V3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RID.svg b/editor/icons/RID.svg index d24977463c..9311f6e8ec 100644 --- a/editor/icons/RID.svg +++ b/editor/icons/RID.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 2v2h2V2zm7 0v2h-1a3 3 0 0 0 0 6h3V2zM4 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zm3 2v4h2V6zm6 0h1v2h-1a1 1 0 0 1 0-2z" fill="#41ec80"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#41ec80" d="M7 2v2h2V2zm7 0v2h-1a3 3 0 0 0 0 6h3V2zM4 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4zm3 2v4h2V6zm6 0h1v2h-1a1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RandomNumberGenerator.svg b/editor/icons/RandomNumberGenerator.svg index 2071c4402d..881ace0b6f 100644 --- a/editor/icons/RandomNumberGenerator.svg +++ b/editor/icons/RandomNumberGenerator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1C1 1 1 1 1 8s0 7 7 7 7 0 7-7 0-7-7-7zM4.25 2.25a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM8 6a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm3.75 3.75a1 1 0 0 1 0 4 1 1 0 0 1 0-4z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="M8 1C1 1 1 1 1 8s0 7 7 7 7 0 7-7 0-7-7-7zM4.25 2.25a1 1 0 0 1 0 4 1 1 0 0 1 0-4zM8 6a1 1 0 0 1 0 4 1 1 0 0 1 0-4zm3.75 3.75a1 1 0 0 1 0 4 1 1 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Range.svg b/editor/icons/Range.svg index a171922824..0c7920887f 100644 --- a/editor/icons/Range.svg +++ b/editor/icons/Range.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 8 1 4 4 1M8 3l4 1 1 4" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" stroke="#76ad7b" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#76ad7b" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="m3 8 1 4 4 1M8 3l4 1 1 4"/></svg>
\ No newline at end of file diff --git a/editor/icons/RangeSliderLeft.svg b/editor/icons/RangeSliderLeft.svg index 7647db64ff..f09b1c7169 100644 --- a/editor/icons/RangeSliderLeft.svg +++ b/editor/icons/RangeSliderLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 12 16" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m10 2-9.99983819 6 9.99983819 6z" fill="#fff" stroke-width=".866025"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16"><path fill="#fff" d="m10 2-9.99983819 6 9.99983819 6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RangeSliderRight.svg b/editor/icons/RangeSliderRight.svg index 3b46592c14..28491b72ef 100644 --- a/editor/icons/RangeSliderRight.svg +++ b/editor/icons/RangeSliderRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 12 16" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 2 10 6-10 6z" fill="#fff" stroke-width=".866025"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16"><path fill="#fff" d="m2 2 10 6-10 6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RayCast2D.svg b/editor/icons/RayCast2D.svg index 07c8d45239..a9cbe8126f 100644 --- a/editor/icons/RayCast2D.svg +++ b/editor/icons/RayCast2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v9h-3l4 5 4-5h-3v-9z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m7 1v9h-3l4 5 4-5h-3v-9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RayCast3D.svg b/editor/icons/RayCast3D.svg index 59a5e181d6..c7f57ed577 100644 --- a/editor/icons/RayCast3D.svg +++ b/editor/icons/RayCast3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v9h-3l4 5 4-5h-3v-9z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m7 1v9h-3l4 5 4-5h-3v-9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Rect2.svg b/editor/icons/Rect2.svg index bdb70284ec..f55fe46ddb 100644 --- a/editor/icons/Rect2.svg +++ b/editor/icons/Rect2.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 2v2h-1a3 3 0 0 0-2.5 1.346A3 3 0 1 0 7 10h1V8H7a1 1 0 0 1-1-1h3a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1 0-2h1v1a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zM3 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z" fill="#f1738f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f1738f" d="M13 2v2h-1a3 3 0 0 0-2.5 1.346A3 3 0 1 0 7 10h1V8H7a1 1 0 0 1-1-1h3a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1 0-2h1v1a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zM3 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Rect2i.svg b/editor/icons/Rect2i.svg index f091f6529e..58de99fa70 100644 --- a/editor/icons/Rect2i.svg +++ b/editor/icons/Rect2i.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 2v2H8a3 3 0 0 0 0 6h1V8H8a1 1 0 0 1 0-2h1v1a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zM4 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z" fill="#f1738f"/><path d="M13 2v2h2V2zm0 4v4h2V6z" fill="#5abbef"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f1738f" d="M9 2v2H8a3 3 0 0 0 0 6h1V8H8a1 1 0 0 1 0-2h1v1a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zM4 4a3 3 0 0 0-3 3v3h2V7a1 1 0 0 1 1-1h1V4z"/><path fill="#5abbef" d="M13 2v2h2V2zm0 4v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Rectangle.svg b/editor/icons/Rectangle.svg index ca34e1658c..72819295df 100644 --- a/editor/icons/Rectangle.svg +++ b/editor/icons/Rectangle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M2 4h12v8H2z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M2 4h12v8H2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RectangleShape2D.svg b/editor/icons/RectangleShape2D.svg index 4a0f5164ef..70892bc33c 100644 --- a/editor/icons/RectangleShape2D.svg +++ b/editor/icons/RectangleShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2" d="M2 4h12v8H2z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-linejoin="round" stroke-width="2" d="M2 4h12v8H2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ReferenceRect.svg b/editor/icons/ReferenceRect.svg index 4ba50b2af2..de84fe83e6 100644 --- a/editor/icons/ReferenceRect.svg +++ b/editor/icons/ReferenceRect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2zm-12 3v8h2v-8zm12 0v8h2v-8zm-12 9v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m1 1v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2zm-12 3v8h2v-8zm12 0v8h2v-8zm-12 9v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ReflectionProbe.svg b/editor/icons/ReflectionProbe.svg index 3199c3b37c..4417ee074f 100644 --- a/editor/icons/ReflectionProbe.svg +++ b/editor/icons/ReflectionProbe.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a1 1 0 1 0 0 2h1.586l-4.52 4.52-4.298-5.16-1.536 1.28 5 6a1 1 0 0 0 1.475.064L13 5.412V7a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1h-4zM1 9v5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-4h-2v3H3V9z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M10 2a1 1 0 1 0 0 2h1.586l-4.52 4.52-4.298-5.16-1.536 1.28 5 6a1 1 0 0 0 1.475.064L13 5.412V7a1 1 0 1 0 2 0V3a1 1 0 0 0-1-1h-4zM1 9v5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-4h-2v3H3V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RegionEdit.svg b/editor/icons/RegionEdit.svg index 72f5d6e126..d70df99455 100644 --- a/editor/icons/RegionEdit.svg +++ b/editor/icons/RegionEdit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M6 6h6v6H6z"/><path d="M1 1v4h4V1zm5 0v4h6V1zm7 0v4h2V1zM1 6v6h4V6zm12 0v6h2V6zM1 13v2h4v-2zm5 0v2h6v-2zm7 0v2h2v-2z" fill-opacity=".325"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M6 6h6v6H6z"/><path fill-opacity=".325" d="M1 1v4h4V1zm5 0v4h6V1zm7 0v4h2V1zM1 6v6h4V6zm12 0v6h2V6zM1 13v2h4v-2zm5 0v2h6v-2zm7 0v2h2v-2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Reload.svg b/editor/icons/Reload.svg index 9887d0d671..651f68b7a9 100644 --- a/editor/icons/Reload.svg +++ b/editor/icons/Reload.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ReloadSmall.svg b/editor/icons/ReloadSmall.svg index 970383f239..d33112cbb4 100644 --- a/editor/icons/ReloadSmall.svg +++ b/editor/icons/ReloadSmall.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 7a6 6 0 1 1 6 6v-2a4 4 0 1 0-4-4h2l-3 4-3-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#e0e0e0" d="M2 7a6 6 0 1 1 6 6v-2a4 4 0 1 0-4-4h2l-3 4-3-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RemoteTransform2D.svg b/editor/icons/RemoteTransform2D.svg index 15324fdf88..91a9c94871 100644 --- a/editor/icons/RemoteTransform2D.svg +++ b/editor/icons/RemoteTransform2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a8 8 0 0 0-6.928 4 1 1 0 0 0 1.733 1 6 6 0 0 1 10.39 0 1 1 0 0 0 1.733-1A8 8 0 0 0 8 1zm0 4a4 4 0 0 0-3.863 2.965 1 1 0 0 0 1.931.517 2 2 0 0 1 3.864 0 1 1 0 0 0 1.931-.517A4 4 0 0 0 8 5zm0 4a1 1 0 0 0-1 1v1H4a4 4 0 0 0 8 0H9v-1a1 1 0 0 0-1-1z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M8 1a8 8 0 0 0-6.928 4 1 1 0 0 0 1.733 1 6 6 0 0 1 10.39 0 1 1 0 0 0 1.733-1A8 8 0 0 0 8 1zm0 4a4 4 0 0 0-3.863 2.965 1 1 0 0 0 1.931.517 2 2 0 0 1 3.864 0 1 1 0 0 0 1.931-.517A4 4 0 0 0 8 5zm0 4a1 1 0 0 0-1 1v1H4a4 4 0 0 0 8 0H9v-1a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RemoteTransform3D.svg b/editor/icons/RemoteTransform3D.svg index 811d914c11..1e70d68934 100644 --- a/editor/icons/RemoteTransform3D.svg +++ b/editor/icons/RemoteTransform3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a8 8 0 0 0-6.928 4 1 1 0 0 0 1.733 1 6 6 0 0 1 10.39 0 1 1 0 0 0 1.733-1A8 8 0 0 0 8 1zm0 4a4 4 0 0 0-3.863 2.965 1 1 0 0 0 1.931.517 2 2 0 0 1 3.864 0 1 1 0 0 0 1.931-.517A4 4 0 0 0 8 5zm0 4a1 1 0 0 0-1 1v1H4a4 4 0 0 0 8 0H9v-1a1 1 0 0 0-1-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M8 1a8 8 0 0 0-6.928 4 1 1 0 0 0 1.733 1 6 6 0 0 1 10.39 0 1 1 0 0 0 1.733-1A8 8 0 0 0 8 1zm0 4a4 4 0 0 0-3.863 2.965 1 1 0 0 0 1.931.517 2 2 0 0 1 3.864 0 1 1 0 0 0 1.931-.517A4 4 0 0 0 8 5zm0 4a1 1 0 0 0-1 1v1H4a4 4 0 0 0 8 0H9v-1a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Remove.svg b/editor/icons/Remove.svg index eb8e244d9a..d2eb0f96c3 100644 --- a/editor/icons/Remove.svg +++ b/editor/icons/Remove.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1v1h-4v2h14v-2h-4v-1zm-3 4v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-8zm1 2h2v6h-2zm4 0h2v6h-2zm4 0h2v6h-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m5 1v1h-4v2h14v-2h-4v-1zm-3 4v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-8zm1 2h2v6h-2zm4 0h2v6h-2zm4 0h2v6h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RemoveInternal.svg b/editor/icons/RemoveInternal.svg index 1d3cf25c91..a133ca7eb3 100644 --- a/editor/icons/RemoveInternal.svg +++ b/editor/icons/RemoveInternal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="10.5" cy="12.627" r="2.373"/><path d="m2.766 2.412-.897.897L4.56 6 1.87 8.691l.896.898 2.692-2.692L8.149 9.59l.897-.898L6.355 6l2.691-2.691-.897-.897-2.691 2.69z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><circle cx="10.5" cy="12.627" r="2.373"/><path d="m2.766 2.412-.897.897L4.56 6 1.87 8.691l.896.898 2.692-2.692L8.149 9.59l.897-.898L6.355 6l2.691-2.691-.897-.897-2.691 2.69z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Rename.svg b/editor/icons/Rename.svg index bd6dad207b..26d3fead99 100644 --- a/editor/icons/Rename.svg +++ b/editor/icons/Rename.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 2v2h2v8H5v2h2a1 1 0 0 0 1-1 1 1 0 0 0 1 1h2v-2H9V4h2V2H9a1 1 0 0 0-1 1 1 1 0 0 0-1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 2v2h2v8H5v2h2a1 1 0 0 0 1-1 1 1 0 0 0 1 1h2v-2H9V4h2V2H9a1 1 0 0 0-1 1 1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Reparent.svg b/editor/icons/Reparent.svg index f06eef18ee..4117a22829 100644 --- a/editor/icons/Reparent.svg +++ b/editor/icons/Reparent.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a2 2 0 0 0-1 3.73v5.542A2 2 0 1 0 4.73 14h6.542a2 2 0 1 0-.002-2H4.729A2 2 0 0 0 4 11.27V5.729A2 2 0 0 0 3 2z" fill="#e0e0e0"/><path d="M9 1 5 4l4 3V5a3 3 0 0 1 3 3v2h2V8a5 5 0 0 0-5-5z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 2a2 2 0 0 0-1 3.73v5.542A2 2 0 1 0 4.73 14h6.542a2 2 0 1 0-.002-2H4.729A2 2 0 0 0 4 11.27V5.729A2 2 0 0 0 3 2z"/><path fill="#5fff97" d="M9 1 5 4l4 3V5a3 3 0 0 1 3 3v2h2V8a5 5 0 0 0-5-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ReparentToNewNode.svg b/editor/icons/ReparentToNewNode.svg index 94f9c1ee85..345a5b5cb7 100644 --- a/editor/icons/ReparentToNewNode.svg +++ b/editor/icons/ReparentToNewNode.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 11.272A2 2 0 1 0 5.23 14h6.05a2 2 0 1 0 0-2H5.23a2 2 0 0 0-.73-.73V8h-2z" fill="#e0e0e0"/><path d="M10.422 1.881 7.627 3.977l2.795 2.097V4.676c2.717 0 2.18 1.447 2.18 3.927V10H14V8.603c0-3.863.13-5.324-3.578-5.324zM2.5 1v2h-2v2h2v2h2V5h2V3h-2V1z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2.5 11.272A2 2 0 1 0 5.23 14h6.05a2 2 0 1 0 0-2H5.23a2 2 0 0 0-.73-.73V8h-2z"/><path fill="#5fff97" d="M10.422 1.881 7.627 3.977l2.795 2.097V4.676c2.717 0 2.18 1.447 2.18 3.927V10H14V8.603c0-3.863.13-5.324-3.578-5.324zM2.5 1v2h-2v2h2v2h2V5h2V3h-2V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ResourcePreloader.svg b/editor/icons/ResourcePreloader.svg index 16a1d8da00..c7b66873b2 100644 --- a/editor/icons/ResourcePreloader.svg +++ b/editor/icons/ResourcePreloader.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.553 4.104A1 1 0 0 0 1 4.998v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3a1 1 0 0 0 .553-.895v-6a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zM8 3.119 11.764 5l-1.381.692-3.764-1.883L8 3.119zm-5 3.5 4 2v3.764l-4-2zm10 0v3.764l-4 2V8.619z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1.553 4.104A1 1 0 0 0 1 4.998v6a1 1 0 0 0 .553.895l6 3a1 1 0 0 0 .894 0l6-3a1 1 0 0 0 .553-.895v-6a1 1 0 0 0-.553-.894l-6-3a1 1 0 0 0-.894 0zM8 3.119 11.764 5l-1.381.692-3.764-1.883L8 3.119zm-5 3.5 4 2v3.764l-4-2zm10 0v3.764l-4 2V8.619z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ReverseGradient.svg b/editor/icons/ReverseGradient.svg index 400912757d..e460d8d682 100644 --- a/editor/icons/ReverseGradient.svg +++ b/editor/icons/ReverseGradient.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a"><stop offset="0" stop-color="#e0e0e0"/><stop offset="1" stop-color="#e0e0e0" stop-opacity="0"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="1" x2="15" href="#a"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="15" x2="1" href="#a" y1="0" y2="0"/><path d="M1 1h14v4H1z" fill="url(#b)"/><path d="M1 11h14v4H1z" fill="url(#c)"/><path d="m6 6 2 4 2-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a"><stop offset="0" stop-color="#e0e0e0"/><stop offset="1" stop-color="#e0e0e0" stop-opacity="0"/></linearGradient><linearGradient id="b" x1="1" x2="15" gradientUnits="userSpaceOnUse" href="#a"/><linearGradient id="c" x1="15" x2="1" y1="0" y2="0" gradientUnits="userSpaceOnUse" href="#a"/><path fill="url(#b)" d="M1 1h14v4H1z"/><path fill="url(#c)" d="M1 11h14v4H1z"/><path fill="#e0e0e0" d="m6 6 2 4 2-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RibbonTrailMesh.svg b/editor/icons/RibbonTrailMesh.svg index 7b22a2b9bf..12510d8dce 100644 --- a/editor/icons/RibbonTrailMesh.svg +++ b/editor/icons/RibbonTrailMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 2h8M1 8h14M4 14h8" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="M4 2h8M1 8h14M4 14h8"/></svg>
\ No newline at end of file diff --git a/editor/icons/RichTextEffect.svg b/editor/icons/RichTextEffect.svg index 04875f363a..f54d144609 100644 --- a/editor/icons/RichTextEffect.svg +++ b/editor/icons/RichTextEffect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v2h7V1zm9 0v2h5V1zM1 5v2h11V5zm0 4v2h4V9zm6 0v2h1a1.8 1.8 0 0 1 .328-2zm-6 4v2h8.281a1.8 1.8 0 0 1-1.426-2z" fill="#e0e0e0"/><path d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z" fill="#c38ef1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v2h7V1zm9 0v2h5V1zM1 5v2h11V5zm0 4v2h4V9zm6 0v2h1a1.8 1.8 0 0 1 .328-2zm-6 4v2h8.281a1.8 1.8 0 0 1-1.426-2z"/><path fill="#c38ef1" d="M12.36 8.598a.533 3.2 0 0 0-.51 2.275 3.2.533 30 0 0-.515.887.533 3.2 60 0 0 .515.887.533 3.2 0 0 0 1.02 0 3.2.533 30 0 0 .515-.887.533 3.2 60 0 0-.515-.887.533 3.2 0 0 0-.51-2.275z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RichTextLabel.svg b/editor/icons/RichTextLabel.svg index 14c1af3ea3..4a740647f1 100644 --- a/editor/icons/RichTextLabel.svg +++ b/editor/icons/RichTextLabel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h8v-2zm12 0-3 3h2v8h-2l3 3 3-3h-2v-8h2zm-12 4v2h2v-2zm4 0v2h4v-2zm-4 4v2h8v-2zm0 4v2h4v-2zm6 0v2h2v-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m1 1v2h8v-2zm12 0-3 3h2v8h-2l3 3 3-3h-2v-8h2zm-12 4v2h2v-2zm4 0v2h4v-2zm-4 4v2h8v-2zm0 4v2h4v-2zm6 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RigidBody2D.svg b/editor/icons/RigidBody2D.svg index 9c239182fb..36e5351c3c 100644 --- a/editor/icons/RigidBody2D.svg +++ b/editor/icons/RigidBody2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm1.951 1.334A6 6 0 0 1 14.001 8h-7a2 2 0 0 0-.95-1.7c1.346-2.029 2.604-3.263 3.9-3.967zm-6.828 2.18c.146.65.358 1.283.684 1.884A2 2 0 0 0 3 8H2a6 6 0 0 1 1.123-3.486zM3.8 9.6a2 2 0 0 0 2.4 0c1.472 2.027 2.728 3.264 3.8 4a6 6 0 0 1-7.15-2.5c.25-.6.5-1 .95-1.5z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm1.951 1.334A6 6 0 0 1 14.001 8h-7a2 2 0 0 0-.95-1.7c1.346-2.029 2.604-3.263 3.9-3.967zm-6.828 2.18c.146.65.358 1.283.684 1.884A2 2 0 0 0 3 8H2a6 6 0 0 1 1.123-3.486zM3.8 9.6a2 2 0 0 0 2.4 0c1.472 2.027 2.728 3.264 3.8 4a6 6 0 0 1-7.15-2.5c.25-.6.5-1 .95-1.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RigidBody3D.svg b/editor/icons/RigidBody3D.svg index c482a30f1c..d829b84fdd 100644 --- a/editor/icons/RigidBody3D.svg +++ b/editor/icons/RigidBody3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm1.951 1.334A6 6 0 0 1 14.001 8h-7a2 2 0 0 0-.95-1.7c1.346-2.029 2.604-3.263 3.9-3.967zm-6.828 2.18c.146.65.358 1.283.684 1.884A2 2 0 0 0 3 8H2a6 6 0 0 1 1.123-3.486zM3.8 9.6a2 2 0 0 0 2.4 0c1.472 2.027 2.728 3.264 3.8 4a6 6 0 0 1-7.15-2.5c.25-.6.5-1 .95-1.5z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm1.951 1.334A6 6 0 0 1 14.001 8h-7a2 2 0 0 0-.95-1.7c1.346-2.029 2.604-3.263 3.9-3.967zm-6.828 2.18c.146.65.358 1.283.684 1.884A2 2 0 0 0 3 8H2a6 6 0 0 1 1.123-3.486zM3.8 9.6a2 2 0 0 0 2.4 0c1.472 2.027 2.728 3.264 3.8 4a6 6 0 0 1-7.15-2.5c.25-.6.5-1 .95-1.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RootMotionView.svg b/editor/icons/RootMotionView.svg index da7888abeb..503321d893 100644 --- a/editor/icons/RootMotionView.svg +++ b/editor/icons/RootMotionView.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><radialGradient id="a" cx="8" cy="8" gradientUnits="userSpaceOnUse" r="6"><stop offset="0" stop-color="#fc7f7f"/><stop offset=".833" stop-color="#fc7f7f" stop-opacity=".7"/><stop offset="1" stop-color="#fc7f7f" stop-opacity="0"/></radialGradient><path d="M5 2v3H2v2h3v2H2v2h3v3h2v-3h2v3h2v-3h3V9h-3V7h3V5h-3V2H9v3H7V2zm2 5h2v2H7z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><radialGradient id="a" cx="8" cy="8" r="6" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fc7f7f"/><stop offset=".833" stop-color="#fc7f7f" stop-opacity=".7"/><stop offset="1" stop-color="#fc7f7f" stop-opacity="0"/></radialGradient><path fill="url(#a)" d="M5 2v3H2v2h3v2H2v2h3v3h2v-3h2v3h2v-3h3V9h-3V7h3V5h-3V2H9v3H7V2zm2 5h2v2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RotateLeft.svg b/editor/icons/RotateLeft.svg index 9887d0d671..651f68b7a9 100644 --- a/editor/icons/RotateLeft.svg +++ b/editor/icons/RotateLeft.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/RotateRight.svg b/editor/icons/RotateRight.svg index 4fbfce794f..3da2ce5f03 100644 --- a/editor/icons/RotateRight.svg +++ b/editor/icons/RotateRight.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M 11 8 a 4 4 0 1 0 -4 4 v 2 a 6 6 0 1 1 6 -6 h 2 l -3 4 l -3 -4 z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M 11 8 a 4 4 0 1 0 -4 4 v 2 a 6 6 0 1 1 6 -6 h 2 l -3 4 l -3 -4 z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Ruler.svg b/editor/icons/Ruler.svg index 186b3a61fc..baaaecd50c 100644 --- a/editor/icons/Ruler.svg +++ b/editor/icons/Ruler.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v14h14zm3 7 4 4H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v14h14zm3 7 4 4H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SampleLibrary.svg b/editor/icons/SampleLibrary.svg index f9ce765c87..3f62ae2dee 100644 --- a/editor/icons/SampleLibrary.svg +++ b/editor/icons/SampleLibrary.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 8v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8z" fill="#ff5f5f"/><path d="M2 6h2l2 4l1-8l2 4h3" fill="none" stroke="#ff5f5f" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M9 8v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8z"/><path fill="none" stroke="#ff5f5f" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2 6h2l2 4l1-8l2 4h3"/></svg>
\ No newline at end of file diff --git a/editor/icons/Save.svg b/editor/icons/Save.svg index 260cc8fc23..ab8ffff89c 100644 --- a/editor/icons/Save.svg +++ b/editor/icons/Save.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4l-3-3h-1v6H3zm1 0v5h3V1zm4 8a1 1 0 0 1 0 4 1 1 0 0 1 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4l-3-3h-1v6H3zm1 0v5h3V1zm4 8a1 1 0 0 1 0 4 1 1 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SceneUniqueName.svg b/editor/icons/SceneUniqueName.svg index 4ba57d71ab..029eca86c3 100644 --- a/editor/icons/SceneUniqueName.svg +++ b/editor/icons/SceneUniqueName.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 2a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 1.75a1 1 0 0 1 0 2.5 1 1 0 0 1 0-2.5zM10.5 2H12L5.5 14H4zM12 8a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 1.75a1 1 0 0 1 0 2.5 1 1 0 0 1 0-2.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 2a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 1.75a1 1 0 0 1 0 2.5 1 1 0 0 1 0-2.5zM10.5 2H12L5.5 14H4zM12 8a3 3 0 0 0 0 6 3 3 0 0 0 0-6zm0 1.75a1 1 0 0 1 0 2.5 1 1 0 0 1 0-2.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Script.svg b/editor/icons/Script.svg index 0c5b36373f..6e1d327317 100644 --- a/editor/icons/Script.svg +++ b/editor/icons/Script.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V5h3V3a2 2 0 0 0-2-2z" fill="#e0e0e0"/><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2V5h3V3a2 2 0 0 0-2-2z"/><path fill-opacity=".2" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ScriptCreate.svg b/editor/icons/ScriptCreate.svg index fc5465178d..e3688004ed 100644 --- a/editor/icons/ScriptCreate.svg +++ b/editor/icons/ScriptCreate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7v-1H8v-4h2V8h2V5h3V3a2 2 0 0 0-2-2z" fill="#e0e0e0"/><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z" fill-opacity=".2"/><path d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7v-1H8v-4h2V8h2V5h3V3a2 2 0 0 0-2-2z"/><path fill-opacity=".2" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z"/><path fill="#5fff97" d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ScriptCreateDialog.svg b/editor/icons/ScriptCreateDialog.svg index 3039c5a00a..9e60c999cb 100644 --- a/editor/icons/ScriptCreateDialog.svg +++ b/editor/icons/ScriptCreateDialog.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm5.572 1h3.998a1.143 1.143 0 0 1 1.143 1.143v1.142H7.715V7.143A1.143 1.143 0 0 0 6.572 6zm.57 2.858H10v4A1.143 1.143 0 0 1 8.857 14h-4A1.143 1.143 0 0 0 6 12.857V7.143a.57.57 0 0 1 1.143 0zm-2.855 2.854H5.43v1.143a.564.564 0 0 1-1.143 0z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v1h14V3a2 2 0 0 0-2-2zm9 1h1v1h-1zM1 5v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5zm5.572 1h3.998a1.143 1.143 0 0 1 1.143 1.143v1.142H7.715V7.143A1.143 1.143 0 0 0 6.572 6zm.57 2.858H10v4A1.143 1.143 0 0 1 8.857 14h-4A1.143 1.143 0 0 0 6 12.857V7.143a.57.57 0 0 1 1.143 0zm-2.855 2.854H5.43v1.143a.564.564 0 0 1-1.143 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ScriptExtend.svg b/editor/icons/ScriptExtend.svg index 3f7c358482..3dc771dc80 100644 --- a/editor/icons/ScriptExtend.svg +++ b/editor/icons/ScriptExtend.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7a2 2 0 0 0 1.723-1H8v-4h4V5h3V3a2 2 0 0 0-2-2z" fill="#e0e0e0"/><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z" fill-opacity=".2"/><path d="m16 12-3-3v2H9v2h4v2z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h7a2 2 0 0 0 1.723-1H8v-4h4V5h3V3a2 2 0 0 0-2-2z"/><path fill-opacity=".2" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z"/><path fill="#5fb2ff" d="m16 12-3-3v2H9v2h4v2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ScriptRemove.svg b/editor/icons/ScriptRemove.svg index 14ae5d1c6e..5236b6dfc9 100644 --- a/editor/icons/ScriptRemove.svg +++ b/editor/icons/ScriptRemove.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h5.635l-1.584-1.584 1.414-1.414-1.414-1.414 3.535-3.535L12 8.467V5h3V3a2 2 0 0 0-2-2z" fill="#e0e0e0"/><path d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z" fill-opacity=".2"/><path d="m13.414 12 1.414-1.414-1.414-1.414L12 10.586l-1.414-1.414-1.414 1.414L10.586 12l-1.414 1.414 1.414 1.414L12 13.414l1.414 1.414 1.414-1.414z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 0 0 2 2h5.635l-1.584-1.584 1.414-1.414-1.414-1.414 3.535-3.535L12 8.467V5h3V3a2 2 0 0 0-2-2z"/><path fill-opacity=".2" d="M6 1a2 2 0 0 0-2 2v7H1v3a2 2 0 1 0 4 0V3a1 1 0 0 1 2 0v3h5V5H8V3a2 2 0 0 0-2-2zM2 11h2v2a1 1 0 0 1-2 0z"/><path fill="#ff5f5f" d="m13.414 12 1.414-1.414-1.414-1.414L12 10.586l-1.414-1.414-1.414 1.414L10.586 12l-1.414 1.414 1.414 1.414L12 13.414l1.414 1.414 1.414-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ScrollContainer.svg b/editor/icons/ScrollContainer.svg index aef634aec8..099b951e51 100644 --- a/editor/icons/ScrollContainer.svg +++ b/editor/icons/ScrollContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm5 1L4 8l4 4 4-4zm2 2v4H6V6z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm5 1L4 8l4 4 4-4zm2 2v4H6V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Search.svg b/editor/icons/Search.svg index e046e8755c..f556cd9c8e 100644 --- a/editor/icons/Search.svg +++ b/editor/icons/Search.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10.168 8.754a5 5 0 1 0-1.414 1.414l4.316 4.316 1.414-1.414zM6 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M10.168 8.754a5 5 0 1 0-1.414 1.414l4.316 4.316 1.414-1.414zM6 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SegmentShape2D.svg b/editor/icons/SegmentShape2D.svg index 23e705420f..1facf6bbf2 100644 --- a/editor/icons/SegmentShape2D.svg +++ b/editor/icons/SegmentShape2D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m2 14 12-12" fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-width="2" d="m2 14 12-12"/></svg>
\ No newline at end of file diff --git a/editor/icons/SeparationRayShape2D.svg b/editor/icons/SeparationRayShape2D.svg index 71da58fec2..d816bcf37e 100644 --- a/editor/icons/SeparationRayShape2D.svg +++ b/editor/icons/SeparationRayShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v12m3-3-3 3-3-3" stroke-width="2" stroke="#5fb2ff" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 2v12m3-3-3 3-3-3"/></svg>
\ No newline at end of file diff --git a/editor/icons/SeparationRayShape3D.svg b/editor/icons/SeparationRayShape3D.svg index 65c68d0b04..83d70e98e6 100644 --- a/editor/icons/SeparationRayShape3D.svg +++ b/editor/icons/SeparationRayShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1 3 6a5 2 0 0 0 3 1.8v6.4a2 .8 0 0 0 2 .8z" fill="#a2d2ff"/><path d="m8 1 5 5a5 2 0 0 1-3 1.8v6.4a2 .8 0 0 1-2 .8V9.5a5 2 0 0 1-2-.2V7.8A5 2 0 0 0 8 8z" fill="#2998ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#a2d2ff" d="M8 1 3 6a5 2 0 0 0 3 1.8v6.4a2 .8 0 0 0 2 .8z"/><path fill="#2998ff" d="m8 1 5 5a5 2 0 0 1-3 1.8v6.4a2 .8 0 0 1-2 .8V9.5a5 2 0 0 1-2-.2V7.8A5 2 0 0 0 8 8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Shader.svg b/editor/icons/Shader.svg index 2828ad5ce7..ed2b487b67 100644 --- a/editor/icons/Shader.svg +++ b/editor/icons/Shader.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3z" fill="#e0e0e0"/><path d="M10 11h2v1h-2z" fill="#8045ff"/><path d="M4 6h2v1H4z" fill="#ffe345"/><path d="M8 8h4v1H8z" fill="#80ff45"/><path d="M7 6h1v1H7z" fill="#45d7ff"/><path d="M4 11h5v1H4z" fill="#ff4596"/><path d="M4 4h3v1H4z" fill="#ff4545"/><path d="M4 8h3v1H4z" fill="#45ffa2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3z"/><path fill="#8045ff" d="M10 11h2v1h-2z"/><path fill="#ffe345" d="M4 6h2v1H4z"/><path fill="#80ff45" d="M8 8h4v1H8z"/><path fill="#45d7ff" d="M7 6h1v1H7z"/><path fill="#ff4596" d="M4 11h5v1H4z"/><path fill="#ff4545" d="M4 4h3v1H4z"/><path fill="#45ffa2" d="M4 8h3v1H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShaderGlobalsOverride.svg b/editor/icons/ShaderGlobalsOverride.svg index 8ac50f05b2..4ce700f21b 100644 --- a/editor/icons/ShaderGlobalsOverride.svg +++ b/editor/icons/ShaderGlobalsOverride.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3zm1 1v1h3V4zm0 2v1h2V6zm3 0v1h1V6zM5 9l3 3 3-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6l-5-5zm1 2h6v3a1 1 0 0 0 1 1h3v6H3zm1 1v1h3V4zm0 2v1h2V6zm3 0v1h1V6zM5 9l3 3 3-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShaderInclude.svg b/editor/icons/ShaderInclude.svg index 8c540b5ed3..0023be5476 100644 --- a/editor/icons/ShaderInclude.svg +++ b/editor/icons/ShaderInclude.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 10h2v2H2zm0 3h2v3H2zm3 3v-6h2a3 3 0 0 1 3 3v3H8v-3a1 1 0 0 0-1-1v4zm10-6h-1a1 1 0 0 0 0 6h1v-2h-1a1 1 0 0 1 0-2h1zM2 1a1 1 0 0 0-1 1v7h2V3h6v3a1 1 0 0 0 1 1h3v2h2V6l-5-5z" fill="#e0e0e0"/><path d="M4 6h2v1H4z" fill="#ffe345"/><path d="M8 8h4v1H8z" fill="#80ff45"/><path d="M7 6h1v1H7z" fill="#45d7ff"/><path d="M4 4h3v1H4z" fill="#ff4545"/><path d="M4 8h3v1H4z" fill="#45ffa2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 10h2v2H2zm0 3h2v3H2zm3 3v-6h2a3 3 0 0 1 3 3v3H8v-3a1 1 0 0 0-1-1v4zm10-6h-1a1 1 0 0 0 0 6h1v-2h-1a1 1 0 0 1 0-2h1zM2 1a1 1 0 0 0-1 1v7h2V3h6v3a1 1 0 0 0 1 1h3v2h2V6l-5-5z"/><path fill="#ffe345" d="M4 6h2v1H4z"/><path fill="#80ff45" d="M8 8h4v1H8z"/><path fill="#45d7ff" d="M7 6h1v1H7z"/><path fill="#ff4545" d="M4 4h3v1H4z"/><path fill="#45ffa2" d="M4 8h3v1H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShaderMaterial.svg b/editor/icons/ShaderMaterial.svg index a53be383d9..add2072b27 100644 --- a/editor/icons/ShaderMaterial.svg +++ b/editor/icons/ShaderMaterial.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1 2a1 1 0 0 1 1-1h8l5 5v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm2 1v10h10V7h-3a1 1 0 0 1-1-1V3z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1 2a1 1 0 0 1 1-1h8l5 5v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1zm2 1v10h10V7h-3a1 1 0 0 1-1-1V3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShapeCast2D.svg b/editor/icons/ShapeCast2D.svg index f659a8062d..87ab6ef7dd 100644 --- a/editor/icons/ShapeCast2D.svg +++ b/editor/icons/ShapeCast2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 8.7a4 4 0 1 0-2 0V10H4l4 5 4-5H9z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M9 8.7a4 4 0 1 0-2 0V10H4l4 5 4-5H9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShapeCast3D.svg b/editor/icons/ShapeCast3D.svg index c5f859869b..6390c4a9bc 100644 --- a/editor/icons/ShapeCast3D.svg +++ b/editor/icons/ShapeCast3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 8.7a4 4 0 1 0-2 0V10H4l4 5 4-5H9z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M9 8.7a4 4 0 1 0-2 0V10H4l4 5 4-5H9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Shortcut.svg b/editor/icons/Shortcut.svg index 10a5c894c6..5010aafe2c 100644 --- a/editor/icons/Shortcut.svg +++ b/editor/icons/Shortcut.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1Zm3 2h3L9 7h2l-4 4 1-3H6zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1Zm3 2h3L9 7h2l-4 4 1-3H6zM1 4v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-1v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ShowInFileSystem.svg b/editor/icons/ShowInFileSystem.svg index 9cfeaf48d2..766088cd7c 100644 --- a/editor/icons/ShowInFileSystem.svg +++ b/editor/icons/ShowInFileSystem.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v2.25h6v4.5h3v4.5h5V10h-2.75V7.75H15V5.5H9.25V3.25H15V1z" fill="#e0e0e0"/><path d="M5.04 8.04c-1.534 0-3.475 1.169-4.173 3.423a.6.6 0 0 0 0 .33c.67 2.374 2.673 3.447 4.173 3.447s3.502-1.073 4.177-3.435a.6.6 0 0 0 0-.33C8.557 9.201 6.572 8.04 5.04 8.04zm0 1.2a2.4 2.4 0 0 1 0 4.8 2.4 2.4 0 0 1 0-4.8zm0 1.2a1.2 1.2 0 0 0 0 2.4 1.2 1.2 0 0 0 0-2.4z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v2.25h6v4.5h3v4.5h5V10h-2.75V7.75H15V5.5H9.25V3.25H15V1z"/><path fill="#5fb2ff" d="M5.04 8.04c-1.534 0-3.475 1.169-4.173 3.423a.6.6 0 0 0 0 .33c.67 2.374 2.673 3.447 4.173 3.447s3.502-1.073 4.177-3.435a.6.6 0 0 0 0-.33C8.557 9.201 6.572 8.04 5.04 8.04zm0 1.2a2.4 2.4 0 0 1 0 4.8 2.4 2.4 0 0 1 0-4.8zm0 1.2a1.2 1.2 0 0 0 0 2.4 1.2 1.2 0 0 0 0-2.4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Signal.svg b/editor/icons/Signal.svg index ad5b5e5b06..c651cb03a2 100644 --- a/editor/icons/Signal.svg +++ b/editor/icons/Signal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3v10h2 4v-2h-4v-6h4v-2h-4zm9 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="m1 3v10h2 4v-2h-4v-6h4v-2h-4zm9 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Signals.svg b/editor/icons/Signals.svg index 3ac7c2bd05..f8af3f1bca 100644 --- a/editor/icons/Signals.svg +++ b/editor/icons/Signals.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 2a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 4 2zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 2a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 4 2zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SignalsAndGroups.svg b/editor/icons/SignalsAndGroups.svg index 3f618c632c..c3775624b0 100644 --- a/editor/icons/SignalsAndGroups.svg +++ b/editor/icons/SignalsAndGroups.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 0a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 6 0zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zM1 8a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zm1 2h4v4H2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 0a1 1 0 0 0 0 2 8 8 0 0 1 8 8 1 1 0 0 0 2 0A10 10 0 0 0 6 0zm0 4a1 1 0 0 0 0 2 4 4 0 0 1 4 4 1 1 0 0 0 2 0 6 6 0 0 0-6-6zM1 8a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zm1 2h4v4H2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Skeleton2D.svg b/editor/icons/Skeleton2D.svg index 27a4015228..c444447c33 100644 --- a/editor/icons/Skeleton2D.svg +++ b/editor/icons/Skeleton2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM7 7h2v1H7zM5 9h1v1h1V9h2v1h1V9h1v4h-1v-1H9v1H7v-1H6v1H5V9z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM7 7h2v1H7zM5 9h1v1h1V9h2v1h1V9h1v4h-1v-1H9v1H7v-1H6v1H5V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Skeleton3D.svg b/editor/icons/Skeleton3D.svg index 6364b3fdc8..7b14c3e40e 100644 --- a/editor/icons/Skeleton3D.svg +++ b/editor/icons/Skeleton3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM7 7h2v1H7zM5 9h1v1h1V9h2v1h1V9h1v4h-1v-1H9v1H7v-1H6v1H5V9z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM7 7h2v1H7zM5 9h1v1h1V9h2v1h1V9h1v4h-1v-1H9v1H7v-1H6v1H5V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SkeletonIK3D.svg b/editor/icons/SkeletonIK3D.svg index aca71a7629..5f8249906d 100644 --- a/editor/icons/SkeletonIK3D.svg +++ b/editor/icons/SkeletonIK3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h2v-2H7v-1H6v1H5V9h1v1h1V9h1V8H7V7h1V2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#e0e0e0"/><path d="M8 2v5h1v1H8v1h1v1h1V9h1v4h-1v-1H9v1H8v2h2a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zm3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 2a4 4 0 0 0-2 7.453V13a2 2 0 0 0 2 2h2v-2H7v-1H6v1H5V9h1v1h1V9h1V8H7V7h1V2zM5 5a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/><path fill="#fc7f7f" d="M8 2v5h1v1H8v1h1v1h1V9h1v4h-1v-1H9v1H8v2h2a2 2 0 0 0 2-2V9.453A4 4 0 0 0 10 2zm3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SkeletonModifier3D.svg b/editor/icons/SkeletonModifier3D.svg index e3505a5b8b..35b113c423 100644 --- a/editor/icons/SkeletonModifier3D.svg +++ b/editor/icons/SkeletonModifier3D.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 16 16" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#b56d6d"><path d="m8.445 9.308v-3.001c1.613-.944 2.156-3.016 1.213-4.631-.603-1.033-1.709-1.67-2.905-1.676h-3.385c-1.869.008-3.377 1.532-3.368 3.401.005 1.197.643 2.301 1.676 2.906v3.001c0 .934.758 1.692 1.692 1.692h3.385c.935 0 1.692-.758 1.692-1.692zm-4.23-5.077h1.692v.846h-1.692zm-2.539-.846c0-.468.378-.846.847-.846.468 0 .846.378.846.846 0 .467-.378.846-.846.846-.469 0-.847-.379-.847-.846zm5.923 5.923h-.846v-.847h-.846v.846h-1.692v-.846h-.847v.846h-.846v-3.384h.846v.846h.847v-.846h1.692v.846h.846v-.846h.846zm-.846-5.923c0-.468.378-.846.846-.846s.846.378.846.846c0 .467-.378.846-.846.846s-.846-.379-.846-.846z"/><path d="m15.294 8.617c-.198-.132-.424-.219-.658-.251-.122-.867-.921-1.471-1.787-1.351s-1.472.921-1.353 1.788c.034.235.119.46.251.658l-2.286 2.286c-.729-.484-1.712-.287-2.195.443-.486.727-.287 1.71.441 2.194.198.131.423.217.659.25.121.865.922 1.471 1.787 1.35.866-.12 1.471-.919 1.351-1.786-.034-.235-.118-.46-.25-.658l2.286-2.286c.728.483 1.712.285 2.195-.443.484-.727.287-1.711-.441-2.194z"/></g></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b56d6d" d="M8.445 9.308v-3.001c1.613-.944 2.156-3.016 1.213-4.631-.603-1.033-1.709-1.67-2.905-1.676h-3.385c-1.869.008-3.377 1.532-3.368 3.401.005 1.197.643 2.301 1.676 2.906v3.001c0 .934.758 1.692 1.692 1.692h3.385c.935 0 1.692-.758 1.692-1.692zm-4.23-5.077h1.692v.846h-1.692zm-2.539-.846c0-.468.378-.846.847-.846.468 0 .846.378.846.846 0 .467-.378.846-.846.846-.469 0-.847-.379-.847-.846zm5.923 5.923h-.846v-.847h-.846v.846h-1.692v-.846h-.847v.846h-.846v-3.384h.846v.846h.847v-.846h1.692v.846h.846v-.846h.846zm-.846-5.923c0-.468.378-.846.846-.846s.846.378.846.846c0 .467-.378.846-.846.846s-.846-.379-.846-.846zM15.294 8.617c-.198-.132-.424-.219-.658-.251-.122-.867-.921-1.471-1.787-1.351s-1.472.921-1.353 1.788c.034.235.119.46.251.658l-2.286 2.286c-.729-.484-1.712-.287-2.195.443-.486.727-.287 1.71.441 2.194.198.131.423.217.659.25.121.865.922 1.471 1.787 1.35.866-.12 1.471-.919 1.351-1.786-.034-.235-.118-.46-.25-.658l2.286-2.286c.728.483 1.712.285 2.195-.443.484-.727.287-1.711-.441-2.194z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Sky.svg b/editor/icons/Sky.svg index 73656ed62c..f52e19a64c 100644 --- a/editor/icons/Sky.svg +++ b/editor/icons/Sky.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="3" y2="13"><stop offset="0" stop-color="#1ec3ff"/><stop offset="1" stop-color="#b2e1ff"/></linearGradient><path d="M8 3a7 7 0 0 0-7 7 7 7 0 0 0 .686 3h12.63A7 7 0 0 0 15 10a7 7 0 0 0-7-7z" fill="url(#a)"/><path d="M10 7a1 1 0 0 0-1 1H8a1 1 0 0 0 0 2h2a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2zm-7 3a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x1="8" x2="8" y1="3" y2="13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1ec3ff"/><stop offset="1" stop-color="#b2e1ff"/></linearGradient><path fill="url(#a)" d="M8 3a7 7 0 0 0-7 7 7 7 0 0 0 .686 3h12.63A7 7 0 0 0 15 10a7 7 0 0 0-7-7z"/><path fill="#fff" d="M10 7a1 1 0 0 0-1 1H8a1 1 0 0 0 0 2h2a1 1 0 0 0 1-1h1a1 1 0 0 0 0-2zm-7 3a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SliderJoint3D.svg b/editor/icons/SliderJoint3D.svg index f7ff73dba9..e1302e2a35 100644 --- a/editor/icons/SliderJoint3D.svg +++ b/editor/icons/SliderJoint3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a1 1 0 0 0 0 2h3l-7 7v3L13 1zm10 2L3 15h8a1 1 0 0 0 0-2H8l7-7z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M5 1a1 1 0 0 0 0 2h3l-7 7v3L13 1zm10 2L3 15h8a1 1 0 0 0 0-2H8l7-7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Slot.svg b/editor/icons/Slot.svg index 93c125a801..3030c7f57a 100644 --- a/editor/icons/Slot.svg +++ b/editor/icons/Slot.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 3v2h4v6h-4v2h4 2v-10h-2zm-3 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="m9 3v2h4v6h-4v2h4 2v-10h-2zm-3 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Snap.svg b/editor/icons/Snap.svg index 22f52ed037..3c2f76e7a0 100644 --- a/editor/icons/Snap.svg +++ b/editor/icons/Snap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3v2h2V3zm6 0v2h2V3zM3 9v2h2V9zm4 4v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/><path d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z" fill="#fff" fill-opacity=".686"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 3v2h2V3zm6 0v2h2V3zM3 9v2h2V9zm4 4v2h2v-2zm6 0v2h2v-2z"/><path fill="#fff" fill-opacity=".686" d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SnapDisable.svg b/editor/icons/SnapDisable.svg index deabc20d01..1f7db14379 100644 --- a/editor/icons/SnapDisable.svg +++ b/editor/icons/SnapDisable.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z" fill="#fff" fill-opacity=".686"/><path d="M4.54 2.14a.5.5 0 0 0-.705.705l2.142 2.142-2.142 2.142a.5.5 0 1 0 .705.705l2.142-2.142 2.142 2.142a.5.5 0 1 0 .705-.705L7.387 4.987l2.141-2.142a.5.5 0 0 0-.705-.705L6.681 4.282zM7 13v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" fill-opacity=".686" d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z"/><path fill="#e0e0e0" d="M4.54 2.14a.5.5 0 0 0-.705.705l2.142 2.142-2.142 2.142a.5.5 0 1 0 .705.705l2.142-2.142 2.142 2.142a.5.5 0 1 0 .705-.705L7.387 4.987l2.141-2.142a.5.5 0 0 0-.705-.705L6.681 4.282zM7 13v2h2v-2zm6 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SnapGrid.svg b/editor/icons/SnapGrid.svg index 070a842a4e..1f8dfdda82 100644 --- a/editor/icons/SnapGrid.svg +++ b/editor/icons/SnapGrid.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 0v2H0v1h2v4H0v1h2v4H0v1h2v2h1v-2h3v-1H3V8h4l1-1V3h4v3h1V3h2V2h-2V0h-1v2H8V0H7v2H3V0zm1 3h4v4H3zm4 10v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/><path d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z" fill="#e0e0e0" fill-opacity=".8"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 0v2H0v1h2v4H0v1h2v4H0v1h2v2h1v-2h3v-1H3V8h4l1-1V3h4v3h1V3h2V2h-2V0h-1v2H8V0H7v2H3V0zm1 3h4v4H3zm4 10v2h2v-2zm6 0v2h2v-2z"/><path fill="#e0e0e0" fill-opacity=".8" d="M7 13h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SoftBody3D.svg b/editor/icons/SoftBody3D.svg index 1bd2531ce9..025c2fda9b 100644 --- a/editor/icons/SoftBody3D.svg +++ b/editor/icons/SoftBody3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1s-3 5 0 7-1 7-1 7h13s3-6 0-8 1-6 1-6zm2 2h7s-2 3 1 5 0 5 0 5h-7s2-4-1-6 0-4 0-4z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m2 1s-3 5 0 7-1 7-1 7h13s3-6 0-8 1-6 1-6zm2 2h7s-2 3 1 5 0 5 0 5h-7s2-4-1-6 0-4 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Sort.svg b/editor/icons/Sort.svg index da18d50010..88232f75be 100644 --- a/editor/icons/Sort.svg +++ b/editor/icons/Sort.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9 1v2h6V1zM4 1a1 1 0 0 0-.691.291l-2 2a1 1 0 0 0 1.414 1.414l.293-.293v7.172l-.293-.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l2-2a1 1 0 0 0-1.414-1.414l-.293.293V4.412l.293.293a1 1 0 0 0 1.414-1.414l-2-2A1 1 0 0 0 4 1zm5 6v2h4V7zm0 6v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M9 1v2h6V1zM4 1a1 1 0 0 0-.691.291l-2 2a1 1 0 0 0 1.414 1.414l.293-.293v7.172l-.293-.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l2-2a1 1 0 0 0-1.414-1.414l-.293.293V4.412l.293.293a1 1 0 0 0 1.414-1.414l-2-2A1 1 0 0 0 4 1zm5 6v2h4V7zm0 6v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SphereMesh.svg b/editor/icons/SphereMesh.svg index 83dd42f530..21ca351847 100644 --- a/editor/icons/SphereMesh.svg +++ b/editor/icons/SphereMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2v12M2.05 7.4a6 2 0 0 0 11.9 0" fill="none" stroke-width="2" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-width="2" d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2v12M2.05 7.4a6 2 0 0 0 11.9 0"/></svg>
\ No newline at end of file diff --git a/editor/icons/SphereOccluder3D.svg b/editor/icons/SphereOccluder3D.svg index d593ce6810..1f149c13cd 100644 --- a/editor/icons/SphereOccluder3D.svg +++ b/editor/icons/SphereOccluder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.607 1.139A4.5 4.5 0 1 1 1.141 6.61a7 7 0 1 0 5.466-5.47z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M6.607 1.139A4.5 4.5 0 1 1 1.141 6.61a7 7 0 1 0 5.466-5.47z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SphereShape3D.svg b/editor/icons/SphereShape3D.svg index 6aceee5864..a335694c3d 100644 --- a/editor/icons/SphereShape3D.svg +++ b/editor/icons/SphereShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#5fb2ff" r="7"/><circle cx="6" cy="5" fill="#a2d2ff" r="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#5fb2ff"/><circle cx="6" cy="5" r="2" fill="#a2d2ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/SpinBox.svg b/editor/icons/SpinBox.svg index 9dd875d86e..c6e280eef2 100644 --- a/editor/icons/SpinBox.svg +++ b/editor/icons/SpinBox.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h7V3zm10 1-2 3h4zM3 5h5v6H3zm8 4 2 3 2-3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h7V3zm10 1-2 3h4zM3 5h5v6H3zm8 4 2 3 2-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SplitContainer.svg b/editor/icons/SplitContainer.svg index a44d78f59b..cb54ee8c73 100644 --- a/editor/icons/SplitContainer.svg +++ b/editor/icons/SplitContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M15 3a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-2 0v4h-3L8 5 6 7H3V3zm0 6v4H3V9h3l2 2 2-2z" fill="#8eef97" transform="rotate(45 4.241 9.083) scale(.737)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M15 3a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-2 0v4h-3L8 5 6 7H3V3zm0 6v4H3V9h3l2 2 2-2z" transform="rotate(45 4.241 9.083)scale(.737)"/></svg>
\ No newline at end of file diff --git a/editor/icons/SpotLight3D.svg b/editor/icons/SpotLight3D.svg index 0d43545d04..0ad2f513e9 100644 --- a/editor/icons/SpotLight3D.svg +++ b/editor/icons/SpotLight3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a1 1 0 0 0-1 1v3.693A5 5 0 0 0 2 10h4a2 2 0 0 0 4 0h4a5 5 0 0 0-3-4.307V2a1 1 0 0 0-1-1zm-1.098 9.635-1.732 1 1 1.73 1.732-1zm6.196 0-1 1.73 1.732 1 1-1.73zM7 13v2h2v-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M6 1a1 1 0 0 0-1 1v3.693A5 5 0 0 0 2 10h4a2 2 0 0 0 4 0h4a5 5 0 0 0-3-4.307V2a1 1 0 0 0-1-1zm-1.098 9.635-1.732 1 1 1.73 1.732-1zm6.196 0-1 1.73 1.732 1 1-1.73zM7 13v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SpringArm3D.svg b/editor/icons/SpringArm3D.svg index e2c607c7bd..e5eeae9abc 100644 --- a/editor/icons/SpringArm3D.svg +++ b/editor/icons/SpringArm3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#fc7f7f" stroke-width="2"><path d="m8 14 6-6"/><path d="m2 2 7 7"/><path d="m10 9h-6"/><path d="m9 9v-5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-width="2" d="m8 14 6-6M2 2l7 7M10 9h-6M9 9v-5"/></svg>
\ No newline at end of file diff --git a/editor/icons/Sprite2D.svg b/editor/icons/Sprite2D.svg index ce6b08b70b..965c0185b5 100644 --- a/editor/icons/Sprite2D.svg +++ b/editor/icons/Sprite2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a4 4 0 0 0-4 4v6a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V5a4 4 0 0 0-4-4zM3 7a1 1 0 0 1 2 0v2a1 1 0 0 1-2 0zm10 2a1 1 0 0 1-2 0V7a1 1 0 0 1 2 0zm-2.172 3.828a4 4 0 0 1-5.656 0 1 1 0 0 1 1.414-1.414 2 2 0 0 0 2.828 0 1 1 0 0 1 1.414 1.414z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M5 1a4 4 0 0 0-4 4v6a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V5a4 4 0 0 0-4-4zM3 7a1 1 0 0 1 2 0v2a1 1 0 0 1-2 0zm10 2a1 1 0 0 1-2 0V7a1 1 0 0 1 2 0zm-2.172 3.828a4 4 0 0 1-5.656 0 1 1 0 0 1 1.414-1.414 2 2 0 0 0 2.828 0 1 1 0 0 1 1.414 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Sprite3D.svg b/editor/icons/Sprite3D.svg index ac62610010..62917aec47 100644 --- a/editor/icons/Sprite3D.svg +++ b/editor/icons/Sprite3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a4 4 0 0 0-4 4v6a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V5a4 4 0 0 0-4-4zM3 7a1 1 0 0 1 2 0v2a1 1 0 0 1-2 0zm10 2a1 1 0 0 1-2 0V7a1 1 0 0 1 2 0zm-2.172 3.828a4 4 0 0 1-5.656 0 1 1 0 0 1 1.414-1.414 2 2 0 0 0 2.828 0 1 1 0 0 1 1.414 1.414z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M5 1a4 4 0 0 0-4 4v6a4 4 0 0 0 4 4h6a4 4 0 0 0 4-4V5a4 4 0 0 0-4-4zM3 7a1 1 0 0 1 2 0v2a1 1 0 0 1-2 0zm10 2a1 1 0 0 1-2 0V7a1 1 0 0 1 2 0zm-2.172 3.828a4 4 0 0 1-5.656 0 1 1 0 0 1 1.414-1.414 2 2 0 0 0 2.828 0 1 1 0 0 1 1.414 1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SpriteFrames.svg b/editor/icons/SpriteFrames.svg index a6aecc46bc..8b13e829a4 100644 --- a/editor/icons/SpriteFrames.svg +++ b/editor/icons/SpriteFrames.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm10 0v2h2V1zM2 6a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm6 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm5-1v2h2V5zM4 9h4a2 1 0 0 1-4 0zm9 0v2h2V9zM1 13v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm10 0v2h2V1zM2 6a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm6 0a1 1 0 0 1 2 0v1a1 1 0 0 1-2 0zm5-1v2h2V5zM4 9h4a2 1 0 0 1-4 0zm9 0v2h2V9zM1 13v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SpriteSheet.svg b/editor/icons/SpriteSheet.svg index 2e2c512d38..75f925b6e6 100644 --- a/editor/icons/SpriteSheet.svg +++ b/editor/icons/SpriteSheet.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zM3 7h2v2H3zm4 0h2v2H7zm4 0h2v2h-2zm-8 4h2v2H3zm4 0h2v2H7zm4 0h2v2h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StandardMaterial3D.svg b/editor/icons/StandardMaterial3D.svg index 41e9a67948..0751e1b6b2 100644 --- a/editor/icons/StandardMaterial3D.svg +++ b/editor/icons/StandardMaterial3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5" fill="none" stroke-width="2" stroke-linejoin="round" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linejoin="round" stroke-width="2" d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5"/></svg>
\ No newline at end of file diff --git a/editor/icons/StaticBody2D.svg b/editor/icons/StaticBody2D.svg index a4aa560652..0a8f6adad4 100644 --- a/editor/icons/StaticBody2D.svg +++ b/editor/icons/StaticBody2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H3zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm0 1v2h2V3zm8 0v2h2V3zm-8 8v2h2v-2zm8 0v2h2v-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H3zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm0 1v2h2V3zm8 0v2h2V3zm-8 8v2h2v-2zm8 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StaticBody3D.svg b/editor/icons/StaticBody3D.svg index 90082e411b..abc61bb98e 100644 --- a/editor/icons/StaticBody3D.svg +++ b/editor/icons/StaticBody3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H3zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm0 1v2h2V3zm8 0v2h2V3zm-8 8v2h2v-2zm8 0v2h2v-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H3zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm0 1v2h2V3zm8 0v2h2V3zm-8 8v2h2v-2zm8 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StatusError.svg b/editor/icons/StatusError.svg index d6e3ebed8f..f3e811884a 100644 --- a/editor/icons/StatusError.svg +++ b/editor/icons/StatusError.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM5.172 3.758 8 6.586l2.828-2.828 1.414 1.414L9.414 8l2.828 2.828-1.414 1.414L8 9.414l-2.828 2.828-1.414-1.414L6.586 8 3.758 5.172l1.414-1.414z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5f5f" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM5.172 3.758 8 6.586l2.828-2.828 1.414 1.414L9.414 8l2.828 2.828-1.414 1.414L8 9.414l-2.828 2.828-1.414-1.414L6.586 8 3.758 5.172l1.414-1.414z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StatusIndicator.svg b/editor/icons/StatusIndicator.svg index 09673b3354..5b8dd51dda 100644 --- a/editor/icons/StatusIndicator.svg +++ b/editor/icons/StatusIndicator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1 5.184 3H2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1h-3.184ZM3 5h2.584L8 3.4 10.416 5H13v8H3Z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 1 5.184 3H2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1h-3.184ZM3 5h2.584L8 3.4 10.416 5H13v8H3Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StatusSuccess.svg b/editor/icons/StatusSuccess.svg index 4658d191fc..0ff2239d93 100644 --- a/editor/icons/StatusSuccess.svg +++ b/editor/icons/StatusSuccess.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm3.293 3.877 1.414 1.414L7 12.001 3.293 8.29l1.414-1.414L7 9.17z" fill="#5fff97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fff97" d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm3.293 3.877 1.414 1.414L7 12.001 3.293 8.29l1.414-1.414L7 9.17z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StatusWarning.svg b/editor/icons/StatusWarning.svg index 876582a8a1..eccea2d3c8 100644 --- a/editor/icons/StatusWarning.svg +++ b/editor/icons/StatusWarning.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 3h2v7H7zm0 8h2v2H7z" fill="#ffdd65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffdd65" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 3h2v7H7zm0 8h2v2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Stop.svg b/editor/icons/Stop.svg index b10acdbff7..adc85e77ea 100644 --- a/editor/icons/Stop.svg +++ b/editor/icons/Stop.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="3" height="10" width="10" rx="1" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="10" height="10" x="3" y="3" fill="#e0e0e0" rx="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/String.svg b/editor/icons/String.svg index 0028973437..d8cb0279e4 100644 --- a/editor/icons/String.svg +++ b/editor/icons/String.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 2H4a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H1v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zm4 8h2V7a1 1 0 0 1 1-1V4a3 3 0 0 0-3 3z" fill="#4593ec"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#4593ec" d="M7 2H4a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H1v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3zm1 0v5a3 3 0 0 0 3 3V8a1 1 0 0 1-1-1V6h1V4h-1V2zm4 8h2V7a1 1 0 0 1 1-1V4a3 3 0 0 0-3 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StringName.svg b/editor/icons/StringName.svg index 3520c20150..2ef0209c1c 100644 --- a/editor/icons/StringName.svg +++ b/editor/icons/StringName.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H0v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3v3a3 3 0 0 0 3 3h3V6a2 2 0 0 1 2 2v2h2V8a4 4 0 0 0-4-4H8V2zm7 4v2H9a1 1 0 0 1-1-1V6z" fill="#4593ec"/><path d="M6 2v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V6h2V4H8V2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#4593ec" d="M3 2a2.5 2.5 0 0 0 0 5 .5.5 0 0 1 0 1H0v2h3a2.5 2.5 0 0 0 0-5 .5.5 0 0 1 0-1h3v3a3 3 0 0 0 3 3h3V6a2 2 0 0 1 2 2v2h2V8a4 4 0 0 0-4-4H8V2zm7 4v2H9a1 1 0 0 1-1-1V6z"/><path fill="#fff" fill-opacity=".4" d="M6 2v5a3 3 0 0 0 3 3h1V8H9a1 1 0 0 1-1-1V6h2V4H8V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StyleBoxEmpty.svg b/editor/icons/StyleBoxEmpty.svg index c110d45d6e..9a1039eeec 100644 --- a/editor/icons/StyleBoxEmpty.svg +++ b/editor/icons/StyleBoxEmpty.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M2 1a1 1 0 0 0-1 1v1h2V1zm3 0v2h2V1zm4 0v2h2V1zm4 0v2h2V2a1 1 0 0 0-1-1zM1 5v2h2V5zm12 0v.232c.316.179.578.438.76.752L14.459 7H15V5zM1 9v2h2V9zm0 4v1a1 1 0 0 0 1 1h1v-2zm4 0v2h2v-2zm7-6c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M2 1a1 1 0 0 0-1 1v1h2V1zm3 0v2h2V1zm4 0v2h2V1zm4 0v2h2V2a1 1 0 0 0-1-1zM1 5v2h2V5zm12 0v.232c.316.179.578.438.76.752L14.459 7H15V5zM1 9v2h2V9zm0 4v1a1 1 0 0 0 1 1h1v-2zm4 0v2h2v-2zm7-6c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StyleBoxFlat.svg b/editor/icons/StyleBoxFlat.svg index 98686442da..d7ce1e6cf8 100644 --- a/editor/icons/StyleBoxFlat.svg +++ b/editor/icons/StyleBoxFlat.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1 14a1 1 0 0 0 1 1h6.037a5.044 5.044 0 0 1-.92-2A4.735 4.735 0 0 1 7 12c0-.356.045-.687.117-1 .18-.784.546-1.435.938-2 .14-.203.285-.402.424-.584.386-.505.763-.968 1.103-1.416.257-.338.495-.67.686-1a2 2 0 0 1 3.465 0c.188.327.428.66.685 1 .186.246.38.494.582.75V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1Zm11-7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1 14a1 1 0 0 0 1 1h6.037a5.044 5.044 0 0 1-.92-2A4.735 4.735 0 0 1 7 12c0-.356.045-.687.117-1 .18-.784.546-1.435.938-2 .14-.203.285-.402.424-.584.386-.505.763-.968 1.103-1.416.257-.338.495-.67.686-1a2 2 0 0 1 3.465 0c.188.327.428.66.685 1 .186.246.38.494.582.75V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1Zm11-7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StyleBoxGrid.svg b/editor/icons/StyleBoxGrid.svg index 9702421881..bd7619c5b6 100644 --- a/editor/icons/StyleBoxGrid.svg +++ b/editor/icons/StyleBoxGrid.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill="#000b" d="M0 0h16v16H0z"/><path fill="none" stroke-width="2" stroke="#e0e0e0" d="M5 1v14m6 0V1m4 4H1m0 6h14"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#000b" d="M0 0h16v16H0z"/><path fill="none" stroke="#e0e0e0" stroke-width="2" d="M5 1v14m6 0V1m4 4H1m0 6h14"/></svg>
\ No newline at end of file diff --git a/editor/icons/StyleBoxLine.svg b/editor/icons/StyleBoxLine.svg index 818864f7d4..9bb55e7cb0 100644 --- a/editor/icons/StyleBoxLine.svg +++ b/editor/icons/StyleBoxLine.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M1.734 12.053a1.5 1.5 0 0 0 2.4 2.441l2.893-2.941c.27-1.337.636-1.988 1.028-2.553l2.213-3a2 2 0 0 1 2.845-.64l1.39-1.413a1.5 1.5 0 0 0-2.401-2.441zM12 7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M1.734 12.053a1.5 1.5 0 0 0 2.4 2.441l2.893-2.941c.27-1.337.636-1.988 1.028-2.553l2.213-3a2 2 0 0 1 2.845-.64l1.39-1.413a1.5 1.5 0 0 0-2.401-2.441zM12 7c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/StyleBoxTexture.svg b/editor/icons/StyleBoxTexture.svg index 9054053c60..0fd65903df 100644 --- a/editor/icons/StyleBoxTexture.svg +++ b/editor/icons/StyleBoxTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M8.1 15a4.5 4.5 0 0 1-1.02-2H3V3h10v2.232a2.031 2.031 0 0 1 .76.752L15 7.75V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1zM8 5v1H6v1H5v1H4v1h4l2.24-3a2.031 2.031 0 0 1 .76-.752V5h-1V4H9v1zm4 2c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M8.1 15a4.5 4.5 0 0 1-1.02-2H3V3h10v2.232a2.031 2.031 0 0 1 .76.752L15 7.75V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1zM8 5v1H6v1H5v1H4v1h4l2.24-3a2.031 2.031 0 0 1 .76-.752V5h-1V4H9v1zm4 2c-.429.746-.946 1.387-1.429 2-.571.69-1.066 1.342-1.34 2-.138.326-.231.656-.231 1s.072.686.184 1c.413 1.163 1.512 2 2.816 2s2.402-.837 2.816-2c.112-.314.184-.656.184-1s-.094-.674-.231-1c-.275-.658-.77-1.31-1.34-2-.484-.613-1-1.254-1.43-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SubViewport.svg b/editor/icons/SubViewport.svg index 3644215647..6cffbc908d 100644 --- a/editor/icons/SubViewport.svg +++ b/editor/icons/SubViewport.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke="#e0e0e0" stroke-width="1.25" fill="none"><rect x="1.625" y="2.625" height="10.75" width="12.75" rx="1.5"/><rect x="4.625" y="4.625" rx="1.5" width="6.75" height="6.75"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0" stroke-width="1.25"><rect width="12.75" height="10.75" x="1.625" y="2.625" rx="1.5"/><rect width="6.75" height="6.75" x="4.625" y="4.625" rx="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/SubViewportContainer.svg b/editor/icons/SubViewportContainer.svg index dc571ff71b..01b9ed9c43 100644 --- a/editor/icons/SubViewportContainer.svg +++ b/editor/icons/SubViewportContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#8eef97"><rect x="2" y="2" rx="1" width="12" height="12" stroke-width="2"/><rect x="4.625" y="4.625" rx="1.5" width="6.75" height="6.75" stroke-width="1.25"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#8eef97"><rect width="12" height="12" x="2" y="2" stroke-width="2" rx="1"/><rect width="6.75" height="6.75" x="4.625" y="4.625" stroke-width="1.25" rx="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/SyntaxHighlighter.svg b/editor/icons/SyntaxHighlighter.svg index 4773251e21..1475bd819c 100644 --- a/editor/icons/SyntaxHighlighter.svg +++ b/editor/icons/SyntaxHighlighter.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a"><stop offset=".25" stop-color="#ffe345"/><stop offset=".75" stop-color="#919191"/></linearGradient><path d="M4 4v2h5V4z" fill="#45d7ff"/><path d="M11 4v2h4V4Z" fill="#ff4596"/><path d="M1 8v2h3V8z" fill="#ff4545"/><path d="M6 8v2h7V8z" fill="url(#a)"/><path d="M1 12v2h5v-2zm7 0v2h6v-2z" fill="#919191"/><path d="M1 1.5h1.25V6H1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a"><stop offset=".25" stop-color="#ffe345"/><stop offset=".75" stop-color="#919191"/></linearGradient><path fill="#45d7ff" d="M4 4v2h5V4z"/><path fill="#ff4596" d="M11 4v2h4V4Z"/><path fill="#ff4545" d="M1 8v2h3V8z"/><path fill="url(#a)" d="M6 8v2h7V8z"/><path fill="#919191" d="M1 12v2h5v-2zm7 0v2h6v-2z"/><path fill="#e0e0e0" d="M1 1.5h1.25V6H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/SystemFont.svg b/editor/icons/SystemFont.svg index 438c707624..411e096e29 100644 --- a/editor/icons/SystemFont.svg +++ b/editor/icons/SystemFont.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="m5.787 1-.402 1.613c-.352.265-.71.122-1.012-.111l-.904-.541L2.46 2.973l.853 1.425c-.058.438-.412.586-.79.635-.343.065-.674.216-1.024.213V6.72c.367 0 .715.157 1.074.224.371.032.716.243.727.65l-.84 1.4 1.008 1.01c.443-.266.895-.53 1.33-.802.349-.044.675.139.674.506l.314 1.258h1.45c.117-.475.242-.954.35-1.428A.67.67 0 0 1 8 9.195V7.5H6.5A.5.5 0 0 0 6 8v.5H4v-4h5.75c-.005-.22.107-.434.254-.625l.543-.902L9.535 1.96l-1.426.853c-.437-.058-.588-.412-.636-.79L7.217 1h-1.43z"/><path d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5h-6z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m5.787 1-.402 1.613c-.352.265-.71.122-1.012-.111l-.904-.541L2.46 2.973l.853 1.425c-.058.438-.412.586-.79.635-.343.065-.674.216-1.024.213V6.72c.367 0 .715.157 1.074.224.371.032.716.243.727.65l-.84 1.4 1.008 1.01c.443-.266.895-.53 1.33-.802.349-.044.675.139.674.506l.314 1.258h1.45c.117-.475.242-.954.35-1.428A.67.67 0 0 1 8 9.195V7.5H6.5A.5.5 0 0 0 6 8v.5H4v-4h5.75c-.005-.22.107-.434.254-.625l.543-.902L9.535 1.96l-1.426.853c-.437-.058-.588-.412-.636-.79L7.217 1h-1.43z"/><path fill="#ff5f5f" d="M4.5 5v3h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1-1 1v1h4v-1a1 1 0 0 1-1-1V7h2a1 1 0 0 1 1 1h1V5h-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TabBar.svg b/editor/icons/TabBar.svg index 2ef0ed87b0..23ec3e0b73 100644 --- a/editor/icons/TabBar.svg +++ b/editor/icons/TabBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 4c-1.108 0-1.818.907-2 2l-1 6H1v2h14v-2h-1.5l-1-6c-.182-1.093-.892-2-2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5.5 4c-1.108 0-1.818.907-2 2l-1 6H1v2h14v-2h-1.5l-1-6c-.182-1.093-.892-2-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TabContainer.svg b/editor/icons/TabContainer.svg index 505f4a5e34..3d3e12a636 100644 --- a/editor/icons/TabContainer.svg +++ b/editor/icons/TabContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h5v4h5v6H3zm7 0h3v2h-3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h5v4h5v6H3zm7 0h3v2h-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Terminal.svg b/editor/icons/Terminal.svg index 5d92bdf8be..1cda070c05 100644 --- a/editor/icons/Terminal.svg +++ b/editor/icons/Terminal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m2 13 5.0000552-5-5.0000552-5"/><path d="m9 13h5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m2 13 5.0000552-5-5.0000552-5M9 13h5"/></svg>
\ No newline at end of file diff --git a/editor/icons/TerrainConnect.svg b/editor/icons/TerrainConnect.svg index 3cf75072e2..9d366c55e1 100644 --- a/editor/icons/TerrainConnect.svg +++ b/editor/icons/TerrainConnect.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 16 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M7 3.5H6L8 1l2 2.5H9v2H7zM3.56 4.975l-.706.707L2.5 2.5l3.182.353-.707.708.707.707-1.414 1.414zm7.465-1.415-.707-.706L13.5 2.5l-.353 3.182-.708-.707-.707.707-1.414-1.414zm1.415 7.465.706-.707.354 3.182-3.182-.354.707-.707-.707-.707 1.414-1.414zM4.975 12.44l.707.707L2.5 13.5l.354-3.182.707.707.707-.707 1.414 1.414zM12.5 7V6L15 8l-2.5 2V9h-2V7zM9 12.5h1L8 15l-2-2.5h1v-2h2zM3.5 9v1L1 8l2.5-2v1h2v2z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 16 16"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M7 3.5H6L8 1l2 2.5H9v2H7zM3.56 4.975l-.706.707L2.5 2.5l3.182.353-.707.708.707.707-1.414 1.414zm7.465-1.415-.707-.706L13.5 2.5l-.353 3.182-.708-.707-.707.707-1.414-1.414zm1.415 7.465.706-.707.354 3.182-3.182-.354.707-.707-.707-.707 1.414-1.414zM4.975 12.44l.707.707L2.5 13.5l.354-3.182.707.707.707-.707 1.414 1.414zM12.5 7V6L15 8l-2.5 2V9h-2V7zM9 12.5h1L8 15l-2-2.5h1v-2h2zM3.5 9v1L1 8l2.5-2v1h2v2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TerrainMatchCorners.svg b/editor/icons/TerrainMatchCorners.svg index ae18af4ca9..29b4c8610a 100644 --- a/editor/icons/TerrainMatchCorners.svg +++ b/editor/icons/TerrainMatchCorners.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M15 1H9v3h3v3h3zM1 15h6v-3H4V9H1z" fill="#ffca5f"/><path d="M1 1h6v3H4v3H1zM15 15H9v-3h3V9h3z" fill="#77ce57"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M15 1H9v3h3v3h3zM1 15h6v-3H4V9H1z"/><path fill="#77ce57" d="M1 1h6v3H4v3H1zM15 15H9v-3h3V9h3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TerrainMatchCornersAndSides.svg b/editor/icons/TerrainMatchCornersAndSides.svg index b9cbafd7de..97b72061b7 100644 --- a/editor/icons/TerrainMatchCornersAndSides.svg +++ b/editor/icons/TerrainMatchCornersAndSides.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1h4v3H9L8 5 7 4H6z" fill="#ffca5f"/><path d="M1 15h4v-3H4v-1H1zm14 0h-4v-3h1v-1h3zm0-14h-4v3h1v1h3zM1 1h4v3H4v1H1z" fill="#77ce57"/><path d="M6 15h4v-3H9l-1-1-1 1H6zm-5-5V6h3v1l1 1-1 1v1zm14 0V6h-3v1l-1 1 1 1v1z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M6 1h4v3H9L8 5 7 4H6z"/><path fill="#77ce57" d="M1 15h4v-3H4v-1H1zm14 0h-4v-3h1v-1h3zm0-14h-4v3h1v1h3zM1 1h4v3H4v1H1z"/><path fill="#ffca5f" d="M6 15h4v-3H9l-1-1-1 1H6zm-5-5V6h3v1l1 1-1 1v1zm14 0V6h-3v1l-1 1 1 1v1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TerrainMatchSides.svg b/editor/icons/TerrainMatchSides.svg index f5fdb9ccad..2c3520e781 100644 --- a/editor/icons/TerrainMatchSides.svg +++ b/editor/icons/TerrainMatchSides.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 14V2l3 3v2l1 1-1 1v2zm14 0V2l-3 2.706v2l-1 1 1 1v2z" fill="#77ce57"/><path d="M2 15h12l-3-3H9l-1-1-1 1H5zM14 1H2l3 3h2l1 1 1-1h2z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#77ce57" d="M1 14V2l3 3v2l1 1-1 1v2zm14 0V2l-3 2.706v2l-1 1 1 1v2z"/><path fill="#ffca5f" d="M2 15h12l-3-3H9l-1-1-1 1H5zM14 1H2l3 3h2l1 1 1-1h2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TerrainPath.svg b/editor/icons/TerrainPath.svg index 00b63bb293..4ab5a992f1 100644 --- a/editor/icons/TerrainPath.svg +++ b/editor/icons/TerrainPath.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 16 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="3" cy="13" r="2"/><circle cx="13" cy="3" r="2"/><path d="M7 2v10H3v2h6V4h4V2z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 16 16"><g fill="#e0e0e0"><circle cx="3" cy="13" r="2"/><circle cx="13" cy="3" r="2"/><path d="M7 2v10H3v2h6V4h4V2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TextEdit.svg b/editor/icons/TextEdit.svg index 1053ad1882..93a92668bf 100644 --- a/editor/icons/TextEdit.svg +++ b/editor/icons/TextEdit.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 1v4h1V4z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v10H3zm1 1v4h1V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TextEditorPlay.svg b/editor/icons/TextEditorPlay.svg index 340d44fda8..c8fb9b36ff 100644 --- a/editor/icons/TextEditorPlay.svg +++ b/editor/icons/TextEditorPlay.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 12V4l7 4z" fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M4 12V4l7 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TextFile.svg b/editor/icons/TextFile.svg index 575236694d..932129dbe3 100644 --- a/editor/icons/TextFile.svg +++ b/editor/icons/TextFile.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 12h1v-2h-4v2h1v4h2zm-8.3-2h1.7l.6 1.5.6-1.5h1.7l-1.2 3 1.2 3H8.6L8 14.5 7.4 16H5.7l1.2-3zM4 12h1v-2H1v2h1v4h2ZM9 1l.564 2.258.69.28 1.988-1.194 1.414 1.414-1.196 1.994.286.684L15 7v2H9.75a2 2 0 1 0-3.5 0H1V7l2.26-.564.278-.688-1.194-1.99 1.414-1.414L5.752 3.54l.686-.286L7 1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14 12h1v-2h-4v2h1v4h2zm-8.3-2h1.7l.6 1.5.6-1.5h1.7l-1.2 3 1.2 3H8.6L8 14.5 7.4 16H5.7l1.2-3zM4 12h1v-2H1v2h1v4h2ZM9 1l.564 2.258.69.28 1.988-1.194 1.414 1.414-1.196 1.994.286.684L15 7v2H9.75a2 2 0 1 0-3.5 0H1V7l2.26-.564.278-.688-1.194-1.99 1.414-1.414L5.752 3.54l.686-.286L7 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TextMesh.svg b/editor/icons/TextMesh.svg index 868ab6eecd..585b92aca4 100644 --- a/editor/icons/TextMesh.svg +++ b/editor/icons/TextMesh.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z" fill="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ffca5f" d="M1 1h14v4h-1a2 2 0 0 0-2-2H9v9a2 2 0 0 0 2 2v1H5v-1a2 2 0 0 0 2-2V3H4a2 2 0 0 0-2 2H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Texture2D.svg b/editor/icons/Texture2D.svg index 635547ba03..94e5ae5947 100644 --- a/editor/icons/Texture2D.svg +++ b/editor/icons/Texture2D.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="#808080"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z"/><path d="M3.5 3.5h9v7h-9" fill-opacity=".2"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="gray"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3z"/><path fill-opacity=".2" d="M3.5 3.5h9v7h-9"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Texture2DArray.svg b/editor/icons/Texture2DArray.svg index f585263803..46e9d374d9 100644 --- a/editor/icons/Texture2DArray.svg +++ b/editor/icons/Texture2DArray.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm1 1h3v1H5.5v4H7v1H4zm8 6H9V9h1.5V5H9V4h3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm1 1h3v1H5.5v4H7v1H4zm8 6H9V9h1.5V5H9V4h3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Texture3D.svg b/editor/icons/Texture3D.svg index 208fa41b61..52b1b20892 100644 --- a/editor/icons/Texture3D.svg +++ b/editor/icons/Texture3D.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="gray"><path d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13z"/><path d="M2.75 5.5h7.75v6H2.75" fill-opacity=".2"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="gray"><path d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13z"/><path fill-opacity=".2" d="M2.75 5.5h7.75v6H2.75"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TextureButton.svg b/editor/icons/TextureButton.svg index 39ec6722f9..c917bb1d72 100644 --- a/editor/icons/TextureButton.svg +++ b/editor/icons/TextureButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1v2h6v10h-4v2h6V1zM3 2v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L5 5.133V2zm7 4v1H9v1H8v1h1v2h4V9h-1V7h-1V6zm-7.5 4A1.5 1.5 0 0 0 1 11.5V13H0v2h8v-2H7v-1.5A1.5 1.5 0 0 0 5.5 10z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M8 1v2h6v10h-4v2h6V1zM3 2v3.133l-1.445-.965-1.11 1.664 3 2a1 1 0 0 0 1.11 0l3-2-1.11-1.664L5 5.133V2zm7 4v1H9v1H8v1h1v2h4V9h-1V7h-1V6zm-7.5 4A1.5 1.5 0 0 0 1 11.5V13H0v2h8v-2H7v-1.5A1.5 1.5 0 0 0 5.5 10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TextureProgressBar.svg b/editor/icons/TextureProgressBar.svg index 861772dac3..ca88408260 100644 --- a/editor/icons/TextureProgressBar.svg +++ b/editor/icons/TextureProgressBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h10v6H3zm1 1h1v2H4zm2 1h1v3H6zm2-1h1v4H8z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h10v6H3zm1 1h1v2H4zm2 1h1v3H6zm2-1h1v4H8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TextureRect.svg b/editor/icons/TextureRect.svg index 5f55c06bce..b37b9197d9 100644 --- a/editor/icons/TextureRect.svg +++ b/editor/icons/TextureRect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h14v-14zm2 2h10v10h-10zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="m1 1v14h14v-14zm2 2h10v10h-10zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Theme.svg b/editor/icons/Theme.svg index f35462d360..3efe868e93 100644 --- a/editor/icons/Theme.svg +++ b/editor/icons/Theme.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M8 1c-.75 1.305-1.654 2.427-2.5 3.5-1 1.208-1.865 2.349-2.346 3.5-.24.57-.404 1.148-.404 1.75s.126 1.2.322 1.75C3.795 13.535 5.718 15 8 15s4.205-1.465 4.928-3.5c.196-.55.322-1.148.322-1.75s-.164-1.18-.404-1.75C12.365 6.849 11.5 5.708 10.5 4.5 9.654 3.427 8.753 2.305 8 1Z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="url(#a)" d="M8 1c-.75 1.305-1.654 2.427-2.5 3.5-1 1.208-1.865 2.349-2.346 3.5-.24.57-.404 1.148-.404 1.75s.126 1.2.322 1.75C3.795 13.535 5.718 15 8 15s4.205-1.465 4.928-3.5c.196-.55.322-1.148.322-1.75s-.164-1.18-.404-1.75C12.365 6.849 11.5 5.708 10.5 4.5 9.654 3.427 8.753 2.305 8 1Z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThemeDeselectAll.svg b/editor/icons/ThemeDeselectAll.svg index 808aafed0f..942ea78905 100644 --- a/editor/icons/ThemeDeselectAll.svg +++ b/editor/icons/ThemeDeselectAll.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M6 7h8v2H6zM1 6h4v4H1zm5-4h8v2H6zM1 1h4v4H1zm5 11h8v2H6zm-5-1h4v4H1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 7h8v2H6zM1 6h4v4H1zm5-4h8v2H6zM1 1h4v4H1zm5 11h8v2H6zm-5-1h4v4H1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThemeRemoveAllItems.svg b/editor/icons/ThemeRemoveAllItems.svg index d476df3a14..6323b0d097 100644 --- a/editor/icons/ThemeRemoveAllItems.svg +++ b/editor/icons/ThemeRemoveAllItems.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path d="M8 14.25a1 1 0 0 0 1.084-1.084V9.753l3.851 1.927a1.084 1.084 0 0 0 .97-1.94L10.424 8l3.481-1.74a1.084 1.084 0 0 0-.97-1.94L9.084 6.247V2.834A1 1 0 0 0 8 1.75z" fill="#8eef97"/><path d="M8 1.75a1 1 0 0 0-1.084 1.084v3.413L3.065 4.32a1 1 0 0 0-.97 1.94L5.576 8 2.095 9.74a1 1 0 0 0 .97 1.94l3.851-1.927v3.413A1 1 0 0 0 8 14.25z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><path fill="#8eef97" d="M8 14.25a1 1 0 0 0 1.084-1.084V9.753l3.851 1.927a1.084 1.084 0 0 0 .97-1.94L10.424 8l3.481-1.74a1.084 1.084 0 0 0-.97-1.94L9.084 6.247V2.834A1 1 0 0 0 8 1.75z"/><path fill="url(#a)" d="M8 1.75a1 1 0 0 0-1.084 1.084v3.413L3.065 4.32a1 1 0 0 0-.97 1.94L5.576 8 2.095 9.74a1 1 0 0 0 .97 1.94l3.851-1.927v3.413A1 1 0 0 0 8 14.25z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThemeRemoveCustomItems.svg b/editor/icons/ThemeRemoveCustomItems.svg index 5748c2c6ec..c85e22b60b 100644 --- a/editor/icons/ThemeRemoveCustomItems.svg +++ b/editor/icons/ThemeRemoveCustomItems.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient x2="0" y2="16" gradientUnits="userSpaceOnUse" id="a"><stop offset=".1875" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".3125" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".4375" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".5625" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".6875" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".8125" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><circle cx="8" cy="8" r="5" fill="none" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y2="16" gradientUnits="userSpaceOnUse"><stop offset=".188" stop-color="#ff4545"/><stop stop-color="#ffe345"/><stop offset=".313" stop-color="#ffe345"/><stop stop-color="#80ff45"/><stop offset=".438" stop-color="#80ff45"/><stop stop-color="#45ffa2"/><stop offset=".563" stop-color="#45ffa2"/><stop stop-color="#45d7ff"/><stop offset=".688" stop-color="#45d7ff"/><stop stop-color="#8045ff"/><stop offset=".813" stop-color="#8045ff"/><stop stop-color="#ff4596"/></linearGradient><circle cx="8" cy="8" r="5" fill="none" stroke="url(#a)" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThemeSelectAll.svg b/editor/icons/ThemeSelectAll.svg index 1e4e5ba316..177c29fad9 100644 --- a/editor/icons/ThemeSelectAll.svg +++ b/editor/icons/ThemeSelectAll.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 1.5h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3z" fill="#fff" stroke="#e0e0e0"/><path d="M6 2h8v2H6zm0 5h8v2H6zm0 5h8v2H6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#e0e0e0" d="M1.5 1.5h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3z"/><path fill="#e0e0e0" d="M6 2h8v2H6zm0 5h8v2H6zm0 5h8v2H6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThemeSelectFull.svg b/editor/icons/ThemeSelectFull.svg index 2355aac5e4..d0b01ac490 100644 --- a/editor/icons/ThemeSelectFull.svg +++ b/editor/icons/ThemeSelectFull.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 1.5h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3zm5-10h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3z" fill="#fff" stroke="#e0e0e0"/><path d="M11 2h3v2h-3zm0 5h3v2h-3zm0 5h3v2h-3z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#e0e0e0" d="M1.5 1.5h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3zm5-10h3v3h-3zm0 5h3v3h-3zm0 5h3v3h-3z"/><path fill="#e0e0e0" d="M11 2h3v2h-3zm0 5h3v2h-3zm0 5h3v2h-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ThumbnailWait.svg b/editor/icons/ThumbnailWait.svg index 14d45f9e35..f65a098e2b 100644 --- a/editor/icons/ThumbnailWait.svg +++ b/editor/icons/ThumbnailWait.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M1 8a7 7 0 0 1 7-7h48a7 7 0 0 1 7 7v48a-7 7 0 0 1-7 7H8 a-7-7 0 0 1-7-7zM8 8l8 8M8 56l8-8M56 56l-8-8M56 8l-8 8" fill="none" stroke-linecap="round" stroke="#e0e0e0" stroke-width="2"/><path d="M22 18a2 2 0 0 0-2 2c0 3 1.934 5.25 3.746 7.32 1.52 1.74 2.832 3.286 3.75 4.68-.918 1.394-2.228 2.944-3.75 4.684C21.934 38.754 20 41 20 44a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2c0-3-1.934-5.246-3.746-7.316-1.52-1.74-2.832-3.29-3.75-4.684.918-1.394 2.228-2.94 3.75-4.68C42.066 25.25 44 23 44 20a2 2 0 0 0-2-2zm16.824 4c-.476.88-.61 1.58-1.578 2.684-1.688 1.928-3.796 3.944-5.036 6.42A2 2 0 0 0 32 32a2 2 0 0 0-.212-.894c-1.238-2.478-3.346-4.494-5.034-6.422-.968-1.106-1.102-1.802-1.58-2.684z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M1 8a7 7 0 0 1 7-7h48a7 7 0 0 1 7 7v48a-7 7 0 0 1-7 7H8 a-7-7 0 0 1-7-7zM8 8l8 8M8 56l8-8M56 56l-8-8M56 8l-8 8"/><path fill="#e0e0e0" d="M22 18a2 2 0 0 0-2 2c0 3 1.934 5.25 3.746 7.32 1.52 1.74 2.832 3.286 3.75 4.68-.918 1.394-2.228 2.944-3.75 4.684C21.934 38.754 20 41 20 44a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2c0-3-1.934-5.246-3.746-7.316-1.52-1.74-2.832-3.29-3.75-4.684.918-1.394 2.228-2.94 3.75-4.68C42.066 25.25 44 23 44 20a2 2 0 0 0-2-2zm16.824 4c-.476.88-.61 1.58-1.578 2.684-1.688 1.928-3.796 3.944-5.036 6.42A2 2 0 0 0 32 32a2 2 0 0 0-.212-.894c-1.238-2.478-3.346-4.494-5.034-6.422-.968-1.106-1.102-1.802-1.58-2.684z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileChecked.svg b/editor/icons/TileChecked.svg index fad3a773f7..22cf026b19 100644 --- a/editor/icons/TileChecked.svg +++ b/editor/icons/TileChecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.33" height="14" width="14" fill="#808080"/><path d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="gray" rx="2.33"/><path fill="#fff" d="M11.5 3.734 5.89 9.346 4.185 7.665l-1.5 1.499 3.204 3.18L13 5.235z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileMap.svg b/editor/icons/TileMap.svg index b30fbe88dd..1b45aafe41 100644 --- a/editor/icons/TileMap.svg +++ b/editor/icons/TileMap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zM1 4v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM1 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm3 0v2h2V7zM1 10v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zM1 13v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M1 1v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zM1 4v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM1 7v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm3 0v2h2V7zm3 0v2h2V7zM1 10v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zM1 13v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileMapHighlightSelected.svg b/editor/icons/TileMapHighlightSelected.svg index 8a17793bdf..4653cd8558 100644 --- a/editor/icons/TileMapHighlightSelected.svg +++ b/editor/icons/TileMapHighlightSelected.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 5.25H15v2H4.5zM2 4.283v-1h1l1 2zm0 4v1h1l1-2zm-.621-2.707-.707.707.707.707L3.5 6.283zM4.5 1.75H15v2H4.5zm0 7H15v2H4.5zm0 3.5H15v2H4.5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4.5 5.25H15v2H4.5zM2 4.283v-1h1l1 2zm0 4v1h1l1-2zm-.621-2.707-.707.707.707.707L3.5 6.283zM4.5 1.75H15v2H4.5zm0 7H15v2H4.5zm0 3.5H15v2H4.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileMapLayer.svg b/editor/icons/TileMapLayer.svg index 90664dee03..f86d2a9e84 100644 --- a/editor/icons/TileMapLayer.svg +++ b/editor/icons/TileMapLayer.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2 6.25 3.375 8 4.75l1.75-1.375zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375Zm2.626 2.063L11.5 7.5l1.75 1.375L15 7.5ZM5.376 4.062l-1.75 1.375 1.75 1.375 1.75-1.375zM8 6.124 6.25 7.499 8 8.874l1.75-1.375zm2.626 2.063-1.75 1.375 1.75 1.375 1.75-1.375ZM2.75 6.125 1 7.5l1.75 1.375L4.5 7.5Zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375ZM8 10.25l-1.75 1.375L8 13l1.75-1.375z" fill="#8da5f3"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M8 2 6.25 3.375 8 4.75l1.75-1.375zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375Zm2.626 2.063L11.5 7.5l1.75 1.375L15 7.5ZM5.376 4.062l-1.75 1.375 1.75 1.375 1.75-1.375zM8 6.124 6.25 7.499 8 8.874l1.75-1.375zm2.626 2.063-1.75 1.375 1.75 1.375 1.75-1.375ZM2.75 6.125 1 7.5l1.75 1.375L4.5 7.5Zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375ZM8 10.25l-1.75 1.375L8 13l1.75-1.375z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileSelection.svg b/editor/icons/TileSelection.svg index 7925e4e31f..987b5b87ca 100644 --- a/editor/icons/TileSelection.svg +++ b/editor/icons/TileSelection.svg @@ -1 +1 @@ -<svg height="5" viewBox="0 0 5 5" width="5" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path stroke="#fff" d="M.5.5h4v4h-4z"/><path stroke="#000" d="M1.5 1.5h2v2h-2z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="5" height="5"><g fill="none"><path stroke="#fff" d="M.5.5h4v4h-4z"/><path stroke="#000" d="M1.5 1.5h2v2h-2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TileSet.svg b/editor/icons/TileSet.svg index 5d423c0451..efdd0456ca 100644 --- a/editor/icons/TileSet.svg +++ b/editor/icons/TileSet.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zM1 4v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM1 7v2h2V7zm3 0v2h2V7zm5 1v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8zm-8 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zm3 0v2h2V1zM1 4v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zm3 0v2h2V4zM1 7v2h2V7zm3 0v2h2V7zm5 1v7h5a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v4l-1-1-1 1V8zm-8 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TileUnchecked.svg b/editor/icons/TileUnchecked.svg index 64600b9943..0e5774e861 100644 --- a/editor/icons/TileUnchecked.svg +++ b/editor/icons/TileUnchecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" rx="2.333" width="14" height="14" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="gray" rx="2.333"/></svg>
\ No newline at end of file diff --git a/editor/icons/Time.svg b/editor/icons/Time.svg index ec09b3d50c..5259f5625b 100644 --- a/editor/icons/Time.svg +++ b/editor/icons/Time.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1.5h2m-1 0v2.875m0-1.25a5.625 5.625 0 0 0 0 11.25v-1.25m0 1.25a5.625 5.625 0 0 0 0-11.25m5.375 5.625h-1m-9.875 0h1m4.5 0 2-2" stroke="#e0e0e0" fill="none" stroke-linecap="round" stroke-width="1.25"/><circle cx="8" cy="8.75" r="1" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="1.25" d="M7 1.5h2m-1 0v2.875m0-1.25a5.625 5.625 0 0 0 0 11.25v-1.25m0 1.25a5.625 5.625 0 0 0 0-11.25m5.375 5.625h-1m-9.875 0h1m4.5 0 2-2"/><circle cx="8" cy="8.75" r="1" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/TimelineIndicator.svg b/editor/icons/TimelineIndicator.svg index 3f89206814..53751867e7 100644 --- a/editor/icons/TimelineIndicator.svg +++ b/editor/icons/TimelineIndicator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 0h10l-4 4h-2z" fill="#ffffff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="m3 0h10l-4 4h-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Timer.svg b/editor/icons/Timer.svg index 565a3b7a2c..53592627b2 100644 --- a/editor/icons/Timer.svg +++ b/editor/icons/Timer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a1 1 0 0 0-1 1c0 1.5.967 2.625 1.873 3.66.76.87 1.416 1.643 1.875 2.34-.459.697-1.114 1.472-1.875 2.342C2.967 11.377 2 12.5 2 14a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1c0-1.5-.967-2.623-1.873-3.658-.76-.87-1.416-1.645-1.875-2.342.459-.697 1.114-1.47 1.875-2.34C13.033 4.625 14 3.5 14 2a1 1 0 0 0-1-1zm8.412 2c-.238.44-.305.79-.789 1.342-.844.964-1.898 1.972-2.518 3.21A1 1 0 0 0 8 8a1 1 0 0 0-.106-.447c-.619-1.239-1.673-2.247-2.517-3.211-.484-.553-.551-.901-.79-1.342z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 1a1 1 0 0 0-1 1c0 1.5.967 2.625 1.873 3.66.76.87 1.416 1.643 1.875 2.34-.459.697-1.114 1.472-1.875 2.342C2.967 11.377 2 12.5 2 14a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1c0-1.5-.967-2.623-1.873-3.658-.76-.87-1.416-1.645-1.875-2.342.459-.697 1.114-1.47 1.875-2.34C13.033 4.625 14 3.5 14 2a1 1 0 0 0-1-1zm8.412 2c-.238.44-.305.79-.789 1.342-.844.964-1.898 1.972-2.518 3.21A1 1 0 0 0 8 8a1 1 0 0 0-.106-.447c-.619-1.239-1.673-2.247-2.517-3.211-.484-.553-.551-.901-.79-1.342z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TitleBarLogo.svg b/editor/icons/TitleBarLogo.svg index 893ebb070c..74f1c1a920 100644 --- a/editor/icons/TitleBarLogo.svg +++ b/editor/icons/TitleBarLogo.svg @@ -1 +1 @@ -<svg width="100" height="24" viewBox="0 0 100 24" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M40.122 11.514c-1.211-.019-2.597.234-2.597.234v2.364h1.393l-.015 1.052q0 .587-1.159.587c-1.159 0-1.454-.328-2.045-.979q-.89-.98-.889-2.867 0-1.89.865-2.79.866-.899 2.261-.899c.411.003.821.067 1.214.191q.63.192.844.358.212.172.405.17.19 0 .616-.45.43-.45.767-1.359c.224-.61.337-1.076.337-1.407a6 6 0 0 0-.023-.674q-.47-.517-1.744-.821-1.268-.305-2.844-.304-3.463 0-5.419 2.181-1.957 2.182-1.957 5.668 0 4.094 2.001 6.207 2.002 2.114 5.263 2.113 1.754 0 3.114-.303 1.361-.303 1.811-.619l.09-7.038c0-.408-1.079-.594-2.289-.615M51.279 8.23q-1.078 0-1.81.989-.73.99-.731 2.776 0 1.79.698 2.745.697.957 1.832.957c1.135 0 1.372-.323 1.844-.969q.709-.966.709-2.766c0-1.8-.244-2.122-.731-2.767q-.73-.965-1.811-.965m-.011 11.85q-3.16 0-5.15-2.067-1.989-2.07-1.989-6.039 0-3.97 2.011-6.017 2.014-2.046 5.196-2.046 3.183-.001 5.138 2.014 1.958 2.013 1.957 6.094t-2.001 6.073q-2.002 1.988-5.162 1.988M64.77 8.386v6.727q0 .47.068.595c.068.125.18.124.404.124q1.238 0 1.879-.923.641-.921.64-3.069c-.001-2.148-.222-2.366-.663-2.799q-.664-.654-2.103-.655zm-4.317 10.436V5.33q0-.563.282-.891a.92.92 0 0 1 .73-.326h3.756q3.575 0 5.429 1.801 1.857 1.798 1.857 5.666 0 8.276-7.063 8.276h-3.845q-1.146 0-1.147-1.034M81.186 8.23q-1.08 0-1.812.989-.73.99-.73 2.776 0 1.79.697 2.745.697.957 1.833.957c1.136 0 1.372-.323 1.844-.969q.709-.966.709-2.766c0-1.8-.244-2.122-.731-2.767q-.73-.965-1.81-.965m-.012 11.85q-3.16 0-5.15-2.067-1.99-2.07-1.99-6.039 0-3.97 2.012-6.017 2.014-2.046 5.196-2.046c3.182 0 3.834.67 5.138 2.014q1.957 2.013 1.957 6.094t-2.002 6.073q-2.001 1.988-5.161 1.988m15.587-.552q0 .448-2.226.449-2.227-.001-2.228-.449V8.238h-2.698q-.382 0-.539-1.036a7 7 0 0 1-.066-1.011q0-.517.065-1.012c.105-.688.285-1.036.54-1.036h9.783q.382.001.541 1.036a7.7 7.7 0 0 1 0 2.023q-.16 1.036-.541 1.036h-2.631z"/><g fill="#fefefe" transform="translate(-.27 -1.335)scale(.02592)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(-.27 -1.335)scale(.02592)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="100" height="24" stroke-linejoin="round"><path fill="#e0e0e0" d="M40.122 11.514c-1.211-.019-2.597.234-2.597.234v2.364h1.393l-.015 1.052q0 .587-1.159.587c-1.159 0-1.454-.328-2.045-.979q-.89-.98-.889-2.867 0-1.89.865-2.79.866-.899 2.261-.899c.411.003.821.067 1.214.191q.63.192.844.358.212.172.405.17.19 0 .616-.45.43-.45.767-1.359c.224-.61.337-1.076.337-1.407a6 6 0 0 0-.023-.674q-.47-.517-1.744-.821-1.268-.305-2.844-.304-3.463 0-5.419 2.181-1.957 2.182-1.957 5.668 0 4.094 2.001 6.207 2.002 2.114 5.263 2.113 1.754 0 3.114-.303 1.361-.303 1.811-.619l.09-7.038c0-.408-1.079-.594-2.289-.615M51.279 8.23q-1.078 0-1.81.989-.73.99-.731 2.776 0 1.79.698 2.745.697.957 1.832.957c1.135 0 1.372-.323 1.844-.969q.709-.966.709-2.766c0-1.8-.244-2.122-.731-2.767q-.73-.965-1.811-.965m-.011 11.85q-3.16 0-5.15-2.067-1.989-2.07-1.989-6.039 0-3.97 2.011-6.017 2.014-2.046 5.196-2.046 3.183-.001 5.138 2.014 1.958 2.013 1.957 6.094t-2.001 6.073q-2.002 1.988-5.162 1.988M64.77 8.386v6.727q0 .47.068.595c.068.125.18.124.404.124q1.238 0 1.879-.923.641-.921.64-3.069c-.001-2.148-.222-2.366-.663-2.799q-.664-.654-2.103-.655zm-4.317 10.436V5.33q0-.563.282-.891a.92.92 0 0 1 .73-.326h3.756q3.575 0 5.429 1.801 1.857 1.798 1.857 5.666 0 8.276-7.063 8.276h-3.845q-1.146 0-1.147-1.034M81.186 8.23q-1.08 0-1.812.989-.73.99-.73 2.776 0 1.79.697 2.745.697.957 1.833.957c1.136 0 1.372-.323 1.844-.969q.709-.966.709-2.766c0-1.8-.244-2.122-.731-2.767q-.73-.965-1.81-.965m-.012 11.85q-3.16 0-5.15-2.067-1.99-2.07-1.99-6.039 0-3.97 2.012-6.017 2.014-2.046 5.196-2.046c3.182 0 3.834.67 5.138 2.014q1.957 2.013 1.957 6.094t-2.002 6.073q-2.001 1.988-5.161 1.988m15.587-.552q0 .448-2.226.449-2.227-.001-2.228-.449V8.238h-2.698q-.382 0-.539-1.036a7 7 0 0 1-.066-1.011q0-.517.065-1.012c.105-.688.285-1.036.54-1.036h9.783q.382.001.541 1.036a7.7 7.7 0 0 1 0 2.023q-.16 1.036-.541 1.036h-2.631z"/><g fill="#fefefe" transform="translate(-.27 -1.335)scale(.02592)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(-.27 -1.335)scale(.02592)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ToolAddNode.svg b/editor/icons/ToolAddNode.svg index 74a4ac93b1..99f5afe272 100644 --- a/editor/icons/ToolAddNode.svg +++ b/editor/icons/ToolAddNode.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm5.25 0a1 1 0 0 1 1 1v1.75H11a1 1 0 0 1 1 1v.5a1 1 0 0 1-1 1H9.25V11a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V9.25H5a1 1 0 0 1-1-1v-.5a1 1 0 0 1 1-1h1.75V5a1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1zm5.25 0a1 1 0 0 1 1 1v1.75H11a1 1 0 0 1 1 1v.5a1 1 0 0 1-1 1H9.25V11a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V9.25H5a1 1 0 0 1-1-1v-.5a1 1 0 0 1 1-1h1.75V5a1 1 0 0 1 1-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ToolBoneSelect.svg b/editor/icons/ToolBoneSelect.svg index 4cf9f9a99d..1bddf041c5 100644 --- a/editor/icons/ToolBoneSelect.svg +++ b/editor/icons/ToolBoneSelect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M16 11.46 9.858 8.933l-1.572-.647.647 1.572L11.46 16l.913-2.72 1.815 1.817.91-.909-1.818-1.815zM10.478 1a2.466 2.466 0 0 0-2.094 3.824l-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l.17-.17-.886-2.152a1.48 1.48 0 0 1 1.958-1.957l2.151.885.167-.166a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M16 11.46 9.858 8.933l-1.572-.647.647 1.572L11.46 16l.913-2.72 1.815 1.817.91-.909-1.818-1.815zM10.478 1a2.466 2.466 0 0 0-2.094 3.824l-3.56 3.56a2.466 2.466 0 1 0-1.705 4.496 2.466 2.466 0 1 0 4.496-1.705l.17-.17-.886-2.152a1.48 1.48 0 0 1 1.958-1.957l2.151.885.167-.166a2.466 2.466 0 1 0 1.705-4.496A2.466 2.466 0 0 0 10.478 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ToolConnect.svg b/editor/icons/ToolConnect.svg index b4f71a18c5..94c97c0622 100644 --- a/editor/icons/ToolConnect.svg +++ b/editor/icons/ToolConnect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><rect height="2" ry=".75" width="14" x="1" y="7"/><path d="M5 1v14l8-7z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><rect width="14" height="2" x="1" y="7" ry=".75"/><path d="M5 1v14l8-7z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ToolMove.svg b/editor/icons/ToolMove.svg index 889afc5fe6..756c8f5442 100644 --- a/editor/icons/ToolMove.svg +++ b/editor/icons/ToolMove.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M8 1a1 1 0 0 0-.691.291l-2 2 1.414 1.414 1.293-1.293 1.293 1.293 1.414-1.414-2-2A1 1 0 0 0 8 1zM3.309 5.291l-2 2a1 1 0 0 0 0 1.414l2 2 1.414-1.414L3.43 7.998l1.293-1.293-1.414-1.414zm9.414 0-1.414 1.414 1.293 1.293-1.293 1.293 1.414 1.414 2-2a1 1 0 0 0 0-1.414l-2-2zm-6 6-1.414 1.414 2 2a1 1 0 0 0 1.414 0l2-2-1.414-1.414-1.293 1.293-1.293-1.293z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M8 1a1 1 0 0 0-.691.291l-2 2 1.414 1.414 1.293-1.293 1.293 1.293 1.414-1.414-2-2A1 1 0 0 0 8 1zM3.309 5.291l-2 2a1 1 0 0 0 0 1.414l2 2 1.414-1.414L3.43 7.998l1.293-1.293-1.414-1.414zm9.414 0-1.414 1.414 1.293 1.293-1.293 1.293 1.414 1.414 2-2a1 1 0 0 0 0-1.414l-2-2zm-6 6-1.414 1.414 2 2a1 1 0 0 0 1.414 0l2-2-1.414-1.414-1.293 1.293-1.293-1.293z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ToolPan.svg b/editor/icons/ToolPan.svg index a51e3e76a7..1802393896 100644 --- a/editor/icons/ToolPan.svg +++ b/editor/icons/ToolPan.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11 2a1 1 0 0 0-2 0v6H8V3a1 1 0 0 0-2 0v8.05l-2.5-1.8A1 1 0 0 0 1.875 11L6 15h6a2 2 0 0 0 2-2V4a1 1 0 0 0-2 0v4h-1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M11 2a1 1 0 0 0-2 0v6H8V3a1 1 0 0 0-2 0v8.05l-2.5-1.8A1 1 0 0 0 1.875 11L6 15h6a2 2 0 0 0 2-2V4a1 1 0 0 0-2 0v4h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ToolRotate.svg b/editor/icons/ToolRotate.svg index a24b6b40f6..3b1d90cd7b 100644 --- a/editor/icons/ToolRotate.svg +++ b/editor/icons/ToolRotate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M8 1a7 7 0 0 0-4.982 11.998H1.911v2h4a1 1 0 0 0 .97-1.242l-1-4-1.94.486.28 1.121a5 5 0 1 1 7.223.168l1.416 1.416A7 7 0 0 0 8 1z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M8 1a7 7 0 0 0-4.982 11.998H1.911v2h4a1 1 0 0 0 .97-1.242l-1-4-1.94.486.28 1.121a5 5 0 1 1 7.223.168l1.416 1.416A7 7 0 0 0 8 1z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ToolScale.svg b/editor/icons/ToolScale.svg index 8072f236be..3972535f78 100644 --- a/editor/icons/ToolScale.svg +++ b/editor/icons/ToolScale.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M9 1a1 1 0 0 0 0 2h2.586l-1.293 1.293 1.414 1.414L13 4.414V7a1 1 0 0 0 2 0V2a1 1 0 0 0-1-1zM3 9a1 1 0 0 0-2 0v5a1 1 0 0 0 1 1h5a1 1 0 0 0 0-2H4.414l1.293-1.293-1.414-1.414L3 11.586V9z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2"/><path d="M9 1a1 1 0 0 0 0 2h2.586l-1.293 1.293 1.414 1.414L13 4.414V7a1 1 0 0 0 2 0V2a1 1 0 0 0-1-1zM3 9a1 1 0 0 0-2 0v5a1 1 0 0 0 1 1h5a1 1 0 0 0 0-2H4.414l1.293-1.293-1.414-1.414L3 11.586V9z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ToolSelect.svg b/editor/icons/ToolSelect.svg index 1079ab5ab2..771558a0a8 100644 --- a/editor/icons/ToolSelect.svg +++ b/editor/icons/ToolSelect.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 6.932 2 1.995l4.936 12 1.421-4.23 2.826 2.825 1.412-1.412L9.77 8.352z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M14 6.932 2 1.995l4.936 12 1.421-4.23 2.826 2.825 1.412-1.412L9.77 8.352z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ToolTriangle.svg b/editor/icons/ToolTriangle.svg index 1d07f1859e..f906d73f58 100644 --- a/editor/icons/ToolTriangle.svg +++ b/editor/icons/ToolTriangle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1.695 10.034 8.814 2.17l5.83 11.729z" fill="#e0e0e0"/><g fill="#414042" stroke="#e0e0e0" stroke-width=".5"><circle cx="8.661" cy="2.322" r="1.6"/><circle cx="13.932" cy="13.4" r="1.6"/><circle cx="2.169" cy="10" r="1.6"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1.695 10.034 8.814 2.17l5.83 11.729z"/><g fill="#414042" stroke="#e0e0e0" stroke-width=".5"><circle cx="8.661" cy="2.322" r="1.6"/><circle cx="13.932" cy="13.4" r="1.6"/><circle cx="2.169" cy="10" r="1.6"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Tools.svg b/editor/icons/Tools.svg index 1591a56eab..1b25d62027 100644 --- a/editor/icons/Tools.svg +++ b/editor/icons/Tools.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 1 3 3l1 2v4H2v3.5a2.5 2.5 0 0 0 5 0V9H5V5l1-2-1-2zm6 .174a3 3 0 0 0 0 5.652V14a1 1 0 0 0 2 0V6.824a3 3 0 0 0 0-5.648V4a1 1 0 0 1-2 0z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M4 1 3 3l1 2v4H2v3.5a2.5 2.5 0 0 0 5 0V9H5V5l1-2-1-2zm6 .174a3 3 0 0 0 0 5.652V14a1 1 0 0 0 2 0V6.824a3 3 0 0 0 0-5.648V4a1 1 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TorusMesh.svg b/editor/icons/TorusMesh.svg index adf3a8403b..5b09ef57be 100644 --- a/editor/icons/TorusMesh.svg +++ b/editor/icons/TorusMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#ffca5f"><path d="M2.5 10a6 4 0 0 0 11 0 4 4 0 0 0 0-4 6 4 0 0 0-11 0 4 4 0 0 0 0 4z" stroke-width="2"/><path d="M6.2 7.2a2 1 0 1 0 3.6 0" stroke-width="1.75" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#ffca5f"><path stroke-width="2" d="M2.5 10a6 4 0 0 0 11 0 4 4 0 0 0 0-4 6 4 0 0 0-11 0 4 4 0 0 0 0 4z"/><path stroke-linecap="round" stroke-width="1.75" d="M6.2 7.2a2 1 0 1 0 3.6 0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TouchScreenButton.svg b/editor/icons/TouchScreenButton.svg index 183f414e9a..ff642378d4 100644 --- a/editor/icons/TouchScreenButton.svg +++ b/editor/icons/TouchScreenButton.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2V4H3V2h8v2H9v1h2a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm5 7V4a1 1 0 0 0-2 0v7.05l-2.5-1.8A1 1 0 0 0 1.875 11L6 15h6a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M3 1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2V4H3V2h8v2H9v1h2a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm5 7V4a1 1 0 0 0-2 0v7.05l-2.5-1.8A1 1 0 0 0 1.875 11L6 15h6a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TrackCapture.svg b/editor/icons/TrackCapture.svg index 6251330b12..3d70d51388 100644 --- a/editor/icons/TrackCapture.svg +++ b/editor/icons/TrackCapture.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-.75H3.4c-.3 0-.4-.2-.4-1v-.5c0-.8.1-1 .4-1H7V2a1 1 0 0 0-1-1zm5.5 6h2l.75-1.5h2L13 7h2l-3-6h-1.5zm3.75-4 .5 1h-1z" fill="#e1da5b"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="#e1da5b" d="M2 1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-.75H3.4c-.3 0-.4-.2-.4-1v-.5c0-.8.1-1 .4-1H7V2a1 1 0 0 0-1-1zm5.5 6h2l.75-1.5h2L13 7h2l-3-6h-1.5zm3.75-4 .5 1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TrackColor.svg b/editor/icons/TrackColor.svg index 93be9b6b48..3ec87008e8 100644 --- a/editor/icons/TrackColor.svg +++ b/editor/icons/TrackColor.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" height="6.1" ry=".763" transform="rotate(-45 5 5)" width="6.1" x="1.95" y="1.95"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><rect width="6.1" height="6.1" x="1.95" y="1.95" fill="#fff" ry=".763" transform="rotate(-45 5 5)"/></svg>
\ No newline at end of file diff --git a/editor/icons/TrackContinuous.svg b/editor/icons/TrackContinuous.svg index b48e67af76..f085882a00 100644 --- a/editor/icons/TrackContinuous.svg +++ b/editor/icons/TrackContinuous.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 6c6 0 6-4 12-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" d="M2 6c6 0 6-4 12-4"/></svg>
\ No newline at end of file diff --git a/editor/icons/TrackDiscrete.svg b/editor/icons/TrackDiscrete.svg index 007729e580..2909c52806 100644 --- a/editor/icons/TrackDiscrete.svg +++ b/editor/icons/TrackDiscrete.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M14 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM8 3a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM2 5a1 1 0 0 0 0 2 1 1 0 0 0 0-2z" fill="#b9ec41"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="8"><path fill="#b9ec41" d="M14 1a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM8 3a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM2 5a1 1 0 0 0 0 2 1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Transform2D.svg b/editor/icons/Transform2D.svg index 58e5621b33..60911580e1 100644 --- a/editor/icons/Transform2D.svg +++ b/editor/icons/Transform2D.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 2v2h2v6h2V4h3a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h7a4 4 0 0 0 0-8h-2v6H7a3 3 0 0 0 0-6zm12 2a2 2 0 0 1 0 4z" fill="#b9ec41"/><path d="M6.5 2v2H7a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H7a3 3 0 0 0 0-6h-.5z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#b9ec41" d="M0 2v2h2v6h2V4h3a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h7a4 4 0 0 0 0-8h-2v6H7a3 3 0 0 0 0-6zm12 2a2 2 0 0 1 0 4z"/><path fill="#fff" fill-opacity=".4" d="M6.5 2v2H7a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H7a3 3 0 0 0 0-6h-.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Transform3D.svg b/editor/icons/Transform3D.svg index f07775446f..3a257ecd7b 100644 --- a/editor/icons/Transform3D.svg +++ b/editor/icons/Transform3D.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4 4h3.349a1 1.267 0 0 1-1 1.267v1a.866.866 0 0 1 0 1.732h-1v2h1a2.81 2.81 0 0 0 2.232-4.734A1.32 1.32 0 0 0 9.345 4V2H0v2h2v6h2zm6 6h2a4 4 0 0 0 0-8h-2zm2-6a2 2 0 0 1 0 4z" fill="#f68f45"/><path d="M5.5 4h1.849a1 1.267 0 0 1-1 1.267v1a.866.866 0 0 1 0 1.732h-1v2h1a2.81 2.81 0 0 0 2.232-4.734A1.32 1.32 0 0 0 9.345 4V2H5.5z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f68f45" d="M4 4h3.349a1 1.267 0 0 1-1 1.267v1a.866.866 0 0 1 0 1.732h-1v2h1a2.81 2.81 0 0 0 2.232-4.734A1.32 1.32 0 0 0 9.345 4V2H0v2h2v6h2zm6 6h2a4 4 0 0 0 0-8h-2zm2-6a2 2 0 0 1 0 4z"/><path fill="#fff" fill-opacity=".4" d="M5.5 4h1.849a1 1.267 0 0 1-1 1.267v1a.866.866 0 0 1 0 1.732h-1v2h1a2.81 2.81 0 0 0 2.232-4.734A1.32 1.32 0 0 0 9.345 4V2H5.5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionEnd.svg b/editor/icons/TransitionEnd.svg index 62c9e1fae9..10c5b5f01c 100644 --- a/editor/icons/TransitionEnd.svg +++ b/editor/icons/TransitionEnd.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M2.988 3c-.547.01-.987.451-.988.998v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2.988 3z"/><rect height="10.067" ry=".763" width="3.068" x="11.17" y="3.008"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M2.988 3c-.547.01-.987.451-.988.998v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2.988 3z"/><rect width="3.068" height="10.067" x="11.17" y="3.008" ry=".763"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionEndAuto.svg b/editor/icons/TransitionEndAuto.svg index 24fac4a3eb..a812680f36 100644 --- a/editor/icons/TransitionEndAuto.svg +++ b/editor/icons/TransitionEndAuto.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57"><path d="M3.555 3.168A1 1 0 0 0 2 4v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664z"/><rect height="10.067" ry=".763" width="3.068" x="11.17" y="3"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#77ce57"><path d="M3.555 3.168A1 1 0 0 0 2 4v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664z"/><rect width="3.068" height="10.067" x="11.17" y="3" ry=".763"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionEndAutoBig.svg b/editor/icons/TransitionEndAutoBig.svg index b7a9b85b23..95156e59d9 100644 --- a/editor/icons/TransitionEndAutoBig.svg +++ b/editor/icons/TransitionEndAutoBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57" stroke="#414042" stroke-width="1.41"><path d="M2.836 2.996a1.413 1.413 0 0 0-1.394 1.407v11.28a1.41 1.41 0 0 0 2.192 1.173l8.46-5.64a1.41 1.41 0 0 0 0-2.346l-8.46-5.64a1.41 1.41 0 0 0-.798-.234z"/><rect height="14.194" ry="1.076" width="4.326" x="14.371" y="3.008"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><g fill="#77ce57" stroke="#414042" stroke-width="1.41"><path d="M2.836 2.996a1.413 1.413 0 0 0-1.394 1.407v11.28a1.41 1.41 0 0 0 2.192 1.173l8.46-5.64a1.41 1.41 0 0 0 0-2.346l-8.46-5.64a1.41 1.41 0 0 0-.798-.234z"/><rect width="4.326" height="14.194" x="14.371" y="3.008" ry="1.076"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionEndBig.svg b/editor/icons/TransitionEndBig.svg index 11f2871cc5..251ff3b578 100644 --- a/editor/icons/TransitionEndBig.svg +++ b/editor/icons/TransitionEndBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke="#414042" stroke-width="1.42"><path d="M2.79 3.175a1.424 1.424 0 0 0-1.403 1.417v11.363c0 1.134 1.264 1.811 2.208 1.182l8.522-5.681a1.42 1.42 0 0 0 0-2.364L3.595 3.411a1.42 1.42 0 0 0-.805-.236z"/><rect height="14.299" ry="1.084" width="4.358" x="14.411" y="3.187"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><g fill="#e0e0e0" stroke="#414042" stroke-width="1.42"><path d="M2.79 3.175a1.424 1.424 0 0 0-1.403 1.417v11.363c0 1.134 1.264 1.811 2.208 1.182l8.522-5.681a1.42 1.42 0 0 0 0-2.364L3.595 3.411a1.42 1.42 0 0 0-.805-.236z"/><rect width="4.358" height="14.299" x="14.411" y="3.187" ry="1.084"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionImmediate.svg b/editor/icons/TransitionImmediate.svg index b39aaa77c4..4d4275363a 100644 --- a/editor/icons/TransitionImmediate.svg +++ b/editor/icons/TransitionImmediate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionImmediateAuto.svg b/editor/icons/TransitionImmediateAuto.svg index 6118e86250..04267254bb 100644 --- a/editor/icons/TransitionImmediateAuto.svg +++ b/editor/icons/TransitionImmediateAuto.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 4z" fill="#77ce57"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#77ce57" d="M2 12a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionImmediateAutoBig.svg b/editor/icons/TransitionImmediateAutoBig.svg index accc4e49fd..c59c4dbb93 100644 --- a/editor/icons/TransitionImmediateAutoBig.svg +++ b/editor/icons/TransitionImmediateAutoBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M5.111 2.306c-.86.015-1.55.708-1.553 1.568v12.568c0 1.254 1.399 2.003 2.443 1.307l9.426-6.284a1.571 1.571 0 0 0 0-2.614L6.001 2.567a1.57 1.57 0 0 0-.89-.261z" fill="#77ce57" stroke="#414042" stroke-width="1.571"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill="#77ce57" stroke="#414042" stroke-width="1.571" d="M5.111 2.306c-.86.015-1.55.708-1.553 1.568v12.568c0 1.254 1.399 2.003 2.443 1.307l9.426-6.284a1.571 1.571 0 0 0 0-2.614L6.001 2.567a1.57 1.57 0 0 0-.89-.261z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionImmediateBig.svg b/editor/icons/TransitionImmediateBig.svg index ce35cb0770..3180121e40 100644 --- a/editor/icons/TransitionImmediateBig.svg +++ b/editor/icons/TransitionImmediateBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M5.111 2.306c-.86.015-1.55.708-1.553 1.568v12.568c0 1.254 1.399 2.003 2.443 1.307l9.426-6.284a1.571 1.571 0 0 0 0-2.614L6.001 2.567a1.57 1.57 0 0 0-.89-.261z" fill="#e0e0e0" stroke="#414042" stroke-width="1.571"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill="#e0e0e0" stroke="#414042" stroke-width="1.571" d="M5.111 2.306c-.86.015-1.55.708-1.553 1.568v12.568c0 1.254 1.399 2.003 2.443 1.307l9.426-6.284a1.571 1.571 0 0 0 0-2.614L6.001 2.567a1.57 1.57 0 0 0-.89-.261z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionSync.svg b/editor/icons/TransitionSync.svg index 87e25b870b..c2550eb667 100644 --- a/editor/icons/TransitionSync.svg +++ b/editor/icons/TransitionSync.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="M7.543 3c-.547.01-.988.451-.989.998v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 7.543 3z"/><rect height="10.067" ry=".763" width="3.068" x="1.966" y="3.008"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#e0e0e0"><path d="M7.543 3c-.547.01-.988.451-.989.998v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 7.543 3z"/><rect width="3.068" height="10.067" x="1.966" y="3.008" ry=".763"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionSyncAuto.svg b/editor/icons/TransitionSyncAuto.svg index 9e22974d49..9ebd68b69e 100644 --- a/editor/icons/TransitionSyncAuto.svg +++ b/editor/icons/TransitionSyncAuto.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57"><path d="M8.07 3c-.547.01-.987.451-.988.998v8a1 1 0 0 0 1.554.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 8.07 3z"/><rect height="10.067" ry=".763" width="3.068" x="1.966" y="3.008"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#77ce57"><path d="M8.07 3c-.547.01-.987.451-.988.998v8a1 1 0 0 0 1.554.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 8.07 3z"/><rect width="3.068" height="10.067" x="1.966" y="3.008" ry=".763"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionSyncAutoBig.svg b/editor/icons/TransitionSyncAutoBig.svg index 6ca4e20465..6e2de97fee 100644 --- a/editor/icons/TransitionSyncAutoBig.svg +++ b/editor/icons/TransitionSyncAutoBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57" stroke="#414042" stroke-width="1.41"><path d="M9.209 2.996a1.413 1.413 0 0 0-1.394 1.407v11.28a1.41 1.41 0 0 0 2.192 1.173l8.46-5.64a1.41 1.41 0 0 0 0-2.346l-8.46-5.64a1.41 1.41 0 0 0-.798-.234z"/><rect height="14.194" ry="1.076" width="4.326" x="1.626" y="3.008"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><g fill="#77ce57" stroke="#414042" stroke-width="1.41"><path d="M9.209 2.996a1.413 1.413 0 0 0-1.394 1.407v11.28a1.41 1.41 0 0 0 2.192 1.173l8.46-5.64a1.41 1.41 0 0 0 0-2.346l-8.46-5.64a1.41 1.41 0 0 0-.798-.234z"/><rect width="4.326" height="14.194" x="1.626" y="3.008" ry="1.076"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/TransitionSyncBig.svg b/editor/icons/TransitionSyncBig.svg index 4fc445e268..c460930cde 100644 --- a/editor/icons/TransitionSyncBig.svg +++ b/editor/icons/TransitionSyncBig.svg @@ -1 +1 @@ -<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke="#414042" stroke-width="1.42"><path d="M8.96 3.175a1.424 1.424 0 0 0-1.404 1.417v11.363c0 1.134 1.264 1.811 2.208 1.182l8.522-5.681a1.42 1.42 0 0 0 0-2.364L9.764 3.411a1.42 1.42 0 0 0-.804-.236z"/><rect height="14.299" ry="1.084" width="4.358" x="1.462" y="3.187"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><g fill="#e0e0e0" stroke="#414042" stroke-width="1.42"><path d="M8.96 3.175a1.424 1.424 0 0 0-1.404 1.417v11.363c0 1.134 1.264 1.811 2.208 1.182l8.522-5.681a1.42 1.42 0 0 0 0-2.364L9.764 3.411a1.42 1.42 0 0 0-.804-.236z"/><rect width="4.358" height="14.299" x="1.462" y="3.187" ry="1.084"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Translation.svg b/editor/icons/Translation.svg index 5c104695b2..bbcebcff94 100644 --- a/editor/icons/Translation.svg +++ b/editor/icons/Translation.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 2a1 1 0 0 0-1.715-.697 3 3 0 1 0 0 5.392A1 1 0 0 0 7 6zM4 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.887 3.53-1.79.894.29.576H7v2h.82a5.432 5.432 0 0 0 1.2 2.73c-.616.163-1.357.266-2.266.27v2c1.677-.01 3.041-.313 4.111-.834 1.07.52 2.434.826 4.111.834v-2c-.909 0-1.65-.106-2.266-.27A5.432 5.432 0 0 0 13.932 10H15V8h-3.379zM9.863 10h2.024a3.432 3.432 0 0 1-1.012 1.783A3.432 3.432 0 0 1 9.863 10z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M7 2a1 1 0 0 0-1.715-.697 3 3 0 1 0 0 5.392A1 1 0 0 0 7 6zM4 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm6.887 3.53-1.79.894.29.576H7v2h.82a5.432 5.432 0 0 0 1.2 2.73c-.616.163-1.357.266-2.266.27v2c1.677-.01 3.041-.313 4.111-.834 1.07.52 2.434.826 4.111.834v-2c-.909 0-1.65-.106-2.266-.27A5.432 5.432 0 0 0 13.932 10H15V8h-3.379zM9.863 10h2.024a3.432 3.432 0 0 1-1.012 1.783A3.432 3.432 0 0 1 9.863 10z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Tree.svg b/editor/icons/Tree.svg index 2316bd9498..40dde340e0 100644 --- a/editor/icons/Tree.svg +++ b/editor/icons/Tree.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v13a1 1 0 0 0 1 1h13v-2H3V7h2v3a1 1 0 0 0 1 1h9V9H7V7h8V5H3V3h12V1z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M1 1v13a1 1 0 0 0 1 1h13v-2H3V7h2v3a1 1 0 0 0 1 1h9V9H7V7h8V5H3V3h12V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TripleBar.svg b/editor/icons/TripleBar.svg index 92c3e0ac54..a83bc80497 100644 --- a/editor/icons/TripleBar.svg +++ b/editor/icons/TripleBar.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M2 4h12zm0 4h12zm0 4h12z" fill="none" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" d="M2 4h12zm0 4h12zm0 4h12z"/></svg>
\ No newline at end of file diff --git a/editor/icons/TubeTrailMesh.svg b/editor/icons/TubeTrailMesh.svg index 1cbab36cbe..4c2558dbcc 100644 --- a/editor/icons/TubeTrailMesh.svg +++ b/editor/icons/TubeTrailMesh.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11.75 2a5 8 0 0 1 0 11h-8.5a5 8 0 0 1 0 -11z M4 7.5 h7" fill="none" stroke-width="2" stroke-linejoin="round" stroke="#ffca5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#ffca5f" stroke-linejoin="round" stroke-width="2" d="M11.75 2a5 8 0 0 1 0 11h-8.5a5 8 0 0 1 0 -11z M4 7.5 h7"/></svg>
\ No newline at end of file diff --git a/editor/icons/Tween.svg b/editor/icons/Tween.svg index bb70c9db03..da3172008c 100644 --- a/editor/icons/Tween.svg +++ b/editor/icons/Tween.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h6v6h2v-8zm-1 4 1.793 1.793-4.793 4.793v-4.5859h-2v8h8v-2h-4.5859l4.793-4.793 1.793 1.793v-5h-5z" fill="#c38ef1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#c38ef1" d="m7 1v2h6v6h2v-8zm-1 4 1.793 1.793-4.793 4.793v-4.5859h-2v8h8v-2h-4.5859l4.793-4.793 1.793 1.793v-5h-5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/UndoRedo.svg b/editor/icons/UndoRedo.svg index 459efeba39..6350eab2d1 100644 --- a/editor/icons/UndoRedo.svg +++ b/editor/icons/UndoRedo.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 9H1V2l2 2a3.875 5 30 0 1 9 11 3.5 5 10 0 0-6-8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 9H1V2l2 2a3.875 5 30 0 1 9 11 3.5 5 10 0 0-6-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Ungroup.svg b/editor/icons/Ungroup.svg index ff1169de50..0a8e2d52ee 100644 --- a/editor/icons/Ungroup.svg +++ b/editor/icons/Ungroup.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z" fill="#e0e0e0" fill-opacity=".4"/><path d="M7 1v2h2V1H7zm6 0v2h2V1h-2zM1 7v2h2V7H1zm6 0v2h2V7H7zm6 0v2h2V7h-2zM1 13v2h2v-2H1zm6 0v2h2v-2H7z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" fill-opacity=".4" d="M7 1v6H1v8h8V9h6V1zm2 2h4v4H9z"/><path fill="#fff" d="M7 1v2h2V1H7zm6 0v2h2V1h-2zM1 7v2h2V7H1zm6 0v2h2V7H7zm6 0v2h2V7h-2zM1 13v2h2v-2H1zm6 0v2h2v-2H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Unlinked.svg b/editor/icons/Unlinked.svg index 47c4f30ac2..d7d9f95486 100644 --- a/editor/icons/Unlinked.svg +++ b/editor/icons/Unlinked.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><g fill="none" stroke="#e0e0e0" stroke-linecap="round"><path d="M4.22 8.1a3 3 0 1 0 3.68 2.1M8.1 4.22a3 3 0 1 1 2.1 3.68" stroke-width="2"/><path d="M3.5 5.5 h-2 M5.5 3.5 v-2 M4.5 4.5 l-2 -2" stroke-width="1"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#e0e0e0" stroke-linecap="round"><path stroke-width="2" d="M4.22 8.1a3 3 0 1 0 3.68 2.1M8.1 4.22a3 3 0 1 1 2.1 3.68"/><path d="M3.5 5.5 h-2 M5.5 3.5 v-2 M4.5 4.5 l-2 -2"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/Unlock.svg b/editor/icons/Unlock.svg index d377cf1d0a..1db1612fd4 100644 --- a/editor/icons/Unlock.svg +++ b/editor/icons/Unlock.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M13 6a5 5 0 0 0-7.498-4.326l1 1.732A3 3 0 0 1 11 6v2H2v7h12V8h-1zm-6 4h2v3H7z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M13 6a5 5 0 0 0-7.498-4.326l1 1.732A3 3 0 0 1 11 6v2H2v7h12V8h-1zm-6 4h2v3H7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/UseBlendDisable.svg b/editor/icons/UseBlendDisable.svg index 8b73ff4be9..b408a184e0 100644 --- a/editor/icons/UseBlendDisable.svg +++ b/editor/icons/UseBlendDisable.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 1h7v14h-7z" fill="#a3e595" opacity=".5"/><path d="M10.5 15V2m-5 0v13M15 2H1" fill="none" stroke="#a3e595" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#a3e595" d="M4.5 1h7v14h-7z" opacity=".5"/><path fill="none" stroke="#a3e595" stroke-width="2" d="M10.5 15V2m-5 0v13M15 2H1"/></svg>
\ No newline at end of file diff --git a/editor/icons/UseBlendEnable.svg b/editor/icons/UseBlendEnable.svg index 385fb52c6b..5c540bf1b3 100644 --- a/editor/icons/UseBlendEnable.svg +++ b/editor/icons/UseBlendEnable.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2.744C4 5.1 1 9.519 1 14v1h14v-1c0-4.48-3-8.9-7-11.256z" fill="#95c6e8" opacity=".5"/><path d="M14 2C8 2 2 8 2 14m12 0C14 8 8 2 2 2" fill="none" stroke="#95c6e8" stroke-linecap="square" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#95c6e8" d="M8 2.744C4 5.1 1 9.519 1 14v1h14v-1c0-4.48-3-8.9-7-11.256z" opacity=".5"/><path fill="none" stroke="#95c6e8" stroke-linecap="square" stroke-width="2" d="M14 2C8 2 2 8 2 14m12 0C14 8 8 2 2 2"/></svg>
\ No newline at end of file diff --git a/editor/icons/Uv.svg b/editor/icons/Uv.svg index be004249ec..a462277990 100644 --- a/editor/icons/Uv.svg +++ b/editor/icons/Uv.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 5v4a3 3 0 0 0 6 0V5H5v4a1 1 0 0 1-2 0V5zm8 0 2 7h3l2-7h-2l-1.5 5.25L11 5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 5v4a3 3 0 0 0 6 0V5H5v4a1 1 0 0 1-2 0V5zm8 0 2 7h3l2-7h-2l-1.5 5.25L11 5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VBoxContainer.svg b/editor/icons/VBoxContainer.svg index 18de011cde..85163aba46 100644 --- a/editor/icons/VBoxContainer.svg +++ b/editor/icons/VBoxContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v2H3zm0 4h10v2H3zm0 4h10v2H3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v2H3zm0 4h10v2H3zm0 4h10v2H3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VFlowContainer.svg b/editor/icons/VFlowContainer.svg index 161f03d131..428e1efaca 100644 --- a/editor/icons/VFlowContainer.svg +++ b/editor/icons/VFlowContainer.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#8eef97" stroke-width="2"><rect x="2" y="2" width="12" height="12" rx="1"/><path d="M5 11V9m0-3V5m3 6h0m0-3V5m3 6V7" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#8eef97" stroke-width="2"><rect width="12" height="12" x="2" y="2" rx="1"/><path stroke-linecap="round" d="M5 11V9m0-3V5m3 6h0m0-3V5m3 6V7"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/VScrollBar.svg b/editor/icons/VScrollBar.svg index f2b5f33be5..2ae6b2821a 100644 --- a/editor/icons/VScrollBar.svg +++ b/editor/icons/VScrollBar.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm2.988 1a1 1 0 0 1 .567.168l3 2a1 1 0 1 1-1.11 1.664L8 4.203l-2.445 1.63a1 1 0 1 1-1.11-1.665l3-2A1 1 0 0 1 7.988 2zM4.99 9.992a1 1 0 0 1 .565.176L8 11.798l2.445-1.63a1 1 0 1 1 1.11 1.664l-3 2a1 1 0 0 1-1.11 0l-3-2a1 1 0 0 1 .545-1.84z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm2.988 1a1 1 0 0 1 .567.168l3 2a1 1 0 1 1-1.11 1.664L8 4.203l-2.445 1.63a1 1 0 1 1-1.11-1.665l3-2A1 1 0 0 1 7.988 2zM4.99 9.992a1 1 0 0 1 .565.176L8 11.798l2.445-1.63a1 1 0 1 1 1.11 1.664l-3 2a1 1 0 0 1-1.11 0l-3-2a1 1 0 0 1 .545-1.84z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VSeparator.svg b/editor/icons/VSeparator.svg index a729ae7204..3fcce82986 100644 --- a/editor/icons/VSeparator.svg +++ b/editor/icons/VSeparator.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 11h3V5H2zm5 4h2V1H7zm4-4h3V5h-3z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M2 11h3V5H2zm5 4h2V1H7zm4-4h3V5h-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VSlider.svg b/editor/icons/VSlider.svg index f013e766d0..438131036f 100644 --- a/editor/icons/VSlider.svg +++ b/editor/icons/VSlider.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 1a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm5 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2zM6 6.867a4 4 0 0 1-2 0v7.13a1 1 0 0 0 2 0zM11 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-1 6a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M5 1a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm5 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2zM6 6.867a4 4 0 0 1-2 0v7.13a1 1 0 0 0 2 0zM11 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-1 6a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VSplitContainer.svg b/editor/icons/VSplitContainer.svg index 00682191c8..6e4a56656f 100644 --- a/editor/icons/VSplitContainer.svg +++ b/editor/icons/VSplitContainer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M15 3a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-2 0v4h-3L8 5 6 7H3V3zm0 6v4H3V9h3l2 2 2-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M15 3a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2zm-2 0v4h-3L8 5 6 7H3V3zm0 6v4H3V9h3l2 2 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Variant.svg b/editor/icons/Variant.svg index c4e485d1e1..bbf2180669 100644 --- a/editor/icons/Variant.svg +++ b/editor/icons/Variant.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a3 3 0 0 0 0 6h2V3zm3 0v6h2V5a1 1 0 0 1 1 1v3h2V6a3 3 0 0 0-3-3zm5 2a3 3 0 0 0 3 3 1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V3h-2v3a1 1 0 0 1-1-1V3h-2zM3 7a1 1 0 0 1 0-2z" fill="#41ecad"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#41ecad" d="M3 3a3 3 0 0 0 0 6h2V3zm3 0v6h2V5a1 1 0 0 1 1 1v3h2V6a3 3 0 0 0-3-3zm5 2a3 3 0 0 0 3 3 1 1 0 0 1-1 1h-1v2h1a3 3 0 0 0 3-3V3h-2v3a1 1 0 0 1-1-1V3h-2zM3 7a1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VcsBranches.svg b/editor/icons/VcsBranches.svg index 88a1606a24..b11fb3146e 100644 --- a/editor/icons/VcsBranches.svg +++ b/editor/icons/VcsBranches.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 11.75a2.5 2.5 0 0 0 5 0 2.5 2.5 0 0 0-5 0h-3l-3-3v-2A2.5 2.5 0 0 0 6 4.25h3.5a2.5 2.5 0 0 0 5 0 2.5 2.5 0 0 0-5 0m-3.5 0a2.5 2.5 0 1 0-2.5 2.5" fill="none" stroke="#e0e0e0" stroke-width="1.5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-width="1.5" d="M9.5 11.75a2.5 2.5 0 0 0 5 0 2.5 2.5 0 0 0-5 0h-3l-3-3v-2A2.5 2.5 0 0 0 6 4.25h3.5a2.5 2.5 0 0 0 5 0 2.5 2.5 0 0 0-5 0m-3.5 0a2.5 2.5 0 1 0-2.5 2.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector2.svg b/editor/icons/Vector2.svg index fd6ea7a5cf..4e9dc4025f 100644 --- a/editor/icons/Vector2.svg +++ b/editor/icons/Vector2.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z" fill="#ac73f1"/><path d="M12 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#ac73f1" d="M12 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z"/><path fill="#fff" fill-opacity=".4" d="M12 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8h-3a3 3 0 0 0 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector2i.svg b/editor/icons/Vector2i.svg index 5e82eb34d1..a3af81bc68 100644 --- a/editor/icons/Vector2i.svg +++ b/editor/icons/Vector2i.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H9a3 3 0 0 0 0-6zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z" fill="#ac73f1"/><path d="M8 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H9a3 3 0 0 0 0-6z" fill="#fff" fill-opacity=".4"/><path d="M13 2v2h2V2zm0 4v4h2V6z" fill="#5abbef"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#ac73f1" d="M8 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H9a3 3 0 0 0 0-6zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z"/><path fill="#fff" fill-opacity=".4" d="M8 2v2h1a1 1 0 0 1 0 2 2 2 0 0 0-2 2v2h5V8H9a3 3 0 0 0 0-6z"/><path fill="#5abbef" d="M13 2v2h2V2zm0 4v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector3.svg b/editor/icons/Vector3.svg index a78f8904d7..b9263e1fba 100644 --- a/editor/icons/Vector3.svg +++ b/editor/icons/Vector3.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2h-1v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 15 4V2zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z" fill="#de66f0"/><path d="M11 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2h-1v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 15 4V2z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#de66f0" d="M11 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2h-1v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 15 4V2zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z"/><path fill="#fff" fill-opacity=".4" d="M11 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2h-1v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 15 4V2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector3i.svg b/editor/icons/Vector3i.svg index 0f7dd4799c..5f1a8650d2 100644 --- a/editor/icons/Vector3i.svg +++ b/editor/icons/Vector3i.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 4V2zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z" fill="#de66f0"/><path d="M8 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 4V2z" fill="#fff" fill-opacity=".4"/><path d="M13 2v2h2V2zm0 4v4h2V6z" fill="#5abbef"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#de66f0" d="M8 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 4V2zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z"/><path fill="#fff" fill-opacity=".4" d="M8 2v2h2a1 1 0 0 1-1 1v2a1 1 0 0 1 0 2H8v2h1a3 3 0 0 0 2.232-5A3 3 0 0 0 12 4V2z"/><path fill="#5abbef" d="M13 2v2h2V2zm0 4v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector4.svg b/editor/icons/Vector4.svg index 224d61e8e1..fca05d21b6 100644 --- a/editor/icons/Vector4.svg +++ b/editor/icons/Vector4.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M11 3v5h3v3h2V2h-2v4h-1V3zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z" fill="#f066bd"/><path d="M11 3v5h3v3h2V2h-2v4h-1V3z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f066bd" d="M11 3v5h3v3h2V2h-2v4h-1V3zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4zm9 6V8H9a1 1 0 0 1 0-2h1V4H9a3 3 0 0 0 0 6z"/><path fill="#fff" fill-opacity=".4" d="M11 3v5h3v3h2V2h-2v4h-1V3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Vector4i.svg b/editor/icons/Vector4i.svg index 1bcedeccbb..40e11bd13a 100644 --- a/editor/icons/Vector4i.svg +++ b/editor/icons/Vector4i.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 3v5h3v3h2V2h-2v4H9V3zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z" fill="#f066bd"/><path d="M7 3v5h3v3h2V2h-2v4H9V3z" fill="#fff" fill-opacity=".4"/><path d="M13 2v2h2V2zm0 4v4h2V6z" fill="#5abbef"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#f066bd" d="M7 3v5h3v3h2V2h-2v4H9V3zM1 4v6h2a3 3 0 0 0 3-3V4H4v3a1 1 0 0 1-1 1V4z"/><path fill="#fff" fill-opacity=".4" d="M7 3v5h3v3h2V2h-2v4H9V3z"/><path fill="#5abbef" d="M13 2v2h2V2zm0 4v4h2V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VehicleBody3D.svg b/editor/icons/VehicleBody3D.svg index 631f877cc5..80393c132b 100644 --- a/editor/icons/VehicleBody3D.svg +++ b/editor/icons/VehicleBody3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 3a1 1 0 0 0-1 .75L3 7H1v4h1.05A2.5 2.5 0 0 1 4.5 9a2.5 2.5 0 0 1 2.45 2h2.1a2.5 2.5 0 0 1 2.45-2 2.5 2.5 0 0 1 2.45 2H15V7h-4V3zm1 1h4v3H6zm-1.5 6a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3zm7 0a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M5 3a1 1 0 0 0-1 .75L3 7H1v4h1.05A2.5 2.5 0 0 1 4.5 9a2.5 2.5 0 0 1 2.45 2h2.1a2.5 2.5 0 0 1 2.45-2 2.5 2.5 0 0 1 2.45 2H15V7h-4V3zm1 1h4v3H6zm-1.5 6a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3zm7 0a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VehicleWheel3D.svg b/editor/icons/VehicleWheel3D.svg index 1ab31e7373..5f978721b9 100644 --- a/editor/icons/VehicleWheel3D.svg +++ b/editor/icons/VehicleWheel3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm0 2a5 5 0 0 1 0 10A5 5 0 0 1 8 3zm0 1a4 4 0 0 0 0 8 4 4 0 0 0 0-8zm0 1a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM6 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 9a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm0 2a5 5 0 0 1 0 10A5 5 0 0 1 8 3zm0 1a4 4 0 0 0 0 8 4 4 0 0 0 0-8zm0 1a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM6 7a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM8 9a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VideoStream.svg b/editor/icons/VideoStream.svg index 0e7163f42b..c0dc686a07 100644 --- a/editor/icons/VideoStream.svg +++ b/editor/icons/VideoStream.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 2 a-1 1 0 0 1 0 2a 8 8 0 0 0-8 8a-1 1 0 0 1-2 0a10 10 0 0 1 10-10zm0 4A-1 1 0 0 1 12 8a4 4 0 0 0-4 4A-1 1 0 0 1 6 12a6 6 0 0 1 6-6zm-2 4.5 a.667.667 0 0 1 1-0.566l2.667 1.674a.667.667 0 0 1 0 1.149l-2.667 1.674a.667 0.667 0 0 1-1-.566z" fill="#808080"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="m12 2 a-1 1 0 0 1 0 2a 8 8 0 0 0-8 8a-1 1 0 0 1-2 0a10 10 0 0 1 10-10zm0 4A-1 1 0 0 1 12 8a4 4 0 0 0-4 4A-1 1 0 0 1 6 12a6 6 0 0 1 6-6zm-2 4.5 a.667.667 0 0 1 1-0.566l2.667 1.674a.667.667 0 0 1 0 1.149l-2.667 1.674a.667 0.667 0 0 1-1-.566z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VideoStreamPlayer.svg b/editor/icons/VideoStreamPlayer.svg index 52dc15f12e..3252eccc7d 100644 --- a/editor/icons/VideoStreamPlayer.svg +++ b/editor/icons/VideoStreamPlayer.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v8H3zm3 2v4l4-2z" fill="#8eef97"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8eef97" d="M3 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 2h10v8H3zm3 2v4l4-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VideoStreamTheora.svg b/editor/icons/VideoStreamTheora.svg index 1a5924ff61..1b5b5b1653 100644 --- a/editor/icons/VideoStreamTheora.svg +++ b/editor/icons/VideoStreamTheora.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" x2="0" y1="2" y2="14" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff8dbc"/><stop offset=".4" stop-color="#7260ff"/><stop offset=".6" stop-color="#7260ff"/><stop offset="1" stop-color="#74c9ff"/></linearGradient><path d="M15 1H1v1h2v2H1v8h2v2H1v1h14v-1h-2v-2h2V4h-2V2h2zm-4 1v2H9V2zm0 10v2H9v-2zM7 2v2H5V2zm0 10v2H5v-2zM6 6.107a.75.75 0 0 1 1.125-.637l3 1.883a.75.75 0 0 1 0 1.293l-3 1.883A.75.75 0 0 1 6 9.892z" fill="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" x2="0" y1="2" y2="14" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff8dbc"/><stop offset=".4" stop-color="#7260ff"/><stop offset=".6" stop-color="#7260ff"/><stop offset="1" stop-color="#74c9ff"/></linearGradient><path fill="url(#a)" d="M15 1H1v1h2v2H1v8h2v2H1v1h14v-1h-2v-2h2V4h-2V2h2zm-4 1v2H9V2zm0 10v2H9v-2zM7 2v2H5V2zm0 10v2H5v-2zM6 6.107a.75.75 0 0 1 1.125-.637l3 1.883a.75.75 0 0 1 0 1.293l-3 1.883A.75.75 0 0 1 6 9.892z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Viewport.svg b/editor/icons/Viewport.svg index 95dee29d3d..f4cfa0cd14 100644 --- a/editor/icons/Viewport.svg +++ b/editor/icons/Viewport.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1.625" y="2.625" height="10.75" width="12.75" rx="1.5" stroke="#808080" stroke-width="1.25" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="12.75" height="10.75" x="1.625" y="2.625" fill="none" stroke="gray" stroke-width="1.25" rx="1.5"/></svg>
\ No newline at end of file diff --git a/editor/icons/ViewportSpeed.svg b/editor/icons/ViewportSpeed.svg index d000f4751b..f4545af065 100644 --- a/editor/icons/ViewportSpeed.svg +++ b/editor/icons/ViewportSpeed.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.029 0a2 2 0 0 0-2 2v2.31a2 2 0 0 0-2.895 2.334l.996 2.989a2 2 0 0 0 1.106 1.158L.933 12.328a2 2 0 0 0 2.217 3.328l4.101-2.734.986 1.972a2 2 0 0 0 2.422 1.004l3-1a2 2 0 0 0 .594-3.441 2 2 0 0 0 .591-2.36l-1-2A2 2 0 0 0 12.029 6h-.42a2 2 0 0 0 .42-1V2a2 2 0 0 0-2-2z"/><path d="M6.029 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.317.063l-2.05.683-.684-2.05a1 1 0 0 0-1.899.63l1 3a1 1 0 0 0 1.266.633l1.683-.56v.61c0 .042.02.076.024.116l-4.578 3.053a1 1 0 1 0 1.11 1.664L7.64 11.46l1.494 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.896l-2.178.724-.974-1.95a.981.981 0 0 0 .468-.827V9h1.383l.723 1.447a1 1 0 1 0 1.789-.894l-1-2A1 1 0 0 0 12.028 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M6.029 0a2 2 0 0 0-2 2v2.31a2 2 0 0 0-2.895 2.334l.996 2.989a2 2 0 0 0 1.106 1.158L.933 12.328a2 2 0 0 0 2.217 3.328l4.101-2.734.986 1.972a2 2 0 0 0 2.422 1.004l3-1a2 2 0 0 0 .594-3.441 2 2 0 0 0 .591-2.36l-1-2A2 2 0 0 0 12.029 6h-.42a2 2 0 0 0 .42-1V2a2 2 0 0 0-2-2z"/><path fill="#fff" d="M6.029 1a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v.99a1 1 0 0 0-.317.063l-2.05.683-.684-2.05a1 1 0 0 0-1.899.63l1 3a1 1 0 0 0 1.266.633l1.683-.56v.61c0 .042.02.076.024.116l-4.578 3.053a1 1 0 1 0 1.11 1.664L7.64 11.46l1.494 2.986a1 1 0 0 0 1.21.502l3-1a1 1 0 1 0-.632-1.896l-2.178.724-.974-1.95a.981.981 0 0 0 .468-.827V9h1.383l.723 1.447a1 1 0 1 0 1.789-.894l-1-2A1 1 0 0 0 12.028 7h-3V6h1a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm0 2h1v2h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ViewportTexture.svg b/editor/icons/ViewportTexture.svg index de2ad7fb33..fa0f6e6f1f 100644 --- a/editor/icons/ViewportTexture.svg +++ b/editor/icons/ViewportTexture.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1.625" y="2.625" height="10.75" width="12.75" rx="1.5" stroke="#e0e0e0" stroke-width="1.25" fill="none"/><path d="M9 6v1H8v1H6v1H5v1H4v1h8V9h-1V7h-1V6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="12.75" height="10.75" x="1.625" y="2.625" fill="none" stroke="#e0e0e0" stroke-width="1.25" rx="1.5"/><path fill="#e0e0e0" d="M9 6v1H8v1H6v1H5v1H4v1h8V9h-1V7h-1V6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ViewportZoom.svg b/editor/icons/ViewportZoom.svg index d09f948b27..b15b3fa6ba 100644 --- a/editor/icons/ViewportZoom.svg +++ b/editor/icons/ViewportZoom.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 1.6a5.96 5.96 0 1 0-1.465 9.763l3.8 3.8a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-3.8-3.8A5.85 5.85 0 0 0 11.576 8H13a1 1 0 0 0 1-1V6h1a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-1V1a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1z"/><path d="M6 1a5 5 0 1 0 2.752 9.166l4.318 4.318 1.414-1.414-4.318-4.318a5 5 0 0 0 .41-.752H10V6H9a3 3 0 1 1-1-2.232V2h.99A5 5 0 0 0 6 1zm5 0v2H9v2h2v2h2V5h2V3h-2V1z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M10 1.6a5.96 5.96 0 1 0-1.465 9.763l3.8 3.8a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-3.8-3.8A5.85 5.85 0 0 0 11.576 8H13a1 1 0 0 0 1-1V6h1a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1h-1V1a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1z"/><path fill="#fff" d="M6 1a5 5 0 1 0 2.752 9.166l4.318 4.318 1.414-1.414-4.318-4.318a5 5 0 0 0 .41-.752H10V6H9a3 3 0 1 1-1-2.232V2h.99A5 5 0 0 0 6 1zm5 0v2H9v2h2v2h2V5h2V3h-2V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisibleOnScreenEnabler2D.svg b/editor/icons/VisibleOnScreenEnabler2D.svg index e7cb7ba4c0..eda09a5cf6 100644 --- a/editor/icons/VisibleOnScreenEnabler2D.svg +++ b/editor/icons/VisibleOnScreenEnabler2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v3h1V2h2V1zm11 0v1h2v2h1V1zM8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-7 6v3h3v-1H2v-2zm13 0v2h-2v1h3v-3z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M1 1v3h1V2h2V1zm11 0v1h2v2h1V1zM8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-7 6v3h3v-1H2v-2zm13 0v2h-2v1h3v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisibleOnScreenEnabler3D.svg b/editor/icons/VisibleOnScreenEnabler3D.svg index 183cca95f9..c22e0413ed 100644 --- a/editor/icons/VisibleOnScreenEnabler3D.svg +++ b/editor/icons/VisibleOnScreenEnabler3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v3h1V2h2V1zm11 0v1h2v2h1V1zM8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-7 6v3h3v-1H2v-2zm13 0v2h-2v1h3v-3z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M1 1v3h1V2h2V1zm11 0v1h2v2h1V1zM8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm-7 6v3h3v-1H2v-2zm13 0v2h-2v1h3v-3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisibleOnScreenNotifier2D.svg b/editor/icons/VisibleOnScreenNotifier2D.svg index 41529821b2..7f5b79822f 100644 --- a/editor/icons/VisibleOnScreenNotifier2D.svg +++ b/editor/icons/VisibleOnScreenNotifier2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 1v6h2V1zM8 3C5.443 3 2.21 4.948 1.045 8.705a1 1 0 0 0 0 .55C2.163 13.211 5.5 15 8 15c1.492 0 3.273-.652 4.712-2H10v-.541a4 4 0 1 1 0-6.918V3.359A6.121 6.121 0 0 0 8 3zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4 2v2h2V9z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="M12 1v6h2V1zM8 3C5.443 3 2.21 4.948 1.045 8.705a1 1 0 0 0 0 .55C2.163 13.211 5.5 15 8 15c1.492 0 3.273-.652 4.712-2H10v-.541a4 4 0 1 1 0-6.918V3.359A6.121 6.121 0 0 0 8 3zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4 2v2h2V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisibleOnScreenNotifier3D.svg b/editor/icons/VisibleOnScreenNotifier3D.svg index 5bdcd28b48..08598defb3 100644 --- a/editor/icons/VisibleOnScreenNotifier3D.svg +++ b/editor/icons/VisibleOnScreenNotifier3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 1v6h2V1zM8 3C5.443 3 2.21 4.948 1.045 8.705a1 1 0 0 0 0 .55C2.163 13.211 5.5 15 8 15c1.492 0 3.273-.652 4.712-2H10v-.541a4 4 0 1 1 0-6.918V3.359A6.121 6.121 0 0 0 8 3zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4 2v2h2V9z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M12 1v6h2V1zM8 3C5.443 3 2.21 4.948 1.045 8.705a1 1 0 0 0 0 .55C2.163 13.211 5.5 15 8 15c1.492 0 3.273-.652 4.712-2H10v-.541a4 4 0 1 1 0-6.918V3.359A6.121 6.121 0 0 0 8 3zm0 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm4 2v2h2V9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualInstance3D.svg b/editor/icons/VisualInstance3D.svg index 95eb6325af..8f5d987624 100644 --- a/editor/icons/VisualInstance3D.svg +++ b/editor/icons/VisualInstance3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#b56d6d"><circle cx="3" cy="3" r="2"/><circle cx="13" cy="3" r="2"/><circle cx="13" cy="13" r="2"/><circle cx="3" cy="13" r="2"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#b56d6d"><circle cx="3" cy="3" r="2"/><circle cx="13" cy="3" r="2"/><circle cx="13" cy="13" r="2"/><circle cx="3" cy="13" r="2"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShader.svg b/editor/icons/VisualShader.svg index 945d215ded..d4d5a45bfd 100644 --- a/editor/icons/VisualShader.svg +++ b/editor/icons/VisualShader.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 10v6h2a3 3 0 0 0 3-3v-3H6v3a1 1 0 0 1-1 1v-4zm8 0a2 2 0 0 0 0 4H9v2h2a2 2 0 0 0 0-4h2v-2zM2 1a1 1 0 0 0-1 1v7h2V3h6v3a1 1 0 0 0 1 1h3v2h2V6l-5-5z" fill="#e0e0e0"/><path d="M4 6h2v1H4z" fill="#ffe345"/><path d="M8 8h4v1H8z" fill="#80ff45"/><path d="M7 6h1v1H7z" fill="#45d7ff"/><path d="M4 4h3v1H4z" fill="#ff4545"/><path d="M4 8h3v1H4z" fill="#45ffa2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M3 10v6h2a3 3 0 0 0 3-3v-3H6v3a1 1 0 0 1-1 1v-4zm8 0a2 2 0 0 0 0 4H9v2h2a2 2 0 0 0 0-4h2v-2zM2 1a1 1 0 0 0-1 1v7h2V3h6v3a1 1 0 0 0 1 1h3v2h2V6l-5-5z"/><path fill="#ffe345" d="M4 6h2v1H4z"/><path fill="#80ff45" d="M8 8h4v1H8z"/><path fill="#45d7ff" d="M7 6h1v1H7z"/><path fill="#ff4545" d="M4 4h3v1H4z"/><path fill="#45ffa2" d="M4 8h3v1H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderGraphTextureUniform.svg b/editor/icons/VisualShaderGraphTextureUniform.svg index dd5bfa1323..3c469ae2f9 100644 --- a/editor/icons/VisualShaderGraphTextureUniform.svg +++ b/editor/icons/VisualShaderGraphTextureUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeBooleanUniform.svg b/editor/icons/VisualShaderNodeBooleanUniform.svg index f31f945f55..b631d2404b 100644 --- a/editor/icons/VisualShaderNodeBooleanUniform.svg +++ b/editor/icons/VisualShaderNodeBooleanUniform.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v2h2v2a3 3 0 0 1 2.5 1.346A3 3 0 0 1 9 6.768a3 3 0 0 1 4 0V4h2v5a1 1 0 0 0 1 1V2a2 2 0 0 0-2-2zm0 8v2a1 1 0 0 0 0-2zm5 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm4 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-6.5 2.654A3 3 0 0 1 2 12H0v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2a3 3 0 0 1-2.5-1.346 3 3 0 0 1-4.5.578 3 3 0 0 1-4.5-.578z" fill="#6f91f0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#6f91f0" d="M2 0a2 2 0 0 0-2 2v2h2v2a3 3 0 0 1 2.5 1.346A3 3 0 0 1 9 6.768a3 3 0 0 1 4 0V4h2v5a1 1 0 0 0 1 1V2a2 2 0 0 0-2-2zm0 8v2a1 1 0 0 0 0-2zm5 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm4 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm-6.5 2.654A3 3 0 0 1 2 12H0v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2a3 3 0 0 1-2.5-1.346 3 3 0 0 1-4.5.578 3 3 0 0 1-4.5-.578z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeColorConstant.svg b/editor/icons/VisualShaderNodeColorConstant.svg index c2af7df141..82f9c2295d 100644 --- a/editor/icons/VisualShaderNodeColorConstant.svg +++ b/editor/icons/VisualShaderNodeColorConstant.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".4"><path d="M3.04 5.52a4 4 0 1 0 3.958 6.94 4 4 0 1 0 3.965-6.942 4 4 0 1 0-7.923 0z" fill="#fff"/><path d="M4.21 6.106A3 3 0 1 0 7 11.233 3 3 0 1 0 9.785 6.11a3 3 0 1 0-5.575 0z" fill="#fff"/><circle cx="7" cy="5" fill="red" r="3"/><circle cx="5" cy="9" fill="#00f" r="3"/><circle cx="9" cy="9" fill="#0f0" r="3"/><circle cx="7" cy="5" fill="red" r="3"/><circle cx="5" cy="9" fill="#00f" r="3"/><circle cx="9" cy="9" fill="#0f0" r="3"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill-opacity=".4"><path fill="#fff" d="M3.04 5.52a4 4 0 1 0 3.958 6.94 4 4 0 1 0 3.965-6.942 4 4 0 1 0-7.923 0z"/><path fill="#fff" d="M4.21 6.106A3 3 0 1 0 7 11.233 3 3 0 1 0 9.785 6.11a3 3 0 1 0-5.575 0z"/><circle cx="7" cy="5" r="3" fill="red"/><circle cx="5" cy="9" r="3" fill="#00f"/><circle cx="9" cy="9" r="3" fill="#0f0"/><circle cx="7" cy="5" r="3" fill="red"/><circle cx="5" cy="9" r="3" fill="#00f"/><circle cx="9" cy="9" r="3" fill="#0f0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeColorOp.svg b/editor/icons/VisualShaderNodeColorOp.svg index c21852a277..5b2957d32f 100644 --- a/editor/icons/VisualShaderNodeColorOp.svg +++ b/editor/icons/VisualShaderNodeColorOp.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1z" fill="#fff"/><g fill-opacity=".863"><path d="M5 3h4v2H5z" fill="red"/><path d="M5 6h4v2H5z" fill="#0f0"/><path d="M5 9h4v2H5z" fill="#00f"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#fff" d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1z"/><g fill-opacity=".863"><path fill="red" d="M5 3h4v2H5z"/><path fill="#0f0" d="M5 6h4v2H5z"/><path fill="#00f" d="M5 9h4v2H5z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeColorUniform.svg b/editor/icons/VisualShaderNodeColorUniform.svg index 53e86ca007..071813c58d 100644 --- a/editor/icons/VisualShaderNodeColorUniform.svg +++ b/editor/icons/VisualShaderNodeColorUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z" fill="#fff"/><g fill-opacity=".4"><path d="M7 2a3 3 0 0 0-3 3 3 3 0 0 0 .21 1.106A3 3 0 0 0 2 9a3 3 0 0 0 3 3 3 3 0 0 0 2-.767A3 3 0 0 0 9 12a3 3 0 0 0 3-3 3 3 0 0 0-2.215-2.89A3 3 0 0 0 10 5a3 3 0 0 0-3-3z" fill="#fff"/><circle cx="7" cy="5" fill="red" r="3"/><circle cx="5" cy="9" fill="#00f" r="3"/><circle cx="9" cy="9" fill="#0f0" r="3"/><circle cx="7" cy="5" fill="red" r="3"/><circle cx="5" cy="9" fill="#00f" r="3"/><circle cx="9" cy="9" fill="#0f0" r="3"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#fff" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2z"/><g fill-opacity=".4"><path fill="#fff" d="M7 2a3 3 0 0 0-3 3 3 3 0 0 0 .21 1.106A3 3 0 0 0 2 9a3 3 0 0 0 3 3 3 3 0 0 0 2-.767A3 3 0 0 0 9 12a3 3 0 0 0 3-3 3 3 0 0 0-2.215-2.89A3 3 0 0 0 10 5a3 3 0 0 0-3-3z"/><circle cx="7" cy="5" r="3" fill="red"/><circle cx="5" cy="9" r="3" fill="#00f"/><circle cx="9" cy="9" r="3" fill="#0f0"/><circle cx="7" cy="5" r="3" fill="red"/><circle cx="5" cy="9" r="3" fill="#00f"/><circle cx="9" cy="9" r="3" fill="#0f0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeComment.svg b/editor/icons/VisualShaderNodeComment.svg index 3887853b58..9e1f6a71ed 100644 --- a/editor/icons/VisualShaderNodeComment.svg +++ b/editor/icons/VisualShaderNodeComment.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="m3 1v2h-2v2h2v4h-2v2h2v2h2v-2h4v2h2v-2h2v-2h-2v-4h2v-2h-2v-2h-2v2h-4v-2zm2 4h4v4h-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#e0e0e0" d="m3 1v2h-2v2h2v4h-2v2h2v2h2v-2h4v2h2v-2h2v-2h-2v-4h2v-2h-2v-2h-2v2h-4v-2zm2 4h4v4h-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeCubemap.svg b/editor/icons/VisualShaderNodeCubemap.svg index e28552c36d..e680ccd522 100644 --- a/editor/icons/VisualShaderNodeCubemap.svg +++ b/editor/icons/VisualShaderNodeCubemap.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M7 3.5 4 5l3 1.5L10 5zM3.5 6v3l2.9 1.45v-3zm7 0L7.6 7.45v3L10.5 9z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M7 3.5 4 5l3 1.5L10 5zM3.5 6v3l2.9 1.45v-3zm7 0L7.6 7.45v3L10.5 9z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeCubemapUniform.svg b/editor/icons/VisualShaderNodeCubemapUniform.svg index 1505caf085..e9fa206071 100644 --- a/editor/icons/VisualShaderNodeCubemapUniform.svg +++ b/editor/icons/VisualShaderNodeCubemapUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4.973 2a.714.714 0 0 1 .347.074l4.286 2.143a.714.714 0 0 1 .394.64v4.286a.714.714 0 0 1-.394.638L7.32 11.924a.714.714 0 0 1-.64 0L2.395 9.78A.714.714 0 0 1 2 9.143V4.857a.714.714 0 0 1 .395-.64L6.68 2.074A.714.714 0 0 1 6.973 2zM7 3.514 4.31 4.858 7 6.2l2.69-1.343zM3.428 6.012v2.69l2.857 1.427V7.44zm7.144 0-2.857 1.43v2.687L10.572 8.7z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4.973 2a.714.714 0 0 1 .347.074l4.286 2.143a.714.714 0 0 1 .394.64v4.286a.714.714 0 0 1-.394.638L7.32 11.924a.714.714 0 0 1-.64 0L2.395 9.78A.714.714 0 0 1 2 9.143V4.857a.714.714 0 0 1 .395-.64L6.68 2.074A.714.714 0 0 1 6.973 2zM7 3.514 4.31 4.858 7 6.2l2.69-1.343zM3.428 6.012v2.69l2.857 1.427V7.44zm7.144 0-2.857 1.43v2.687L10.572 8.7z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeCurveTexture.svg b/editor/icons/VisualShaderNodeCurveTexture.svg index f1f6a54a34..f54192b8c8 100644 --- a/editor/icons/VisualShaderNodeCurveTexture.svg +++ b/editor/icons/VisualShaderNodeCurveTexture.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 11c8 0 9 0 9-9" fill="none" stroke="#f9f9f9" stroke-linecap="round" stroke-width="2"/><path d="M10.8 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zM6 8.8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#f9f9f9" stroke-linecap="round" stroke-width="2" d="M2 11c8 0 9 0 9-9"/><path fill="#5fb2ff" d="M10.8 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zM6 8.8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeCurveXYZTexture.svg b/editor/icons/VisualShaderNodeCurveXYZTexture.svg index f1f6a54a34..f54192b8c8 100644 --- a/editor/icons/VisualShaderNodeCurveXYZTexture.svg +++ b/editor/icons/VisualShaderNodeCurveXYZTexture.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 11c8 0 9 0 9-9" fill="none" stroke="#f9f9f9" stroke-linecap="round" stroke-width="2"/><path d="M10.8 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zM6 8.8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#f9f9f9" stroke-linecap="round" stroke-width="2" d="M2 11c8 0 9 0 9-9"/><path fill="#5fb2ff" d="M10.8 4a2 2 0 0 0 0 4 2 2 0 0 0 0-4zM6 8.8a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeExpression.svg b/editor/icons/VisualShaderNodeExpression.svg index ae403da40d..8ce22a2c73 100644 --- a/editor/icons/VisualShaderNodeExpression.svg +++ b/editor/icons/VisualShaderNodeExpression.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 3A3.5 3.5 0 0 0 1 6.5V13h2.5v-2.5H6V8H3.5V6.5a1 1 0 0 1 1-1H6V3zm3 0L10 8l-2.5 5H10l1.25-2.5L12.5 13H15l-2.5-5L15 3h-2.5l-1.25 2.5L10 3z" fill="#cf68ea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#cf68ea" d="M4.5 3A3.5 3.5 0 0 0 1 6.5V13h2.5v-2.5H6V8H3.5V6.5a1 1 0 0 1 1-1H6V3zm3 0L10 8l-2.5 5H10l1.25-2.5L12.5 13H15l-2.5-5L15 3h-2.5l-1.25 2.5L10 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeFloatFunc.svg b/editor/icons/VisualShaderNodeFloatFunc.svg index 7cf2a5f608..6761f0096c 100644 --- a/editor/icons/VisualShaderNodeFloatFunc.svg +++ b/editor/icons/VisualShaderNodeFloatFunc.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6" stroke-width="2" stroke="#cf68ea" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#cf68ea" stroke-width="2" d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeFloatOp.svg b/editor/icons/VisualShaderNodeFloatOp.svg index 54048f0e61..00e869a9f0 100644 --- a/editor/icons/VisualShaderNodeFloatOp.svg +++ b/editor/icons/VisualShaderNodeFloatOp.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1zm1 3 4 3-4 3z" fill="#cf68ea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#cf68ea" d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1zm1 3 4 3-4 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeFloatUniform.svg b/editor/icons/VisualShaderNodeFloatUniform.svg index 9612ed0fa5..1a8ccd3fbe 100644 --- a/editor/icons/VisualShaderNodeFloatUniform.svg +++ b/editor/icons/VisualShaderNodeFloatUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4 2h5v2H6a1 1 0 0 0 0 2h2a3 3 0 1 1 0 6H3v-2h5a1 1 0 0 0 0-2H6a3 3 0 1 1 0-6z" fill="#cf68ea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#cf68ea" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4 2h5v2H6a1 1 0 0 0 0 2h2a3 3 0 1 1 0 6H3v-2h5a1 1 0 0 0 0-2H6a3 3 0 1 1 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeGlobalExpression.svg b/editor/icons/VisualShaderNodeGlobalExpression.svg index 14b75e278f..812564676e 100644 --- a/editor/icons/VisualShaderNodeGlobalExpression.svg +++ b/editor/icons/VisualShaderNodeGlobalExpression.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 3A3.5 3.5 0 0 0 1 6.5V13h2.5v-2.5H6V8H3.5V6.5a1 1 0 0 1 1-1H6V3zm3 0L10 8l-2.5 5H10l1.25-2.5L12.5 13H15l-2.5-5L15 3h-2.5l-1.25 2.5L10 3z" fill="#35d4f4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#35d4f4" d="M4.5 3A3.5 3.5 0 0 0 1 6.5V13h2.5v-2.5H6V8H3.5V6.5a1 1 0 0 1 1-1H6V3zm3 0L10 8l-2.5 5H10l1.25-2.5L12.5 13H15l-2.5-5L15 3h-2.5l-1.25 2.5L10 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeInput.svg b/editor/icons/VisualShaderNodeInput.svg index 0c4de2e681..9bf47add05 100644 --- a/editor/icons/VisualShaderNodeInput.svg +++ b/editor/icons/VisualShaderNodeInput.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><circle cx="7" cy="7" fill="#f9f9f9" r="6"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><circle cx="7" cy="7" r="6" fill="#f9f9f9"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeIntFunc.svg b/editor/icons/VisualShaderNodeIntFunc.svg index 7cf2a5f608..6761f0096c 100644 --- a/editor/icons/VisualShaderNodeIntFunc.svg +++ b/editor/icons/VisualShaderNodeIntFunc.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6" stroke-width="2" stroke="#cf68ea" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#cf68ea" stroke-width="2" d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeIntOp.svg b/editor/icons/VisualShaderNodeIntOp.svg index 54048f0e61..00e869a9f0 100644 --- a/editor/icons/VisualShaderNodeIntOp.svg +++ b/editor/icons/VisualShaderNodeIntOp.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1zm1 3 4 3-4 3z" fill="#cf68ea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#cf68ea" d="M4 1a1 1 0 0 0-1 1v1H1v2h2v4H1v2h2v1a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V8h2V6h-2V2a1 1 0 0 0-1-1zm1 3 4 3-4 3z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeIntUniform.svg b/editor/icons/VisualShaderNodeIntUniform.svg index 9612ed0fa5..1a8ccd3fbe 100644 --- a/editor/icons/VisualShaderNodeIntUniform.svg +++ b/editor/icons/VisualShaderNodeIntUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4 2h5v2H6a1 1 0 0 0 0 2h2a3 3 0 1 1 0 6H3v-2h5a1 1 0 0 0 0-2H6a3 3 0 1 1 0-6z" fill="#cf68ea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#cf68ea" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4 2h5v2H6a1 1 0 0 0 0 2h2a3 3 0 1 1 0 6H3v-2h5a1 1 0 0 0 0-2H6a3 3 0 1 1 0-6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTexture2DArrayUniform.svg b/editor/icons/VisualShaderNodeTexture2DArrayUniform.svg index dd5bfa1323..3c469ae2f9 100644 --- a/editor/icons/VisualShaderNodeTexture2DArrayUniform.svg +++ b/editor/icons/VisualShaderNodeTexture2DArrayUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTexture3DUniform.svg b/editor/icons/VisualShaderNodeTexture3DUniform.svg index dd5bfa1323..3c469ae2f9 100644 --- a/editor/icons/VisualShaderNodeTexture3DUniform.svg +++ b/editor/icons/VisualShaderNodeTexture3DUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTextureUniform.svg b/editor/icons/VisualShaderNodeTextureUniform.svg index dd5bfa1323..3c469ae2f9 100644 --- a/editor/icons/VisualShaderNodeTextureUniform.svg +++ b/editor/icons/VisualShaderNodeTextureUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTextureUniformTriplanar.svg b/editor/icons/VisualShaderNodeTextureUniformTriplanar.svg index dd5bfa1323..3c469ae2f9 100644 --- a/editor/icons/VisualShaderNodeTextureUniformTriplanar.svg +++ b/editor/icons/VisualShaderNodeTextureUniformTriplanar.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z" fill="#eac968"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#eac968" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm0 2h10v10H2zm9 2L7 8 5 6 3 9h8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTransformCompose.svg b/editor/icons/VisualShaderNodeTransformCompose.svg index 6f44f23e0f..dd78f66e1a 100644 --- a/editor/icons/VisualShaderNodeTransformCompose.svg +++ b/editor/icons/VisualShaderNodeTransformCompose.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="1" x2="13"><stop offset="0" stop-color="#77ce57"/><stop offset="1" stop-color="#ea686c"/></linearGradient><path d="m2 2 5 5-5 5m0-5h10" fill="none" stroke-linecap="round" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><linearGradient id="a" x1="1" x2="13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#77ce57"/><stop offset="1" stop-color="#ea686c"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="m2 2 5 5-5 5m0-5h10"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTransformDecompose.svg b/editor/icons/VisualShaderNodeTransformDecompose.svg index 152118187c..410783fdcf 100644 --- a/editor/icons/VisualShaderNodeTransformDecompose.svg +++ b/editor/icons/VisualShaderNodeTransformDecompose.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="1" x2="13"><stop offset="0" stop-color="#ea686c"/><stop offset="1" stop-color="#77ce57"/></linearGradient><path d="M12 2 7 7l5 5m0-5H2" fill="none" stroke-linecap="round" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><linearGradient id="a" x1="1" x2="13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ea686c"/><stop offset="1" stop-color="#77ce57"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="M12 2 7 7l5 5m0-5H2"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTransformUniform.svg b/editor/icons/VisualShaderNodeTransformUniform.svg index 507b616eff..6b5759b06b 100644 --- a/editor/icons/VisualShaderNodeTransformUniform.svg +++ b/editor/icons/VisualShaderNodeTransformUniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 1h3v1H2v10h2v1H1zm9 0h3v12h-3v-1h2V2h-2zm1 10H9V6.414L7.707 7.707a1 1 0 0 1-1.414 0L5 6.414V11H3V4a1 1 0 0 1 1.707-.707L7 5.586l2.293-2.293A1 1 0 0 1 11 4z" fill="#ea686c"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#ea686c" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 1h3v1H2v10h2v1H1zm9 0h3v12h-3v-1h2V2h-2zm1 10H9V6.414L7.707 7.707a1 1 0 0 1-1.414 0L5 6.414V11H3V4a1 1 0 0 1 1.707-.707L7 5.586l2.293-2.293A1 1 0 0 1 11 4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeTransformVecMult.svg b/editor/icons/VisualShaderNodeTransformVecMult.svg index cd108f607a..3b942ae5ee 100644 --- a/editor/icons/VisualShaderNodeTransformVecMult.svg +++ b/editor/icons/VisualShaderNodeTransformVecMult.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><g stroke-linejoin="round" stroke-width="2" fill="none"><path d="m9 4 2 6 2-6" stroke="#77ce57"/><path d="M1 11V4l2 3 2-3v7" stroke="#ea686c"/></g><circle cx="7.5" cy="7.5" fill="#77ce57" r="1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><g fill="none" stroke-linejoin="round" stroke-width="2"><path stroke="#77ce57" d="m9 4 2 6 2-6"/><path stroke="#ea686c" d="M1 11V4l2 3 2-3v7"/></g><circle cx="7.5" cy="7.5" r="1" fill="#77ce57"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVec3Uniform.svg b/editor/icons/VisualShaderNodeVec3Uniform.svg index 9432c7cde9..947def8a60 100644 --- a/editor/icons/VisualShaderNodeVec3Uniform.svg +++ b/editor/icons/VisualShaderNodeVec3Uniform.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm6 0 3 3-3 3V4H3V2h5zM4.344 5.629 7 10.056l2.656-4.427 1.715 1.03-3.514 5.857a1 1 0 0 1-1.714 0L2.629 6.658z" fill="#77ce57"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#77ce57" d="M2 0a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm6 0 3 3-3 3V4H3V2h5zM4.344 5.629 7 10.056l2.656-4.427 1.715 1.03-3.514 5.857a1 1 0 0 1-1.714 0L2.629 6.658z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVectorCompose.svg b/editor/icons/VisualShaderNodeVectorCompose.svg index 6502ca5b63..68c367dbe1 100644 --- a/editor/icons/VisualShaderNodeVectorCompose.svg +++ b/editor/icons/VisualShaderNodeVectorCompose.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="1" x2="13"><stop offset="0" stop-color="#cf68ea"/><stop offset="1" stop-color="#77ce57"/></linearGradient><path d="m2 2 5 5-5 5m0-5h10" fill="none" stroke-linecap="round" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><linearGradient id="a" x1="1" x2="13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#cf68ea"/><stop offset="1" stop-color="#77ce57"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="m2 2 5 5-5 5m0-5h10"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVectorDecompose.svg b/editor/icons/VisualShaderNodeVectorDecompose.svg index 5ff0706dc0..beddc124e7 100644 --- a/editor/icons/VisualShaderNodeVectorDecompose.svg +++ b/editor/icons/VisualShaderNodeVectorDecompose.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="1" x2="13"><stop offset="0" stop-color="#77ce57"/><stop offset="1" stop-color="#cf68ea"/></linearGradient><path d="M12 2 7 7l5 5m0-5H2" fill="none" stroke-linecap="round" stroke-width="2" stroke="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><linearGradient id="a" x1="1" x2="13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#77ce57"/><stop offset="1" stop-color="#cf68ea"/></linearGradient><path fill="none" stroke="url(#a)" stroke-linecap="round" stroke-width="2" d="M12 2 7 7l5 5m0-5H2"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVectorDistance.svg b/editor/icons/VisualShaderNodeVectorDistance.svg index 9ea5462d9f..415e14e2f5 100644 --- a/editor/icons/VisualShaderNodeVectorDistance.svg +++ b/editor/icons/VisualShaderNodeVectorDistance.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M2 12 12 2" fill="none" stroke="#77ce57" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#77ce57" stroke-linecap="round" stroke-width="2" d="M2 12 12 2"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVectorFunc.svg b/editor/icons/VisualShaderNodeVectorFunc.svg index 11405f13e5..60a90c66c1 100644 --- a/editor/icons/VisualShaderNodeVectorFunc.svg +++ b/editor/icons/VisualShaderNodeVectorFunc.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6" stroke-width="2" stroke="#77ce57" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="none" stroke="#77ce57" stroke-width="2" d="M3 10 a 2 2 0 0 0 4 0v-6a2 2 0 0 1 4 0v1 M4 7h6"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderNodeVectorLen.svg b/editor/icons/VisualShaderNodeVectorLen.svg index ad9b51db53..8d458a69ca 100644 --- a/editor/icons/VisualShaderNodeVectorLen.svg +++ b/editor/icons/VisualShaderNodeVectorLen.svg @@ -1 +1 @@ -<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="M8 0v2H3v2h5v2l3-3zM4.344 5.627l-1.715 1.03 3.514 5.857a1 1 0 0 0 1.714 0l3.514-5.858-1.715-1.029L7 10.055z" fill="#77ce57"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path fill="#77ce57" d="M8 0v2H3v2h5v2l3-3zM4.344 5.627l-1.715 1.03 3.514 5.857a1 1 0 0 0 1.714 0l3.514-5.858-1.715-1.029L7 10.055z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VisualShaderPort.svg b/editor/icons/VisualShaderPort.svg index 6bde8f3eac..1590ded2ee 100644 --- a/editor/icons/VisualShaderPort.svg +++ b/editor/icons/VisualShaderPort.svg @@ -1 +1 @@ -<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><path d="M2 0a1 1 0 0 0-1 1v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 0z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><path fill="#fff" d="M2 0a1 1 0 0 0-1 1v8a1 1 0 0 0 1.555.832l6-4a1 1 0 0 0 0-1.664l-6-4A1 1 0 0 0 2 0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VoxelGI.svg b/editor/icons/VoxelGI.svg index 2b578d9485..b87b86134b 100644 --- a/editor/icons/VoxelGI.svg +++ b/editor/icons/VoxelGI.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4v-2H3V3h9V1zm7 11a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.541a4 4 0 1 0-4 0zm2-6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-1 8v1h2v-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4v-2H3V3h9V1zm7 11a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.541a4 4 0 1 0-4 0zm2-6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-1 8v1h2v-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/VoxelGIData.svg b/editor/icons/VoxelGIData.svg index a4eb17418d..af1ef252ba 100644 --- a/editor/icons/VoxelGIData.svg +++ b/editor/icons/VoxelGIData.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4v-2H3V3h9V1zm7 11a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.541a4 4 0 1 0-4 0zm2-6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-1 8v1h2v-1zM4 4h2v2H4zm0 3h2v2H4zm0 3h2v2H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4v-2H3V3h9V1zm7 11a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.541a4 4 0 1 0-4 0zm2-6a2 2 0 0 1 0 4 2 2 0 0 1 0-4zm-1 8v1h2v-1zM4 4h2v2H4zm0 3h2v2H4zm0 3h2v2H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Warning.svg b/editor/icons/Warning.svg index 405ce666b0..38889a218d 100644 --- a/editor/icons/Warning.svg +++ b/editor/icons/Warning.svg @@ -1 +1 @@ -<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><circle fill="#ffdd65" cx="4" cy="4" r="4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><circle cx="4" cy="4" r="4" fill="#ffdd65"/></svg>
\ No newline at end of file diff --git a/editor/icons/WarningPattern.svg b/editor/icons/WarningPattern.svg index 8ef2c14041..3c250b5d88 100644 --- a/editor/icons/WarningPattern.svg +++ b/editor/icons/WarningPattern.svg @@ -1 +1 @@ -<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v8l8-8zm16 0-16 16v8l24-24zm16 0-32 32v8l40-40zm16 0-48 48v8l56-56zm16 0-64 64h8l56-56zm0 16-48 48h8l40-40zm0 16-32 32h8s24-23 24-24zm0 16-16 16h8l8-8z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path fill="#fff" d="m0 0v8l8-8zm16 0-16 16v8l24-24zm16 0-32 32v8l40-40zm16 0-48 48v8l56-56zm16 0-64 64h8l56-56zm0 16-48 48h8l40-40zm0 16-32 32h8s24-23 24-24zm0 16-16 16h8l8-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Window.svg b/editor/icons/Window.svg index a60a25bcdf..b202613f66 100644 --- a/editor/icons/Window.svg +++ b/editor/icons/Window.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8z"/></svg>
\ No newline at end of file diff --git a/editor/icons/World2D.svg b/editor/icons/World2D.svg index 94d42a2d34..2aba01c946 100644 --- a/editor/icons/World2D.svg +++ b/editor/icons/World2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 12c6 0 6 2 12 2V4C8 4 8 2 2 2z" stroke="#e0e0e0" stroke-width="2" stroke-linejoin="round" fill="none"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" d="M2 12c6 0 6 2 12 2V4C8 4 8 2 2 2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/World3D.svg b/editor/icons/World3D.svg index 1e292e27cf..ea0c037889 100644 --- a/editor/icons/World3D.svg +++ b/editor/icons/World3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 2a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM6 5a5 5 0 0 0 0 10A5 5 0 0 0 6 5z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M12 2a1 1 0 0 0 0 2 1 1 0 0 0 0-2zM6 5a5 5 0 0 0 0 10A5 5 0 0 0 6 5z"/></svg>
\ No newline at end of file diff --git a/editor/icons/WorldBoundaryShape2D.svg b/editor/icons/WorldBoundaryShape2D.svg index 34dcbdc3bf..8cae40f7a1 100644 --- a/editor/icons/WorldBoundaryShape2D.svg +++ b/editor/icons/WorldBoundaryShape2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke="#5fb2ff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"><path d="M1 11h14"/><path d="M8 10V1.75l2 2m-2-2-2 2" stroke-width="1.5"/></g><path d="M0 11h16v5H0z" fill="#5fb2ff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke="#5fb2ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M1 11h14"/><path stroke-width="1.5" d="M8 10V1.75l2 2m-2-2-2 2"/></g><path fill="#5fb2ff" fill-opacity=".4" d="M0 11h16v5H0z"/></svg>
\ No newline at end of file diff --git a/editor/icons/WorldBoundaryShape3D.svg b/editor/icons/WorldBoundaryShape3D.svg index c7d04953ec..2a0e84097f 100644 --- a/editor/icons/WorldBoundaryShape3D.svg +++ b/editor/icons/WorldBoundaryShape3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 10h16v6H0z" fill="#5fb2ff" fill-opacity=".4"/><path d="m0 10 8 2.5 8-2.5-8-2.5z" fill="#5fb2ff"/><path d="M8 1 5.5 3.5a2.5 1 0 0 0 1.5.9v5.2a1 .4 0 0 0 1 .4z" fill="#a2d2ff"/><path d="m8 1 2.5 2.5a2.5 1 0 0 1-1.5.9v5.2a1 .4 0 0 1-1 .4V5.25a2.5 1 0 0 1-1-.1V4.4a2.5 1 0 0 0 1 .1z" fill="#2998ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" fill-opacity=".4" d="M0 10h16v6H0z"/><path fill="#5fb2ff" d="m0 10 8 2.5 8-2.5-8-2.5z"/><path fill="#a2d2ff" d="M8 1 5.5 3.5a2.5 1 0 0 0 1.5.9v5.2a1 .4 0 0 0 1 .4z"/><path fill="#2998ff" d="m8 1 2.5 2.5a2.5 1 0 0 1-1.5.9v5.2a1 .4 0 0 1-1 .4V5.25a2.5 1 0 0 1-1-.1V4.4a2.5 1 0 0 0 1 .1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/WorldEnvironment.svg b/editor/icons/WorldEnvironment.svg index a5b48cbdf8..9cc3d87a27 100644 --- a/editor/icons/WorldEnvironment.svg +++ b/editor/icons/WorldEnvironment.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><linearGradient y2="0" gradientUnits="userSpaceOnUse" id="a"><stop stop-color="#fc7f7f"/><stop stop-color="#fc7f7f" offset=".5"/><stop stop-color="#8da5f3"/></linearGradient><g fill="none" stroke="url(#a)"><circle cx="8" cy="8" r="6" stroke-width="2"/><path d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12" stroke-width="1.5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><linearGradient id="a" y2="0" gradientUnits="userSpaceOnUse"><stop stop-color="#fc7f7f"/><stop offset=".5" stop-color="#fc7f7f"/><stop stop-color="#8da5f3"/></linearGradient><g fill="none" stroke="url(#a)"><circle cx="8" cy="8" r="6" stroke-width="2"/><path stroke-width="1.5" d="M2 8a6.5 2 0 0 0 12 0M8 2c-3 4-3 8 0 12M8 2c3 4 3 8 0 12"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/X509Certificate.svg b/editor/icons/X509Certificate.svg index a3b5394207..0a71cbb309 100644 --- a/editor/icons/X509Certificate.svg +++ b/editor/icons/X509Certificate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 1v10h5.4a3.75 3.75 0 1 1 7.2 0H15V1z" fill="#e0e0e0"/><path d="M8 12.25a3 3 0 1 1 4 0V15l-2-1-2 1z" fill="#ff5f5f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 1v10h5.4a3.75 3.75 0 1 1 7.2 0H15V1z"/><path fill="#ff5f5f" d="M8 12.25a3 3 0 1 1 4 0V15l-2-1-2 1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRAnchor3D.svg b/editor/icons/XRAnchor3D.svg index bb684dfb71..e8370e75cc 100644 --- a/editor/icons/XRAnchor3D.svg +++ b/editor/icons/XRAnchor3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1v9M5 4h6M3.2 7.2a5 4 0 0 0 9.6 0" stroke-width="2" stroke="#fc7f7f" fill="none"/><path d="M4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fc7f7f" stroke-width="2" d="M8 1v9M5 4h6M3.2 7.2a5 4 0 0 0 9.6 0"/><path fill="#fc7f7f" d="M4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRBodyModifier3D.svg b/editor/icons/XRBodyModifier3D.svg index 7e3fcff808..5c4a2138ec 100644 --- a/editor/icons/XRBodyModifier3D.svg +++ b/editor/icons/XRBodyModifier3D.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 16 16" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m4 12v1c0 .553.448 1 1 1-.552 0-1 .447-1 1v1h1v-1h1v1h1v-1c0-.553-.448-1-1-1 .552 0 1-.447 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.049-.348-.137-.5.088-.152.136-.324.137-.5v-1c0-.553-.447-1-1-1zm1 1h1v1h-1z"/><path d="m12.091 5.286h-3.384v-.715h.722c.396 0 .714-.319.714-.714v-2.143c0-.394-.319-.714-.714-.714h-2.857c-.395 0-.715.32-.715.714v2.143c0 .395.319.714.715.714h.707v.707l-3.279.008c-.395 0-.714.32-.714.714 0 .395.319.714.714.714h2.04l-.005 3.573c0 .395.32.713.715.713.394 0 .714-.318.714-.713v-1.662h1.073v1.662c0 .395.321.713.716.713.393 0 .713-.318.713-.713v-3.573h2.125c.395 0 .715-.32.715-.714s-.321-.714-.715-.714zm-3.384-3.027h.8v1.598h-.8zm-2.228 1.598v-1.598h.8v1.598z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4 12v1c0 .553.448 1 1 1-.552 0-1 .447-1 1v1h1v-1h1v1h1v-1c0-.553-.448-1-1-1 .552 0 1-.447 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.049-.348-.137-.5.088-.152.136-.324.137-.5v-1c0-.553-.447-1-1-1zm1 1h1v1h-1zM12.091 5.286h-3.384v-.715h.722c.396 0 .714-.319.714-.714v-2.143c0-.394-.319-.714-.714-.714h-2.857c-.395 0-.715.32-.715.714v2.143c0 .395.319.714.715.714h.707v.707l-3.279.008c-.395 0-.714.32-.714.714 0 .395.319.714.714.714h2.04l-.005 3.573c0 .395.32.713.715.713.394 0 .714-.318.714-.713v-1.662h1.073v1.662c0 .395.321.713.716.713.393 0 .713-.318.713-.713v-3.573h2.125c.395 0 .715-.32.715-.714s-.321-.714-.715-.714zm-3.384-3.027h.8v1.598h-.8zm-2.228 1.598v-1.598h.8v1.598z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRCamera3D.svg b/editor/icons/XRCamera3D.svg index 501a86a9f7..ec9dff1255 100644 --- a/editor/icons/XRCamera3D.svg +++ b/editor/icons/XRCamera3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 0a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9l3 2V5l-3 2V5.23A3 3 0 0 0 9.5 0zM4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M9.5 0a3 3 0 0 0-3 2.777 3 3 0 1 0-3 5.047V10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9l3 2V5l-3 2V5.23A3 3 0 0 0 9.5 0zM4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRController3D.svg b/editor/icons/XRController3D.svg index e7c29b0dce..ecabdd2725 100644 --- a/editor/icons/XRController3D.svg +++ b/editor/icons/XRController3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm2 1h2v2h2v2H6v2H4V6H2V4h2zm9 1a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm-2 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M2 1a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm2 1h2v2h2v2H6v2H4V6H2V4h2zm9 1a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm-2 2a1 1 0 0 1 0 2 1 1 0 0 1 0-2zM4 12v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRFaceModifier3D.svg b/editor/icons/XRFaceModifier3D.svg index 6ab48ca29c..cbd630f4a5 100644 --- a/editor/icons/XRFaceModifier3D.svg +++ b/editor/icons/XRFaceModifier3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m4 12v1c0 .552.448 1 1 1-.552 0-1 .448-1 1v1h1v-1h1v1h1v-1c0-.552-.448-1-1-1 .552 0 1-.448 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.048-.348-.137-.5.089-.152.136-.324.137-.5v-1c0-.552-.448-1-1-1zm1 1h1v1h-1z"/><path d="m11.384 9.462v-2.155c1.613-.944 2.156-3.016 1.213-4.631-.603-1.033-1.709-1.67-2.905-1.676h-3.385c-1.869.008-3.377 1.532-3.368 3.401.005 1.197.643 2.301 1.676 2.906v2.155c0 .934.758 1.692 1.692 1.692h3.385c.935 0 1.692-.758 1.692-1.692zm-4.23-4.231h1.692v.846h-1.692zm-2.539-.846c0-.468.378-.846.847-.846.468 0 .846.378.846.846 0 .467-.378.846-.846.846-.469 0-.847-.379-.847-.846zm5.923 5.077h-.846v-.847h-.846v.846h-1.692v-.846h-.847v.846h-.846v-2.538h.846v.846h.847v-.846h1.692v.846h.846v-.846h.846zm-.846-5.077c0-.468.378-.846.846-.846s.846.378.846.846c0 .467-.378.846-.846.846s-.846-.379-.846-.846z"/></g></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4 12v1c0 .552.448 1 1 1-.552 0-1 .448-1 1v1h1v-1h1v1h1v-1c0-.552-.448-1-1-1 .552 0 1-.448 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.048-.348-.137-.5.089-.152.136-.324.137-.5v-1c0-.552-.448-1-1-1zm1 1h1v1h-1zM11.384 9.462v-2.155c1.613-.944 2.156-3.016 1.213-4.631-.603-1.033-1.709-1.67-2.905-1.676h-3.385c-1.869.008-3.377 1.532-3.368 3.401.005 1.197.643 2.301 1.676 2.906v2.155c0 .934.758 1.692 1.692 1.692h3.385c.935 0 1.692-.758 1.692-1.692zm-4.23-4.231h1.692v.846h-1.692zm-2.539-.846c0-.468.378-.846.847-.846.468 0 .846.378.846.846 0 .467-.378.846-.846.846-.469 0-.847-.379-.847-.846zm5.923 5.077h-.846v-.847h-.846v.846h-1.692v-.846h-.847v.846h-.846v-2.538h.846v.846h.847v-.846h1.692v.846h.846v-.846h.846zm-.846-5.077c0-.468.378-.846.846-.846s.846.378.846.846c0 .467-.378.846-.846.846s-.846-.379-.846-.846z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRHandModifier3D.svg b/editor/icons/XRHandModifier3D.svg index 60578acb4f..ae54273b8e 100644 --- a/editor/icons/XRHandModifier3D.svg +++ b/editor/icons/XRHandModifier3D.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 16 16" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m4 12v1c0 .553.448 1 1 1-.552 0-1 .447-1 1v1h1v-1h1v1h1v-1c0-.553-.448-1-1-1 .552 0 1-.447 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.049-.348-.137-.5.088-.152.136-.324.137-.5v-1c0-.553-.447-1-1-1zm1 1h1v1h-1z"/><path d="m12.375 4.948c-.38-.186-.839-.028-1.025.353l-.916 1.88.688-3.795c.076-.414-.201-.813-.617-.89-.417-.075-.814.2-.891.616l-.575 3.166-.091-.641v-3.869c0-.426-.343-.768-.767-.768s-.766.342-.766.768v3.869 1.146l-.666-3.671c-.076-.416-.475-.693-.891-.617-.417.076-.693.475-.617.89l.745 4.111-1.254-.902c-.37-.344-.949-.322-1.293.047-.344.371-.323.949.048 1.293l3.161 3.066h3.065c.551 0 1.202-1.314 1.202-1.314l1.813-3.712c.185-.383.028-.841-.353-1.026z"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4 12v1c0 .553.448 1 1 1-.552 0-1 .447-1 1v1h1v-1h1v1h1v-1c0-.553-.448-1-1-1 .552 0 1-.447 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.049-.348-.137-.5.088-.152.136-.324.137-.5v-1c0-.553-.447-1-1-1zm1 1h1v1h-1zM12.375 4.948c-.38-.186-.839-.028-1.025.353l-.916 1.88.688-3.795c.076-.414-.201-.813-.617-.89-.417-.075-.814.2-.891.616l-.575 3.166-.091-.641v-3.869c0-.426-.343-.768-.767-.768s-.766.342-.766.768v3.869 1.146l-.666-3.671c-.076-.416-.475-.693-.891-.617-.417.076-.693.475-.617.89l.745 4.111-1.254-.902c-.37-.344-.949-.322-1.293.047-.344.371-.323.949.048 1.293l3.161 3.066h3.065c.551 0 1.202-1.314 1.202-1.314l1.813-3.712c.185-.383.028-.841-.353-1.026z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XRNode3D.svg b/editor/icons/XRNode3D.svg index 50dd3ad951..ef399043e6 100644 --- a/editor/icons/XRNode3D.svg +++ b/editor/icons/XRNode3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="6" fill="none" r="4" stroke="#fc7f7f" stroke-width="2"/><path d="m4 12v1c0 .552.448 1 1 1-.552 0-1 .448-1 1v1h1v-1h1v1h1v-1c0-.552-.448-1-1-1 .552 0 1-.448 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.048-.348-.137-.5.089-.152.136-.324.137-.5v-1c0-.552-.448-1-1-1zm1 1h1v1h-1z" fill="#fc7f7f"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="6" r="4" fill="none" stroke="#fc7f7f" stroke-width="2"/><path fill="#fc7f7f" d="m4 12v1c0 .552.448 1 1 1-.552 0-1 .448-1 1v1h1v-1h1v1h1v-1c0-.552-.448-1-1-1 .552 0 1-.448 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.001-.176-.048-.348-.137-.5.089-.152.136-.324.137-.5v-1c0-.552-.448-1-1-1zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/XROrigin3D.svg b/editor/icons/XROrigin3D.svg index d1402aa0cc..8533914841 100644 --- a/editor/icons/XROrigin3D.svg +++ b/editor/icons/XROrigin3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v3h2V1zM3 5v2h3V5zm5 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm2 0v2h3V5zM7 8v3h2V8zm-3 4v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M7 1v3h2V1zM3 5v2h3V5zm5 0a1 1 0 0 0 0 2 1 1 0 0 0 0-2zm2 0v2h3V5zM7 8v3h2V8zm-3 4v1a1 1 0 0 0 1 1 1 1 0 0 0-1 1v1h1v-1h1v1h1v-1a1 1 0 0 0-1-1 1 1 0 0 0 1-1v-1H6v1H5v-1zm5 0v4h1v-1h1v1h1v-1a1 1 0 0 0-.137-.5A1 1 0 0 0 12 14v-1a1 1 0 0 0-1-1zm1 1h1v1h-1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/YSort.svg b/editor/icons/YSort.svg index 8394a3bb9b..429ebf1c5e 100644 --- a/editor/icons/YSort.svg +++ b/editor/icons/YSort.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-3 3h2v8h-2l3 3 3-3h-2v-8h2zm5 1v2h6v-2zm0 5v2h4v-2zm0 5v2h2v-2z" fill="#8da5f3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#8da5f3" d="m4 1-3 3h2v8h-2l3 3 3-3h-2v-8h2zm5 1v2h6v-2zm0 5v2h4v-2zm0 5v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/Zoom.svg b/editor/icons/Zoom.svg index 655636ba44..3b0cec3344 100644 --- a/editor/icons/Zoom.svg +++ b/editor/icons/Zoom.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a5 5 0 1 0 2.752 9.166l4.318 4.318 1.414-1.414-4.318-4.318a5 5 0 0 0 .41-.752H10V6H9a3 3 0 1 1-1-2.232V2h.99a5 5 0 0 0-3-1zm5 0v2H9v2h2v2h2V5h2V3h-2V1z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 1a5 5 0 1 0 2.752 9.166l4.318 4.318 1.414-1.414-4.318-4.318a5 5 0 0 0 .41-.752H10V6H9a3 3 0 1 1-1-2.232V2h.99a5 5 0 0 0-3-1zm5 0v2H9v2h2v2h2V5h2V3h-2V1z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ZoomLess.svg b/editor/icons/ZoomLess.svg index acaadb64c5..83d964fdd3 100644 --- a/editor/icons/ZoomLess.svg +++ b/editor/icons/ZoomLess.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".4" r="8"/><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM4 7h8v2H4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill-opacity=".4"/><path fill="#e0e0e0" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM4 7h8v2H4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/ZoomMore.svg b/editor/icons/ZoomMore.svg index 2327fca9e3..63250ed7af 100644 --- a/editor/icons/ZoomMore.svg +++ b/editor/icons/ZoomMore.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="8" cy="8" fill-opacity=".4" r="8"/><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 4h2v3h3v2H9v3H7V9H4V7h3z" fill="#e0e0e0"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="8" cy="8" r="8" fill-opacity=".4"/><path fill="#e0e0e0" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zM7 4h2v3h3v2H9v3H7V9H4V7h3z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/ZoomReset.svg b/editor/icons/ZoomReset.svg index 75c9aeb93e..5e7a5612dc 100644 --- a/editor/icons/ZoomReset.svg +++ b/editor/icons/ZoomReset.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".4" r="8"/><path d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm0 3.166A1 1 0 0 1 9.526 5v7h-2V6.87l-1.445.962-1-1.6z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill-opacity=".4"/><path fill="#e0e0e0" d="M8 1a7 7 0 0 0 0 14A7 7 0 0 0 8 1zm0 3.166A1 1 0 0 1 9.526 5v7h-2V6.87l-1.445.962-1-1.6z"/></svg>
\ No newline at end of file diff --git a/editor/icons/bool.svg b/editor/icons/bool.svg index 4fd042bbc7..97a155c0fb 100644 --- a/editor/icons/bool.svg +++ b/editor/icons/bool.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 4v8h2a3 3 0 0 0 2.5-1.346 3 3 0 0 0 4.5.578 3 3 0 0 0 4.5-.578A3 3 0 0 0 16 12v-2a1 1 0 0 1-1-1V4h-2v2.77a3 3 0 0 0-4 0 3 3 0 0 0-4.5.578A3 3 0 0 0 2 6V4zm2 4a1 1 0 0 1 0 2zm5 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#6f91f0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#6f91f0" d="M0 4v8h2a3 3 0 0 0 2.5-1.346 3 3 0 0 0 4.5.578 3 3 0 0 0 4.5-.578A3 3 0 0 0 16 12v-2a1 1 0 0 1-1-1V4h-2v2.77a3 3 0 0 0-4 0 3 3 0 0 0-4.5.578A3 3 0 0 0 2 6V4zm2 4a1 1 0 0 1 0 2zm5 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/float.svg b/editor/icons/float.svg index 051234584d..05328c0be9 100644 --- a/editor/icons/float.svg +++ b/editor/icons/float.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 4a3 3 0 0 0-3 3v5h2v-2h2V8H2V7a1 1 0 0 1 1-1h1V4zm3 0v5a3 3 0 0 0 3 3h1v-2H9a1 1 0 0 1-1-1V4zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1V8h2V6h-2V4z" fill="#35d4f4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#35d4f4" d="M3 4a3 3 0 0 0-3 3v5h2v-2h2V8H2V7a1 1 0 0 1 1-1h1V4zm3 0v5a3 3 0 0 0 3 3h1v-2H9a1 1 0 0 1-1-1V4zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1-1-1V8h2V6h-2V4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/int.svg b/editor/icons/int.svg index b943822c23..009167c559 100644 --- a/editor/icons/int.svg +++ b/editor/icons/int.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 2v2h2v-2zm11 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2zm-8 2v6h2v-4h1a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3h-1zm-3 2v4h2v-4z" fill="#5abbef"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#5abbef" d="m1 2v2h2v-2zm11 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2zm-8 2v6h2v-4h1a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3h-1zm-3 2v4h2v-4z"/></svg>
\ No newline at end of file diff --git a/editor/icons/uint.svg b/editor/icons/uint.svg index 1be22d7a2f..3582a466ad 100644 --- a/editor/icons/uint.svg +++ b/editor/icons/uint.svg @@ -1 +1 @@ -<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 2v2h2V2zm2 2v2H5V4H3v4a1 1 0 0 1-1-1V4H0v3a3 3 0 0 0 0 .05A3 3 0 0 0 3 10h6V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1-1-1V6h2V4h-2V2h-2z" fill="#5abbef"/><path d="M5 10V4H3v4a1 1 0 0 1-1-1V4H0v3a3 3 0 0 0 3 3zm2 0h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3H7z" fill="#fff" fill-opacity=".4"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="12"><path fill="#5abbef" d="M5 2v2h2V2zm2 2v2H5V4H3v4a1 1 0 0 1-1-1V4H0v3a3 3 0 0 0 0 .05A3 3 0 0 0 3 10h6V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3zm5 3a3 3 0 0 0 3 3h1V8h-1a1 1 0 0 1-1-1V6h2V4h-2V2h-2z"/><path fill="#fff" fill-opacity=".4" d="M5 10V4H3v4a1 1 0 0 1-1-1V4H0v3a3 3 0 0 0 3 3zm2 0h2V6a1 1 0 0 1 1 1v3h2V7a3 3 0 0 0-3-3H7z"/></svg>
\ No newline at end of file diff --git a/editor/import/3d/resource_importer_obj.cpp b/editor/import/3d/resource_importer_obj.cpp index 6d68e93c75..a0c05598a2 100644 --- a/editor/import/3d/resource_importer_obj.cpp +++ b/editor/import/3d/resource_importer_obj.cpp @@ -425,9 +425,13 @@ static Error _parse_obj(const String &p_path, List<Ref<ImporterMesh>> &r_meshes, } if (!current_material.is_empty()) { - mesh->set_surface_name(mesh->get_surface_count() - 1, current_material.get_basename()); + if (mesh->get_surface_count() >= 1) { + mesh->set_surface_name(mesh->get_surface_count() - 1, current_material.get_basename()); + } } else if (!current_group.is_empty()) { - mesh->set_surface_name(mesh->get_surface_count() - 1, current_group); + if (mesh->get_surface_count() >= 1) { + mesh->set_surface_name(mesh->get_surface_count() - 1, current_group); + } } Array array = surf_tool->commit_to_arrays(); diff --git a/editor/import/3d/resource_importer_scene.cpp b/editor/import/3d/resource_importer_scene.cpp index 55a7208169..2db3fb1f07 100644 --- a/editor/import/3d/resource_importer_scene.cpp +++ b/editor/import/3d/resource_importer_scene.cpp @@ -1959,7 +1959,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate/physics", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "generate/navmesh", PROPERTY_HINT_ENUM, "Disabled,Mesh + NavMesh,NavMesh Only"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/body_type", PROPERTY_HINT_ENUM, "Static,Dynamic,Area"), 0)); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/shape_type", PROPERTY_HINT_ENUM, "Decompose Convex,Simple Convex,Trimesh,Box,Sphere,Cylinder,Capsule", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 2)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/shape_type", PROPERTY_HINT_ENUM, "Decompose Convex,Simple Convex,Trimesh,Box,Sphere,Cylinder,Capsule,Automatic", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 7)); r_options->push_back(ImportOption(PropertyInfo(Variant::OBJECT, "physics/physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), Variant())); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), 1)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), 1)); diff --git a/editor/import/3d/resource_importer_scene.h b/editor/import/3d/resource_importer_scene.h index cd6a725231..f9124ad289 100644 --- a/editor/import/3d/resource_importer_scene.h +++ b/editor/import/3d/resource_importer_scene.h @@ -212,6 +212,7 @@ class ResourceImporterScene : public ResourceImporter { SHAPE_TYPE_SPHERE, SHAPE_TYPE_CYLINDER, SHAPE_TYPE_CAPSULE, + SHAPE_TYPE_AUTOMATIC, }; static Error _check_resource_save_paths(const Dictionary &p_data); @@ -324,11 +325,21 @@ public: template <typename M> Vector<Ref<Shape3D>> ResourceImporterScene::get_collision_shapes(const Ref<ImporterMesh> &p_mesh, const M &p_options, float p_applied_root_scale) { ERR_FAIL_COND_V(p_mesh.is_null(), Vector<Ref<Shape3D>>()); - ShapeType generate_shape_type = SHAPE_TYPE_TRIMESH; + + ShapeType generate_shape_type = SHAPE_TYPE_AUTOMATIC; if (p_options.has(SNAME("physics/shape_type"))) { generate_shape_type = (ShapeType)p_options[SNAME("physics/shape_type")].operator int(); } + if (generate_shape_type == SHAPE_TYPE_AUTOMATIC) { + BodyType body_type = BODY_TYPE_STATIC; + if (p_options.has(SNAME("physics/body_type"))) { + body_type = (BodyType)p_options[SNAME("physics/body_type")].operator int(); + } + + generate_shape_type = body_type == BODY_TYPE_DYNAMIC ? SHAPE_TYPE_DECOMPOSE_CONVEX : SHAPE_TYPE_TRIMESH; + } + if (generate_shape_type == SHAPE_TYPE_DECOMPOSE_CONVEX) { Ref<MeshConvexDecompositionSettings> decomposition_settings = Ref<MeshConvexDecompositionSettings>(); decomposition_settings.instantiate(); @@ -482,11 +493,20 @@ template <typename M> Transform3D ResourceImporterScene::get_collision_shapes_transform(const M &p_options) { Transform3D transform; - ShapeType generate_shape_type = SHAPE_TYPE_TRIMESH; + ShapeType generate_shape_type = SHAPE_TYPE_AUTOMATIC; if (p_options.has(SNAME("physics/shape_type"))) { generate_shape_type = (ShapeType)p_options[SNAME("physics/shape_type")].operator int(); } + if (generate_shape_type == SHAPE_TYPE_AUTOMATIC) { + BodyType body_type = BODY_TYPE_STATIC; + if (p_options.has(SNAME("physics/body_type"))) { + body_type = (BodyType)p_options[SNAME("physics/body_type")].operator int(); + } + + generate_shape_type = body_type == BODY_TYPE_DYNAMIC ? SHAPE_TYPE_DECOMPOSE_CONVEX : SHAPE_TYPE_TRIMESH; + } + if (generate_shape_type == SHAPE_TYPE_BOX || generate_shape_type == SHAPE_TYPE_SPHERE || generate_shape_type == SHAPE_TYPE_CYLINDER || diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index b71f0f1bb6..acdbd6d9c4 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -541,9 +541,10 @@ void InspectorDock::update(Object *p_object) { p->add_shortcut(ED_SHORTCUT("property_editor/expand_revertable", TTR("Expand Non-Default")), EXPAND_REVERTABLE); p->add_separator(TTR("Property Name Style")); - p->add_radio_check_item(TTR("Raw"), PROPERTY_NAME_STYLE_RAW); - p->add_radio_check_item(TTR("Capitalized"), PROPERTY_NAME_STYLE_CAPITALIZED); - p->add_radio_check_item(TTR("Localized"), PROPERTY_NAME_STYLE_LOCALIZED); + p->add_radio_check_item(vformat(TTR("Raw (e.g. \"%s\")"), "z_index"), PROPERTY_NAME_STYLE_RAW); + p->add_radio_check_item(vformat(TTR("Capitalized (e.g. \"%s\")"), "Z Index"), PROPERTY_NAME_STYLE_CAPITALIZED); + // TRANSLATORS: "Z Index" should match the existing translated CanvasItem property name in the current language you're working on. + p->add_radio_check_item(TTR("Localized (e.g. \"Z Index\")"), PROPERTY_NAME_STYLE_LOCALIZED); if (!EditorPropertyNameProcessor::is_localization_available()) { const int index = p->get_item_index(PROPERTY_NAME_STYLE_LOCALIZED); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 97f628c4a4..f73c494b25 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -570,7 +570,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl const Vector2 p = (vertex == edited_point) ? edited_point.pos : (points[i] + offset); const Vector2 point = xform.xform(p); - const Color overlay_modulate = vertex == active_point ? Color(0.5, 1, 2) : Color(1, 1, 1); + const Color overlay_modulate = vertex == active_point ? Color(0.4, 1, 1) : Color(1, 1, 1); p_overlay->draw_texture(handle, point - handle->get_size() * 0.5, overlay_modulate); if (vertex == hover_point) { diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index afe7ea83d8..b07db993ba 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -781,6 +781,27 @@ void AnimationLibraryEditor::_update_editor(Object *p_mixer) { emit_signal("update_editor", p_mixer); } +void AnimationLibraryEditor::shortcut_input(const Ref<InputEvent> &p_event) { + const Ref<InputEventKey> k = p_event; + if (k.is_valid() && k->is_pressed()) { + bool handled = false; + + if (ED_IS_SHORTCUT("ui_undo", p_event)) { + EditorNode::get_singleton()->undo(); + handled = true; + } + + if (ED_IS_SHORTCUT("ui_redo", p_event)) { + EditorNode::get_singleton()->redo(); + handled = true; + } + + if (handled) { + set_input_as_handled(); + } + } +} + void AnimationLibraryEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_update_editor", "mixer"), &AnimationLibraryEditor::_update_editor); ADD_SIGNAL(MethodInfo("update_editor")); @@ -788,6 +809,7 @@ void AnimationLibraryEditor::_bind_methods() { AnimationLibraryEditor::AnimationLibraryEditor() { set_title(TTR("Edit Animation Libraries")); + set_process_shortcut_input(true); file_dialog = memnew(EditorFileDialog); add_child(file_dialog); diff --git a/editor/plugins/animation_library_editor.h b/editor/plugins/animation_library_editor.h index c8d9274f4f..beb34c6343 100644 --- a/editor/plugins/animation_library_editor.h +++ b/editor/plugins/animation_library_editor.h @@ -113,6 +113,7 @@ class AnimationLibraryEditor : public AcceptDialog { protected: void _notification(int p_what); void _update_editor(Object *p_mixer); + virtual void shortcut_input(const Ref<InputEvent> &p_event) override; static void _bind_methods(); public: diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 484d2b1fff..02fa582da4 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -1395,23 +1395,14 @@ void AnimationPlayerEditor::_current_animation_changed(const String &p_name) { void AnimationPlayerEditor::_animation_key_editor_anim_len_changed(float p_len) { frame->set_max(p_len); } - -void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_timeline_only) { +void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_timeline_only, bool p_update_position_only) { timeline_position = p_pos; - if (!is_visible_in_tree()) { - return; - } - - if (!player) { - return; - } - - if (player->is_playing()) { - return; - } - - if (!player->has_animation(player->get_assigned_animation())) { + if (!is_visible_in_tree() || + p_update_position_only || + !player || + player->is_playing() || + !player->has_animation(player->get_assigned_animation())) { return; } diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index e624522566..4a3b1f37ab 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -214,7 +214,7 @@ class AnimationPlayerEditor : public VBoxContainer { void _animation_player_changed(Object *p_pl); void _animation_libraries_updated(); - void _animation_key_editor_seek(float p_pos, bool p_timeline_only = false); + void _animation_key_editor_seek(float p_pos, bool p_timeline_only = false, bool p_update_position_only = false); void _animation_key_editor_anim_len_changed(float p_len); virtual void shortcut_input(const Ref<InputEvent> &p_ev) override; diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 39743c1631..294df95874 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -780,19 +780,24 @@ bool CanvasItemEditor::_select_click_on_item(CanvasItem *item, Point2 p_click_po return still_selected; } -List<CanvasItem *> CanvasItemEditor::_get_edited_canvas_items(bool retrieve_locked, bool remove_canvas_item_if_parent_in_selection) const { +List<CanvasItem *> CanvasItemEditor::_get_edited_canvas_items(bool p_retrieve_locked, bool p_remove_canvas_item_if_parent_in_selection, bool *r_has_locked_items) const { List<CanvasItem *> selection; for (const KeyValue<Node *, Object *> &E : editor_selection->get_selection()) { CanvasItem *ci = Object::cast_to<CanvasItem>(E.key); - if (ci && ci->is_visible_in_tree() && ci->get_viewport() == EditorNode::get_singleton()->get_scene_root() && (retrieve_locked || !_is_node_locked(ci))) { - CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(ci); - if (se) { - selection.push_back(ci); + if (ci) { + if (ci->is_visible_in_tree() && ci->get_viewport() == EditorNode::get_singleton()->get_scene_root() && (p_retrieve_locked || !_is_node_locked(ci))) { + CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(ci); + if (se) { + selection.push_back(ci); + } + } else if (r_has_locked_items) { + // CanvasItem is selected, but can't be interacted with. + *r_has_locked_items = true; } } } - if (remove_canvas_item_if_parent_in_selection) { + if (p_remove_canvas_item_if_parent_in_selection) { List<CanvasItem *> filtered_selection; for (CanvasItem *E : selection) { if (!selection.find(E->get_parent())) { @@ -1454,7 +1459,8 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { if (drag_type == DRAG_NONE) { if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed()) { if ((b->is_command_or_control_pressed() && !b->is_alt_pressed() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) { - List<CanvasItem *> selection = _get_edited_canvas_items(); + bool has_locked_items = false; + List<CanvasItem *> selection = _get_edited_canvas_items(false, true, &has_locked_items); // Remove not movable nodes for (CanvasItem *E : selection) { @@ -1477,6 +1483,11 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) { } _save_canvas_item_state(drag_selection); return true; + } else { + if (has_locked_items) { + EditorToaster::get_singleton()->popup_str(TTR(locked_transform_warning), EditorToaster::SEVERITY_WARNING); + } + return has_locked_items; } } } @@ -1687,13 +1698,18 @@ bool CanvasItemEditor::_gui_input_anchors(const Ref<InputEvent> &p_event) { _commit_canvas_item_state( drag_selection, vformat(TTR("Move CanvasItem \"%s\" Anchor"), drag_selection.front()->get()->get_name())); + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; _reset_drag(); + viewport->queue_redraw(); return true; } // Cancel a drag if (ED_IS_SHORTCUT("canvas_item_editor/cancel_transform", p_event) || (b.is_valid() && b->get_button_index() == MouseButton::RIGHT && b->is_pressed())) { _restore_canvas_item_state(drag_selection); + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; _reset_drag(); viewport->queue_redraw(); return true; @@ -1912,7 +1928,8 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { // Drag resize handles if (drag_type == DRAG_NONE) { if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed() && ((b->is_alt_pressed() && b->is_command_or_control_pressed()) || tool == TOOL_SCALE)) { - List<CanvasItem *> selection = _get_edited_canvas_items(); + bool has_locked_items = false; + List<CanvasItem *> selection = _get_edited_canvas_items(false, true, &has_locked_items); if (selection.size() == 1) { CanvasItem *ci = selection.front()->get(); @@ -1941,6 +1958,11 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { _save_canvas_item_state(drag_selection); return true; } + } else { + if (has_locked_items) { + EditorToaster::get_singleton()->popup_str(TTR(locked_transform_warning), EditorToaster::SEVERITY_WARNING); + } + return has_locked_items; } } } @@ -2051,7 +2073,8 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { //Start moving the nodes if (b.is_valid() && b->get_button_index() == MouseButton::LEFT && b->is_pressed()) { if ((b->is_alt_pressed() && !b->is_command_or_control_pressed()) || tool == TOOL_MOVE) { - List<CanvasItem *> selection = _get_edited_canvas_items(); + bool has_locked_items = false; + List<CanvasItem *> selection = _get_edited_canvas_items(false, true, &has_locked_items); if (selection.size() > 0) { drag_selection.clear(); @@ -2084,6 +2107,11 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { _save_canvas_item_state(drag_selection); return true; + } else { + if (has_locked_items) { + EditorToaster::get_singleton()->popup_str(TTR(locked_transform_warning), EditorToaster::SEVERITY_WARNING); + } + return has_locked_items; } } } @@ -2525,6 +2553,12 @@ bool CanvasItemEditor::_gui_input_ruler_tool(const Ref<InputEvent> &p_event) { ruler_tool_origin = snap_point(viewport->get_local_mouse_position() / zoom + view_offset); } + if (ruler_tool_active && b.is_valid() && b->get_button_index() == MouseButton::RIGHT) { + ruler_tool_active = false; + viewport->queue_redraw(); + return true; + } + if (b.is_valid() && b->get_button_index() == MouseButton::LEFT) { if (b->is_pressed()) { ruler_tool_active = true; @@ -2623,10 +2657,10 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { // print_line("Move"); } else if (_gui_input_anchors(p_event)) { // print_line("Anchors"); - } else if (_gui_input_select(p_event)) { - // print_line("Selection"); } else if (_gui_input_ruler_tool(p_event)) { // print_line("Measure"); + } else if (_gui_input_select(p_event)) { + // print_line("Selection"); } else { // print_line("Not accepted"); accepted = false; @@ -5165,7 +5199,7 @@ CanvasItemEditor::CanvasItemEditor() { SceneTreeDock::get_singleton()->connect("node_created", callable_mp(this, &CanvasItemEditor::_adjust_new_node_position)); SceneTreeDock::get_singleton()->connect("add_node_used", callable_mp(this, &CanvasItemEditor::_reset_create_position)); - // Add some margin to the sides for better esthetics. + // Add some margin to the sides for better aesthetics. // This prevents the first button's hover/pressed effect from "touching" the panel's border, // which looks ugly. MarginContainer *toolbar_margin = memnew(MarginContainer); diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index a9de5e9a0b..bae9efebc9 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -188,6 +188,8 @@ private: GRID_VISIBILITY_HIDE, }; + const String locked_transform_warning = TTRC("All selected CanvasItems are either invisible or locked in some way and can't be transformed."); + bool selection_menu_additive_selection = false; Tool tool = TOOL_SELECT; @@ -430,7 +432,7 @@ private: ThemePreviewMode theme_preview = THEME_PREVIEW_PROJECT; void _switch_theme_preview(int p_mode); - List<CanvasItem *> _get_edited_canvas_items(bool retrieve_locked = false, bool remove_canvas_item_if_parent_in_selection = true) const; + List<CanvasItem *> _get_edited_canvas_items(bool p_retrieve_locked = false, bool p_remove_canvas_item_if_parent_in_selection = true, bool *r_has_locked_items = nullptr) const; Rect2 _get_encompassing_rect_from_list(const List<CanvasItem *> &p_list); void _expand_encompassing_rect_using_children(Rect2 &r_rect, const Node *p_node, bool &r_first, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D(), bool include_locked_nodes = true); Rect2 _get_encompassing_rect(const Node *p_node); diff --git a/editor/plugins/cast_2d_editor_plugin.cpp b/editor/plugins/cast_2d_editor_plugin.cpp index c9d7ff8e08..3da7d4a7dc 100644 --- a/editor/plugins/cast_2d_editor_plugin.cpp +++ b/editor/plugins/cast_2d_editor_plugin.cpp @@ -102,7 +102,6 @@ bool Cast2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) { node->set("target_position", point); canvas_item_editor->update_viewport(); - node->notify_property_list_changed(); return true; } diff --git a/editor/plugins/editor_plugin.cpp b/editor/plugins/editor_plugin.cpp index 2b3c187352..d9f60e155d 100644 --- a/editor/plugins/editor_plugin.cpp +++ b/editor/plugins/editor_plugin.cpp @@ -414,13 +414,21 @@ void EditorPlugin::remove_translation_parser_plugin(const Ref<EditorTranslationP void EditorPlugin::add_import_plugin(const Ref<EditorImportPlugin> &p_importer, bool p_first_priority) { ERR_FAIL_COND(!p_importer.is_valid()); ResourceFormatImporter::get_singleton()->add_importer(p_importer, p_first_priority); - callable_mp(EditorFileSystem::get_singleton(), &EditorFileSystem::scan).call_deferred(); + // Plugins are now loaded during the first scan. It's important not to start another scan, + // even a deferred one, as it would cause a scan during a scan at the next main thread iteration. + if (!EditorFileSystem::get_singleton()->doing_first_scan()) { + callable_mp(EditorFileSystem::get_singleton(), &EditorFileSystem::scan).call_deferred(); + } } void EditorPlugin::remove_import_plugin(const Ref<EditorImportPlugin> &p_importer) { ERR_FAIL_COND(!p_importer.is_valid()); ResourceFormatImporter::get_singleton()->remove_importer(p_importer); - callable_mp(EditorFileSystem::get_singleton(), &EditorFileSystem::scan).call_deferred(); + // Plugins are now loaded during the first scan. It's important not to start another scan, + // even a deferred one, as it would cause a scan during a scan at the next main thread iteration. + if (!EditorNode::get_singleton()->is_exiting() && !EditorFileSystem::get_singleton()->doing_first_scan()) { + callable_mp(EditorFileSystem::get_singleton(), &EditorFileSystem::scan).call_deferred(); + } } void EditorPlugin::add_export_plugin(const Ref<EditorExportPlugin> &p_exporter) { diff --git a/editor/plugins/font_config_plugin.cpp b/editor/plugins/font_config_plugin.cpp index 15b268337f..e6ce63fe36 100644 --- a/editor/plugins/font_config_plugin.cpp +++ b/editor/plugins/font_config_plugin.cpp @@ -386,15 +386,8 @@ EditorPropertyFontMetaOverride::EditorPropertyFontMetaOverride(bool p_script) { void EditorPropertyOTVariation::_property_changed(const String &p_property, const Variant &p_value, const String &p_name, bool p_changing) { if (p_property.begins_with("keys")) { Dictionary dict = object->get_dict(); - Dictionary defaults_dict = object->get_defaults(); int key = p_property.get_slice("/", 1).to_int(); dict[key] = (int)p_value; - if (defaults_dict.has(key)) { - Vector3i range = defaults_dict[key]; - if (range.z == (int)p_value) { - dict.erase(key); - } - } emit_changed(get_edited_property(), dict, "", true); @@ -422,6 +415,14 @@ void EditorPropertyOTVariation::update_property() { Dictionary supported = (fd.is_valid()) ? fd->get_supported_variation_list() : Dictionary(); + for (int i = 0; i < supported.size(); i++) { + int name_tag = supported.get_key_at_index(i); + Vector3i range = supported.get_value_at_index(i); + if ((dict.has(name_tag) && dict[name_tag].get_type() == Variant::NIL) || !dict.has(name_tag)) { + dict[name_tag] = range.z; + } + } + edit->set_text(vformat(TTR("Variation Coordinates (%d)"), supported.size())); bool unfolded = get_edited_object()->editor_is_section_unfolded(get_edited_property()); @@ -481,7 +482,21 @@ void EditorPropertyOTVariation::update_property() { prop->set_object_and_property(object.ptr(), "keys/" + itos(name_tag)); String name = TS->tag_to_name(name_tag); - prop->set_label(name.capitalize()); + String name_cap; + { + String aux = name.replace("_", " ").strip_edges(); + for (int j = 0; j < aux.get_slice_count(" "); j++) { + String slice = aux.get_slicec(' ', j); + if (slice.length() > 0) { + slice[0] = String::char_uppercase(slice[0]); + if (i > 0) { + name_cap += " "; + } + name_cap += slice; + } + } + } + prop->set_label(name_cap); prop->set_tooltip_text(name); prop->set_selectable(false); @@ -935,6 +950,12 @@ void FontPreview::_notification(int p_what) { font->draw_string(get_canvas_item(), Point2(0, font->get_height(font_size) + 2 * EDSCALE), TTR("Unable to preview font"), HORIZONTAL_ALIGNMENT_CENTER, get_size().x, font_size, text_color); } } break; + + case NOTIFICATION_EXIT_TREE: { + if (prev_font.is_valid()) { + prev_font->disconnect_changed(callable_mp(this, &FontPreview::_preview_changed)); + } + } break; } } @@ -945,7 +966,17 @@ Size2 FontPreview::get_minimum_size() const { } void FontPreview::set_data(const Ref<Font> &p_f) { + if (prev_font.is_valid()) { + prev_font->disconnect_changed(callable_mp(this, &FontPreview::_preview_changed)); + } prev_font = p_f; + if (prev_font.is_valid()) { + prev_font->connect_changed(callable_mp(this, &FontPreview::_preview_changed)); + } + queue_redraw(); +} + +void FontPreview::_preview_changed() { queue_redraw(); } diff --git a/editor/plugins/font_config_plugin.h b/editor/plugins/font_config_plugin.h index 7b2d26da4a..4e798fc3e8 100644 --- a/editor/plugins/font_config_plugin.h +++ b/editor/plugins/font_config_plugin.h @@ -225,6 +225,8 @@ protected: Ref<Font> prev_font; + void _preview_changed(); + public: virtual Size2 get_minimum_size() const override; diff --git a/editor/plugins/gradient_texture_2d_editor_plugin.cpp b/editor/plugins/gradient_texture_2d_editor_plugin.cpp index 9ccbea4c3c..7e22e1209c 100644 --- a/editor/plugins/gradient_texture_2d_editor_plugin.cpp +++ b/editor/plugins/gradient_texture_2d_editor_plugin.cpp @@ -213,7 +213,7 @@ void GradientTexture2DEdit::_draw() { } // Draw handles. - const Color focus_modulate = Color(0.5, 1, 2); + const Color focus_modulate = Color(0.4, 1, 1); bool modulate_handle_from = grabbed == HANDLE_FROM || hovered == HANDLE_FROM; bool modulate_handle_to = grabbed == HANDLE_TO || hovered == HANDLE_TO; draw_texture(fill_from_icon, (_get_handle_pos(HANDLE_FROM) - handle_size / 2).round(), modulate_handle_from ? focus_modulate : Color(1, 1, 1)); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 1f3bf60d24..72eea8a27e 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -325,11 +325,11 @@ void ViewportRotationControl::_notification(int p_what) { } void ViewportRotationControl::_draw() { - const Vector2i center = get_size() / 2.0; + const Vector2 center = get_size() / 2.0; const real_t radius = get_size().x / 2.0; if (focused_axis > -2 || orbiting_index != -1) { - draw_circle(center, radius, Color(0.5, 0.5, 0.5, 0.25)); + draw_circle(center, radius, Color(0.5, 0.5, 0.5, 0.25), true, -1.0, true); } Vector<Axis2D> axis_to_draw; @@ -345,34 +345,42 @@ void ViewportRotationControl::_draw_axis(const Axis2D &p_axis) { const int direction = p_axis.axis % 3; const Color axis_color = axis_colors[direction]; - const double alpha = focused ? 1.0 : ((p_axis.z_axis + 1.0) / 2.0) * 0.5 + 0.5; - const Color c = focused ? Color(0.9, 0.9, 0.9) : Color(axis_color, alpha); + const double min_alpha = 0.35; + const double alpha = focused ? 1.0 : Math::remap((p_axis.z_axis + 1.0) / 2.0, 0, 0.5, min_alpha, 1.0); + const Color c = focused ? Color(axis_color.lightened(0.75), 1.0) : Color(axis_color, alpha); if (positive) { // Draw axis lines for the positive axes. - const Vector2i center = get_size() / 2.0; - draw_line(center, p_axis.screen_point, c, 1.5 * EDSCALE); + const Vector2 center = get_size() / 2.0; + const Vector2 diff = p_axis.screen_point - center; + const float line_length = MAX(diff.length() - AXIS_CIRCLE_RADIUS - 0.5 * EDSCALE, 0); - draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c); + draw_line(center + diff.limit_length(0.5 * EDSCALE), center + diff.limit_length(line_length), c, 1.5 * EDSCALE, true); + + draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c, true, -1.0, true); // Draw the axis letter for the positive axes. const String axis_name = direction == 0 ? "X" : (direction == 1 ? "Y" : "Z"); - draw_char(get_theme_font(SNAME("rotation_control"), EditorStringName(EditorFonts)), p_axis.screen_point + Vector2i(Math::round(-4.0 * EDSCALE), Math::round(5.0 * EDSCALE)), axis_name, get_theme_font_size(SNAME("rotation_control_size"), EditorStringName(EditorFonts)), Color(0.0, 0.0, 0.0, alpha)); + const Ref<Font> &font = get_theme_font(SNAME("rotation_control"), EditorStringName(EditorFonts)); + const int font_size = get_theme_font_size(SNAME("rotation_control_size"), EditorStringName(EditorFonts)); + const Size2 char_size = font->get_char_size(axis_name[0], font_size); + const Vector2 char_offset = Vector2(-char_size.width / 2.0, char_size.height * 0.25); + draw_char(font, p_axis.screen_point + char_offset, axis_name, font_size, Color(0.0, 0.0, 0.0, alpha * 0.6)); } else { // Draw an outline around the negative axes. - draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c); - draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS * 0.8, c.darkened(0.4)); + draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS, c, true, -1.0, true); + draw_circle(p_axis.screen_point, AXIS_CIRCLE_RADIUS * 0.8, c.darkened(0.4), true, -1.0, true); } } void ViewportRotationControl::_get_sorted_axis(Vector<Axis2D> &r_axis) { - const Vector2i center = get_size() / 2.0; + const Vector2 center = get_size() / 2.0; const real_t radius = get_size().x / 2.0 - AXIS_CIRCLE_RADIUS - 2.0 * EDSCALE; const Basis camera_basis = viewport->to_camera_transform(viewport->cursor).get_basis().inverse(); for (int i = 0; i < 3; ++i) { Vector3 axis_3d = camera_basis.get_column(i); - Vector2i axis_vector = Vector2(axis_3d.x, -axis_3d.y) * radius; + Vector2 axis_vector = Vector2(axis_3d.x, -axis_3d.y) * radius; if (Math::abs(axis_3d.z) <= 1.0) { Axis2D pos_axis; @@ -2895,8 +2903,8 @@ void Node3DEditorViewport::_notification(int p_what) { } bool show_info = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION)); - if (show_info != info_label->is_visible()) { - info_label->set_visible(show_info); + if (show_info != info_panel->is_visible()) { + info_panel->set_visible(show_info); } Camera3D *current_camera; @@ -3043,29 +3051,45 @@ void Node3DEditorViewport::_notification(int p_what) { preview_camera->set_icon(get_editor_theme_icon(SNAME("Camera3D"))); Control *gui_base = EditorNode::get_singleton()->get_gui_base(); + const Ref<StyleBox> &information_3d_stylebox = gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles)); + view_menu->begin_bulk_theme_override(); - view_menu->add_theme_style_override(CoreStringName(normal), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - view_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - view_menu->add_theme_style_override(SceneStringName(pressed), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - view_menu->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - view_menu->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); + view_menu->add_theme_style_override(CoreStringName(normal), information_3d_stylebox); + view_menu->add_theme_style_override("normal_mirrored", information_3d_stylebox); + view_menu->add_theme_style_override("hover", information_3d_stylebox); + view_menu->add_theme_style_override("hover_mirrored", information_3d_stylebox); + view_menu->add_theme_style_override("hover_pressed", information_3d_stylebox); + view_menu->add_theme_style_override("hover_pressed_mirrored", information_3d_stylebox); + view_menu->add_theme_style_override(SceneStringName(pressed), information_3d_stylebox); + view_menu->add_theme_style_override("pressed_mirrored", information_3d_stylebox); + view_menu->add_theme_style_override("focus", information_3d_stylebox); + view_menu->add_theme_style_override("focus_mirrored", information_3d_stylebox); + view_menu->add_theme_style_override("disabled", information_3d_stylebox); + view_menu->add_theme_style_override("disabled_mirrored", information_3d_stylebox); view_menu->end_bulk_theme_override(); preview_camera->begin_bulk_theme_override(); - preview_camera->add_theme_style_override(CoreStringName(normal), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - preview_camera->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - preview_camera->add_theme_style_override(SceneStringName(pressed), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - preview_camera->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - preview_camera->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); + preview_camera->add_theme_style_override(CoreStringName(normal), information_3d_stylebox); + preview_camera->add_theme_style_override("normal_mirrored", information_3d_stylebox); + preview_camera->add_theme_style_override("hover", information_3d_stylebox); + preview_camera->add_theme_style_override("hover_mirrored", information_3d_stylebox); + preview_camera->add_theme_style_override("hover_pressed", information_3d_stylebox); + preview_camera->add_theme_style_override("hover_pressed_mirrored", information_3d_stylebox); + preview_camera->add_theme_style_override(SceneStringName(pressed), information_3d_stylebox); + preview_camera->add_theme_style_override("pressed_mirrored", information_3d_stylebox); + preview_camera->add_theme_style_override("focus", information_3d_stylebox); + preview_camera->add_theme_style_override("focus_mirrored", information_3d_stylebox); + preview_camera->add_theme_style_override("disabled", information_3d_stylebox); + preview_camera->add_theme_style_override("disabled_mirrored", information_3d_stylebox); preview_camera->end_bulk_theme_override(); frame_time_gradient->set_color(0, get_theme_color(SNAME("success_color"), EditorStringName(Editor))); frame_time_gradient->set_color(1, get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); frame_time_gradient->set_color(2, get_theme_color(SNAME("error_color"), EditorStringName(Editor))); - info_label->add_theme_style_override(CoreStringName(normal), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); + info_panel->add_theme_style_override(SceneStringName(panel), information_3d_stylebox); - frame_time_panel->add_theme_style_override(SceneStringName(panel), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); + frame_time_panel->add_theme_style_override(SceneStringName(panel), information_3d_stylebox); // Set a minimum width to prevent the width from changing all the time // when numbers vary rapidly. This minimum width is set based on a // GPU time of 999.99 ms in the current editor language. @@ -3073,8 +3097,8 @@ void Node3DEditorViewport::_notification(int p_what) { frame_time_panel->set_custom_minimum_size(Size2(min_width, 0) * EDSCALE); frame_time_vbox->add_theme_constant_override("separation", Math::round(-1 * EDSCALE)); - cinema_label->add_theme_style_override(CoreStringName(normal), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); - locked_label->add_theme_style_override(CoreStringName(normal), gui_base->get_theme_stylebox(SNAME("Information3dViewport"), EditorStringName(EditorStyles))); + cinema_label->add_theme_style_override(CoreStringName(normal), information_3d_stylebox); + locked_label->add_theme_style_override(CoreStringName(normal), information_3d_stylebox); } break; case NOTIFICATION_DRAG_END: { @@ -5358,20 +5382,25 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p bottom_center_vbox->set_v_grow_direction(GROW_DIRECTION_BEGIN); surface->add_child(bottom_center_vbox); + info_panel = memnew(PanelContainer); + info_panel->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -90 * EDSCALE); + info_panel->set_anchor_and_offset(SIDE_TOP, ANCHOR_END, -90 * EDSCALE); + info_panel->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, -10 * EDSCALE); + info_panel->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, -10 * EDSCALE); + info_panel->set_h_grow_direction(GROW_DIRECTION_BEGIN); + info_panel->set_v_grow_direction(GROW_DIRECTION_BEGIN); + info_panel->set_mouse_filter(MOUSE_FILTER_IGNORE); + surface->add_child(info_panel); + info_panel->hide(); + info_label = memnew(Label); - info_label->set_anchor_and_offset(SIDE_LEFT, ANCHOR_END, -90 * EDSCALE); - info_label->set_anchor_and_offset(SIDE_TOP, ANCHOR_END, -90 * EDSCALE); - info_label->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, -10 * EDSCALE); - info_label->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, -10 * EDSCALE); - info_label->set_h_grow_direction(GROW_DIRECTION_BEGIN); - info_label->set_v_grow_direction(GROW_DIRECTION_BEGIN); - surface->add_child(info_label); - info_label->hide(); + info_panel->add_child(info_label); cinema_label = memnew(Label); cinema_label->set_anchor_and_offset(SIDE_TOP, ANCHOR_BEGIN, 10 * EDSCALE); cinema_label->set_h_grow_direction(GROW_DIRECTION_END); cinema_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); + cinema_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); surface->add_child(cinema_label); cinema_label->set_text(TTR("Cinematic Preview")); cinema_label->hide(); @@ -5379,6 +5408,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p locked_label = memnew(Label); locked_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); + locked_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); locked_label->set_h_size_flags(SIZE_SHRINK_CENTER); bottom_center_vbox->add_child(locked_label); locked_label->set_text(TTR("View Rotation Locked")); @@ -5414,6 +5444,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p frame_time_gradient->add_point(0.5, Color()); top_right_vbox = memnew(VBoxContainer); + top_right_vbox->add_theme_constant_override("separation", 10.0 * EDSCALE); top_right_vbox->set_anchors_and_offsets_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 10.0 * EDSCALE); top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN); @@ -5448,6 +5479,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p top_right_vbox->add_child(rotation_control); frame_time_panel = memnew(PanelContainer); + frame_time_panel->set_mouse_filter(MOUSE_FILTER_IGNORE); top_right_vbox->add_child(frame_time_panel); frame_time_panel->hide(); @@ -8442,7 +8474,7 @@ Node3DEditor::Node3DEditor() { camera_override_viewport_id = 0; - // Add some margin to the sides for better esthetics. + // Add some margin to the sides for better aesthetics. // This prevents the first button's hover/pressed effect from "touching" the panel's border, // which looks ugly. MarginContainer *toolbar_margin = memnew(MarginContainer); @@ -8617,7 +8649,8 @@ Node3DEditor::Node3DEditor() { ED_SHORTCUT("spatial_editor/insert_anim_key", TTR("Insert Animation Key"), Key::K); ED_SHORTCUT("spatial_editor/focus_origin", TTR("Focus Origin"), Key::O); ED_SHORTCUT("spatial_editor/focus_selection", TTR("Focus Selection"), Key::F); - ED_SHORTCUT("spatial_editor/align_transform_with_view", TTR("Align Transform with View"), KeyModifierMask::ALT + KeyModifierMask::CMD_OR_CTRL + Key::M); + ED_SHORTCUT_ARRAY("spatial_editor/align_transform_with_view", TTR("Align Transform with View"), + { int32_t(KeyModifierMask::ALT | KeyModifierMask::CMD_OR_CTRL | Key::KP_0), int32_t(KeyModifierMask::ALT | KeyModifierMask::CMD_OR_CTRL | Key::M) }); ED_SHORTCUT("spatial_editor/align_rotation_with_view", TTR("Align Rotation with View"), KeyModifierMask::ALT + KeyModifierMask::CMD_OR_CTRL + Key::F); ED_SHORTCUT("spatial_editor/freelook_toggle", TTR("Toggle Freelook"), KeyModifierMask::SHIFT + Key::F); ED_SHORTCUT("spatial_editor/decrease_fov", TTR("Decrease Field of View"), KeyModifierMask::CMD_OR_CTRL + Key::EQUAL); // Usually direct access key for `KEY_PLUS`. diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index 859d075732..5bd14748c0 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -65,7 +65,7 @@ class ViewportRotationControl : public Control { GDCLASS(ViewportRotationControl, Control); struct Axis2D { - Vector2i screen_point; + Vector2 screen_point; float z_axis = -99.0; int axis = -1; }; @@ -241,6 +241,7 @@ private: real_t freelook_speed; Vector2 previous_mouse_position; + PanelContainer *info_panel = nullptr; Label *info_label = nullptr; Label *cinema_label = nullptr; Label *locked_label = nullptr; diff --git a/editor/plugins/packed_scene_translation_parser_plugin.cpp b/editor/plugins/packed_scene_translation_parser_plugin.cpp index e266a3241b..118cba53d2 100644 --- a/editor/plugins/packed_scene_translation_parser_plugin.cpp +++ b/editor/plugins/packed_scene_translation_parser_plugin.cpp @@ -200,6 +200,7 @@ PackedSceneEditorTranslationParserPlugin::PackedSceneEditorTranslationParserPlug lookup_properties.insert("title"); lookup_properties.insert("filters"); lookup_properties.insert("script"); + lookup_properties.insert("item_*/text"); // Exception list (to prevent false positives). exception_list.insert("LineEdit", { "text" }); diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index b5db7bef70..e442c37edd 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -52,6 +52,31 @@ #include "scene/gui/texture_rect.h" #include "scene/gui/view_panner.h" +class UVEditDialog : public AcceptDialog { + GDCLASS(UVEditDialog, AcceptDialog); + + void shortcut_input(const Ref<InputEvent> &p_event) override { + const Ref<InputEventKey> k = p_event; + if (k.is_valid() && k->is_pressed()) { + bool handled = false; + + if (ED_IS_SHORTCUT("ui_undo", p_event)) { + EditorNode::get_singleton()->undo(); + handled = true; + } + + if (ED_IS_SHORTCUT("ui_redo", p_event)) { + EditorNode::get_singleton()->redo(); + handled = true; + } + + if (handled) { + set_input_as_handled(); + } + } + } +}; + Node2D *Polygon2DEditor::_get_node() const { return node; } @@ -1305,9 +1330,10 @@ Polygon2DEditor::Polygon2DEditor() { button_uv->connect(SceneStringName(pressed), callable_mp(this, &Polygon2DEditor::_menu_option).bind(MODE_EDIT_UV)); uv_mode = UV_MODE_EDIT_POINT; - uv_edit = memnew(AcceptDialog); - add_child(uv_edit); + uv_edit = memnew(UVEditDialog); uv_edit->set_title(TTR("Polygon 2D UV Editor")); + uv_edit->set_process_shortcut_input(true); + add_child(uv_edit); uv_edit->connect(SceneStringName(confirmed), callable_mp(this, &Polygon2DEditor::_uv_edit_popup_hide)); uv_edit->connect("canceled", callable_mp(this, &Polygon2DEditor::_uv_edit_popup_hide)); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 3d043909b2..c51eb44aee 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -272,7 +272,7 @@ void ScriptEditorBase::_bind_methods() { ADD_SIGNAL(MethodInfo("request_help", PropertyInfo(Variant::STRING, "topic"))); ADD_SIGNAL(MethodInfo("request_open_script_at_line", PropertyInfo(Variant::OBJECT, "script"), PropertyInfo(Variant::INT, "line"))); ADD_SIGNAL(MethodInfo("request_save_history")); - ADD_SIGNAL(MethodInfo("request_save_previous_state", PropertyInfo(Variant::INT, "line"))); + ADD_SIGNAL(MethodInfo("request_save_previous_state", PropertyInfo(Variant::DICTIONARY, "state"))); ADD_SIGNAL(MethodInfo("go_to_help", PropertyInfo(Variant::STRING, "what"))); ADD_SIGNAL(MethodInfo("search_in_files_requested", PropertyInfo(Variant::STRING, "text"))); ADD_SIGNAL(MethodInfo("replace_in_files_requested", PropertyInfo(Variant::STRING, "text"))); @@ -1012,8 +1012,6 @@ void ScriptEditor::_resave_scripts(const String &p_str) { se->trim_final_newlines(); } - se->insert_final_newline(); - if (convert_indent_on_save) { se->convert_indent(); } @@ -1410,8 +1408,6 @@ void ScriptEditor::_menu_option(int p_option) { current->trim_final_newlines(); } - current->insert_final_newline(); - if (convert_indent_on_save) { current->convert_indent(); } @@ -2614,8 +2610,6 @@ void ScriptEditor::save_current_script() { current->trim_final_newlines(); } - current->insert_final_newline(); - if (convert_indent_on_save) { current->convert_indent(); } @@ -2662,8 +2656,6 @@ void ScriptEditor::save_all_scripts() { se->trim_final_newlines(); } - se->insert_final_newline(); - if (!se->is_unsaved()) { continue; } @@ -2713,6 +2705,7 @@ void ScriptEditor::apply_scripts() const { if (!se) { continue; } + se->insert_final_newline(); se->apply_code(); } } @@ -4056,6 +4049,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { filename = memnew(Label); filename->set_clip_text(true); filename->set_h_size_flags(SIZE_EXPAND_FILL); + filename->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); filename->add_theme_style_override(CoreStringName(normal), EditorNode::get_singleton()->get_editor_theme()->get_stylebox(CoreStringName(normal), SNAME("LineEdit"))); buttons_hbox->add_child(filename); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 059e177874..96127ec93e 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -1819,15 +1819,25 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data CodeEdit *te = code_editor->get_text_editor(); Point2i pos = te->get_line_column_at_pos(p_point); - int row = pos.y; - int col = pos.x; + int drop_at_line = pos.y; + int drop_at_column = pos.x; + int selection_index = te->get_selection_at_line_column(drop_at_line, drop_at_column); + + bool line_will_be_empty = false; + if (selection_index >= 0) { + // Dropped on a selection, it will be replaced. + drop_at_line = te->get_selection_from_line(selection_index); + drop_at_column = te->get_selection_from_column(selection_index); + line_will_be_empty = drop_at_column <= te->get_first_non_whitespace_column(drop_at_line) && te->get_selection_to_column(selection_index) == te->get_line(te->get_selection_to_line(selection_index)).length(); + } + + String text_to_drop; const bool drop_modifier_pressed = Input::get_singleton()->is_key_pressed(Key::CMD_OR_CTRL); - const String &line = te->get_line(row); - const bool is_empty_line = line.is_empty() || te->get_first_non_whitespace_column(row) == line.length(); + const String &line = te->get_line(drop_at_line); + const bool is_empty_line = line_will_be_empty || line.is_empty() || te->get_first_non_whitespace_column(drop_at_line) == line.length(); if (d.has("type") && String(d["type"]) == "resource") { - te->remove_secondary_carets(); Ref<Resource> resource = d["resource"]; if (resource.is_null()) { return; @@ -1840,7 +1850,6 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data return; } - String text_to_drop; if (drop_modifier_pressed) { if (resource->is_built_in()) { String warning = TTR("Preloading internal resources is not supported."); @@ -1851,19 +1860,10 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data } else { text_to_drop = _quote_drop_data(path); } - - te->set_caret_line(row); - te->set_caret_column(col); - te->insert_text_at_caret(text_to_drop); - te->grab_focus(); } if (d.has("type") && (String(d["type"]) == "files" || String(d["type"]) == "files_and_dirs")) { - te->remove_secondary_carets(); - Array files = d["files"]; - String text_to_drop; - for (int i = 0; i < files.size(); i++) { const String &path = String(files[i]); @@ -1883,15 +1883,9 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data text_to_drop += is_empty_line ? "\n" : ", "; } } - - te->set_caret_line(row); - te->set_caret_column(col); - te->insert_text_at_caret(text_to_drop); - te->grab_focus(); } if (d.has("type") && String(d["type"]) == "nodes") { - te->remove_secondary_carets(); Node *scene_root = get_tree()->get_edited_scene_root(); if (!scene_root) { EditorNode::get_singleton()->show_warning(TTR("Can't drop nodes without an open scene.")); @@ -1909,7 +1903,6 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data } Array nodes = d["nodes"]; - String text_to_drop; if (drop_modifier_pressed) { const bool use_type = EDITOR_GET("text_editor/completion/add_type_hints"); @@ -1981,27 +1974,33 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data text_to_drop += (is_unique ? "%" : "$") + path; } } - - te->set_caret_line(row); - te->set_caret_column(col); - te->insert_text_at_caret(text_to_drop); - te->grab_focus(); } if (d.has("type") && String(d["type"]) == "obj_property") { - te->remove_secondary_carets(); - bool add_literal = EDITOR_GET("text_editor/completion/add_node_path_literals"); - String text_to_drop = add_literal ? "^" : ""; + text_to_drop = add_literal ? "^" : ""; // It is unclear whether properties may contain single or double quotes. // Assume here that double-quotes may not exist. We are escaping single-quotes if necessary. text_to_drop += _quote_drop_data(String(d["property"])); + } + + if (text_to_drop.is_empty()) { + return; + } - te->set_caret_line(row); - te->set_caret_column(col); - te->insert_text_at_caret(text_to_drop); - te->grab_focus(); + // Remove drag caret before any actions so it is not included in undo. + te->remove_drag_caret(); + te->begin_complex_operation(); + if (selection_index >= 0) { + te->delete_selection(selection_index); } + te->remove_secondary_carets(); + te->deselect(); + te->set_caret_line(drop_at_line); + te->set_caret_column(drop_at_column); + te->insert_text_at_caret(text_to_drop); + te->end_complex_operation(); + te->grab_focus(); } void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) { diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index a8daec7ccb..d7b88511d9 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -365,6 +365,11 @@ void ShaderEditorPlugin::_shader_selected(int p_index) { if (edited_shaders[p_index].shader_editor) { edited_shaders[p_index].shader_editor->validate_script(); } + + if (edited_shaders[p_index].visual_shader_editor) { + edited_shaders[p_index].visual_shader_editor->validate_script(); + } + shader_tabs->set_current_tab(p_index); shader_list->select(p_index); } diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index b33250bcb5..48087e3166 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -953,7 +953,7 @@ void SpriteFramesEditor::_sync_animation() { } void SpriteFramesEditor::_select_animation(const String &p_name, bool p_update_node) { - if (!frames->has_animation(p_name)) { + if (frames.is_null() || !frames->has_animation(p_name)) { return; } edited_anim = p_name; @@ -1056,10 +1056,12 @@ void SpriteFramesEditor::_rename_node_animation(EditorUndoRedoManager *undo_redo for (Node *E : nodes) { String current_name = E->call("get_animation"); if (current_name == p_filter) { + undo_redo->force_fixed_history(); // Fixes corner-case when editing SpriteFrames stored as separate file. undo_redo->add_undo_method(E, "set_animation", p_new_animation); } String autoplay_name = E->call("get_autoplay"); if (autoplay_name == p_filter) { + undo_redo->force_fixed_history(); undo_redo->add_undo_method(E, "set_autoplay", p_new_autoplay); } } @@ -1067,10 +1069,12 @@ void SpriteFramesEditor::_rename_node_animation(EditorUndoRedoManager *undo_redo for (Node *E : nodes) { String current_name = E->call("get_animation"); if (current_name == p_filter) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(E, "set_animation", p_new_animation); } String autoplay_name = E->call("get_autoplay"); if (autoplay_name == p_filter) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(E, "set_autoplay", p_new_autoplay); } } diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp index 62090a5d17..f985bbc629 100644 --- a/editor/plugins/tiles/tile_data_editors.cpp +++ b/editor/plugins/tiles/tile_data_editors.cpp @@ -138,6 +138,19 @@ void GenericTilePolygonEditor::_base_control_draw() { const Ref<Texture2D> add_handle = get_editor_theme_icon(SNAME("EditorHandleAdd")); const Ref<StyleBox> focus_stylebox = get_theme_stylebox(SNAME("Focus"), EditorStringName(EditorStyles)); + // Get the background data. + Rect2 background_region; + TileData *tile_data = nullptr; + + if (background_atlas_source.is_valid()) { + tile_data = background_atlas_source->get_tile_data(background_atlas_coords, background_alternative_id); + ERR_FAIL_NULL(tile_data); + background_region = background_atlas_source->get_tile_texture_region(background_atlas_coords); + } else { + // If no tile was selected yet, use default size. + background_region.size = tile_set->get_tile_size(); + } + // Draw the focus rectangle. if (base_control->has_focus()) { base_control->draw_style_box(focus_stylebox, Rect2(Vector2(), base_control->get_size())); @@ -145,42 +158,57 @@ void GenericTilePolygonEditor::_base_control_draw() { // Draw tile-related things. const Size2 base_tile_size = tile_set->get_tile_size(); - const Size2 tile_size = background_region.size; Transform2D xform; xform.set_origin(base_control->get_size() / 2 + panning); xform.set_scale(Vector2(editor_zoom_widget->get_zoom(), editor_zoom_widget->get_zoom())); base_control->draw_set_transform_matrix(xform); - // Draw the tile shape filled. - Transform2D tile_xform; - tile_xform.set_scale(tile_size); - tile_set->draw_tile_shape(base_control, tile_xform, Color(1.0, 1.0, 1.0, 0.3), true); + // Draw fill rect under texture region. + Rect2 texture_rect(-background_region.size / 2, background_region.size); + if (tile_data) { + texture_rect.position -= tile_data->get_texture_origin(); + } + base_control->draw_rect(texture_rect, Color(1, 1, 1, 0.3)); // Draw the background. - if (background_texture.is_valid()) { + if (tile_data && background_atlas_source->get_texture().is_valid()) { Size2 region_size = background_region.size; - if (background_h_flip) { + if (tile_data->get_flip_h()) { region_size.x = -region_size.x; } - if (background_v_flip) { + if (tile_data->get_flip_v()) { region_size.y = -region_size.y; } - base_control->draw_texture_rect_region(background_texture, Rect2(-background_region.size / 2 - background_offset, region_size), background_region, background_modulate, background_transpose); + base_control->draw_texture_rect_region(background_atlas_source->get_texture(), Rect2(-background_region.size / 2 - tile_data->get_texture_origin(), region_size), background_region, tile_data->get_modulate(), tile_data->get_transpose()); } + // Compute and draw the grid area. + Rect2 grid_area = Rect2(-base_tile_size / 2, base_tile_size); + if (tile_data) { + grid_area.expand_to(-background_region.get_size() / 2 - tile_data->get_texture_origin()); + grid_area.expand_to(background_region.get_size() / 2 - tile_data->get_texture_origin()); + } else { + grid_area.expand_to(-background_region.get_size() / 2); + grid_area.expand_to(background_region.get_size() / 2); + } + base_control->draw_rect(grid_area, Color(1, 1, 1, 0.3), false); + // Draw grid. if (current_snap_option == SNAP_GRID) { Vector2 spacing = base_tile_size / snap_subdivision->get_value(); - Vector2 offset = -tile_size / 2; - int w = snap_subdivision->get_value() * (tile_size / base_tile_size).x; - int h = snap_subdivision->get_value() * (tile_size / base_tile_size).y; - - for (int y = 1; y < h; y++) { - for (int x = 1; x < w; x++) { - base_control->draw_line(Vector2(spacing.x * x, 0) + offset, Vector2(spacing.x * x, tile_size.y) + offset, Color(1, 1, 1, 0.33)); - base_control->draw_line(Vector2(0, spacing.y * y) + offset, Vector2(tile_size.x, spacing.y * y) + offset, Color(1, 1, 1, 0.33)); - } + Vector2 origin = -base_tile_size / 2; + for (real_t y = origin.y; y < grid_area.get_end().y; y += spacing.y) { + base_control->draw_line(Vector2(grid_area.get_position().x, y), Vector2(grid_area.get_end().x, y), Color(1, 1, 1, 0.33)); + } + for (real_t y = origin.y - spacing.y; y > grid_area.get_position().y; y -= spacing.y) { + base_control->draw_line(Vector2(grid_area.get_position().x, y), Vector2(grid_area.get_end().x, y), Color(1, 1, 1, 0.33)); + } + for (real_t x = origin.x; x < grid_area.get_end().x; x += spacing.x) { + base_control->draw_line(Vector2(x, grid_area.get_position().y), Vector2(x, grid_area.get_end().y), Color(1, 1, 1, 0.33)); + } + for (real_t x = origin.x - spacing.x; x > grid_area.get_position().x; x -= spacing.x) { + base_control->draw_line(Vector2(x, grid_area.get_position().y), Vector2(x, grid_area.get_end().y), Color(1, 1, 1, 0.33)); } } @@ -237,7 +265,7 @@ void GenericTilePolygonEditor::_base_control_draw() { for (int i = 0; i < (int)polygons.size(); i++) { const Vector<Vector2> &polygon = polygons[i]; for (int j = 0; j < polygon.size(); j++) { - const Color poly_modulate = (tinted_polygon_index == i && tinted_point_index == j) ? Color(0.5, 1, 2) : Color(1, 1, 1); + const Color poly_modulate = (tinted_polygon_index == i && tinted_point_index == j) ? Color(0.4, 1, 1) : Color(1, 1, 1); base_control->draw_texture(handle, xform.xform(polygon[j]) - handle->get_size() / 2, poly_modulate); } } @@ -253,7 +281,7 @@ void GenericTilePolygonEditor::_base_control_draw() { } if (drag_type == DRAG_TYPE_CREATE_POINT) { - base_control->draw_texture(handle, xform.xform(in_creation_point) - handle->get_size() / 2, Color(0.5, 1, 2)); + base_control->draw_texture(handle, xform.xform(in_creation_point) - handle->get_size() / 2, Color(0.4, 1, 1)); } // Draw the point creation preview in edit mode. @@ -263,6 +291,8 @@ void GenericTilePolygonEditor::_base_control_draw() { // Draw the tile shape line. base_control->draw_set_transform_matrix(xform); + Transform2D tile_xform; + tile_xform.set_scale(base_tile_size); tile_set->draw_tile_shape(base_control, tile_xform, grid_color, false); base_control->draw_set_transform_matrix(Transform2D()); } @@ -721,8 +751,18 @@ void GenericTilePolygonEditor::set_tile_set(Ref<TileSet> p_tile_set) { add_polygon(polygon); } + // Trigger a redraw on tile_set change. + Callable callable = callable_mp((CanvasItem *)base_control, &CanvasItem::queue_redraw); + if (tile_set.is_valid()) { + tile_set->disconnect_changed(callable); + } + tile_set = p_tile_set; + if (tile_set.is_valid()) { + tile_set->connect_changed(callable); + } + // Set the default zoom value. int default_control_y_size = 200 * EDSCALE; Vector2 zoomed_tile = editor_zoom_widget->get_zoom() * tile_set->get_tile_size(); @@ -746,14 +786,11 @@ void GenericTilePolygonEditor::set_tile_set(Ref<TileSet> p_tile_set) { _zoom_changed(); } -void GenericTilePolygonEditor::set_background(Ref<Texture2D> p_texture, Rect2 p_region, Vector2 p_offset, bool p_flip_h, bool p_flip_v, bool p_transpose, Color p_modulate) { - background_texture = p_texture; - background_region = p_region; - background_offset = p_offset; - background_h_flip = p_flip_h; - background_v_flip = p_flip_v; - background_transpose = p_transpose; - background_modulate = p_modulate; +void GenericTilePolygonEditor::set_background_tile(const TileSetAtlasSource *p_atlas_source, const Vector2 &p_atlas_coords, int p_alternative_id) { + ERR_FAIL_NULL(p_atlas_source); + background_atlas_source = p_atlas_source; + background_atlas_coords = p_atlas_coords; + background_alternative_id = p_alternative_id; base_control->queue_redraw(); } @@ -1457,7 +1494,7 @@ void TileDataOcclusionShapeEditor::_set_painted_value(TileSetAtlasSource *p_tile if (occluder_polygon.is_valid()) { polygon_editor->add_polygon(occluder_polygon->get_polygon()); } - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } void TileDataOcclusionShapeEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, const Variant &p_value) { @@ -1466,7 +1503,7 @@ void TileDataOcclusionShapeEditor::_set_value(TileSetAtlasSource *p_tile_set_atl Ref<OccluderPolygon2D> occluder_polygon = p_value; tile_data->set_occluder(occlusion_layer, occluder_polygon); - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } Variant TileDataOcclusionShapeEditor::_get_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { @@ -1613,7 +1650,7 @@ void TileDataCollisionEditor::_set_painted_value(TileSetAtlasSource *p_tile_set_ E.value->update_property(); } - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } void TileDataCollisionEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, const Variant &p_value) { @@ -1632,7 +1669,7 @@ void TileDataCollisionEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_so tile_data->set_collision_polygon_one_way_margin(physics_layer, i, polygon_dict["one_way_margin"]); } - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } Variant TileDataCollisionEditor::_get_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { @@ -2873,7 +2910,7 @@ void TileDataNavigationEditor::_set_painted_value(TileSetAtlasSource *p_tile_set polygon_editor->add_polygon(nav_polygon->get_outline(i)); } } - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } void TileDataNavigationEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile, const Variant &p_value) { @@ -2882,7 +2919,7 @@ void TileDataNavigationEditor::_set_value(TileSetAtlasSource *p_tile_set_atlas_s Ref<NavigationPolygon> nav_polygon = p_value; tile_data->set_navigation_polygon(navigation_layer, nav_polygon); - polygon_editor->set_background(p_tile_set_atlas_source->get_texture(), p_tile_set_atlas_source->get_tile_texture_region(p_coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + polygon_editor->set_background_tile(p_tile_set_atlas_source, p_coords, p_alternative_tile); } Variant TileDataNavigationEditor::_get_value(TileSetAtlasSource *p_tile_set_atlas_source, Vector2 p_coords, int p_alternative_tile) { diff --git a/editor/plugins/tiles/tile_data_editors.h b/editor/plugins/tiles/tile_data_editors.h index f9d8f7d077..9b1eadf331 100644 --- a/editor/plugins/tiles/tile_data_editors.h +++ b/editor/plugins/tiles/tile_data_editors.h @@ -142,13 +142,9 @@ private: Vector2 panning; bool initializing = true; - Ref<Texture2D> background_texture; - Rect2 background_region; - Vector2 background_offset; - bool background_h_flip = false; - bool background_v_flip = false; - bool background_transpose = false; - Color background_modulate; + Ref<TileSetAtlasSource> background_atlas_source; + Vector2i background_atlas_coords; + int background_alternative_id; Color polygon_color = Color(1.0, 0.0, 0.0); @@ -183,7 +179,7 @@ public: void set_use_undo_redo(bool p_use_undo_redo); void set_tile_set(Ref<TileSet> p_tile_set); - void set_background(Ref<Texture2D> p_texture, Rect2 p_region = Rect2(), Vector2 p_offset = Vector2(), bool p_flip_h = false, bool p_flip_v = false, bool p_transpose = false, Color p_modulate = Color(1.0, 1.0, 1.0, 0.0)); + void set_background_tile(const TileSetAtlasSource *p_atlas_source, const Vector2 &p_atlas_coords, int p_alternative_id); int get_polygon_count(); int add_polygon(const Vector<Point2> &p_polygon, int p_index = -1); diff --git a/editor/plugins/tiles/tile_map_layer_editor.cpp b/editor/plugins/tiles/tile_map_layer_editor.cpp index 9931ce5820..4a59530159 100644 --- a/editor/plugins/tiles/tile_map_layer_editor.cpp +++ b/editor/plugins/tiles/tile_map_layer_editor.cpp @@ -763,8 +763,13 @@ bool TileMapLayerEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEven } } else { - // Released - _stop_dragging(); + // Released. + if (drag_type == DRAG_TYPE_NONE) { + drag_erasing = false; + return false; + } else { + _stop_dragging(); + } drag_erasing = false; } @@ -1295,7 +1300,7 @@ void TileMapLayerEditorTilesPlugin::_stop_dragging() { EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); switch (drag_type) { case DRAG_TYPE_SELECT: { - undo_redo->create_action(TTR("Change selection")); + undo_redo->create_action_for_history(TTR("Change selection"), EditorNode::get_editor_data().get_current_edited_scene_history_id()); undo_redo->add_undo_method(this, "_set_tile_map_selection", _get_tile_map_selection()); if (!Input::get_singleton()->is_key_pressed(Key::SHIFT) && !Input::get_singleton()->is_key_pressed(Key::CMD_OR_CTRL)) { @@ -3625,9 +3630,16 @@ TileMapLayer *TileMapLayerEditor::_get_edited_layer() const { void TileMapLayerEditor::_find_tile_map_layers_in_scene(Node *p_current, const Node *p_owner, Vector<TileMapLayer *> &r_list) const { ERR_FAIL_COND(!p_current || !p_owner); - if (p_current != p_owner && p_current->get_owner() != p_owner) { - return; + + if (p_current != p_owner) { + if (!p_current->get_owner()) { + return; + } + if (p_current->get_owner() != p_owner && !p_owner->is_editable_instance(p_current->get_owner())) { + return; + } } + TileMapLayer *layer = Object::cast_to<TileMapLayer>(p_current); if (layer) { r_list.append(layer); diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index 94e68ccc7c..7e34a36a6e 100644 --- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp +++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp @@ -651,7 +651,7 @@ void TileSetAtlasSourceEditor::_update_tile_data_editors() { tile_data_editors_tree->add_theme_constant_override("v_separation", 1); tile_data_editors_tree->add_theme_constant_override("h_separation", 3); - Color group_color = get_theme_color(SNAME("prop_category"), EditorStringName(Editor)); + Color group_color = get_theme_color(SNAME("separator_color"), EditorStringName(Editor)); // List of editors. // --- Rendering --- @@ -2451,6 +2451,8 @@ void TileSetAtlasSourceEditor::_notification(int p_what) { resize_handle = get_editor_theme_icon(SNAME("EditorHandle")); resize_handle_disabled = get_editor_theme_icon(SNAME("EditorHandleDisabled")); + + tile_data_editors_tree->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), "PopupPanel")); } break; case NOTIFICATION_INTERNAL_PROCESS: { @@ -2820,13 +2822,15 @@ void EditorPropertyTilePolygon::update_property() { ERR_FAIL_COND(atlas_tile_proxy_object->get_edited_tiles().is_empty()); Ref<TileSetAtlasSource> tile_set_atlas_source = atlas_tile_proxy_object->get_edited_tile_set_atlas_source(); - generic_tile_polygon_editor->set_tile_set(Ref<TileSet>(tile_set_atlas_source->get_tile_set())); + Ref<TileSet> tile_set(tile_set_atlas_source->get_tile_set()); + + // Update the polyugon editor tile_set. + generic_tile_polygon_editor->set_tile_set(tile_set); // Set the background Vector2i coords = atlas_tile_proxy_object->get_edited_tiles().front()->get().tile; int alternative = atlas_tile_proxy_object->get_edited_tiles().front()->get().alternative; - TileData *tile_data = tile_set_atlas_source->get_tile_data(coords, alternative); - generic_tile_polygon_editor->set_background(tile_set_atlas_source->get_texture(), tile_set_atlas_source->get_tile_texture_region(coords), tile_data->get_texture_origin(), tile_data->get_flip_h(), tile_data->get_flip_v(), tile_data->get_transpose(), tile_data->get_modulate()); + generic_tile_polygon_editor->set_background_tile(*tile_set_atlas_source, coords, alternative); // Reset the polygons. generic_tile_polygon_editor->clear_polygons(); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index cc4466a74b..2f36198b23 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -133,9 +133,9 @@ void VSRerouteNode::_notification(int p_what) { connect(SceneStringName(mouse_exited), callable_mp(this, &VSRerouteNode::_on_mouse_exited)); } break; case NOTIFICATION_DRAW: { - Vector2 offset = Vector2(0, -16); + Vector2 offset = Vector2(0, -16 * EDSCALE); Color drag_bg_color = get_theme_color(SNAME("drag_background"), SNAME("VSRerouteNode")); - draw_circle(get_size() * 0.5 + offset, 16, Color(drag_bg_color, selected ? 1 : icon_opacity)); + draw_circle(get_size() * 0.5 + offset, 16 * EDSCALE, Color(drag_bg_color, selected ? 1 : icon_opacity), true, -1, true); Ref<Texture2D> icon = get_editor_theme_icon(SNAME("ToolMove")); Point2 icon_offset = -icon->get_size() * 0.5 + get_size() * 0.5 + offset; @@ -154,6 +154,7 @@ VSRerouteNode::VSRerouteNode() { title_lbl->hide(); const Size2 size = Size2(32, 32) * EDSCALE; + print_line("VSRerouteNode size: " + size); Control *slot_area = memnew(Control); slot_area->set_custom_minimum_size(size); @@ -1545,6 +1546,12 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) { } } +void VisualShaderEditor::validate_script() { + if (visual_shader.is_valid()) { + _update_nodes(); + } +} + void VisualShaderEditor::add_plugin(const Ref<VisualShaderNodePlugin> &p_plugin) { if (plugins.has(p_plugin)) { return; @@ -3643,12 +3650,15 @@ void VisualShaderEditor::_add_node(int p_idx, const Vector<Variant> &p_ops, cons if (output_port_type == VisualShaderNode::PORT_TYPE_SAMPLER) { if (is_texture2d) { + undo_redo->force_fixed_history(); // vsnode is freshly created and has no path, so history can't be correctly determined. undo_redo->add_do_method(vsnode.ptr(), "set_source", VisualShaderNodeTexture::SOURCE_PORT); } if (is_texture3d || is_texture2d_array) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(vsnode.ptr(), "set_source", VisualShaderNodeSample3D::SOURCE_PORT); } if (is_cubemap) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(vsnode.ptr(), "set_source", VisualShaderNodeCubemap::SOURCE_PORT); } } @@ -3748,16 +3758,19 @@ void VisualShaderEditor::_add_node(int p_idx, const Vector<Variant> &p_ops, cons //post-initialization if (is_texture2d || is_texture3d || is_curve || is_curve_xyz) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(vsnode.ptr(), "set_texture", ResourceLoader::load(p_resource_path)); return; } if (is_cubemap) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(vsnode.ptr(), "set_cube_map", ResourceLoader::load(p_resource_path)); return; } if (is_texture2d_array) { + undo_redo->force_fixed_history(); undo_redo->add_do_method(vsnode.ptr(), "set_texture_array", ResourceLoader::load(p_resource_path)); } } diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index ee2bf605d9..a9826fd617 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -612,6 +612,8 @@ public: void edit(VisualShader *p_visual_shader); Ref<VisualShader> get_visual_shader() const { return visual_shader; } + void validate_script(); + VisualShaderEditor(); }; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index b7dce1a224..52d7b14b65 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -385,7 +385,7 @@ void ProjectManager::_dim_window() { // Quick settings. void ProjectManager::_show_quick_settings() { - quick_settings_dialog->popup_centered(Size2(600, 200) * EDSCALE); + quick_settings_dialog->popup_centered(Size2(640, 200) * EDSCALE); } void ProjectManager::_restart_confirmed() { diff --git a/editor/project_manager/quick_settings_dialog.cpp b/editor/project_manager/quick_settings_dialog.cpp index 05e8523518..ee53bd7927 100644 --- a/editor/project_manager/quick_settings_dialog.cpp +++ b/editor/project_manager/quick_settings_dialog.cpp @@ -47,6 +47,7 @@ void QuickSettingsDialog::_fetch_setting_values() { editor_themes.clear(); editor_scales.clear(); editor_network_modes.clear(); + editor_directory_naming_conventions.clear(); { List<PropertyInfo> editor_settings_properties; @@ -61,6 +62,8 @@ void QuickSettingsDialog::_fetch_setting_values() { editor_scales = pi.hint_string.split(","); } else if (pi.name == "network/connection/network_mode") { editor_network_modes = pi.hint_string.split(","); + } else if (pi.name == "project_manager/directory_naming_convention") { + editor_directory_naming_conventions = pi.hint_string.split(","); } } } @@ -120,6 +123,19 @@ void QuickSettingsDialog::_update_current_values() { } } } + + // Project directory naming options. + { + const int current_directory_naming = EDITOR_GET("project_manager/directory_naming_convention"); + + for (int i = 0; i < editor_directory_naming_conventions.size(); i++) { + const String &directory_naming_value = editor_directory_naming_conventions[i]; + if (current_directory_naming == i) { + directory_naming_convention_button->set_text(directory_naming_value); + directory_naming_convention_button->select(i); + } + } + } } void QuickSettingsDialog::_add_setting_control(const String &p_text, Control *p_control) { @@ -155,6 +171,10 @@ void QuickSettingsDialog::_network_mode_selected(int p_id) { _set_setting_value("network/connection/network_mode", p_id); } +void QuickSettingsDialog::_directory_naming_convention_selected(int p_id) { + _set_setting_value("project_manager/directory_naming_convention", p_id); +} + void QuickSettingsDialog::_set_setting_value(const String &p_setting, const Variant &p_value, bool p_restart_required) { EditorSettings::get_singleton()->set(p_setting, p_value); EditorSettings::get_singleton()->notify_changes(); @@ -284,6 +304,20 @@ QuickSettingsDialog::QuickSettingsDialog() { _add_setting_control(TTR("Network Mode"), network_mode_option_button); } + // Project directory naming options. + { + directory_naming_convention_button = memnew(OptionButton); + directory_naming_convention_button->set_fit_to_longest_item(false); + directory_naming_convention_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_directory_naming_convention_selected)); + + for (int i = 0; i < editor_directory_naming_conventions.size(); i++) { + const String &directory_naming_convention = editor_directory_naming_conventions[i]; + directory_naming_convention_button->add_item(directory_naming_convention, i); + } + + _add_setting_control(TTR("Directory Naming Convention"), directory_naming_convention_button); + } + _update_current_values(); #ifdef ANDROID_ENABLED diff --git a/editor/project_manager/quick_settings_dialog.h b/editor/project_manager/quick_settings_dialog.h index c4c4e601c9..7a03996934 100644 --- a/editor/project_manager/quick_settings_dialog.h +++ b/editor/project_manager/quick_settings_dialog.h @@ -47,6 +47,7 @@ class QuickSettingsDialog : public AcceptDialog { Vector<String> editor_themes; Vector<String> editor_scales; Vector<String> editor_network_modes; + Vector<String> editor_directory_naming_conventions; void _fetch_setting_values(); void _update_current_values(); @@ -60,6 +61,7 @@ class QuickSettingsDialog : public AcceptDialog { OptionButton *theme_option_button = nullptr; OptionButton *scale_option_button = nullptr; OptionButton *network_mode_option_button = nullptr; + OptionButton *directory_naming_convention_button = nullptr; Label *custom_theme_label = nullptr; @@ -67,6 +69,7 @@ class QuickSettingsDialog : public AcceptDialog { void _theme_selected(int p_id); void _scale_selected(int p_id); void _network_mode_selected(int p_id); + void _directory_naming_convention_selected(int p_id); void _set_setting_value(const String &p_setting, const Variant &p_value, bool p_restart_required = false); Label *restart_required_label = nullptr; diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index c2d89b28f5..bdf4e41c5f 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -91,6 +91,10 @@ void ProjectSettingsEditor::update_plugins() { plugin_settings->update_plugins(); } +void ProjectSettingsEditor::init_autoloads() { + autoload_settings->init_autoloads(); +} + void ProjectSettingsEditor::_setting_edited(const String &p_name) { queue_save(); } @@ -231,28 +235,17 @@ void ProjectSettingsEditor::_select_type(Variant::Type p_type) { } void ProjectSettingsEditor::shortcut_input(const Ref<InputEvent> &p_event) { - ERR_FAIL_COND(p_event.is_null()); - EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - const Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed()) { bool handled = false; if (ED_IS_SHORTCUT("ui_undo", p_event)) { - String action = undo_redo->get_current_action_name(); - if (!action.is_empty()) { - EditorNode::get_log()->add_message(vformat(TTR("Undo: %s"), action), EditorLog::MSG_TYPE_EDITOR); - } - undo_redo->undo(); + EditorNode::get_singleton()->undo(); handled = true; } if (ED_IS_SHORTCUT("ui_redo", p_event)) { - undo_redo->redo(); - String action = undo_redo->get_current_action_name(); - if (!action.is_empty()) { - EditorNode::get_log()->add_message(vformat(TTR("Redo: %s"), action), EditorLog::MSG_TYPE_EDITOR); - } + EditorNode::get_singleton()->redo(); handled = true; } diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index fb294c6bbd..5890ed2c2d 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -123,6 +123,7 @@ public: void set_plugins_page(); void set_general_page(const String &p_category); void update_plugins(); + void init_autoloads(); EditorAutoloadSettings *get_autoload_settings() { return autoload_settings; } GroupSettingsEditor *get_group_settings() { return group_settings; } diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 566b460bca..25de9facb2 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -77,12 +77,12 @@ void SceneTreeDock::_quick_open() { void SceneTreeDock::_inspect_hovered_node() { select_node_hovered_at_end_of_drag = true; - if (tree_item_inspected != nullptr) { - tree_item_inspected->clear_custom_color(0); - } Tree *tree = scene_tree->get_scene_tree(); TreeItem *item = tree->get_item_with_metadata(node_hovered_now->get_path()); if (item) { + if (tree_item_inspected) { + tree_item_inspected->clear_custom_color(0); + } tree_item_inspected = item; tree_item_inspected->set_custom_color(0, get_theme_color(SNAME("accent_color"), EditorStringName(Editor))); } @@ -133,8 +133,9 @@ void SceneTreeDock::input(const Ref<InputEvent> &p_event) { } if (mb->is_released()) { - if (tree_item_inspected != nullptr) { + if (tree_item_inspected) { tree_item_inspected->clear_custom_color(0); + tree_item_inspected = nullptr; } _reset_hovering_timer(); } @@ -2275,6 +2276,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V Vector<StringName> former_names; int inc = 0; + bool need_edit = false; for (int ni = 0; ni < p_nodes.size(); ni++) { // No undo implemented for this yet. @@ -2295,7 +2297,11 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V inc--; // If the child will generate a gap when moved, adjust. } - if (!same_parent) { + if (same_parent) { + // When node is reparented to the same parent, EditorSelection does not change. + // After hovering another node, the inspector has to be manually updated in this case. + need_edit = select_node_hovered_at_end_of_drag; + } else { undo_redo->add_do_method(node->get_parent(), "remove_child", node); undo_redo->add_do_method(new_parent, "add_child", node, true); } @@ -2400,6 +2406,10 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V perform_node_renames(nullptr, &path_renames); undo_redo->commit_action(); + + if (need_edit) { + EditorNode::get_singleton()->edit_current(); + } } void SceneTreeDock::_script_created(Ref<Script> p_script) { @@ -4495,6 +4505,7 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec scene_tree->set_v_size_flags(SIZE_EXPAND | SIZE_FILL); scene_tree->connect("rmb_pressed", callable_mp(this, &SceneTreeDock::_tree_rmb)); + scene_tree->connect("node_selected", callable_mp(this, &SceneTreeDock::_node_selected), CONNECT_DEFERRED); scene_tree->connect("node_renamed", callable_mp(this, &SceneTreeDock::_node_renamed), CONNECT_DEFERRED); scene_tree->connect("node_prerename", callable_mp(this, &SceneTreeDock::_node_prerenamed)); scene_tree->connect("open", callable_mp(this, &SceneTreeDock::_load_request)); diff --git a/editor/template_builders.py b/editor/template_builders.py index c02a2b0c65..e4fc41caf3 100644 --- a/editor/template_builders.py +++ b/editor/template_builders.py @@ -16,7 +16,7 @@ def parse_template(inherits, source, delimiter): meta_prefix = delimiter + " meta-" meta = ["name", "description", "version", "space-indent"] - with open(source) as f: + with open(source, "r", encoding="utf-8") as f: lines = f.readlines() for line in lines: if line.startswith(meta_prefix): diff --git a/editor/themes/editor_fonts.cpp b/editor/themes/editor_fonts.cpp index 71a050bc23..fc994a17d1 100644 --- a/editor/themes/editor_fonts.cpp +++ b/editor/themes/editor_fonts.cpp @@ -443,7 +443,7 @@ void editor_register_fonts(const Ref<Theme> &p_theme) { p_theme->set_font("rulers", EditorStringName(EditorFonts), default_fc); // Rotation widget font - p_theme->set_font_size("rotation_control_size", EditorStringName(EditorFonts), 14 * EDSCALE); + p_theme->set_font_size("rotation_control_size", EditorStringName(EditorFonts), 13 * EDSCALE); p_theme->set_font("rotation_control", EditorStringName(EditorFonts), default_fc); // Code font diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp index 1cf5a18e0a..03752656c0 100644 --- a/editor/themes/editor_theme_manager.cpp +++ b/editor/themes/editor_theme_manager.cpp @@ -1665,7 +1665,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the // GraphFrame's title Label. p_theme->set_type_variation("GraphFrameTitleLabel", "Label"); p_theme->set_stylebox(CoreStringName(normal), "GraphFrameTitleLabel", memnew(StyleBoxEmpty)); - p_theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22); + p_theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22 * EDSCALE); p_theme->set_color(SceneStringName(font_color), "GraphFrameTitleLabel", Color(1, 1, 1)); p_theme->set_color("font_shadow_color", "GraphFrameTitleLabel", Color(0, 0, 0, 0)); p_theme->set_color("font_outline_color", "GraphFrameTitleLabel", Color(1, 1, 1)); @@ -1680,7 +1680,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the { Ref<StyleBox> vs_reroute_panel_style = make_empty_stylebox(); Ref<StyleBox> vs_reroute_titlebar_style = vs_reroute_panel_style->duplicate(); - vs_reroute_titlebar_style->set_content_margin_all(16); + vs_reroute_titlebar_style->set_content_margin_all(16 * EDSCALE); p_theme->set_stylebox(SceneStringName(panel), "VSRerouteNode", vs_reroute_panel_style); p_theme->set_stylebox("panel_selected", "VSRerouteNode", vs_reroute_panel_style); p_theme->set_stylebox("titlebar", "VSRerouteNode", vs_reroute_titlebar_style); @@ -1782,11 +1782,6 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme style_content_panel_vp->set_content_margin_individual(p_config.border_width * 2, p_config.base_margin * EDSCALE, p_config.border_width * 2, p_config.border_width * 2); p_theme->set_stylebox("Content", EditorStringName(EditorStyles), style_content_panel_vp); - // 2D/CanvasItem editor - Ref<StyleBoxFlat> style_canvas_editor_info = make_flat_stylebox(Color(0.0, 0.0, 0.0, 0.2)); - style_canvas_editor_info->set_expand_margin_all(4 * EDSCALE); - p_theme->set_stylebox("CanvasItemInfoOverlay", EditorStringName(EditorStyles), style_canvas_editor_info); - // 3D/Spatial editor. Ref<StyleBoxFlat> style_info_3d_viewport = p_config.base_style->duplicate(); style_info_3d_viewport->set_bg_color(style_info_3d_viewport->get_bg_color() * Color(1, 1, 1, 0.5)); @@ -1822,9 +1817,13 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme main_screen_button_hover->set_content_margin((Side)i, p_config.button_style_hover->get_content_margin((Side)i)); } p_theme->set_stylebox(CoreStringName(normal), "MainScreenButton", menu_transparent_style); + p_theme->set_stylebox("normal_mirrored", "MainScreenButton", menu_transparent_style); p_theme->set_stylebox(SceneStringName(pressed), "MainScreenButton", menu_transparent_style); + p_theme->set_stylebox("pressed_mirrored", "MainScreenButton", menu_transparent_style); p_theme->set_stylebox("hover", "MainScreenButton", main_screen_button_hover); + p_theme->set_stylebox("hover_mirrored", "MainScreenButton", main_screen_button_hover); p_theme->set_stylebox("hover_pressed", "MainScreenButton", main_screen_button_hover); + p_theme->set_stylebox("hover_pressed_mirrored", "MainScreenButton", main_screen_button_hover); p_theme->set_type_variation("MainMenuBar", "FlatMenuButton"); p_theme->set_stylebox(CoreStringName(normal), "MainMenuBar", menu_transparent_style); @@ -1859,7 +1858,7 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme editor_spin_label_bg->set_border_width_all(0); p_theme->set_stylebox("label_bg", "EditorSpinSlider", editor_spin_label_bg); - // Launch Pad and Play buttons + // Launch Pad and Play buttons. Ref<StyleBoxFlat> style_launch_pad = make_flat_stylebox(p_config.dark_color_1, 2 * EDSCALE, 0, 2 * EDSCALE, 0, p_config.corner_radius); style_launch_pad->set_corner_radius_all(p_config.corner_radius * EDSCALE); p_theme->set_stylebox("LaunchPadNormal", EditorStringName(EditorStyles), style_launch_pad); @@ -1879,6 +1878,12 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme style_write_movie_button->set_content_margin(SIDE_RIGHT, 0); style_write_movie_button->set_expand_margin(SIDE_RIGHT, 2 * EDSCALE); p_theme->set_stylebox("MovieWriterButtonPressed", EditorStringName(EditorStyles), style_write_movie_button); + + // Movie writer button colors. + p_theme->set_color("movie_writer_icon_normal", EditorStringName(EditorStyles), Color(1, 1, 1, 0.7)); + p_theme->set_color("movie_writer_icon_pressed", EditorStringName(EditorStyles), Color(0, 0, 0, 0.84)); + p_theme->set_color("movie_writer_icon_hover", EditorStringName(EditorStyles), Color(1, 1, 1, 0.9)); + p_theme->set_color("movie_writer_icon_hover_pressed", EditorStringName(EditorStyles), Color(0, 0, 0, 0.84)); } // Standard GUI variations. @@ -2000,17 +2005,34 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme style_inspector_action->set_content_margin(SIDE_RIGHT, action_extra_margin); p_theme->set_stylebox(CoreStringName(normal), "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style->duplicate(); + style_inspector_action->set_bg_color(color_inspector_action); + style_inspector_action->set_content_margin(SIDE_LEFT, action_extra_margin); + p_theme->set_stylebox("normal_mirrored", "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style_hover->duplicate(); style_inspector_action->set_content_margin(SIDE_RIGHT, action_extra_margin); p_theme->set_stylebox("hover", "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style_hover->duplicate(); + style_inspector_action->set_content_margin(SIDE_LEFT, action_extra_margin); + p_theme->set_stylebox("hover_mirrored", "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style_pressed->duplicate(); style_inspector_action->set_content_margin(SIDE_RIGHT, action_extra_margin); p_theme->set_stylebox(SceneStringName(pressed), "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style_pressed->duplicate(); + style_inspector_action->set_content_margin(SIDE_LEFT, action_extra_margin); + p_theme->set_stylebox("pressed_mirrored", "InspectorActionButton", style_inspector_action); + style_inspector_action = p_config.button_style_disabled->duplicate(); style_inspector_action->set_content_margin(SIDE_RIGHT, action_extra_margin); p_theme->set_stylebox("disabled", "InspectorActionButton", style_inspector_action); + + style_inspector_action = p_config.button_style_disabled->duplicate(); + style_inspector_action->set_content_margin(SIDE_LEFT, action_extra_margin); + p_theme->set_stylebox("disabled_mirrored", "InspectorActionButton", style_inspector_action); } // Buttons in material previews. @@ -2069,6 +2091,9 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme // Editor inspector. { + // Vertical separation between inspector categories and sections. + p_theme->set_constant("v_separation", "EditorInspector", 0); + // EditorProperty. Ref<StyleBoxFlat> style_property_bg = p_config.base_style->duplicate(); @@ -2110,6 +2135,7 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme Ref<StyleBoxFlat> inspector_indent_style = make_flat_stylebox(inspector_indent_color, 2.0 * EDSCALE, 0, 2.0 * EDSCALE, 0); p_theme->set_stylebox("indent_box", "EditorInspectorSection", inspector_indent_style); p_theme->set_constant("indent_size", "EditorInspectorSection", 6.0 * EDSCALE); + p_theme->set_constant("h_separation", "EditorInspectorSection", 2.0 * EDSCALE); Color prop_category_color = p_config.dark_color_1.lerp(p_config.mono_color, 0.12); Color prop_section_color = p_config.dark_color_1.lerp(p_config.mono_color, 0.09); @@ -2127,6 +2153,7 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme Ref<StyleBoxFlat> category_bg = p_config.base_style->duplicate(); category_bg->set_bg_color(prop_category_color); category_bg->set_border_color(prop_category_color); + category_bg->set_content_margin_all(0); p_theme->set_stylebox("bg", "EditorInspectorCategory", category_bg); p_theme->set_constant("inspector_margin", EditorStringName(Editor), 12 * EDSCALE); @@ -1 +1 @@ -<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/icon_outlined.svg b/icon_outlined.svg index 43cc110fea..70473ffcfa 100644 --- a/icon_outlined.svg +++ b/icon_outlined.svg @@ -1 +1 @@ -<svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="M105 745c0 276 813 276 814 0V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81v318z" fill="none" stroke="#fff" stroke-width="64" stroke-linejoin="round"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="none" stroke="#fff" stroke-linejoin="round" stroke-width="64" d="M105 745c0 276 813 276 814 0V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81v318z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file @@ -1 +1 @@ -<svg width="1024" height="414" viewBox="0 0 1024 414" xmlns="http://www.w3.org/2000/svg"><path fill="#414042" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645m84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path fill="#6d6e71" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><g transform="scale(.36) translate(84 60)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="414"><path fill="#414042" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645m84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path fill="#6d6e71" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><g fill="#fff" transform="matrix(.36 0 0 .36 30.24 21.6)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="matrix(.36 0 0 .36 30.24 21.6)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/logo_outlined.svg b/logo_outlined.svg index 7ed2931059..7adc282649 100644 --- a/logo_outlined.svg +++ b/logo_outlined.svg @@ -1 +1 @@ -<svg width="1024" height="414" viewBox="0 0 1024 414" xmlns="http://www.w3.org/2000/svg"><path stroke="#fff" stroke-width="23.5" stroke-linejoin="round" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645zm84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path fill="#414042" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645m84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path stroke="#fff" stroke-width="23.5" stroke-linejoin="round" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><path fill="#6d6e71" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><g transform="scale(.363) translate(84 58)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="M105 745c0 276 813 276 814 0V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81v318z" fill="none" stroke="#fff" stroke-width="64" stroke-linejoin="round"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="414"><path stroke="#fff" stroke-linejoin="round" stroke-width="23.5" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645zm84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path fill="#414042" d="M523.82 188.382c-9.142-.142-19.603 1.764-19.603 1.764v17.842h10.52l-.117 7.953c0 2.946-2.92 4.427-8.747 4.427-5.831 0-10.982-2.47-15.45-7.395-4.48-4.932-6.708-12.141-6.708-21.64 0-9.519 2.176-16.537 6.536-21.065 4.35-4.524 10.05-6.794 17.064-6.794 2.946 0 5.996.476 9.168 1.445 3.174.962 5.293 1.863 6.375 2.707 1.072.867 2.09 1.277 3.056 1.277.96 0 2.513-1.122 4.66-3.392 2.153-2.263 4.082-5.693 5.782-10.267 1.694-4.598 2.543-8.122 2.543-10.621 0-2.48-.054-4.19-.164-5.092-2.379-2.603-6.767-4.666-13.168-6.2-6.39-1.53-13.552-2.289-21.476-2.289-17.438 0-31.073 5.49-40.92 16.47-9.855 10.982-14.773 25.24-14.773 42.79 0 20.607 5.035 36.227 15.103 46.868 10.085 10.64 23.327 15.953 39.743 15.953 8.827 0 16.664-.76 23.51-2.289 6.853-1.523 11.41-3.088 13.676-4.67l.68-53.137c0-3.087-8.149-4.488-17.29-4.645m84.247-24.804c-5.431 0-9.98 2.496-13.671 7.47-3.672 4.98-5.517 11.969-5.517 20.963 0 9.013 1.754 15.914 5.27 20.722 3.508 4.823 8.117 7.225 13.835 7.225 5.715 0 10.358-2.432 13.924-7.313q5.351-7.293 5.353-20.884c0-9.054-1.846-16.023-5.524-20.89q-5.51-7.292-13.67-7.293m-.083 89.477c-15.9 0-28.868-5.203-38.89-15.61q-15.016-15.624-15.017-45.592c0-19.992 5.063-35.128 15.191-45.435 10.131-10.293 23.209-15.444 39.228-15.444 16.016 0 28.954 5.058 38.795 15.204 9.858 10.126 14.778 25.477 14.778 46.009 0 20.546-5.034 35.828-15.114 45.856-10.08 10.008-23.062 15.012-38.971 15.012m101.95-88.298v50.788c0 2.37.176 3.866.515 4.493.337.624 1.358.937 3.052.937 6.232 0 10.954-2.328 14.181-6.97 3.235-4.636 4.835-12.356 4.835-23.168 0-10.817-1.674-17.865-5-21.139-3.344-3.283-8.64-4.94-15.884-4.94zm-32.599 78.798V141.681c0-2.832.704-5.067 2.126-6.724 1.413-1.632 3.25-2.461 5.521-2.461h28.357c17.994 0 31.664 4.54 40.994 13.597 9.347 9.054 14.02 23.31 14.02 42.784 0 41.66-17.778 62.486-53.326 62.486h-29.03c-5.769 0-8.662-2.597-8.662-7.808m156.544-79.977c-5.432 0-9.994 2.496-13.678 7.47q-5.507 7.471-5.508 20.963c0 9.013 1.758 15.914 5.262 20.722 3.505 4.823 8.119 7.225 13.837 7.225 5.717 0 10.363-2.432 13.924-7.313q5.354-7.293 5.355-20.884c0-9.054-1.843-16.023-5.522-20.89-3.68-4.861-8.23-7.293-13.67-7.293m-.087 89.477q-23.86 0-38.88-15.61-15.03-15.624-15.03-45.592c0-19.992 5.065-35.128 15.191-45.435 10.139-10.293 23.209-15.444 39.233-15.444 16.02 0 28.946 5.058 38.8 15.204 9.85 10.126 14.772 25.477 14.772 46.009 0 20.546-5.037 35.828-15.115 45.856-10.076 10.008-23.07 15.012-38.971 15.012m117.69-4.17c0 2.251-5.597 3.392-16.809 3.392-11.202 0-16.815-1.141-16.815-3.392v-85.248h-20.371c-1.928 0-3.286-2.597-4.077-7.818a56 56 0 0 1-.501-7.636c0-2.592.162-5.146.501-7.636.79-5.205 2.15-7.823 4.077-7.823h73.864c1.924 0 3.277 2.617 4.078 7.823.333 2.49.505 5.043.505 7.636 0 2.608-.172 5.152-.505 7.637-.8 5.22-2.154 7.817-4.078 7.817h-19.87z"/><path stroke="#fff" stroke-linejoin="round" stroke-width="23.5" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><path fill="#6d6e71" d="M487.93 322.997c-.94 1.926-2.664 3.691-5.188 5.289-2.52 1.607-5.722 2.406-9.611 2.406-5.132 0-9.259-1.617-12.394-4.887-3.122-3.243-4.686-7.92-4.686-14.022V296.57c0-5.97 1.473-10.548 4.431-13.743 2.95-3.17 6.903-4.78 11.84-4.78 4.824 0 8.564 1.27 11.212 3.781 2.639 2.519 4.025 6.038 4.146 10.532l-.066.2h-3.94c-.14-3.443-1.14-6.101-3.022-7.979-1.871-1.861-4.655-2.803-8.33-2.803-3.72 0-6.668 1.259-8.823 3.785-2.15 2.518-3.224 6.17-3.224 10.968v15.301q.001 7.462 3.476 11.382c2.316 2.592 5.438 3.892 9.38 3.892 2.876 0 5.19-.51 6.92-1.554 1.738-1.028 2.942-2.285 3.624-3.775V308.45h-10.618v-3.704h14.873zm19.557 3.902c2.336 0 4.416-.661 6.232-2.01 1.82-1.353 3.096-3.063 3.852-5.146v-8.224h-6.756q-4.31 0-6.896 2.442c-1.726 1.617-2.581 3.637-2.581 6.037 0 2.03.534 3.696 1.616 4.981 1.08 1.289 2.59 1.92 4.533 1.92m10.715 3.068a99 99 0 0 1-.48-3.225 22 22 0 0 1-.15-2.562 14.9 14.9 0 0 1-4.483 4.675c-1.836 1.236-3.878 1.848-6.128 1.848-3.147 0-5.567-.975-7.28-2.927-1.702-1.96-2.563-4.6-2.563-7.936 0-3.523 1.237-6.35 3.72-8.448 2.48-2.098 5.85-3.147 10.09-3.147h6.643v-4.672c0-2.686-.686-4.802-2.032-6.331-1.375-1.51-3.264-2.275-5.701-2.275-2.268 0-4.139.722-5.608 2.182-1.463 1.45-2.19 3.224-2.19 5.337l-3.944-.035-.07-.206c-.11-2.866.973-5.4 3.261-7.646 2.279-2.24 5.203-3.352 8.761-3.352 3.517 0 6.347 1.069 8.509 3.2q3.224 3.227 3.226 9.21v18.645c0 1.358.064 2.677.183 3.936a25 25 0 0 0 .627 3.729zm16.905-38.108.36 5.9c1-2.112 2.339-3.739 3.998-4.896q2.498-1.711 5.874-1.711c2.296 0 4.232.668 5.794 2.02 1.562 1.347 2.714 3.387 3.446 6.127.938-2.529 2.264-4.528 3.986-5.975 1.722-1.45 3.812-2.172 6.23-2.172 3.335 0 5.923 1.35 7.755 4.05 1.841 2.705 2.759 6.856 2.759 12.464v22.207h-4.246v-22.28c0-4.663-.645-7.946-1.9-9.834-1.261-1.89-3.071-2.842-5.41-2.842-2.462 0-4.384 1.04-5.767 3.152-1.375 2.112-2.223 4.754-2.531 7.945v23.86h-4.224v-22.258c0-4.554-.639-7.812-1.945-9.759-1.299-1.946-3.107-2.912-5.427-2.912-2.218 0-4.013.677-5.358 2.02-1.353 1.349-2.315 3.195-2.899 5.538v27.369h-4.22v-38.014zm61.457 3.021q-3.966 0-6.517 3.613c-1.705 2.415-2.585 5.392-2.656 8.938h17.537v-1.626c0-3.137-.736-5.75-2.21-7.822-1.482-2.075-3.53-3.103-6.154-3.103m.598 35.735c-4.099 0-7.451-1.543-10.055-4.621q-3.895-4.61-3.896-11.793v-6.313c0-4.798 1.303-8.798 3.912-11.979 2.616-3.167 5.758-4.75 9.441-4.75 3.983 0 7.068 1.413 9.27 4.246q3.313 4.257 3.312 11.434v4.171H587.39v3.162c0 3.68.882 6.744 2.635 9.19 1.757 2.45 4.144 3.666 7.136 3.666 2.077 0 3.888-.367 5.396-1.089a11.1 11.1 0 0 0 3.877-3.132l1.728 2.99c-1.148 1.456-2.634 2.633-4.45 3.505-1.811.868-4 1.312-6.551 1.312m46.411-35.734q-3.976 0-6.528 3.613-2.54 3.62-2.652 8.938h17.54v-1.626c0-3.137-.733-5.75-2.216-7.822-1.475-2.075-3.52-3.103-6.144-3.103m.593 35.735c-4.1 0-7.446-1.543-10.045-4.621q-3.91-4.61-3.91-11.793v-6.313c0-4.798 1.309-8.798 3.913-11.979 2.623-3.167 5.766-4.75 9.45-4.75 3.975 0 7.072 1.413 9.27 4.246 2.2 2.837 3.304 6.65 3.304 11.434v4.171h-21.755v3.162q0 5.52 2.647 9.19c1.747 2.45 4.124 3.666 7.125 3.666 2.087 0 3.888-.367 5.392-1.089a11.2 11.2 0 0 0 3.894-3.132l1.717 2.99c-1.15 1.456-2.633 2.633-4.451 3.505-1.81.868-3.997 1.312-6.55 1.312m23.189-38.755.345 6.284c1.014-2.23 2.353-3.962 4.034-5.166 1.667-1.21 3.63-1.824 5.887-1.824 3.396 0 5.998 1.256 7.804 3.78 1.826 2.518 2.73 6.434 2.73 11.749v23.191h-4.249V306.72c0-4.343-.636-7.377-1.9-9.137-1.258-1.76-3.107-2.636-5.513-2.636-2.158 0-3.968.701-5.419 2.126-1.457 1.412-2.543 3.294-3.267 5.666v27.134h-4.219V291.86zm33.27 22.395c0 3.858.73 6.926 2.213 9.208 1.465 2.304 3.695 3.443 6.671 3.443 2.04 0 3.757-.544 5.167-1.657 1.405-1.113 2.514-2.662 3.336-4.627V301.79c-.79-2.025-1.874-3.66-3.244-4.92-1.368-1.24-3.102-1.863-5.186-1.863-2.97 0-5.216 1.294-6.708 3.891-1.502 2.603-2.25 5.995-2.25 10.161zm-4.262-5.195c0-5.386 1.088-9.714 3.274-12.975 2.169-3.245 5.187-4.871 9.03-4.871 2.134 0 4.007.52 5.607 1.564 1.603 1.024 2.928 2.523 3.992 4.43l.412-5.287h3.581v38.048c0 4.871-1.13 8.646-3.4 11.317-2.271 2.66-5.499 4.009-9.666 4.009-1.5 0-3.11-.235-4.832-.691-1.724-.456-3.252-1.054-4.59-1.805l1.168-3.704a14.1 14.1 0 0 0 3.831 1.716 15.2 15.2 0 0 0 4.352.616q4.536-.001 6.71-2.905c1.452-1.961 2.18-4.798 2.18-8.553v-4.597c-1.079 1.71-2.402 3.024-3.97 3.93-1.563.912-3.39 1.368-5.448 1.368-3.818 0-6.814-1.496-8.976-4.486-2.167-2.983-3.255-6.965-3.255-11.93zm40.2 20.916h-4.266V291.86h4.266zm0-48.968h-4.266v-6.005h4.266zm13.774 10.852.346 6.284c1.016-2.23 2.35-3.962 4.027-5.166 1.677-1.21 3.643-1.824 5.89-1.824 3.397 0 6.01 1.256 7.82 3.78 1.821 2.518 2.717 6.434 2.717 11.749v23.191h-4.248V306.72c0-4.343-.635-7.377-1.897-9.137-1.268-1.76-3.103-2.636-5.517-2.636-2.157 0-3.962.701-5.412 2.126-1.455 1.412-2.545 3.294-3.266 5.666v27.134h-4.224V291.86zm42.074 3.021q-3.978 0-6.518 3.613-2.547 3.62-2.66 8.938h17.54v-1.626c0-3.137-.731-5.75-2.21-7.822-1.476-2.075-3.525-3.103-6.152-3.103m.602 35.735c-4.11 0-7.456-1.543-10.048-4.621q-3.903-4.61-3.903-11.793v-6.313c0-4.798 1.302-8.798 3.91-11.979q3.924-4.75 9.439-4.75c3.978 0 7.077 1.413 9.283 4.246 2.197 2.837 3.3 6.65 3.3 11.434v4.171h-21.76v3.162c0 3.68.887 6.744 2.642 9.19 1.754 2.45 4.133 3.666 7.137 3.666 2.08 0 3.88-.367 5.382-1.089a11.16 11.16 0 0 0 3.897-3.132l1.725 2.99c-1.156 1.456-2.64 2.633-4.454 3.505-1.81.868-3.998 1.312-6.55 1.312"/><g fill="#fff" transform="translate(30.492 21.054)scale(.363)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="none" stroke="#fff" stroke-linejoin="round" stroke-width="64" d="M105 745c0 276 813 276 814 0V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81v318z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(30.492 21.054)scale(.363)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file diff --git a/main/main.cpp b/main/main.cpp index 1cbd732747..060b3fe2f6 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -909,13 +909,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph // Benchmark tracking must be done after `OS::get_singleton()->initialize()` as on some // platforms, it's used to set up the time utilities. - OS::get_singleton()->benchmark_begin_measure("Startup", "Total"); - OS::get_singleton()->benchmark_begin_measure("Startup", "Setup"); + OS::get_singleton()->benchmark_begin_measure("Startup", "Main::Setup"); engine = memnew(Engine); MAIN_PRINT("Main: Initialize CORE"); - OS::get_singleton()->benchmark_begin_measure("Startup", "Core"); register_core_types(); register_core_driver_types(); @@ -2453,8 +2451,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph Thread::release_main_thread(); // If setup2() is called from another thread, that one will become main thread, so preventively release this one. set_current_thread_safe_for_nodes(false); - OS::get_singleton()->benchmark_end_measure("Startup", "Core"); - #if defined(STEAMAPI_ENABLED) if (editor || project_manager) { steam_tracker = memnew(SteamTracker); @@ -2465,7 +2461,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph return setup2(); } - OS::get_singleton()->benchmark_end_measure("Startup", "Setup"); + OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup"); return OK; error: @@ -2519,7 +2515,7 @@ error: } OS::get_singleton()->benchmark_end_measure("Startup", "Core"); - OS::get_singleton()->benchmark_end_measure("Startup", "Setup"); + OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup"); #if defined(STEAMAPI_ENABLED) if (steam_tracker) { @@ -2552,7 +2548,9 @@ Error _parse_resource_dummy(void *p_data, VariantParser::Stream *p_stream, Ref<R return OK; } -Error Main::setup2() { +Error Main::setup2(bool p_show_boot_logo) { + OS::get_singleton()->benchmark_begin_measure("Startup", "Main::Setup2"); + Thread::make_main_thread(); // Make whatever thread call this the main thread. set_current_thread_safe_for_nodes(true); @@ -2896,12 +2894,6 @@ Error Main::setup2() { MAIN_PRINT("Main: Setup Logo"); -#if !defined(TOOLS_ENABLED) && defined(WEB_ENABLED) - bool show_logo = false; -#else - bool show_logo = true; -#endif - if (init_windowed) { //do none.. } else if (init_maximized) { @@ -2913,67 +2905,11 @@ Error Main::setup2() { DisplayServer::get_singleton()->window_set_flag(DisplayServer::WINDOW_FLAG_ALWAYS_ON_TOP, true); } - MAIN_PRINT("Main: Load Boot Image"); - Color clear = GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3)); RenderingServer::get_singleton()->set_default_clear_color(clear); - if (show_logo) { //boot logo! - const bool boot_logo_image = GLOBAL_DEF_BASIC("application/boot_splash/show_image", true); - const String boot_logo_path = String(GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "application/boot_splash/image", PROPERTY_HINT_FILE, "*.png"), String())).strip_edges(); - const bool boot_logo_scale = GLOBAL_DEF_BASIC("application/boot_splash/fullsize", true); - const bool boot_logo_filter = GLOBAL_DEF_BASIC("application/boot_splash/use_filter", true); - - Ref<Image> boot_logo; - - if (boot_logo_image) { - if (!boot_logo_path.is_empty()) { - boot_logo.instantiate(); - Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo); - if (load_err) { - ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash."); - } - } - } else { - // Create a 1×1 transparent image. This will effectively hide the splash image. - boot_logo.instantiate(); - boot_logo->initialize_data(1, 1, false, Image::FORMAT_RGBA8); - boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0)); - } - - Color boot_bg_color = GLOBAL_GET("application/boot_splash/bg_color"); - -#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) - boot_bg_color = - GLOBAL_DEF_BASIC("application/boot_splash/bg_color", - (editor || project_manager) ? boot_splash_editor_bg_color : boot_splash_bg_color); -#endif - if (boot_logo.is_valid()) { - RenderingServer::get_singleton()->set_boot_image(boot_logo, boot_bg_color, boot_logo_scale, - boot_logo_filter); - - } else { -#ifndef NO_DEFAULT_BOOT_LOGO - MAIN_PRINT("Main: Create bootsplash"); -#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) - Ref<Image> splash = (editor || project_manager) ? memnew(Image(boot_splash_editor_png)) : memnew(Image(boot_splash_png)); -#else - Ref<Image> splash = memnew(Image(boot_splash_png)); -#endif - - MAIN_PRINT("Main: ClearColor"); - RenderingServer::get_singleton()->set_default_clear_color(boot_bg_color); - MAIN_PRINT("Main: Image"); - RenderingServer::get_singleton()->set_boot_image(splash, boot_bg_color, false); -#endif - } - -#if defined(TOOLS_ENABLED) && defined(MACOS_ENABLED) - if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_ICON) && OS::get_singleton()->get_bundle_icon_path().is_empty()) { - Ref<Image> icon = memnew(Image(app_icon_png)); - DisplayServer::get_singleton()->set_icon(icon); - } -#endif + if (p_show_boot_logo) { + setup_boot_logo(); } MAIN_PRINT("Main: Clear Color"); @@ -3003,6 +2939,8 @@ Error Main::setup2() { id->set_emulate_mouse_from_touch(bool(GLOBAL_DEF_BASIC("input_devices/pointing/emulate_mouse_from_touch", true))); } + GLOBAL_DEF("input_devices/buffering/android/use_accumulated_input", true); + GLOBAL_DEF("input_devices/buffering/android/use_input_buffering", true); GLOBAL_DEF_BASIC("input_devices/pointing/android/enable_long_press_as_right_click", false); GLOBAL_DEF_BASIC("input_devices/pointing/android/enable_pan_and_scale_gestures", false); GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "input_devices/pointing/android/rotary_input_scroll_axis", PROPERTY_HINT_ENUM, "Horizontal,Vertical"), 1); @@ -3211,11 +3149,76 @@ Error Main::setup2() { print_verbose("EDITOR API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_EDITOR))); MAIN_PRINT("Main: Done"); - OS::get_singleton()->benchmark_end_measure("Startup", "Setup"); + OS::get_singleton()->benchmark_end_measure("Startup", "Main::Setup2"); return OK; } +void Main::setup_boot_logo() { + MAIN_PRINT("Main: Load Boot Image"); + +#if !defined(TOOLS_ENABLED) && defined(WEB_ENABLED) + bool show_logo = false; +#else + bool show_logo = true; +#endif + + if (show_logo) { //boot logo! + const bool boot_logo_image = GLOBAL_DEF_BASIC("application/boot_splash/show_image", true); + const String boot_logo_path = String(GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "application/boot_splash/image", PROPERTY_HINT_FILE, "*.png"), String())).strip_edges(); + const bool boot_logo_scale = GLOBAL_DEF_BASIC("application/boot_splash/fullsize", true); + const bool boot_logo_filter = GLOBAL_DEF_BASIC("application/boot_splash/use_filter", true); + + Ref<Image> boot_logo; + + if (boot_logo_image) { + if (!boot_logo_path.is_empty()) { + boot_logo.instantiate(); + Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo); + if (load_err) { + ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash."); + } + } + } else { + // Create a 1×1 transparent image. This will effectively hide the splash image. + boot_logo.instantiate(); + boot_logo->initialize_data(1, 1, false, Image::FORMAT_RGBA8); + boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0)); + } + + Color boot_bg_color = GLOBAL_GET("application/boot_splash/bg_color"); + +#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) + boot_bg_color = GLOBAL_DEF_BASIC("application/boot_splash/bg_color", (editor || project_manager) ? boot_splash_editor_bg_color : boot_splash_bg_color); +#endif + if (boot_logo.is_valid()) { + RenderingServer::get_singleton()->set_boot_image(boot_logo, boot_bg_color, boot_logo_scale, boot_logo_filter); + + } else { +#ifndef NO_DEFAULT_BOOT_LOGO + MAIN_PRINT("Main: Create bootsplash"); +#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) + Ref<Image> splash = (editor || project_manager) ? memnew(Image(boot_splash_editor_png)) : memnew(Image(boot_splash_png)); +#else + Ref<Image> splash = memnew(Image(boot_splash_png)); +#endif + + MAIN_PRINT("Main: ClearColor"); + RenderingServer::get_singleton()->set_default_clear_color(boot_bg_color); + MAIN_PRINT("Main: Image"); + RenderingServer::get_singleton()->set_boot_image(splash, boot_bg_color, false); +#endif + } + +#if defined(TOOLS_ENABLED) && defined(MACOS_ENABLED) + if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_ICON) && OS::get_singleton()->get_bundle_icon_path().is_empty()) { + Ref<Image> icon = memnew(Image(app_icon_png)); + DisplayServer::get_singleton()->set_icon(icon); + } +#endif + } +} + String Main::get_rendering_driver_name() { return rendering_driver; } @@ -3227,6 +3230,8 @@ static MainTimerSync main_timer_sync; // and should move on to `OS::run`, and EXIT_FAILURE otherwise for // an early exit with that error code. int Main::start() { + OS::get_singleton()->benchmark_begin_measure("Startup", "Main::Start"); + ERR_FAIL_COND_V(!_start_success, false); bool has_icon = false; @@ -3950,7 +3955,7 @@ int Main::start() { } } - OS::get_singleton()->benchmark_end_measure("Startup", "Total"); + OS::get_singleton()->benchmark_end_measure("Startup", "Main::Start"); OS::get_singleton()->benchmark_dump(); return EXIT_SUCCESS; @@ -4038,6 +4043,7 @@ bool Main::iteration() { } Engine::get_singleton()->_in_physics = true; + Engine::get_singleton()->_physics_frames++; uint64_t physics_begin = OS::get_singleton()->get_ticks_usec(); @@ -4085,7 +4091,6 @@ bool Main::iteration() { physics_process_ticks = MAX(physics_process_ticks, OS::get_singleton()->get_ticks_usec() - physics_begin); // keep the largest one for reference physics_process_max = MAX(OS::get_singleton()->get_ticks_usec() - physics_begin, physics_process_max); - Engine::get_singleton()->_physics_frames++; Engine::get_singleton()->_in_physics = false; } @@ -4218,7 +4223,7 @@ void Main::force_redraw() { * The order matters as some of those steps are linked with each other. */ void Main::cleanup(bool p_force) { - OS::get_singleton()->benchmark_begin_measure("Shutdown", "Total"); + OS::get_singleton()->benchmark_begin_measure("Shutdown", "Main::Cleanup"); if (!p_force) { ERR_FAIL_COND(!_start_success); } @@ -4376,7 +4381,7 @@ void Main::cleanup(bool p_force) { unregister_core_types(); - OS::get_singleton()->benchmark_end_measure("Shutdown", "Total"); + OS::get_singleton()->benchmark_end_measure("Shutdown", "Main::Cleanup"); OS::get_singleton()->benchmark_dump(); OS::get_singleton()->finalize_core(); diff --git a/main/main.h b/main/main.h index ff0fba6b51..b1cfcd3c2d 100644 --- a/main/main.h +++ b/main/main.h @@ -72,8 +72,9 @@ public: static int test_entrypoint(int argc, char *argv[], bool &tests_need_run); static Error setup(const char *execpath, int argc, char *argv[], bool p_second_phase = true); - static Error setup2(); // The thread calling setup2() will effectively become the main thread. + static Error setup2(bool p_show_boot_logo = true); // The thread calling setup2() will effectively become the main thread. static String get_rendering_driver_name(); + static void setup_boot_logo(); #ifdef TESTS_ENABLED static Error test_setup(); static void test_cleanup(); diff --git a/methods.py b/methods.py index f3798d121a..99c47ca077 100644 --- a/methods.py +++ b/methods.py @@ -347,7 +347,7 @@ def detect_modules(search_path, recursive=False): # Godot sources when using `custom_modules` build option. version_path = os.path.join(path, "version.py") if os.path.exists(version_path): - with open(version_path) as f: + with open(version_path, "r", encoding="utf-8") as f: if 'short_name = "godot"' in f.read(): return True return False @@ -989,7 +989,7 @@ def show_progress(env): pass try: - with open(node_count_fname) as f: + with open(node_count_fname, "r", encoding="utf-8") as f: node_count_max = int(f.readline()) except Exception: pass diff --git a/misc/dist/document_icons/gdscript.svg b/misc/dist/document_icons/gdscript.svg index 32c802c81f..27326f679c 100644 --- a/misc/dist/document_icons/gdscript.svg +++ b/misc/dist/document_icons/gdscript.svg @@ -1 +1 @@ -<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="m812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026m-415.32-32.623h302.11c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886h-700.219z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="207.666" y="878.644"><tspan font-size="112" x="207.666" y="878.644">GDSCRIPT</tspan></text><path d="m481.818 300.713-17.037 68.149a150.92 150.92 0 0 0 -20.81 8.43l-60.015-36.021-42.683 42.683 36.079 60.19a150.92 150.92 0 0 0 -8.608 20.693l-68.031 16.978v60.368l68.149 17.037a150.92 150.92 0 0 0 8.43 20.752l-36.021 60.072 42.683 42.683 60.19-36.079a150.92 150.92 0 0 0 20.693 8.608l16.978 68.031h60.368l17.037-68.149a150.92 150.92 0 0 0 20.752-8.43l60.072 36.021 42.683-42.683-36.079-60.19a150.92 150.92 0 0 0 8.608-20.693l68.031-16.978v-60.368l-68.149-17.037a150.92 150.92 0 0 0 -8.43-20.752l36.021-60.072-42.683-42.683-60.19 36.079a150.92 150.92 0 0 0 -20.693-8.608l-16.978-68.031h-60.368zm30.184 150.92a60.368 60.368 0 0 1 60.368 60.367 60.368 60.368 0 0 1 -60.368 60.368 60.368 60.368 0 0 1 -60.368-60.368 60.368 60.368 0 0 1 60.368-60.368z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603" d="m812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026m-415.32-32.623h302.11c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886h-700.219z"/><text x="207.666" y="878.644" fill="#333f67" font-family="Montserrat" font-size="16" font-weight="800" letter-spacing="0" word-spacing="0"><tspan x="207.666" y="878.644" font-size="112">GDSCRIPT</tspan></text><path fill="#478cbf" d="m481.818 300.713-17.037 68.149a150.92 150.92 0 0 0 -20.81 8.43l-60.015-36.021-42.683 42.683 36.079 60.19a150.92 150.92 0 0 0 -8.608 20.693l-68.031 16.978v60.368l68.149 17.037a150.92 150.92 0 0 0 8.43 20.752l-36.021 60.072 42.683 42.683 60.19-36.079a150.92 150.92 0 0 0 20.693 8.608l16.978 68.031h60.368l17.037-68.149a150.92 150.92 0 0 0 20.752-8.43l60.072 36.021 42.683-42.683-36.079-60.19a150.92 150.92 0 0 0 8.608-20.693l68.031-16.978v-60.368l-68.149-17.037a150.92 150.92 0 0 0 -8.43-20.752l36.021-60.072-42.683-42.683-60.19 36.079a150.92 150.92 0 0 0 -20.693-8.608l-16.978-68.031h-60.368zm30.184 150.92a60.368 60.368 0 0 1 60.368 60.367 60.368 60.368 0 0 1 -60.368 60.368 60.368 60.368 0 0 1 -60.368-60.368 60.368 60.368 0 0 1 60.368-60.368z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_extra_small.svg b/misc/dist/document_icons/gdscript_extra_small.svg index 2b06f96cac..0a4ce3c220 100644 --- a/misc/dist/document_icons/gdscript_extra_small.svg +++ b/misc/dist/document_icons/gdscript_extra_small.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M7.39 4.721l-.346 1.38a3.056 3.056 0 0 0-.421.171l-1.216-.73-.864.865.73 1.219a3.056 3.056 0 0 0-.174.419l-1.377.344V9.61l1.38.345a3.056 3.056 0 0 0 .17.42l-.729 1.217.864.864 1.22-.73a3.056 3.056 0 0 0 .418.174l.344 1.377h1.222l.345-1.38a3.056 3.056 0 0 0 .42-.17l1.217.73.864-.865-.73-1.219a3.056 3.056 0 0 0 .174-.42l1.378-.343V8.39l-1.38-.345a3.056 3.056 0 0 0-.17-.42l.729-1.217-.865-.864-1.219.73a3.056 3.056 0 0 0-.419-.174L8.611 4.72H7.39zM8 7.777A1.222 1.222 0 0 1 9.223 9 1.222 1.222 0 0 1 8 10.222 1.222 1.222 0 0 1 6.778 9 1.222 1.222 0 0 1 8 7.777z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z"/><path fill="#478cbf" d="M7.39 4.721l-.346 1.38a3.056 3.056 0 0 0-.421.171l-1.216-.73-.864.865.73 1.219a3.056 3.056 0 0 0-.174.419l-1.377.344V9.61l1.38.345a3.056 3.056 0 0 0 .17.42l-.729 1.217.864.864 1.22-.73a3.056 3.056 0 0 0 .418.174l.344 1.377h1.222l.345-1.38a3.056 3.056 0 0 0 .42-.17l1.217.73.864-.865-.73-1.219a3.056 3.056 0 0 0 .174-.42l1.378-.343V8.39l-1.38-.345a3.056 3.056 0 0 0-.17-.42l.729-1.217-.865-.864-1.219.73a3.056 3.056 0 0 0-.419-.174L8.611 4.72H7.39zM8 7.777A1.222 1.222 0 0 1 9.223 9 1.222 1.222 0 0 1 8 10.222 1.222 1.222 0 0 1 6.778 9 1.222 1.222 0 0 1 8 7.777z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_small.svg b/misc/dist/document_icons/gdscript_small.svg index 47d448fb2c..fce35a4291 100644 --- a/misc/dist/document_icons/gdscript_small.svg +++ b/misc/dist/document_icons/gdscript_small.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.057 11.397l-.532 2.13a4.716 4.716 0 0 0-.65.263l-1.876-1.126-1.334 1.334 1.128 1.881a4.716 4.716 0 0 0-.27.647l-2.125.53v1.887l2.13.532a4.716 4.716 0 0 0 .263.649L10.665 22 12 23.335l1.881-1.127a4.716 4.716 0 0 0 .647.269l.53 2.125h1.887l.532-2.13a4.716 4.716 0 0 0 .649-.263l1.877 1.126 1.334-1.334-1.128-1.88a4.716 4.716 0 0 0 .27-.647l2.125-.531v-1.886l-2.13-.533a4.716 4.716 0 0 0-.263-.648l1.126-1.878-1.334-1.333-1.881 1.127a4.716 4.716 0 0 0-.647-.269l-.53-2.126h-1.887zm.944 4.716A1.887 1.887 0 0 1 17.887 18a1.887 1.887 0 0 1-1.886 1.886A1.887 1.887 0 0 1 14.114 18a1.887 1.887 0 0 1 1.887-1.887z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z"/><path fill="#478cbf" d="M15.057 11.397l-.532 2.13a4.716 4.716 0 0 0-.65.263l-1.876-1.126-1.334 1.334 1.128 1.881a4.716 4.716 0 0 0-.27.647l-2.125.53v1.887l2.13.532a4.716 4.716 0 0 0 .263.649L10.665 22 12 23.335l1.881-1.127a4.716 4.716 0 0 0 .647.269l.53 2.125h1.887l.532-2.13a4.716 4.716 0 0 0 .649-.263l1.877 1.126 1.334-1.334-1.128-1.88a4.716 4.716 0 0 0 .27-.647l2.125-.531v-1.886l-2.13-.533a4.716 4.716 0 0 0-.263-.648l1.126-1.878-1.334-1.333-1.881 1.127a4.716 4.716 0 0 0-.647-.269l-.53-2.126h-1.887zm.944 4.716A1.887 1.887 0 0 1 17.887 18a1.887 1.887 0 0 1-1.886 1.886A1.887 1.887 0 0 1 14.114 18a1.887 1.887 0 0 1 1.887-1.887z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project.svg b/misc/dist/document_icons/project.svg index 9b2644186a..3f71da744a 100644 --- a/misc/dist/document_icons/project.svg +++ b/misc/dist/document_icons/project.svg @@ -1 +1 @@ -<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="m812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025m-415.32-32.625h302.11c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885h-700.219z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><g stroke-width=".32"><path d="m712.572 590.17s-.666-4.089-1.056-4.052l-74.179 7.157a12.056 12.056 0 0 0 -10.9 11.191l-2.038 29.21-57.387 4.094-3.905-26.472c-.868-5.888-6.01-10.327-11.961-10.327h-78.292c-5.95 0-11.09 4.439-11.96 10.327l-3.906 26.472-57.387-4.095-2.038-29.208a12.057 12.057 0 0 0 -10.901-11.194l-74.214-7.155c-.384-.037-.665 4.056-1.049 4.056l-.1 16.052 62.853 10.136 2.059 29.47c.416 5.965 5.23 10.788 11.2 11.217l79.035 5.638c.299.021.594.033.89.033 5.94 0 11.072-4.44 11.941-10.329l4.017-27.237h57.414l4.017 27.237c.867 5.886 6.006 10.326 11.953 10.326.292 0 .583-.009.868-.03l79.046-5.638c5.967-.428 10.783-5.252 11.2-11.218l2.056-29.469 62.826-10.18z" fill="#fff"/><path d="m311.398 469.127v121.042c.221.003.443.01.662.031l74.207 7.155c3.88703.37478 6.93367 3.50431 7.204 7.4l2.289 32.756 64.731 4.619 4.46-30.234c.57822-3.91981 3.94178-6.82377 7.904-6.824h78.292c3.96222.00023 7.32578 2.90419 7.904 6.824l4.458 30.234 64.733-4.619 2.287-32.757c.27147-3.89481 3.31693-7.02357 7.203-7.4l74.178-7.154c.22-.02.44-.028.66-.031v-9.658l.032-.01v-111.373c10.4496-13.15476 20.3441-27.66594 27.925-39.874-11.586-19.722-25.78-37.347-40.954-53.677-14.073 7.083-27.74 15.108-40.65 23.647-6.46-6.421-13.736-11.674-20.883-17.164-7.022-5.64-14.936-9.775-22.44-14.593 2.234-16.641 3.339-33.024 3.783-50.122-19.366-9.747-40.017-16.209-60.905-20.85-8.34 14.017-15.967 29.196-22.61 44.035-7.876-1.316-15.79-1.804-23.713-1.898v-.013c-.055 0-.107.013-.154.013-.05 0-.1-.013-.15-.013v.013c-7.937.095-15.845.582-23.724 1.898-6.638-14.84-14.261-30.018-22.613-44.035-20.879 4.641-41.532 11.104-60.895 20.85.442 17.098 1.548 33.48 3.788 50.122-7.52 4.818-15.423 8.953-22.447 14.592-7.137 5.491-14.425 10.745-20.887 17.165-12.91-8.539-26.573-16.564-40.65-23.646-15.173 16.329-29.36 33.953-40.95 53.676 9.10746 14.29708 18.8786 28.66782 27.925 39.873z" fill="#478cbf"/><path d="m646 612.615-2.3 32.93a7.992 7.992 0 0 1 -7.402 7.413l-79.044 5.64a7.991 7.991 0 0 1 -8.474-6.806l-4.531-30.74h-64.496l-4.533 30.74c-.608 4.137-4.308 7.112-8.474 6.806l-79.043-5.64a7.992 7.992 0 0 1 -7.402-7.413l-2.3-32.931-66.726-6.434c.032 7.173.124 15.028.124 16.592 0 70.472 89.397 104.344 200.465 104.734h.273c111.07-.39 200.435-34.262 200.435-104.734 0-1.592.096-9.416.129-16.592z" fill="#478cbf"/><path d="m451.527 518.261c0 24.71-20.02 44.725-44.72 44.725-24.688 0-44.714-20.016-44.714-44.725 0-24.691 20.026-44.697 44.713-44.697 24.7 0 44.72 20.006 44.72 44.697" fill="#fff"/><path d="m440.766 520.915c0 16.388-13.283 29.671-29.684 29.671-16.393 0-29.684-13.283-29.684-29.671 0-16.39 13.29-29.685 29.684-29.685 16.401 0 29.684 13.295 29.684 29.685" fill="#414042"/><path d="m511.997 567.054c-7.951 0-14.394-5.86-14.394-13.081v-41.17c0-7.216 6.444-13.08 14.394-13.08s14.408 5.864 14.408 13.08v41.17c0 7.222-6.458 13.081-14.408 13.081m60.477-48.793c0 24.71 20.02 44.725 44.724 44.725 24.686 0 44.71-20.016 44.71-44.725 0-24.691-20.024-44.697-44.71-44.697-24.704 0-44.724 20.006-44.724 44.697" fill="#fff"/><path d="m583.238 520.915c0 16.388 13.279 29.671 29.668 29.671 16.405 0 29.683-13.283 29.683-29.671 0-16.39-13.278-29.685-29.684-29.685-16.388 0-29.668 13.295-29.668 29.685" fill="#414042"/></g><text style="font-weight:800;font-size:16;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="234.416" y="878.644"><tspan font-size="112" x="234.416" y="878.644">PROJECT</tspan></text></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603" d="m812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025m-415.32-32.625h302.11c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885h-700.219z"/><g stroke-width=".32"><path fill="#fff" d="m712.572 590.17s-.666-4.089-1.056-4.052l-74.179 7.157a12.056 12.056 0 0 0 -10.9 11.191l-2.038 29.21-57.387 4.094-3.905-26.472c-.868-5.888-6.01-10.327-11.961-10.327h-78.292c-5.95 0-11.09 4.439-11.96 10.327l-3.906 26.472-57.387-4.095-2.038-29.208a12.057 12.057 0 0 0 -10.901-11.194l-74.214-7.155c-.384-.037-.665 4.056-1.049 4.056l-.1 16.052 62.853 10.136 2.059 29.47c.416 5.965 5.23 10.788 11.2 11.217l79.035 5.638c.299.021.594.033.89.033 5.94 0 11.072-4.44 11.941-10.329l4.017-27.237h57.414l4.017 27.237c.867 5.886 6.006 10.326 11.953 10.326.292 0 .583-.009.868-.03l79.046-5.638c5.967-.428 10.783-5.252 11.2-11.218l2.056-29.469 62.826-10.18z"/><path fill="#478cbf" d="m311.398 469.127v121.042c.221.003.443.01.662.031l74.207 7.155c3.88703.37478 6.93367 3.50431 7.204 7.4l2.289 32.756 64.731 4.619 4.46-30.234c.57822-3.91981 3.94178-6.82377 7.904-6.824h78.292c3.96222.00023 7.32578 2.90419 7.904 6.824l4.458 30.234 64.733-4.619 2.287-32.757c.27147-3.89481 3.31693-7.02357 7.203-7.4l74.178-7.154c.22-.02.44-.028.66-.031v-9.658l.032-.01v-111.373c10.4496-13.15476 20.3441-27.66594 27.925-39.874-11.586-19.722-25.78-37.347-40.954-53.677-14.073 7.083-27.74 15.108-40.65 23.647-6.46-6.421-13.736-11.674-20.883-17.164-7.022-5.64-14.936-9.775-22.44-14.593 2.234-16.641 3.339-33.024 3.783-50.122-19.366-9.747-40.017-16.209-60.905-20.85-8.34 14.017-15.967 29.196-22.61 44.035-7.876-1.316-15.79-1.804-23.713-1.898v-.013c-.055 0-.107.013-.154.013-.05 0-.1-.013-.15-.013v.013c-7.937.095-15.845.582-23.724 1.898-6.638-14.84-14.261-30.018-22.613-44.035-20.879 4.641-41.532 11.104-60.895 20.85.442 17.098 1.548 33.48 3.788 50.122-7.52 4.818-15.423 8.953-22.447 14.592-7.137 5.491-14.425 10.745-20.887 17.165-12.91-8.539-26.573-16.564-40.65-23.646-15.173 16.329-29.36 33.953-40.95 53.676 9.10746 14.29708 18.8786 28.66782 27.925 39.873z"/><path fill="#478cbf" d="m646 612.615-2.3 32.93a7.992 7.992 0 0 1 -7.402 7.413l-79.044 5.64a7.991 7.991 0 0 1 -8.474-6.806l-4.531-30.74h-64.496l-4.533 30.74c-.608 4.137-4.308 7.112-8.474 6.806l-79.043-5.64a7.992 7.992 0 0 1 -7.402-7.413l-2.3-32.931-66.726-6.434c.032 7.173.124 15.028.124 16.592 0 70.472 89.397 104.344 200.465 104.734h.273c111.07-.39 200.435-34.262 200.435-104.734 0-1.592.096-9.416.129-16.592z"/><path fill="#fff" d="m451.527 518.261c0 24.71-20.02 44.725-44.72 44.725-24.688 0-44.714-20.016-44.714-44.725 0-24.691 20.026-44.697 44.713-44.697 24.7 0 44.72 20.006 44.72 44.697"/><path fill="#414042" d="m440.766 520.915c0 16.388-13.283 29.671-29.684 29.671-16.393 0-29.684-13.283-29.684-29.671 0-16.39 13.29-29.685 29.684-29.685 16.401 0 29.684 13.295 29.684 29.685"/><path fill="#fff" d="m511.997 567.054c-7.951 0-14.394-5.86-14.394-13.081v-41.17c0-7.216 6.444-13.08 14.394-13.08s14.408 5.864 14.408 13.08v41.17c0 7.222-6.458 13.081-14.408 13.081m60.477-48.793c0 24.71 20.02 44.725 44.724 44.725 24.686 0 44.71-20.016 44.71-44.725 0-24.691-20.024-44.697-44.71-44.697-24.704 0-44.724 20.006-44.724 44.697"/><path fill="#414042" d="m583.238 520.915c0 16.388 13.279 29.671 29.668 29.671 16.405 0 29.683-13.283 29.683-29.671 0-16.39-13.278-29.685-29.684-29.685-16.388 0-29.668 13.295-29.668 29.685"/></g><text x="234.416" y="878.644" fill="#333f67" font-family="Montserrat" font-size="16" font-weight="800" letter-spacing="0" word-spacing="0"><tspan x="234.416" y="878.644" font-size="112">PROJECT</tspan></text></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_extra_small.svg b/misc/dist/document_icons/project_extra_small.svg index 1fa1e728e9..6b659fd33d 100644 --- a/misc/dist/document_icons/project_extra_small.svg +++ b/misc/dist/document_icons/project_extra_small.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="m12.062 10.583s-.014-.083-.022-.082l-1.502.145a.244.244 0 0 0 -.22.226l-.042.592-1.162.083-.079-.536a.246.246 0 0 0 -.242-.21h-1.585c-.12 0-.225.09-.243.21l-.079.536-1.162-.083-.041-.592a.244.244 0 0 0 -.22-.226l-1.505-.146c-.007-.001-.013.082-.02.082l-.003.325 1.273.205.042.597c.008.12.105.218.226.227l1.6.114h.019c.12 0 .224-.089.242-.208l.081-.552h1.163l.08.552a.246.246 0 0 0 .26.208l1.601-.114a.246.246 0 0 0 .227-.227l.042-.597 1.272-.206z" fill="#fff"/><path d="m3.938 8.132v2.45l.013.001 1.503.145c.078773.0076.1405059.07105.146.15l.046.663 1.311.094.09-.612c.01187-.07924.079879-.137895.16-.138h1.586c.080121.000105.1481303.05876.16.138l.09.612 1.311-.094.046-.663c.0055-.07895.06723-.142375.146-.15l1.502-.145h.014v-2.451c.22118-.2597567.402804-.5673567.566-.808-.236303-.3914463-.514617-.7559371-.83-1.087-.283508.1437236-.558316.3040004-.823.48-.13-.13-.278-.237-.422-.348-.143-.115-.303-.198-.455-.296.044019-.3366902.069724-.6755224.077-1.015-.392294-.1911688-.8067944-.3329185-1.234-.422-.1691916.2883902-.3217734.5862085-.457.892-.158761-.0253078-.3192359-.0383464-.48-.039h-.004-.003c-.16.002-.32.012-.48.039-.135411-.3058816-.288331-.6037083-.458-.892-.4268603.0891708-.841019.2309186-1.233.422.009.346.031.678.076 1.015-.152.098-.312.181-.454.296-.145.11-.292.217-.423.347-.264694-.1756817-.5395029-.3356251-.823-.479-.307.331-.595.688-.83 1.087.1718588.2982703.3967405.5717122.566.808z" fill="#478cbf"/><path d="m10.714 11.037-.047.667a.162.162 0 0 1 -.15.15l-1.6.114a.162.162 0 0 1 -.172-.137l-.092-.623h-1.306l-.092.623a.162.162 0 0 1 -.171.137l-1.6-.114a.162.162 0 0 1 -.15-.15l-.047-.667-1.351-.13.002.336c0 1.427 1.81 2.113 4.06 2.12h.005c2.25-.007 4.059-.693 4.059-2.12l.002-.336z" fill="#478cbf"/><path d="m6.776 9.127a.905.905 0 1 1 -1.811 0 .905.905 0 0 1 1.81 0" fill="#fff"/><path d="m6.558 9.18a.6.6 0 1 1 -1.202 0 .6.6 0 0 1 1.202 0" fill="#414042"/><path d="m8 10.115c-.16 0-.291-.119-.291-.265v-.834c0-.146.13-.265.291-.265s.292.119.292.265v.834c0 .146-.13.265-.292.265m1.225-.988a.906.906 0 1 0 1.81 0 .906.906 0 0 0 -1.81 0" fill="#fff"/><path d="m9.443 9.18a.6.6 0 1 0 1.201 0 .6.6 0 0 0 -1.201 0" fill="#414042"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z"/><g stroke-width=".32"><path fill="#fff" d="m12.062 10.583s-.014-.083-.022-.082l-1.502.145a.244.244 0 0 0 -.22.226l-.042.592-1.162.083-.079-.536a.246.246 0 0 0 -.242-.21h-1.585c-.12 0-.225.09-.243.21l-.079.536-1.162-.083-.041-.592a.244.244 0 0 0 -.22-.226l-1.505-.146c-.007-.001-.013.082-.02.082l-.003.325 1.273.205.042.597c.008.12.105.218.226.227l1.6.114h.019c.12 0 .224-.089.242-.208l.081-.552h1.163l.08.552a.246.246 0 0 0 .26.208l1.601-.114a.246.246 0 0 0 .227-.227l.042-.597 1.272-.206z"/><path fill="#478cbf" d="m3.938 8.132v2.45l.013.001 1.503.145c.078773.0076.1405059.07105.146.15l.046.663 1.311.094.09-.612c.01187-.07924.079879-.137895.16-.138h1.586c.080121.000105.1481303.05876.16.138l.09.612 1.311-.094.046-.663c.0055-.07895.06723-.142375.146-.15l1.502-.145h.014v-2.451c.22118-.2597567.402804-.5673567.566-.808-.236303-.3914463-.514617-.7559371-.83-1.087-.283508.1437236-.558316.3040004-.823.48-.13-.13-.278-.237-.422-.348-.143-.115-.303-.198-.455-.296.044019-.3366902.069724-.6755224.077-1.015-.392294-.1911688-.8067944-.3329185-1.234-.422-.1691916.2883902-.3217734.5862085-.457.892-.158761-.0253078-.3192359-.0383464-.48-.039h-.004-.003c-.16.002-.32.012-.48.039-.135411-.3058816-.288331-.6037083-.458-.892-.4268603.0891708-.841019.2309186-1.233.422.009.346.031.678.076 1.015-.152.098-.312.181-.454.296-.145.11-.292.217-.423.347-.264694-.1756817-.5395029-.3356251-.823-.479-.307.331-.595.688-.83 1.087.1718588.2982703.3967405.5717122.566.808z"/><path fill="#478cbf" d="m10.714 11.037-.047.667a.162.162 0 0 1 -.15.15l-1.6.114a.162.162 0 0 1 -.172-.137l-.092-.623h-1.306l-.092.623a.162.162 0 0 1 -.171.137l-1.6-.114a.162.162 0 0 1 -.15-.15l-.047-.667-1.351-.13.002.336c0 1.427 1.81 2.113 4.06 2.12h.005c2.25-.007 4.059-.693 4.059-2.12l.002-.336z"/><path fill="#fff" d="m6.776 9.127a.905.905 0 1 1 -1.811 0 .905.905 0 0 1 1.81 0"/><path fill="#414042" d="m6.558 9.18a.6.6 0 1 1 -1.202 0 .6.6 0 0 1 1.202 0"/><path fill="#fff" d="m8 10.115c-.16 0-.291-.119-.291-.265v-.834c0-.146.13-.265.291-.265s.292.119.292.265v.834c0 .146-.13.265-.292.265m1.225-.988a.906.906 0 1 0 1.81 0 .906.906 0 0 0 -1.81 0"/><path fill="#414042" d="m9.443 9.18a.6.6 0 1 0 1.201 0 .6.6 0 0 0 -1.201 0"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_small.svg b/misc/dist/document_icons/project_small.svg index 058eded3ee..fd50f25d35 100644 --- a/misc/dist/document_icons/project_small.svg +++ b/misc/dist/document_icons/project_small.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532m-12.979-1.019h9.441c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965h-21.882z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="m22.268 20.443s-.02-.128-.033-.127l-2.318.224a.377.377 0 0 0 -.34.35l-.064.912-1.793.128-.122-.827a.38.38 0 0 0 -.374-.323h-2.447a.38.38 0 0 0 -.374.323l-.122.827-1.793-.128-.064-.913a.377.377 0 0 0 -.34-.35l-2.32-.223c-.011-.001-.02.127-.032.127l-.003.501 1.964.317.064.921a.38.38 0 0 0 .35.35l2.47.177h.028a.38.38 0 0 0 .373-.322l.125-.851h1.795l.125.851a.38.38 0 0 0 .4.322l2.471-.176a.38.38 0 0 0 .35-.351l.064-.92 1.964-.32z" fill="#fff"/><path d="m9.732 16.66v3.783h.02l2.32.224c.120882.01233.215393.109796.224.231l.072 1.024 2.023.144.14-.945c.01825-.121952.122691-.212385.246-.213h2.447c.123688.000122.228694.09067.247.213l.14.945 2.022-.144.072-1.024c.0091-.121156.104074-.218195.225-.23l2.318-.225h.02v-.302h.001v-3.481c.337369-.403598.623887-.872775.873-1.246-.364428-.603874-.793632-1.166199-1.28-1.677-.44.22-.867.472-1.27.738-.202-.2-.43-.364-.653-.536-.22-.176-.466-.305-.701-.456.07-.52.104-1.032.118-1.566-.604936-.295179-1.244149-.514184-1.903-.652-.26.438-.499.913-.707 1.376-.244789-.03861-.492185-.05834-.74-.059h-.01c-.248507.00091-.496575.02097-.742.06-.208692-.472178-.444416-.93194-.706-1.377-.658846.137836-1.298056.35684-1.903.652.014.534.048 1.046.118 1.566-.235.15-.482.28-.701.456-.223.172-.451.336-.653.536-.403-.266-.83-.517-1.27-.738-.4863434.510822-.9155458 1.073144-1.28 1.677.2695251.457258.6077461.88389.873 1.246z" fill="#478cbf"/><path d="m20.188 21.144-.072 1.029a.25.25 0 0 1 -.231.232l-2.47.176a.25.25 0 0 1 -.265-.213l-.142-.96h-2.015l-.142.96a.25.25 0 0 1 -.265.213l-2.47-.176a.25.25 0 0 1 -.231-.232l-.072-1.03-2.085-.2c0 .224.004.47.004.518 0 2.203 2.793 3.261 6.264 3.273h.009c3.47-.012 6.263-1.07 6.263-3.273l.004-.518z" fill="#478cbf"/><path d="m14.11 18.195a1.397 1.397 0 1 1 -2.794.001 1.397 1.397 0 0 1 2.795 0" fill="#fff"/><path d="m13.774 18.278a.927.927 0 1 1 -1.854 0 .927.927 0 0 1 1.854 0" fill="#414042"/><path d="m16 19.72c-.248 0-.45-.183-.45-.409v-1.286c0-.226.202-.409.45-.409.249 0 .45.183.45.409v1.286c0 .226-.201.41-.45.41m1.89-1.526a1.397 1.397 0 1 0 2.795 0 1.397 1.397 0 0 0 -2.795 0" fill="#fff"/><path d="m18.227 18.278a.927.927 0 1 0 1.854 0 .927.927 0 0 0 -1.854 0" fill="#414042"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="m25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532m-12.979-1.019h9.441c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965h-21.882z"/><g stroke-width=".32"><path fill="#fff" d="m22.268 20.443s-.02-.128-.033-.127l-2.318.224a.377.377 0 0 0 -.34.35l-.064.912-1.793.128-.122-.827a.38.38 0 0 0 -.374-.323h-2.447a.38.38 0 0 0 -.374.323l-.122.827-1.793-.128-.064-.913a.377.377 0 0 0 -.34-.35l-2.32-.223c-.011-.001-.02.127-.032.127l-.003.501 1.964.317.064.921a.38.38 0 0 0 .35.35l2.47.177h.028a.38.38 0 0 0 .373-.322l.125-.851h1.795l.125.851a.38.38 0 0 0 .4.322l2.471-.176a.38.38 0 0 0 .35-.351l.064-.92 1.964-.32z"/><path fill="#478cbf" d="m9.732 16.66v3.783h.02l2.32.224c.120882.01233.215393.109796.224.231l.072 1.024 2.023.144.14-.945c.01825-.121952.122691-.212385.246-.213h2.447c.123688.000122.228694.09067.247.213l.14.945 2.022-.144.072-1.024c.0091-.121156.104074-.218195.225-.23l2.318-.225h.02v-.302h.001v-3.481c.337369-.403598.623887-.872775.873-1.246-.364428-.603874-.793632-1.166199-1.28-1.677-.44.22-.867.472-1.27.738-.202-.2-.43-.364-.653-.536-.22-.176-.466-.305-.701-.456.07-.52.104-1.032.118-1.566-.604936-.295179-1.244149-.514184-1.903-.652-.26.438-.499.913-.707 1.376-.244789-.03861-.492185-.05834-.74-.059h-.01c-.248507.00091-.496575.02097-.742.06-.208692-.472178-.444416-.93194-.706-1.377-.658846.137836-1.298056.35684-1.903.652.014.534.048 1.046.118 1.566-.235.15-.482.28-.701.456-.223.172-.451.336-.653.536-.403-.266-.83-.517-1.27-.738-.4863434.510822-.9155458 1.073144-1.28 1.677.2695251.457258.6077461.88389.873 1.246z"/><path fill="#478cbf" d="m20.188 21.144-.072 1.029a.25.25 0 0 1 -.231.232l-2.47.176a.25.25 0 0 1 -.265-.213l-.142-.96h-2.015l-.142.96a.25.25 0 0 1 -.265.213l-2.47-.176a.25.25 0 0 1 -.231-.232l-.072-1.03-2.085-.2c0 .224.004.47.004.518 0 2.203 2.793 3.261 6.264 3.273h.009c3.47-.012 6.263-1.07 6.263-3.273l.004-.518z"/><path fill="#fff" d="m14.11 18.195a1.397 1.397 0 1 1 -2.794.001 1.397 1.397 0 0 1 2.795 0"/><path fill="#414042" d="m13.774 18.278a.927.927 0 1 1 -1.854 0 .927.927 0 0 1 1.854 0"/><path fill="#fff" d="m16 19.72c-.248 0-.45-.183-.45-.409v-1.286c0-.226.202-.409.45-.409.249 0 .45.183.45.409v1.286c0 .226-.201.41-.45.41m1.89-1.526a1.397 1.397 0 1 0 2.795 0 1.397 1.397 0 0 0 -2.795 0"/><path fill="#414042" d="m18.227 18.278a.927.927 0 1 0 1.854 0 .927.927 0 0 0 -1.854 0"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource.svg b/misc/dist/document_icons/resource.svg index 1dcb639e24..ca5c7d419b 100644 --- a/misc/dist/document_icons/resource.svg +++ b/misc/dist/document_icons/resource.svg @@ -1 +1 @@ -<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="m812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026m-415.32-32.623h302.11c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886h-700.219z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16;letter-spacing:0;word-spacing:0;font-family:Montserrat;fill:#333f67" x="183.282" y="878.644"><tspan font-size="112" x="183.282" y="878.644">RESOURCE</tspan></text><path d="m510.825 290.281a31.683 31.683 0 0 0 -12.994 3.28l-190.081 95.039a31.683 31.683 0 0 0 -17.51 28.339v190.08a31.683 31.683 0 0 0 17.51 28.338l190.08 95.04a31.683 31.683 0 0 0 28.338 0l190.08-95.04a31.683 31.683 0 0 0 17.51-28.338v-190.079a31.683 31.683 0 0 0 -17.51-28.34l-190.08-95.04a31.683 31.683 0 0 0 -15.345-3.279zm1.175 67.073 119.234 59.587-43.747 21.904-119.234-59.647 43.747-21.842zm-158.4 110.88 126.72 63.36v119.234l-126.72-63.36zm316.8 0v119.234l-126.72 63.36v-119.234z" fill="#478cbf" fill-rule="evenodd"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603" d="m812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026m-415.32-32.623h302.11c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886h-700.219z"/><text x="183.282" y="878.644" fill="#333f67" font-family="Montserrat" font-size="16" font-weight="800" letter-spacing="0" word-spacing="0"><tspan x="183.282" y="878.644" font-size="112">RESOURCE</tspan></text><path fill="#478cbf" fill-rule="evenodd" d="m510.825 290.281a31.683 31.683 0 0 0 -12.994 3.28l-190.081 95.039a31.683 31.683 0 0 0 -17.51 28.339v190.08a31.683 31.683 0 0 0 17.51 28.338l190.08 95.04a31.683 31.683 0 0 0 28.338 0l190.08-95.04a31.683 31.683 0 0 0 17.51-28.338v-190.079a31.683 31.683 0 0 0 -17.51-28.34l-190.08-95.04a31.683 31.683 0 0 0 -15.345-3.279zm1.175 67.073 119.234 59.587-43.747 21.904-119.234-59.647 43.747-21.842zm-158.4 110.88 126.72 63.36v119.234l-126.72-63.36zm316.8 0v119.234l-126.72 63.36v-119.234z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_extra_small.svg b/misc/dist/document_icons/resource_extra_small.svg index 6f83a37f60..a0326eb514 100644 --- a/misc/dist/document_icons/resource_extra_small.svg +++ b/misc/dist/document_icons/resource_extra_small.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="m7.976 4.51a.642.642 0 0 0 -.263.067l-3.849 1.923a.642.642 0 0 0 -.354.574v3.849a.642.642 0 0 0 .354.574l3.85 1.924a.642.642 0 0 0 .573 0l3.85-1.924a.642.642 0 0 0 .354-.574v-3.85a.642.642 0 0 0 -.355-.573l-3.849-1.924a.642.642 0 0 0 -.31-.066zm.024 1.358 2.415 1.207-.886.444-2.415-1.209zm-3.207 2.246 2.566 1.283v2.414l-2.566-1.283zm6.415 0v2.414l-2.566 1.283v-2.414z" fill="#478cbf" fill-rule="evenodd"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z"/><path fill="#478cbf" fill-rule="evenodd" d="m7.976 4.51a.642.642 0 0 0 -.263.067l-3.849 1.923a.642.642 0 0 0 -.354.574v3.849a.642.642 0 0 0 .354.574l3.85 1.924a.642.642 0 0 0 .573 0l3.85-1.924a.642.642 0 0 0 .354-.574v-3.85a.642.642 0 0 0 -.355-.573l-3.849-1.924a.642.642 0 0 0 -.31-.066zm.024 1.358 2.415 1.207-.886.444-2.415-1.209zm-3.207 2.246 2.566 1.283v2.414l-2.566-1.283zm6.415 0v2.414l-2.566 1.283v-2.414z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_small.svg b/misc/dist/document_icons/resource_small.svg index 0b085bb3c0..b5a7e3888f 100644 --- a/misc/dist/document_icons/resource_small.svg +++ b/misc/dist/document_icons/resource_small.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532m-12.979-1.019h9.441c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965h-21.882z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="m15.964 11.071a.99.99 0 0 0 -.406.103l-5.94 2.97a.99.99 0 0 0 -.547.885v5.94a.99.99 0 0 0 .547.886l5.94 2.97a.99.99 0 0 0 .885 0l5.94-2.97a.99.99 0 0 0 .547-.886v-5.94a.99.99 0 0 0 -.547-.885l-5.94-2.97a.99.99 0 0 0 -.48-.103zm.036 2.096 3.726 1.862-1.367.685-3.727-1.864zm-4.95 3.465 3.96 1.98v3.726l-3.96-1.98zm9.9 0v3.726l-3.96 1.98v-3.726z" fill="#478cbf" fill-rule="evenodd"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="m25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532m-12.979-1.019h9.441c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965h-21.882z"/><path fill="#478cbf" fill-rule="evenodd" d="m15.964 11.071a.99.99 0 0 0 -.406.103l-5.94 2.97a.99.99 0 0 0 -.547.885v5.94a.99.99 0 0 0 .547.886l5.94 2.97a.99.99 0 0 0 .885 0l5.94-2.97a.99.99 0 0 0 .547-.886v-5.94a.99.99 0 0 0 -.547-.885l-5.94-2.97a.99.99 0 0 0 -.48-.103zm.036 2.096 3.726 1.862-1.367.685-3.727-1.864zm-4.95 3.465 3.96 1.98v3.726l-3.96-1.98zm9.9 0v3.726l-3.96 1.98v-3.726z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene.svg b/misc/dist/document_icons/scene.svg index d3b1d952ba..8f66fb343a 100644 --- a/misc/dist/document_icons/scene.svg +++ b/misc/dist/document_icons/scene.svg @@ -1 +1 @@ -<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="m812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025m-415.32-32.625h302.11c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885h-700.219z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="315.088" y="878.644"><tspan font-size="112" x="315.088" y="878.644">SCENE</tspan></text><path d="m714.504 315.805-67.735 9.904 24.7 57.361 51.76-7.546zm-127.458 18.57-59.719 8.725 24.702 57.419 59.719-8.725zm-119.498 17.45-59.719 8.725 24.701 57.419 59.72-8.725zm-119.438 17.45-51.76 7.546 8.725 59.719 67.736-9.904zm-43.036 97.449v181.104c0 33.34 27.027 60.368 60.368 60.368h362.208v-241.472z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603" d="m812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025m-415.32-32.625h302.11c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885h-700.219z"/><text x="315.088" y="878.644" fill="#333f67" font-family="Montserrat" font-size="16" font-weight="800" letter-spacing="0" word-spacing="0"><tspan x="315.088" y="878.644" font-size="112">SCENE</tspan></text><path fill="#478cbf" d="m714.504 315.805-67.735 9.904 24.7 57.361 51.76-7.546zm-127.458 18.57-59.719 8.725 24.702 57.419 59.719-8.725zm-119.498 17.45-59.719 8.725 24.701 57.419 59.72-8.725zm-119.438 17.45-51.76 7.546 8.725 59.719 67.736-9.904zm-43.036 97.449v181.104c0 33.34 27.027 60.368 60.368 60.368h362.208v-241.472z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_extra_small.svg b/misc/dist/document_icons/scene_extra_small.svg index 990c54e321..0d80ad818d 100644 --- a/misc/dist/document_icons/scene_extra_small.svg +++ b/misc/dist/document_icons/scene_extra_small.svg @@ -1 +1 @@ -<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="m12.101 5.027-1.372.2.5 1.162 1.049-.153zm-2.581.376-1.21.177.5 1.162 1.21-.176zm-2.42.353-1.21.177.501 1.163 1.21-.177zm-2.419.354-1.048.152.177 1.21 1.372-.2zm-.871 1.973v3.667c0 .676.547 1.223 1.222 1.223h7.335v-4.89z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="m12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51h4.721c1.205-.032 1.977.591 2.788 1.326l1.932 1.716c.998.89 1.393 1.729 1.5 2.94v8.483h-10.94z"/><path fill="#478cbf" d="m12.101 5.027-1.372.2.5 1.162 1.049-.153zm-2.581.376-1.21.177.5 1.162 1.21-.176zm-2.42.353-1.21.177.501 1.163 1.21-.177zm-2.419.354-1.048.152.177 1.21 1.372-.2zm-.871 1.973v3.667c0 .676.547 1.223 1.222 1.223h7.335v-4.89z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_small.svg b/misc/dist/document_icons/scene_small.svg index a408250a50..d5c6eaaf73 100644 --- a/misc/dist/document_icons/scene_small.svg +++ b/misc/dist/document_icons/scene_small.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M22.329 11.869l-2.117.31.772 1.792 1.617-.236zm-3.983.58l-1.867.273.772 1.794 1.867-.273zm-3.735.545l-1.866.273.772 1.794 1.866-.272zm-3.732.546l-1.618.235.273 1.867 2.117-.31zm-1.345 3.045v5.66c0 1.041.845 1.886 1.887 1.886H22.74v-7.546z" fill="#478cbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z"/><path fill="#478cbf" d="M22.329 11.869l-2.117.31.772 1.792 1.617-.236zm-3.983.58l-1.867.273.772 1.794 1.867-.273zm-3.735.545l-1.866.273.772 1.794 1.866-.272zm-3.732.546l-1.618.235.273 1.867 2.117-.31zm-1.345 3.045v5.66c0 1.041.845 1.886 1.887 1.886H22.74v-7.546z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/shader.svg b/misc/dist/document_icons/shader.svg index 30515cde3d..c5bff05abb 100644 --- a/misc/dist/document_icons/shader.svg +++ b/misc/dist/document_icons/shader.svg @@ -1 +1 @@ -<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16px;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="249.582" y="878.644"><tspan font-size="112" x="249.582" y="878.644">SHADER</tspan></text><path d="M640.44 348.066c-10.54 0-21.102 4.097-29.145 12.276l-35.64 36.254-47.725 48.529h-.004l-47.676 48.53-33.98 34.546 13.744 13.98h89.002l47.675-48.529 47.723-48.527h.006l25.12-25.543c6.375-6.486 10.147-14.571 11.468-22.986h-.002c2.01-12.81-1.762-26.38-11.469-36.254-8.042-8.18-18.558-12.276-29.098-12.276zM460.013 542.184l44.502 45.257 44.5-45.257h-89.002zm-46.848 13.834c-9.932.124-18.509 4.228-24.668 11.236-5.21 5.927-8.55 14.024-9.668 23.459-.254 2.153-.52 4.295-.52 6.588 0 33.842-55.28 6.971-28.53 41.94h117.626c6.64-15.57 5.836-33.447-2.13-48.528h-.003c-2.48-4.695-5.392-9.213-9.289-13.176-13.348-13.578-26.713-20.143-38.48-21.326h-.002a38.536 38.536 0 0 0-4.336-.193zm-63.387 83.224c4.467 5.84 10.605 12.952 20.33 22.844 21.446 21.814 64.428 16.264 85.875-5.547 5.035-5.12 8.751-11.034 11.422-17.297H349.78z" style="fill:#478cbf;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603" d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z"/><text x="249.582" y="878.644" fill="#333f67" font-family="Montserrat" font-size="16" font-weight="800" letter-spacing="0" word-spacing="0"><tspan x="249.582" y="878.644" font-size="112">SHADER</tspan></text><path fill="#478cbf" d="M640.44 348.066c-10.54 0-21.102 4.097-29.145 12.276l-35.64 36.254-47.725 48.529h-.004l-47.676 48.53-33.98 34.546 13.744 13.98h89.002l47.675-48.529 47.723-48.527h.006l25.12-25.543c6.375-6.486 10.147-14.571 11.468-22.986h-.002c2.01-12.81-1.762-26.38-11.469-36.254-8.042-8.18-18.558-12.276-29.098-12.276zM460.013 542.184l44.502 45.257 44.5-45.257h-89.002zm-46.848 13.834c-9.932.124-18.509 4.228-24.668 11.236-5.21 5.927-8.55 14.024-9.668 23.459-.254 2.153-.52 4.295-.52 6.588 0 33.842-55.28 6.971-28.53 41.94h117.626c6.64-15.57 5.836-33.447-2.13-48.528h-.003c-2.48-4.695-5.392-9.213-9.289-13.176-13.348-13.578-26.713-20.143-38.48-21.326h-.002a38.536 38.536 0 0 0-4.336-.193zm-63.387 83.224c4.467 5.84 10.605 12.952 20.33 22.844 21.446 21.814 64.428 16.264 85.875-5.547 5.035-5.12 8.751-11.034 11.422-17.297H349.78z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/shader_extra_small.svg b/misc/dist/document_icons/shader_extra_small.svg index b9c9cd4811..1499e83005 100644 --- a/misc/dist/document_icons/shader_extra_small.svg +++ b/misc/dist/document_icons/shader_extra_small.svg @@ -1 +1 @@ -<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M10.77 5.465a.88.88 0 0 0-.627.264l-.77.78-1.03 1.048-1.027 1.047-.734.744.299.3h1.918l1.027-1.044 1.03-1.047.54-.551a.902.902 0 0 0 .249-.496.91.91 0 0 0-.249-.781.877.877 0 0 0-.626-.264zM8.799 9.648 6.88 9.65l.959.975.959-.977zm-2.975.301a.715.715 0 0 0-.486.24.922.922 0 0 0-.21.506h.003c-.006.046-.014.093-.014.143 0 .73-1.19.15-.613.904.096.126.227.28.437.492.462.47 1.39.351 1.852-.119a1.21 1.21 0 0 0 .246-.373 1.22 1.22 0 0 0-.047-1.047 1.19 1.19 0 0 0-.199-.283c-.288-.293-.576-.436-.83-.46a.715.715 0 0 0-.139-.003z" style="fill:#478cbf;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z"/><path fill="#478cbf" d="M10.77 5.465a.88.88 0 0 0-.627.264l-.77.78-1.03 1.048-1.027 1.047-.734.744.299.3h1.918l1.027-1.044 1.03-1.047.54-.551a.902.902 0 0 0 .249-.496.91.91 0 0 0-.249-.781.877.877 0 0 0-.626-.264zM8.799 9.648 6.88 9.65l.959.975.959-.977zm-2.975.301a.715.715 0 0 0-.486.24.922.922 0 0 0-.21.506h.003c-.006.046-.014.093-.014.143 0 .73-1.19.15-.613.904.096.126.227.28.437.492.462.47 1.39.351 1.852-.119a1.21 1.21 0 0 0 .246-.373 1.22 1.22 0 0 0-.047-1.047 1.19 1.19 0 0 0-.199-.283c-.288-.293-.576-.436-.83-.46a.715.715 0 0 0-.139-.003z"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/shader_small.svg b/misc/dist/document_icons/shader_small.svg index e20bca9fdf..5290c40533 100644 --- a/misc/dist/document_icons/shader_small.svg +++ b/misc/dist/document_icons/shader_small.svg @@ -1 +1 @@ -<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M21.295 11.242c-.434 0-.871.17-1.201.506l-1.471 1.494-1.965 2h-.002l-1.963 2-1.4 1.426.566.574 1.834 1.867 1.834-1.867 1.963-2 1.967-2 1.037-1.05a1.73 1.73 0 0 0 .473-.95 1.74 1.74 0 0 0-.475-1.494 1.676 1.676 0 0 0-1.197-.506zm-9.453 8.572a1.367 1.367 0 0 0-.932.463c-.215.244-.35.577-.396.965-.01.09-.024.179-.024.274 0 1.395-2.277.285-1.174 1.726.184.241.436.536.836.944.884.899 2.657.668 3.541-.23.207-.21.36-.455.47-.714a2.33 2.33 0 0 0-.089-2 2.273 2.273 0 0 0-.383-.543c-.55-.56-1.099-.829-1.584-.877a1.367 1.367 0 0 0-.265-.008z" style="fill:#478cbf;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z"/><path fill="#478cbf" d="M21.295 11.242c-.434 0-.871.17-1.201.506l-1.471 1.494-1.965 2h-.002l-1.963 2-1.4 1.426.566.574 1.834 1.867 1.834-1.867 1.963-2 1.967-2 1.037-1.05a1.73 1.73 0 0 0 .473-.95 1.74 1.74 0 0 0-.475-1.494 1.676 1.676 0 0 0-1.197-.506zm-9.453 8.572a1.367 1.367 0 0 0-.932.463c-.215.244-.35.577-.396.965-.01.09-.024.179-.024.274 0 1.395-2.277.285-1.174 1.726.184.241.436.536.836.944.884.899 2.657.668 3.541-.23.207-.21.36-.455.47-.714a2.33 2.33 0 0 0-.089-2 2.273 2.273 0 0 0-.383-.543c-.55-.56-1.099-.829-1.584-.877a1.367 1.367 0 0 0-.265-.008z"/></svg>
\ No newline at end of file diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html index 5959b7b664..3a22055546 100644 --- a/misc/dist/html/editor.html +++ b/misc/dist/html/editor.html @@ -227,7 +227,6 @@ a:active { line-height: 1.3; visibility: visible; padding: 4px 6px; - visibility: visible; } </style> </head> diff --git a/misc/dist/html/logo.svg b/misc/dist/html/logo.svg index afca8a36da..e0312eb0ad 100644 --- a/misc/dist/html/logo.svg +++ b/misc/dist/html/logo.svg @@ -1,219 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - id="svg2" - version="1.1" - inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" - xml:space="preserve" - width="1024" - height="414" - viewBox="0 0 959.99998 388.125" - sodipodi:docname="logo.svg" - inkscape:export-filename="/home/akien/Projects/godot/godot.git/logo.png" - inkscape:export-xdpi="48" - inkscape:export-ydpi="48"><metadata - id="metadata8"><rdf:RDF><cc:Work - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs - id="defs6"><clipPath - clipPathUnits="userSpaceOnUse" - id="clipPath16"><path - d="M 0,595.276 H 841.89 V 0 H 0 Z" - id="path18" - inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1916" - inkscape:window-height="1025" - id="namedview4" - showgrid="false" - inkscape:zoom="1.2041016" - inkscape:cx="512" - inkscape:cy="207" - inkscape:window-x="1360" - inkscape:window-y="53" - inkscape:window-maximized="1" - inkscape:current-layer="g14" - fit-margin-top="48" - fit-margin-left="48" - fit-margin-right="48" - fit-margin-bottom="48" - inkscape:document-rotation="0" /><g - id="g10" - inkscape:groupmode="layer" - inkscape:label="godot_engine_logo_2017_curves-01" - transform="matrix(1.25,0,0,-1.25,-94.249997,597.49874)"><g - id="g12"><g - id="g14" - clip-path="url(#clipPath16)"><g - id="g20" - transform="matrix(1.1310535,0,0,1.1310535,531.44953,355.31567)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c -3.611,0 -6.636,-1.659 -9.09,-4.967 -2.441,-3.311 -3.668,-7.958 -3.668,-13.938 0,-5.993 1.166,-10.581 3.503,-13.778 2.333,-3.207 5.398,-4.804 9.2,-4.804 3.8,0 6.887,1.617 9.258,4.862 2.371,3.233 3.559,7.861 3.559,13.886 0,6.02 -1.227,10.654 -3.673,13.89 C 6.646,-1.617 3.616,0 0,0 m -0.055,-59.493 c -10.573,0 -19.195,3.46 -25.859,10.379 -6.655,6.925 -9.984,17.03 -9.984,30.314 0,13.292 3.367,23.356 10.101,30.209 6.736,6.844 15.431,10.269 26.082,10.269 10.649,0 19.251,-3.363 25.794,-10.109 6.555,-6.733 9.827,-16.94 9.827,-30.591 0,-13.661 -3.348,-23.822 -10.05,-30.49 -6.702,-6.654 -15.333,-9.981 -25.911,-9.981" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path22" - inkscape:connector-curvature="0" /></g><g - id="g24" - transform="matrix(1.1310535,0,0,1.1310535,607.8515,354.43097)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 v -33.768 c 0,-1.577 0.116,-2.571 0.342,-2.988 0.224,-0.415 0.903,-0.623 2.029,-0.623 4.144,0 7.283,1.548 9.429,4.634 2.151,3.083 3.215,8.216 3.215,15.405 0,7.192 -1.113,11.878 -3.325,14.055 C 9.467,-1.102 5.946,0 1.129,0 Z m -21.675,-52.392 v 67.735 c 0,1.883 0.468,3.369 1.413,4.471 0.939,1.085 2.161,1.636 3.671,1.636 H 2.263 c 11.965,0 21.053,-3.018 27.257,-9.04 6.215,-6.02 9.322,-15.499 9.322,-28.447 0,-27.7 -11.821,-41.547 -35.456,-41.547 h -19.302 c -3.836,0 -5.759,1.727 -5.759,5.192" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path26" - inkscape:connector-curvature="0" /></g><g - id="g28" - transform="matrix(1.1310535,0,0,1.1310535,700.81066,355.31567)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c -3.612,0 -6.645,-1.659 -9.095,-4.967 -2.44,-3.311 -3.662,-7.958 -3.662,-13.938 0,-5.993 1.169,-10.581 3.499,-13.778 2.33,-3.207 5.398,-4.804 9.2,-4.804 3.801,0 6.89,1.617 9.258,4.862 2.372,3.233 3.56,7.861 3.56,13.886 0,6.02 -1.225,10.654 -3.671,13.89 C 6.642,-1.617 3.616,0 0,0 m -0.058,-59.493 c -10.577,0 -19.193,3.46 -25.851,10.379 -6.663,6.925 -9.993,17.03 -9.993,30.314 0,13.292 3.367,23.356 10.1,30.209 6.741,6.844 15.431,10.269 26.086,10.269 10.651,0 19.246,-3.363 25.797,-10.109 6.55,-6.733 9.822,-16.94 9.822,-30.591 0,-13.661 -3.349,-23.822 -10.05,-30.49 -6.699,-6.654 -15.338,-9.981 -25.911,-9.981" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path30" - inkscape:connector-curvature="0" /></g><g - id="g32" - transform="matrix(1.1310535,0,0,1.1310535,789.01132,291.33514)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c 0,-1.496 -3.721,-2.255 -11.176,-2.255 -7.448,0 -11.18,0.759 -11.18,2.255 v 56.681 h -13.545 c -1.281,0 -2.185,1.727 -2.71,5.198 -0.226,1.652 -0.334,3.343 -0.334,5.077 0,1.724 0.108,3.422 0.334,5.077 0.525,3.462 1.429,5.202 2.71,5.202 h 49.112 c 1.279,0 2.179,-1.74 2.712,-5.202 0.221,-1.655 0.335,-3.353 0.335,-5.077 0,-1.734 -0.114,-3.425 -0.335,-5.077 C 15.39,58.408 14.49,56.681 13.211,56.681 H 0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path34" - inkscape:connector-curvature="0" /></g><g - id="g36" - transform="matrix(1.1310535,0,0,1.1310535,468.26549,336.71278)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c -6.078,0.094 -13.034,-1.173 -13.034,-1.173 v -11.863 h 6.995 l -0.078,-5.288 c 0,-1.959 -1.942,-2.943 -5.815,-2.943 -3.878,0 -7.303,1.642 -10.274,4.917 -2.978,3.279 -4.459,8.072 -4.459,14.388 0,6.329 1.447,10.995 4.345,14.006 2.892,3.008 6.683,4.517 11.346,4.517 1.959,0 3.987,-0.316 6.096,-0.961 2.11,-0.639 3.519,-1.238 4.238,-1.799 0.713,-0.577 1.391,-0.85 2.032,-0.85 0.638,0 1.671,0.746 3.1,2.255 1.431,1.505 2.713,3.786 3.844,6.827 1.126,3.057 1.69,5.4 1.69,7.062 0,1.649 -0.036,2.786 -0.109,3.386 -1.581,1.73 -4.499,3.102 -8.755,4.122 -4.248,1.017 -9.011,1.522 -14.28,1.522 -11.594,0 -20.66,-3.65 -27.207,-10.95 -6.552,-7.303 -9.822,-16.783 -9.822,-28.452 0,-13.701 3.347,-24.087 10.041,-31.162 6.706,-7.074 15.51,-10.607 26.425,-10.607 5.87,0 11.08,0.505 15.632,1.522 4.557,1.013 7.586,2.053 9.093,3.105 l 0.452,35.33 C 11.496,-1.036 6.078,-0.104 0,0" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path38" - inkscape:connector-curvature="0" /></g><g - id="g40" - transform="matrix(1.1310535,0,0,1.1310535,441.34721,235.75121)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c -0.624,-1.28 -1.771,-2.454 -3.449,-3.516 -1.676,-1.069 -3.805,-1.6 -6.391,-1.6 -3.412,0 -6.156,1.075 -8.24,3.249 -2.076,2.157 -3.116,5.266 -3.116,9.323 v 10.116 c 0,3.969 0.98,7.013 2.946,9.138 1.962,2.108 4.59,3.177 7.872,3.177 3.208,0 5.695,-0.844 7.455,-2.513 1.755,-1.675 2.677,-4.015 2.757,-7.003 L -0.21,20.238 h -2.619 c -0.094,2.29 -0.759,4.057 -2.01,5.305 -1.244,1.238 -3.095,1.864 -5.539,1.864 -2.473,0 -4.432,-0.837 -5.866,-2.516 -1.43,-1.675 -2.143,-4.103 -2.143,-7.293 V 7.424 c 0,-3.308 0.771,-5.83 2.311,-7.567 1.54,-1.724 3.616,-2.588 6.236,-2.588 1.913,0 3.451,0.339 4.602,1.033 1.155,0.684 1.956,1.519 2.409,2.51 v 8.861 h -7.06 v 2.463 H 0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path42" - inkscape:connector-curvature="0" /></g><g - id="g44" - transform="matrix(1.1310535,0,0,1.1310535,456.01527,232.82495)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c 1.553,0 2.936,0.44 4.144,1.336 1.21,0.9 2.058,2.037 2.561,3.422 v 5.468 H 2.213 c -1.91,0 -3.44,-0.541 -4.585,-1.623 C -3.52,7.528 -4.088,6.185 -4.088,4.588 -4.088,3.239 -3.733,2.131 -3.014,1.277 -2.296,0.42 -1.292,0 0,0 M 7.124,-2.04 C 6.984,-1.164 6.875,-0.453 6.806,0.104 6.739,0.671 6.705,1.235 6.705,1.808 5.938,0.554 4.948,-0.486 3.725,-1.301 2.504,-2.122 1.146,-2.529 -0.35,-2.529 c -2.092,0 -3.701,0.648 -4.84,1.946 -1.132,1.303 -1.704,3.059 -1.704,5.276 0,2.343 0.823,4.223 2.473,5.618 1.649,1.395 3.89,2.092 6.709,2.092 h 4.417 v 3.106 c 0,1.786 -0.456,3.193 -1.351,4.21 -0.914,1.004 -2.17,1.512 -3.791,1.512 -1.508,0 -2.752,-0.479 -3.728,-1.45 -0.973,-0.965 -1.456,-2.144 -1.456,-3.549 l -2.623,0.023 -0.046,0.137 c -0.074,1.906 0.647,3.591 2.168,5.084 1.515,1.489 3.459,2.229 5.825,2.229 2.338,0 4.22,-0.711 5.657,-2.128 1.429,-1.431 2.146,-3.471 2.146,-6.124 V 3.057 c 0,-0.903 0.042,-1.78 0.121,-2.617 0.081,-0.848 0.212,-1.665 0.417,-2.48 z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path46" - inkscape:connector-curvature="0" /></g><g - id="g48" - transform="matrix(1.1310535,0,0,1.1310535,476.7303,259.10521)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 0.24,-3.923 c 0.664,1.404 1.554,2.486 2.657,3.255 1.107,0.759 2.41,1.138 3.906,1.138 1.527,0 2.814,-0.444 3.852,-1.343 1.039,-0.896 1.805,-2.252 2.292,-4.074 0.623,1.682 1.505,3.011 2.65,3.973 1.145,0.964 2.534,1.444 4.143,1.444 2.217,0 3.937,-0.897 5.156,-2.692 1.224,-1.799 1.834,-4.559 1.834,-8.288 v -14.765 h -2.823 v 14.814 c 0,3.1 -0.429,5.283 -1.263,6.538 -0.839,1.257 -2.042,1.89 -3.598,1.89 -1.637,0 -2.915,-0.691 -3.834,-2.096 -0.914,-1.405 -1.478,-3.161 -1.683,-5.282 v -0.655 -15.209 H 10.72 v 14.798 c 0,3.027 -0.424,5.194 -1.292,6.488 -0.864,1.294 -2.066,1.936 -3.609,1.936 -1.475,0 -2.668,-0.45 -3.562,-1.342 -0.9,-0.897 -1.54,-2.125 -1.928,-3.683 V -25.275 H -2.477 V 0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path50" - inkscape:connector-curvature="0" /></g><g - id="g52" - transform="matrix(1.1310535,0,0,1.1310535,522.82277,256.83868)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c -1.758,0 -3.202,-0.802 -4.334,-2.402 -1.133,-1.606 -1.718,-3.585 -1.765,-5.944 h 11.66 v 1.082 c 0,2.086 -0.489,3.823 -1.469,5.201 C 3.106,-0.684 1.745,0 0,0 m 0.397,-23.76 c -2.725,0 -4.954,1.026 -6.685,3.073 -1.726,2.043 -2.591,4.657 -2.591,7.841 v 4.197 c 0,3.19 0.867,5.85 2.602,7.965 1.739,2.105 3.828,3.158 6.277,3.158 2.648,0 4.699,-0.939 6.164,-2.823 1.468,-1.887 2.201,-4.422 2.201,-7.603 v -2.773 H -6.099 v -2.102 c 0,-2.447 0.586,-4.484 1.752,-6.11 1.168,-1.63 2.755,-2.438 4.744,-2.438 1.382,0 2.585,0.244 3.588,0.724 1.003,0.491 1.863,1.179 2.578,2.082 l 1.149,-1.988 C 6.949,-21.525 5.96,-22.307 4.753,-22.887 3.549,-23.464 2.094,-23.76 0.397,-23.76" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path54" - inkscape:connector-curvature="0" /></g><g - id="g56" - transform="matrix(1.1310535,0,0,1.1310535,558.0805,256.83868)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="M 0,0 C -1.763,0 -3.21,-0.802 -4.341,-2.402 -5.467,-4.008 -6.053,-5.987 -6.104,-8.346 H 5.559 v 1.082 c 0,2.086 -0.488,3.823 -1.474,5.201 C 3.104,-0.684 1.744,0 0,0 m 0.394,-23.76 c -2.726,0 -4.951,1.026 -6.679,3.073 -1.733,2.043 -2.6,4.657 -2.6,7.841 v 4.197 c 0,3.19 0.871,5.85 2.602,7.965 1.744,2.105 3.834,3.158 6.283,3.158 2.643,0 4.703,-0.939 6.164,-2.823 1.463,-1.887 2.197,-4.422 2.197,-7.603 v -2.773 H -6.104 v -2.102 c 0,-2.447 0.587,-4.484 1.76,-6.11 1.162,-1.63 2.742,-2.438 4.738,-2.438 1.387,0 2.585,0.244 3.585,0.724 1.007,0.491 1.866,1.179 2.589,2.082 l 1.141,-1.988 c -0.764,-0.968 -1.75,-1.75 -2.959,-2.33 -1.204,-0.577 -2.658,-0.873 -4.356,-0.873" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path58" - inkscape:connector-curvature="0" /></g><g - id="g60" - transform="matrix(1.1310535,0,0,1.1310535,575.91679,259.10521)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 0.23,-4.178 c 0.674,1.483 1.564,2.634 2.682,3.435 1.108,0.805 2.413,1.213 3.914,1.213 2.258,0 3.988,-0.835 5.189,-2.513 1.214,-1.675 1.815,-4.279 1.815,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.423,4.905 -1.264,6.075 -0.836,1.17 -2.065,1.753 -3.665,1.753 -1.435,0 -2.638,-0.466 -3.603,-1.414 C 1.504,-4.406 0.782,-5.657 0.301,-7.234 V -25.275 H -2.504 V 0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path62" - inkscape:connector-curvature="0" /></g><g - id="g64" - transform="matrix(1.1310535,0,0,1.1310535,600.8685,242.30884)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 c 0,-2.565 0.486,-4.605 1.472,-6.123 0.974,-1.532 2.457,-2.288 4.436,-2.288 1.356,0 2.498,0.361 3.435,1.101 0.934,0.74 1.672,1.77 2.218,3.077 v 12.52 c -0.525,1.346 -1.246,2.434 -2.157,3.272 -0.91,0.824 -2.062,1.238 -3.448,1.238 -1.975,0 -3.468,-0.86 -4.46,-2.587 C 0.497,8.48 0,6.224 0,3.454 Z m -2.833,3.454 c 0,3.582 0.723,6.459 2.177,8.627 1.442,2.157 3.448,3.239 6.004,3.239 1.419,0 2.664,-0.346 3.728,-1.04 1.066,-0.681 1.947,-1.678 2.654,-2.946 l 0.274,3.516 h 2.381 v -25.298 c 0,-3.239 -0.751,-5.749 -2.26,-7.525 -1.511,-1.769 -3.657,-2.665 -6.428,-2.665 -0.996,0 -2.067,0.156 -3.212,0.459 -1.147,0.303 -2.162,0.701 -3.052,1.2 l 0.776,2.463 c 0.759,-0.492 1.608,-0.873 2.548,-1.141 0.932,-0.277 1.895,-0.41 2.894,-0.41 2.009,0 3.498,0.645 4.46,1.932 0.966,1.304 1.45,3.19 1.45,5.687 v 3.057 c -0.717,-1.138 -1.597,-2.011 -2.64,-2.614 -1.039,-0.606 -2.253,-0.909 -3.622,-0.909 -2.539,0 -4.53,0.994 -5.968,2.982 C -2.11,-5.948 -2.833,-3.301 -2.833,0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path66" - inkscape:connector-curvature="0" /></g><path - d="m 627.82321,230.5176 h -3.20089 v 28.58738 h 3.20089 z m 0,36.72644 h -3.20089 v 4.50385 h 3.20089 z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994" - id="path68" - inkscape:connector-curvature="0" /><g - id="g70" - transform="matrix(1.1310535,0,0,1.1310535,638.15379,259.10521)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="m 0,0 0.23,-4.178 c 0.676,1.483 1.562,2.634 2.678,3.435 1.115,0.805 2.422,1.213 3.916,1.213 2.258,0 3.995,-0.835 5.199,-2.513 1.211,-1.675 1.807,-4.279 1.807,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.422,4.905 -1.261,6.075 -0.843,1.17 -2.063,1.753 -3.668,1.753 -1.434,0 -2.635,-0.466 -3.599,-1.414 C 1.51,-4.406 0.785,-5.657 0.306,-7.234 V -25.275 H -2.503 V 0 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path72" - inkscape:connector-curvature="0" /></g><g - id="g74" - transform="matrix(1.1310535,0,0,1.1310535,669.70883,256.83868)" - style="stroke-width:0.88413143;fill:#e0e0e0;fill-opacity:1"><path - d="M 0,0 C -1.763,0 -3.208,-0.802 -4.334,-2.402 -5.463,-4.008 -6.052,-5.987 -6.102,-8.346 H 5.56 v 1.082 c 0,2.086 -0.486,3.823 -1.47,5.201 C 3.109,-0.684 1.747,0 0,0 m 0.401,-23.76 c -2.733,0 -4.958,1.026 -6.681,3.073 -1.73,2.043 -2.595,4.657 -2.595,7.841 v 4.197 c 0,3.19 0.865,5.85 2.6,7.965 1.739,2.105 3.831,3.158 6.275,3.158 2.646,0 4.706,-0.939 6.172,-2.823 1.462,-1.887 2.195,-4.422 2.195,-7.603 v -2.773 H -6.102 v -2.102 c 0,-2.447 0.59,-4.484 1.757,-6.11 1.166,-1.63 2.748,-2.438 4.746,-2.438 1.382,0 2.579,0.244 3.578,0.724 1.012,0.491 1.869,1.179 2.591,2.082 l 1.147,-1.988 c -0.769,-0.968 -1.755,-1.75 -2.962,-2.33 -1.203,-0.577 -2.658,-0.873 -4.354,-0.873" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path76" - inkscape:connector-curvature="0" /></g><g - id="g78" - transform="matrix(1.1310535,0,0,1.1310535,348.13109,279.2668)" - style="stroke-width:0.88413143"><path - d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path80" - inkscape:connector-curvature="0" /></g><g - id="g82" - transform="matrix(1.1310535,0,0,1.1310535,126.80608,346.04533)" - style="stroke-width:0.88413143"><path - d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 c 5.09692,6.4164715 9.92323,13.494208 13.621,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.1783421,12.475308 -4.4130298,5.4661124 0,0 Z" - style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.884131" - id="path84" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccccsssscccccccccccccccccccsccccccccccc" /></g><g - id="g86" - transform="matrix(1.1310535,0,0,1.1310535,311.40329,266.88437)" - style="stroke-width:0.88413143"><path - d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z" - style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path88" - inkscape:connector-curvature="0" /></g><g - id="g90" - transform="matrix(1.1310535,0,0,1.1310535,204.11393,318.93771)" - style="stroke-width:0.88413143"><path - d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path92" - inkscape:connector-curvature="0" /></g><g - id="g94" - transform="matrix(1.1310535,0,0,1.1310535,198.17748,317.47435)" - style="stroke-width:0.88413143"><path - d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0" - style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path96" - inkscape:connector-curvature="0" /></g><g - id="g98" - transform="matrix(1.1310535,0,0,1.1310535,237.47503,292.01909)" - style="stroke-width:0.88413143"><path - d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path100" - inkscape:connector-curvature="0" /></g><g - id="g102" - transform="matrix(1.1310535,0,0,1.1310535,270.84021,318.93771)" - style="stroke-width:0.88413143"><path - d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0" - style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path104" - inkscape:connector-curvature="0" /></g><g - id="g106" - transform="matrix(1.1310535,0,0,1.1310535,276.77813,317.47435)" - style="stroke-width:0.88413143"><path - d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0" - style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.88413143" - id="path108" - inkscape:connector-curvature="0" /></g></g></g></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" width="1024" height="414" viewBox="0 0 960 388.125"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><path d="M 0,595.276 H 841.89 V 0 H 0 Z"/></clipPath></defs><g clip-path="url(#a)" transform="matrix(1.25 0 0 -1.25 -94.25 597.499)"><path fill="#e0e0e0" d="m 0,0 c -3.611,0 -6.636,-1.659 -9.09,-4.967 -2.441,-3.311 -3.668,-7.958 -3.668,-13.938 0,-5.993 1.166,-10.581 3.503,-13.778 2.333,-3.207 5.398,-4.804 9.2,-4.804 3.8,0 6.887,1.617 9.258,4.862 2.371,3.233 3.559,7.861 3.559,13.886 0,6.02 -1.227,10.654 -3.673,13.89 C 6.646,-1.617 3.616,0 0,0 m -0.055,-59.493 c -10.573,0 -19.195,3.46 -25.859,10.379 -6.655,6.925 -9.984,17.03 -9.984,30.314 0,13.292 3.367,23.356 10.101,30.209 6.736,6.844 15.431,10.269 26.082,10.269 10.649,0 19.251,-3.363 25.794,-10.109 6.555,-6.733 9.827,-16.94 9.827,-30.591 0,-13.661 -3.348,-23.822 -10.05,-30.49 -6.702,-6.654 -15.333,-9.981 -25.911,-9.981" transform="translate(531.45 355.316)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 v -33.768 c 0,-1.577 0.116,-2.571 0.342,-2.988 0.224,-0.415 0.903,-0.623 2.029,-0.623 4.144,0 7.283,1.548 9.429,4.634 2.151,3.083 3.215,8.216 3.215,15.405 0,7.192 -1.113,11.878 -3.325,14.055 C 9.467,-1.102 5.946,0 1.129,0 Z m -21.675,-52.392 v 67.735 c 0,1.883 0.468,3.369 1.413,4.471 0.939,1.085 2.161,1.636 3.671,1.636 H 2.263 c 11.965,0 21.053,-3.018 27.257,-9.04 6.215,-6.02 9.322,-15.499 9.322,-28.447 0,-27.7 -11.821,-41.547 -35.456,-41.547 h -19.302 c -3.836,0 -5.759,1.727 -5.759,5.192" transform="translate(607.851 354.431)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c -3.612,0 -6.645,-1.659 -9.095,-4.967 -2.44,-3.311 -3.662,-7.958 -3.662,-13.938 0,-5.993 1.169,-10.581 3.499,-13.778 2.33,-3.207 5.398,-4.804 9.2,-4.804 3.801,0 6.89,1.617 9.258,4.862 2.372,3.233 3.56,7.861 3.56,13.886 0,6.02 -1.225,10.654 -3.671,13.89 C 6.642,-1.617 3.616,0 0,0 m -0.058,-59.493 c -10.577,0 -19.193,3.46 -25.851,10.379 -6.663,6.925 -9.993,17.03 -9.993,30.314 0,13.292 3.367,23.356 10.1,30.209 6.741,6.844 15.431,10.269 26.086,10.269 10.651,0 19.246,-3.363 25.797,-10.109 6.55,-6.733 9.822,-16.94 9.822,-30.591 0,-13.661 -3.349,-23.822 -10.05,-30.49 -6.699,-6.654 -15.338,-9.981 -25.911,-9.981" transform="translate(700.81 355.316)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c 0,-1.496 -3.721,-2.255 -11.176,-2.255 -7.448,0 -11.18,0.759 -11.18,2.255 v 56.681 h -13.545 c -1.281,0 -2.185,1.727 -2.71,5.198 -0.226,1.652 -0.334,3.343 -0.334,5.077 0,1.724 0.108,3.422 0.334,5.077 0.525,3.462 1.429,5.202 2.71,5.202 h 49.112 c 1.279,0 2.179,-1.74 2.712,-5.202 0.221,-1.655 0.335,-3.353 0.335,-5.077 0,-1.734 -0.114,-3.425 -0.335,-5.077 C 15.39,58.408 14.49,56.681 13.211,56.681 H 0 Z" transform="translate(789.011 291.335)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c -6.078,0.094 -13.034,-1.173 -13.034,-1.173 v -11.863 h 6.995 l -0.078,-5.288 c 0,-1.959 -1.942,-2.943 -5.815,-2.943 -3.878,0 -7.303,1.642 -10.274,4.917 -2.978,3.279 -4.459,8.072 -4.459,14.388 0,6.329 1.447,10.995 4.345,14.006 2.892,3.008 6.683,4.517 11.346,4.517 1.959,0 3.987,-0.316 6.096,-0.961 2.11,-0.639 3.519,-1.238 4.238,-1.799 0.713,-0.577 1.391,-0.85 2.032,-0.85 0.638,0 1.671,0.746 3.1,2.255 1.431,1.505 2.713,3.786 3.844,6.827 1.126,3.057 1.69,5.4 1.69,7.062 0,1.649 -0.036,2.786 -0.109,3.386 -1.581,1.73 -4.499,3.102 -8.755,4.122 -4.248,1.017 -9.011,1.522 -14.28,1.522 -11.594,0 -20.66,-3.65 -27.207,-10.95 -6.552,-7.303 -9.822,-16.783 -9.822,-28.452 0,-13.701 3.347,-24.087 10.041,-31.162 6.706,-7.074 15.51,-10.607 26.425,-10.607 5.87,0 11.08,0.505 15.632,1.522 4.557,1.013 7.586,2.053 9.093,3.105 l 0.452,35.33 C 11.496,-1.036 6.078,-0.104 0,0" transform="translate(468.265 336.713)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c -0.624,-1.28 -1.771,-2.454 -3.449,-3.516 -1.676,-1.069 -3.805,-1.6 -6.391,-1.6 -3.412,0 -6.156,1.075 -8.24,3.249 -2.076,2.157 -3.116,5.266 -3.116,9.323 v 10.116 c 0,3.969 0.98,7.013 2.946,9.138 1.962,2.108 4.59,3.177 7.872,3.177 3.208,0 5.695,-0.844 7.455,-2.513 1.755,-1.675 2.677,-4.015 2.757,-7.003 L -0.21,20.238 h -2.619 c -0.094,2.29 -0.759,4.057 -2.01,5.305 -1.244,1.238 -3.095,1.864 -5.539,1.864 -2.473,0 -4.432,-0.837 -5.866,-2.516 -1.43,-1.675 -2.143,-4.103 -2.143,-7.293 V 7.424 c 0,-3.308 0.771,-5.83 2.311,-7.567 1.54,-1.724 3.616,-2.588 6.236,-2.588 1.913,0 3.451,0.339 4.602,1.033 1.155,0.684 1.956,1.519 2.409,2.51 v 8.861 h -7.06 v 2.463 H 0 Z" transform="translate(441.347 235.751)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c 1.553,0 2.936,0.44 4.144,1.336 1.21,0.9 2.058,2.037 2.561,3.422 v 5.468 H 2.213 c -1.91,0 -3.44,-0.541 -4.585,-1.623 C -3.52,7.528 -4.088,6.185 -4.088,4.588 -4.088,3.239 -3.733,2.131 -3.014,1.277 -2.296,0.42 -1.292,0 0,0 M 7.124,-2.04 C 6.984,-1.164 6.875,-0.453 6.806,0.104 6.739,0.671 6.705,1.235 6.705,1.808 5.938,0.554 4.948,-0.486 3.725,-1.301 2.504,-2.122 1.146,-2.529 -0.35,-2.529 c -2.092,0 -3.701,0.648 -4.84,1.946 -1.132,1.303 -1.704,3.059 -1.704,5.276 0,2.343 0.823,4.223 2.473,5.618 1.649,1.395 3.89,2.092 6.709,2.092 h 4.417 v 3.106 c 0,1.786 -0.456,3.193 -1.351,4.21 -0.914,1.004 -2.17,1.512 -3.791,1.512 -1.508,0 -2.752,-0.479 -3.728,-1.45 -0.973,-0.965 -1.456,-2.144 -1.456,-3.549 l -2.623,0.023 -0.046,0.137 c -0.074,1.906 0.647,3.591 2.168,5.084 1.515,1.489 3.459,2.229 5.825,2.229 2.338,0 4.22,-0.711 5.657,-2.128 1.429,-1.431 2.146,-3.471 2.146,-6.124 V 3.057 c 0,-0.903 0.042,-1.78 0.121,-2.617 0.081,-0.848 0.212,-1.665 0.417,-2.48 z" transform="translate(456.015 232.825)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 0.24,-3.923 c 0.664,1.404 1.554,2.486 2.657,3.255 1.107,0.759 2.41,1.138 3.906,1.138 1.527,0 2.814,-0.444 3.852,-1.343 1.039,-0.896 1.805,-2.252 2.292,-4.074 0.623,1.682 1.505,3.011 2.65,3.973 1.145,0.964 2.534,1.444 4.143,1.444 2.217,0 3.937,-0.897 5.156,-2.692 1.224,-1.799 1.834,-4.559 1.834,-8.288 v -14.765 h -2.823 v 14.814 c 0,3.1 -0.429,5.283 -1.263,6.538 -0.839,1.257 -2.042,1.89 -3.598,1.89 -1.637,0 -2.915,-0.691 -3.834,-2.096 -0.914,-1.405 -1.478,-3.161 -1.683,-5.282 v -0.655 -15.209 H 10.72 v 14.798 c 0,3.027 -0.424,5.194 -1.292,6.488 -0.864,1.294 -2.066,1.936 -3.609,1.936 -1.475,0 -2.668,-0.45 -3.562,-1.342 -0.9,-0.897 -1.54,-2.125 -1.928,-3.683 V -25.275 H -2.477 V 0 Z" transform="translate(476.73 259.105)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c -1.758,0 -3.202,-0.802 -4.334,-2.402 -1.133,-1.606 -1.718,-3.585 -1.765,-5.944 h 11.66 v 1.082 c 0,2.086 -0.489,3.823 -1.469,5.201 C 3.106,-0.684 1.745,0 0,0 m 0.397,-23.76 c -2.725,0 -4.954,1.026 -6.685,3.073 -1.726,2.043 -2.591,4.657 -2.591,7.841 v 4.197 c 0,3.19 0.867,5.85 2.602,7.965 1.739,2.105 3.828,3.158 6.277,3.158 2.648,0 4.699,-0.939 6.164,-2.823 1.468,-1.887 2.201,-4.422 2.201,-7.603 v -2.773 H -6.099 v -2.102 c 0,-2.447 0.586,-4.484 1.752,-6.11 1.168,-1.63 2.755,-2.438 4.744,-2.438 1.382,0 2.585,0.244 3.588,0.724 1.003,0.491 1.863,1.179 2.578,2.082 l 1.149,-1.988 C 6.949,-21.525 5.96,-22.307 4.753,-22.887 3.549,-23.464 2.094,-23.76 0.397,-23.76" transform="translate(522.823 256.839)scale(1.13105)"/><path fill="#e0e0e0" d="M 0,0 C -1.763,0 -3.21,-0.802 -4.341,-2.402 -5.467,-4.008 -6.053,-5.987 -6.104,-8.346 H 5.559 v 1.082 c 0,2.086 -0.488,3.823 -1.474,5.201 C 3.104,-0.684 1.744,0 0,0 m 0.394,-23.76 c -2.726,0 -4.951,1.026 -6.679,3.073 -1.733,2.043 -2.6,4.657 -2.6,7.841 v 4.197 c 0,3.19 0.871,5.85 2.602,7.965 1.744,2.105 3.834,3.158 6.283,3.158 2.643,0 4.703,-0.939 6.164,-2.823 1.463,-1.887 2.197,-4.422 2.197,-7.603 v -2.773 H -6.104 v -2.102 c 0,-2.447 0.587,-4.484 1.76,-6.11 1.162,-1.63 2.742,-2.438 4.738,-2.438 1.387,0 2.585,0.244 3.585,0.724 1.007,0.491 1.866,1.179 2.589,2.082 l 1.141,-1.988 c -0.764,-0.968 -1.75,-1.75 -2.959,-2.33 -1.204,-0.577 -2.658,-0.873 -4.356,-0.873" transform="translate(558.08 256.839)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 0.23,-4.178 c 0.674,1.483 1.564,2.634 2.682,3.435 1.108,0.805 2.413,1.213 3.914,1.213 2.258,0 3.988,-0.835 5.189,-2.513 1.214,-1.675 1.815,-4.279 1.815,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.423,4.905 -1.264,6.075 -0.836,1.17 -2.065,1.753 -3.665,1.753 -1.435,0 -2.638,-0.466 -3.603,-1.414 C 1.504,-4.406 0.782,-5.657 0.301,-7.234 V -25.275 H -2.504 V 0 Z" transform="translate(575.917 259.105)scale(1.13105)"/><path fill="#e0e0e0" d="m 0,0 c 0,-2.565 0.486,-4.605 1.472,-6.123 0.974,-1.532 2.457,-2.288 4.436,-2.288 1.356,0 2.498,0.361 3.435,1.101 0.934,0.74 1.672,1.77 2.218,3.077 v 12.52 c -0.525,1.346 -1.246,2.434 -2.157,3.272 -0.91,0.824 -2.062,1.238 -3.448,1.238 -1.975,0 -3.468,-0.86 -4.46,-2.587 C 0.497,8.48 0,6.224 0,3.454 Z m -2.833,3.454 c 0,3.582 0.723,6.459 2.177,8.627 1.442,2.157 3.448,3.239 6.004,3.239 1.419,0 2.664,-0.346 3.728,-1.04 1.066,-0.681 1.947,-1.678 2.654,-2.946 l 0.274,3.516 h 2.381 v -25.298 c 0,-3.239 -0.751,-5.749 -2.26,-7.525 -1.511,-1.769 -3.657,-2.665 -6.428,-2.665 -0.996,0 -2.067,0.156 -3.212,0.459 -1.147,0.303 -2.162,0.701 -3.052,1.2 l 0.776,2.463 c 0.759,-0.492 1.608,-0.873 2.548,-1.141 0.932,-0.277 1.895,-0.41 2.894,-0.41 2.009,0 3.498,0.645 4.46,1.932 0.966,1.304 1.45,3.19 1.45,5.687 v 3.057 c -0.717,-1.138 -1.597,-2.011 -2.64,-2.614 -1.039,-0.606 -2.253,-0.909 -3.622,-0.909 -2.539,0 -4.53,0.994 -5.968,2.982 C -2.11,-5.948 -2.833,-3.301 -2.833,0 Z" transform="translate(600.869 242.309)scale(1.13105)"/><path fill="#e0e0e0" d="m 627.82321,230.5176 h -3.20089 v 28.58738 h 3.20089 z m 0,36.72644 h -3.20089 v 4.50385 h 3.20089 z"/><path fill="#e0e0e0" d="m 0,0 0.23,-4.178 c 0.676,1.483 1.562,2.634 2.678,3.435 1.115,0.805 2.422,1.213 3.916,1.213 2.258,0 3.995,-0.835 5.199,-2.513 1.211,-1.675 1.807,-4.279 1.807,-7.812 v -15.42 h -2.825 v 15.394 c 0,2.888 -0.422,4.905 -1.261,6.075 -0.843,1.17 -2.063,1.753 -3.668,1.753 -1.434,0 -2.635,-0.466 -3.599,-1.414 C 1.51,-4.406 0.785,-5.657 0.306,-7.234 V -25.275 H -2.503 V 0 Z" transform="translate(638.154 259.105)scale(1.13105)"/><path fill="#e0e0e0" d="M 0,0 C -1.763,0 -3.208,-0.802 -4.334,-2.402 -5.463,-4.008 -6.052,-5.987 -6.102,-8.346 H 5.56 v 1.082 c 0,2.086 -0.486,3.823 -1.47,5.201 C 3.109,-0.684 1.747,0 0,0 m 0.401,-23.76 c -2.733,0 -4.958,1.026 -6.681,3.073 -1.73,2.043 -2.595,4.657 -2.595,7.841 v 4.197 c 0,3.19 0.865,5.85 2.6,7.965 1.739,2.105 3.831,3.158 6.275,3.158 2.646,0 4.706,-0.939 6.172,-2.823 1.462,-1.887 2.195,-4.422 2.195,-7.603 v -2.773 H -6.102 v -2.102 c 0,-2.447 0.59,-4.484 1.757,-6.11 1.166,-1.63 2.748,-2.438 4.746,-2.438 1.382,0 2.579,0.244 3.578,0.724 1.012,0.491 1.869,1.179 2.591,2.082 l 1.147,-1.988 c -0.769,-0.968 -1.755,-1.75 -2.962,-2.33 -1.203,-0.577 -2.658,-0.873 -4.354,-0.873" transform="translate(669.709 256.839)scale(1.13105)"/><path fill="#fff" d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z" transform="translate(348.131 279.267)scale(1.13105)"/><path fill="#478cbf" d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 c 5.09692,6.4164715 9.92323,13.494208 13.621,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.1783421,12.475308 -4.4130298,5.4661124 0,0 Z" transform="translate(126.806 346.045)scale(1.13105)"/><path fill="#478cbf" d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z" transform="translate(311.403 266.884)scale(1.13105)"/><path fill="#fff" d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0" transform="translate(204.114 318.938)scale(1.13105)"/><path fill="#414042" d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0" transform="translate(198.177 317.474)scale(1.13105)"/><path fill="#fff" d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0" transform="translate(237.475 292.02)scale(1.13105)"/><path fill="#fff" d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0" transform="translate(270.84 318.938)scale(1.13105)"/><path fill="#414042" d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0" transform="translate(276.778 317.474)scale(1.13105)"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/icon_console.svg b/misc/dist/icon_console.svg index 10143d026b..c81f24cd4b 100644 --- a/misc/dist/icon_console.svg +++ b/misc/dist/icon_console.svg @@ -1 +1 @@ -<svg width="1024" height="1024" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z" fill="#478cbf"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g><rect fill="#414042" stroke-width="20" stroke="#fff" x="550" y="650" width="430" height="330" rx="20"/><path fill="#fff" d="M590 750a10 10 0 0 0 0 14.142l70 70-70 70a10 10 0 0 0 0 14.142l20 20a10 10 0 0 0 14.142 0l97.071-97.071a10 10 0 0 0 0-14.142L624.142 730A10 10 0 0 0 610 730zm180 145a10 10 0 0 0-10 10v25a10 10 0 0 0 10 10h160a10 10 0 0 0 10-10v-25a10 10 0 0 0-10-10z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g><rect width="430" height="330" x="550" y="650" fill="#414042" stroke="#fff" stroke-width="20" rx="20"/><path fill="#fff" d="M590 750a10 10 0 0 0 0 14.142l70 70-70 70a10 10 0 0 0 0 14.142l20 20a10 10 0 0 0 14.142 0l97.071-97.071a10 10 0 0 0 0-14.142L624.142 730A10 10 0 0 0 610 730zm180 145a10 10 0 0 0-10 10v25a10 10 0 0 0 10 10h160a10 10 0 0 0 10-10v-25a10 10 0 0 0-10-10z"/></svg>
\ No newline at end of file diff --git a/misc/extension_api_validation/4.2-stable.expected b/misc/extension_api_validation/4.2-stable.expected index 7b93df70fa..4b0d22a1aa 100644 --- a/misc/extension_api_validation/4.2-stable.expected +++ b/misc/extension_api_validation/4.2-stable.expected @@ -372,3 +372,10 @@ GH-91382 Validate extension JSON: Error: Field 'classes/AudioStreamPlaybackPolyphonic/methods/play_stream/arguments': size changed value in new API, from 4 to 6. Optional arguments added. Compatibility methods registered. + + +GH-93982 +-------- +Validate extension JSON: Error: Field 'classes/Sprite3D/properties/frame_coords': type changed value in new API, from "Vector2" to "Vector2i". + +The type was wrong to begin with and has been corrected. Vector2 and Vector2i are convertible, so it should be compatible. diff --git a/misc/scripts/godot_gdb_pretty_print.py b/misc/utility/godot_gdb_pretty_print.py index 932831d24e..7edd668016 100755..100644 --- a/misc/scripts/godot_gdb_pretty_print.py +++ b/misc/utility/godot_gdb_pretty_print.py @@ -1,28 +1,30 @@ -#!/usr/bin/env python3 -# Load this file to your GDB session to enable pretty-printing -# of some Godot C++ types. -# GDB command: source misc/scripts/godot_gdb_pretty_print.py -# -# To load these automatically in Visual Studio Code, -# add the source command to the setupCommands of your configuration -# in launch.json. -# "setupCommands": [ -# ... -# { -# "description": "Load custom pretty-printers for Godot types.", -# "text": "source ${workspaceRoot}/misc/scripts/godot_gdb_pretty_print.py" -# } -# ] -# Other UI:s that use GDB under the hood are likely to have their own ways to achieve this. -# -# To debug this script it's easiest to use the interactive python from a command-line -# GDB session. Stop at a breakpoint, then use -# python-interactive to enter the python shell and -# acquire a Value object using gdb.selected_frame().read_var("variable name"). -# From there you can figure out how to print it nicely. +""" +Load this file to your GDB session to enable pretty-printing of some Godot C++ types. + +GDB command: `source misc/utility/godot_gdb_pretty_print.py`. + +To load these automatically in Visual Studio Code, add the source command to +the `setupCommands` of your configuration in `launch.json`: +```json +"setupCommands": [ +... + { + "description": "Load custom pretty-printers for Godot types.", + "text": "source ${workspaceFolder}/misc/utility/godot_gdb_pretty_print.py" + } +] +``` +Other UIs that use GDB under the hood are likely to have their own ways to achieve this. + +To debug this script it's easiest to use the interactive python from a command-line +GDB session. Stop at a breakpoint, then use python-interactive to enter the python shell +and acquire a `Value` object using `gdb.selected_frame().read_var("variable name")`. +From there you can figure out how to print it nicely. +""" + import re -import gdb +import gdb # type: ignore # Printer for Godot StringName variables. diff --git a/misc/utility/svgo.config.mjs b/misc/utility/svgo.config.mjs new file mode 100644 index 0000000000..d4c14f007c --- /dev/null +++ b/misc/utility/svgo.config.mjs @@ -0,0 +1,20 @@ +export default { + multipass: true, + precision: 2, + plugins: [ + { + name: "preset-default", + params: { + overrides: { + removeHiddenElems: false, + convertPathData: false, + }, + }, + }, + "convertStyleToAttrs", + "removeScriptElement", + "removeStyleElement", + "reusePaths", + "sortAttrs", + ], +}; diff --git a/modules/basis_universal/image_compress_basisu.cpp b/modules/basis_universal/image_compress_basisu.cpp index d8ef1c0414..216fa6c9a2 100644 --- a/modules/basis_universal/image_compress_basisu.cpp +++ b/modules/basis_universal/image_compress_basisu.cpp @@ -65,6 +65,12 @@ Vector<uint8_t> basis_universal_packer(const Ref<Image> &p_image, Image::UsedCha params.m_multithreading = true; params.m_check_for_alpha = false; + if (!OS::get_singleton()->is_stdout_verbose()) { + params.m_print_stats = false; + params.m_compute_stats = false; + params.m_status_output = false; + } + basisu::job_pool job_pool(OS::get_singleton()->get_processor_count()); params.m_pJob_pool = &job_pool; diff --git a/modules/csg/icons/CSGBox3D.svg b/modules/csg/icons/CSGBox3D.svg index d425180cf5..ad3e490dcf 100644 --- a/modules/csg/icons/CSGBox3D.svg +++ b/modules/csg/icons/CSGBox3D.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5" fill="none" stroke-width="2" stroke="#fc7f7f" mask="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="none" stroke="#fc7f7f" stroke-width="2" d="m8 2 6 3v6l-6 3-6-3V5zm0 12V8l6-3M8 8 2 5" mask="url(#a)"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGCapsule3D.svg b/modules/csg/icons/CSGCapsule3D.svg index 3c2657999c..54a5e3d698 100644 --- a/modules/csg/icons/CSGCapsule3D.svg +++ b/modules/csg/icons/CSGCapsule3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="M4 6a4 4 0 0 1 8 0v4a4 4 0 0 1-8 0zm0 1.25a2.5 1 0 0 0 8 0m-4-5v12" fill="none" stroke-width="2" stroke="#fc7f7f" mask="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="none" stroke="#fc7f7f" stroke-width="2" d="M4 6a4 4 0 0 1 8 0v4a4 4 0 0 1-8 0zm0 1.25a2.5 1 0 0 0 8 0m-4-5v12" mask="url(#a)"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGCombiner3D.svg b/modules/csg/icons/CSGCombiner3D.svg index 8598897e92..e65bb1c081 100644 --- a/modules/csg/icons/CSGCombiner3D.svg +++ b/modules/csg/icons/CSGCombiner3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm0 4a2 2 0 0 0 2 2v-2zm4 0v2h2v-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="#fc7f7f" d="M3 1a2 2 0 0 0-2 2h2zm2 0v2h2V1zm4 0v2h2V1zm4 0v2h2a2 2 0 0 0-2-2zM1 5v2h2V5zm12 0v2h2V5zM1 9v2h2V9zm0 4a2 2 0 0 0 2 2v-2zm4 0v2h2v-2z"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGCylinder3D.svg b/modules/csg/icons/CSGCylinder3D.svg index 19e48b4dba..366f1d9c4b 100644 --- a/modules/csg/icons/CSGCylinder3D.svg +++ b/modules/csg/icons/CSGCylinder3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="M2 4v8a6 2 0 0 0 12 0V4A6 2 0 0 0 2 4a6 2 0 0 0 12 0" stroke-width="2" fill="none" stroke="#fc7f7f" mask="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="none" stroke="#fc7f7f" stroke-width="2" d="M2 4v8a6 2 0 0 0 12 0V4A6 2 0 0 0 2 4a6 2 0 0 0 12 0" mask="url(#a)"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGMesh3D.svg b/modules/csg/icons/CSGMesh3D.svg index a1c2282fe5..d115a64f80 100644 --- a/modules/csg/icons/CSGMesh3D.svg +++ b/modules/csg/icons/CSGMesh3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.729 14H8v-2H4.729A2 2 0 0 0 4 11.271V5.415l4.914 4.916A2 2 0 0 1 9.998 10a2 2 0 0 1 .33-1.084L5.414 4h5.856a2 2 0 0 0 .73.729V8h2V4.729A2 2 0 1 0 11.27 2z" fill="#fc7f7f"/><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="M4.73 2A2 2 0 1 0 2 4.73v6.541A2 2 0 1 0 4.729 14H8v-2H4.729A2 2 0 0 0 4 11.271V5.415l4.914 4.916A2 2 0 0 1 9.998 10a2 2 0 0 1 .33-1.084L5.414 4h5.856a2 2 0 0 0 .73.729V8h2V4.729A2 2 0 1 0 11.27 2z"/><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGPolygon3D.svg b/modules/csg/icons/CSGPolygon3D.svg index 090047248b..ab7f61132b 100644 --- a/modules/csg/icons/CSGPolygon3D.svg +++ b/modules/csg/icons/CSGPolygon3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="m8 2 6 3.5v5L8 14l-6-3.5v-5h6zm6 3.5L8 9 2 5.5M8 9v5" fill="none" stroke-linejoin="round" stroke-width="2" stroke="#fc7f7f" mask="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="none" stroke="#fc7f7f" stroke-linejoin="round" stroke-width="2" d="m8 2 6 3.5v5L8 14l-6-3.5v-5h6zm6 3.5L8 9 2 5.5M8 9v5" mask="url(#a)"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGSphere3D.svg b/modules/csg/icons/CSGSphere3D.svg index a677ffaf5c..96a63df153 100644 --- a/modules/csg/icons/CSGSphere3D.svg +++ b/modules/csg/icons/CSGSphere3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><path d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2v12M2.05 7.4a6 2 0 0 0 11.9 0" fill="none" stroke-width="2" stroke="#fc7f7f" mask="url(#a)"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><path fill="none" stroke="#fc7f7f" stroke-width="2" d="M8 2a6 6 0 0 0 0 12A6 6 0 0 0 8 2v12M2.05 7.4a6 2 0 0 0 11.9 0" mask="url(#a)"/></svg>
\ No newline at end of file diff --git a/modules/csg/icons/CSGTorus3D.svg b/modules/csg/icons/CSGTorus3D.svg index 60c56bd1ca..1f7565782f 100644 --- a/modules/csg/icons/CSGTorus3D.svg +++ b/modules/csg/icons/CSGTorus3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><mask id="a"><path d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z" fill="#fefefe"/></mask><path d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z" fill="#5fb2ff"/><g fill="none" stroke="#fc7f7f" mask="url(#a)"><path d="M2.5 10a6 4 0 0 0 11 0 4 4 0 0 0 0-4 6 4 0 0 0-11 0 4 4 0 0 0 0 4z" stroke-width="2"/><path d="M6.2 7.2a2 1 0 1 0 3.6 0" stroke-width="1.75" stroke-linecap="round"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><mask id="a"><path fill="#fefefe" d="M0 0h16v10a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2 2 2 0 0 0-2 2v2a2 2 0 0 0 2 2H0z"/></mask><path fill="#5fb2ff" d="M12 9a1 1 0 0 0-1 1v1h2v2h1a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1zm1 4h-2v-2h-1a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1z"/><g fill="none" stroke="#fc7f7f" mask="url(#a)"><path stroke-width="2" d="M2.5 10a6 4 0 0 0 11 0 4 4 0 0 0 0-4 6 4 0 0 0-11 0 4 4 0 0 0 0 4z"/><path stroke-linecap="round" stroke-width="1.75" d="M6.2 7.2a2 1 0 1 0 3.6 0"/></g></svg>
\ No newline at end of file diff --git a/modules/enet/doc_classes/ENetConnection.xml b/modules/enet/doc_classes/ENetConnection.xml index 5795dd8976..ebd1577172 100644 --- a/modules/enet/doc_classes/ENetConnection.xml +++ b/modules/enet/doc_classes/ENetConnection.xml @@ -141,7 +141,7 @@ <return type="Array" /> <param index="0" name="timeout" type="int" default="0" /> <description> - Waits for events on the host specified and shuttles packets between the host and its peers. The returned [Array] will have 4 elements. An [enum EventType], the [ENetPacketPeer] which generated the event, the event associated data (if any), the event associated channel (if any). If the generated event is [constant EVENT_RECEIVE], the received packet will be queued to the associated [ENetPacketPeer]. + Waits for events on the specified host and shuttles packets between the host and its peers, with the given [param timeout] (in milliseconds). The returned [Array] will have 4 elements. An [enum EventType], the [ENetPacketPeer] which generated the event, the event associated data (if any), the event associated channel (if any). If the generated event is [constant EVENT_RECEIVE], the received packet will be queued to the associated [ENetPacketPeer]. Call this function regularly to handle connections, disconnections, and to receive new packets. </description> </method> diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml index 1909ca5ab5..6e7ac0dec9 100644 --- a/modules/gdscript/doc_classes/@GDScript.xml +++ b/modules/gdscript/doc_classes/@GDScript.xml @@ -314,7 +314,7 @@ @export var image_array: Array[Image] @export var node_array: Array[Node] [/codeblock] - [b]Note:[/b] Custom resources and nodes must be registered as global classes using [code]class_name[/code]. + [b]Note:[/b] Custom resources and nodes should be registered as global classes using [code]class_name[/code], since the Inspector currently only supports global classes. Otherwise, a less specific type will be exported instead. [b]Note:[/b] Node export is only supported in [Node]-derived classes and has a number of other limitations. </description> </annotation> diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 20d424894a..73b1e44db3 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -115,7 +115,7 @@ Variant GDScriptNativeClass::callp(const StringName &p_method, const Variant **p } GDScriptFunction *GDScript::_super_constructor(GDScript *p_script) { - if (p_script->initializer) { + if (likely(p_script->valid) && p_script->initializer) { return p_script->initializer; } else { GDScript *base_src = p_script->_base; @@ -136,7 +136,11 @@ void GDScript::_super_implicit_constructor(GDScript *p_script, GDScriptInstance } } ERR_FAIL_NULL(p_script->implicit_initializer); - p_script->implicit_initializer->call(p_instance, nullptr, 0, r_error); + if (likely(valid)) { + p_script->implicit_initializer->call(p_instance, nullptr, 0, r_error); + } else { + r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; + } } GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_is_ref_counted, Callable::CallError &r_error) { @@ -662,7 +666,7 @@ String GDScript::_get_debug_path() const { } Error GDScript::_static_init() { - if (static_initializer) { + if (likely(valid) && static_initializer) { Callable::CallError call_err; static_initializer->call(nullptr, nullptr, 0, call_err); if (call_err.error != Callable::CallError::CALL_OK) { @@ -679,8 +683,6 @@ Error GDScript::_static_init() { return err; } -#ifdef TOOLS_ENABLED - void GDScript::_static_default_init() { for (const KeyValue<StringName, MemberInfo> &E : static_variables_indices) { const GDScriptDataType &type = E.value.data_type; @@ -702,6 +704,8 @@ void GDScript::_static_default_init() { } } +#ifdef TOOLS_ENABLED + void GDScript::_save_old_static_data() { old_static_variables_indices = static_variables_indices; old_static_variables = static_variables; @@ -873,9 +877,6 @@ Error GDScript::reload(bool p_keep_state) { #ifdef TOOLS_ENABLED if (can_run && p_keep_state) { _restore_old_static_data(); - } else if (!can_run) { - // Initialize static variables with sane default values even if the constructor isn't called. - _static_default_init(); } #endif @@ -912,18 +913,15 @@ void GDScript::unload_static() const { } Variant GDScript::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (unlikely(!valid)) { - r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; - return Variant(); - } - GDScript *top = this; while (top) { - HashMap<StringName, GDScriptFunction *>::Iterator E = top->member_functions.find(p_method); - if (E) { - ERR_FAIL_COND_V_MSG(!E->value->is_static(), Variant(), "Can't call non-static function '" + String(p_method) + "' in script."); + if (likely(top->valid)) { + HashMap<StringName, GDScriptFunction *>::Iterator E = top->member_functions.find(p_method); + if (E) { + ERR_FAIL_COND_V_MSG(!E->value->is_static(), Variant(), "Can't call non-static function '" + String(p_method) + "' in script."); - return E->value->call(nullptr, p_args, p_argcount, r_error); + return E->value->call(nullptr, p_args, p_argcount, r_error); + } } top = top->_base; } @@ -939,10 +937,6 @@ bool GDScript::_get(const StringName &p_name, Variant &r_ret) const { return true; } - if (unlikely(!valid)) { - return false; - } - const GDScript *top = this; while (top) { { @@ -956,7 +950,7 @@ bool GDScript::_get(const StringName &p_name, Variant &r_ret) const { { HashMap<StringName, MemberInfo>::ConstIterator E = top->static_variables_indices.find(p_name); if (E) { - if (E->value.getter) { + if (likely(top->valid) && E->value.getter) { Callable::CallError ce; r_ret = const_cast<GDScript *>(this)->callp(E->value.getter, nullptr, 0, ce); return true; @@ -966,7 +960,7 @@ bool GDScript::_get(const StringName &p_name, Variant &r_ret) const { } } - { + if (likely(top->valid)) { HashMap<StringName, GDScriptFunction *>::ConstIterator E = top->member_functions.find(p_name); if (E && E->value->is_static()) { if (top->rpc_config.has(p_name)) { @@ -999,10 +993,6 @@ bool GDScript::_set(const StringName &p_name, const Variant &p_value) { return true; } - if (unlikely(!valid)) { - return false; - } - GDScript *top = this; while (top) { HashMap<StringName, MemberInfo>::ConstIterator E = top->static_variables_indices.find(p_name); @@ -1017,7 +1007,7 @@ bool GDScript::_set(const StringName &p_name, const Variant &p_value) { return false; } } - if (member->setter) { + if (likely(top->valid) && member->setter) { const Variant *args = &value; Callable::CallError err; callp(member->setter, &args, 1, err); @@ -1037,10 +1027,6 @@ bool GDScript::_set(const StringName &p_name, const Variant &p_value) { void GDScript::_get_property_list(List<PropertyInfo> *p_properties) const { p_properties->push_back(PropertyInfo(Variant::STRING, "script/source", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL)); - if (unlikely(!valid)) { - return; - } - List<const GDScript *> classes; const GDScript *top = this; while (top) { @@ -1657,10 +1643,6 @@ GDScript::~GDScript() { ////////////////////////////// bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { - if (unlikely(!script->valid)) { - return false; - } - { HashMap<StringName, GDScript::MemberInfo>::Iterator E = script->member_indices.find(p_name); if (E) { @@ -1674,7 +1656,7 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { return false; } } - if (member->setter) { + if (likely(script->valid) && member->setter) { const Variant *args = &value; Callable::CallError err; callp(member->setter, &args, 1, err); @@ -1701,7 +1683,7 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { return false; } } - if (member->setter) { + if (likely(sptr->valid) && member->setter) { const Variant *args = &value; Callable::CallError err; callp(member->setter, &args, 1, err); @@ -1713,7 +1695,7 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { } } - { + if (likely(sptr->valid)) { HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._set); if (E) { Variant name = p_name; @@ -1734,14 +1716,10 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { } bool GDScriptInstance::get(const StringName &p_name, Variant &r_ret) const { - if (unlikely(!script->valid)) { - return false; - } - { HashMap<StringName, GDScript::MemberInfo>::ConstIterator E = script->member_indices.find(p_name); if (E) { - if (E->value.getter) { + if (likely(script->valid) && E->value.getter) { Callable::CallError err; r_ret = const_cast<GDScriptInstance *>(this)->callp(E->value.getter, nullptr, 0, err); if (err.error == Callable::CallError::CALL_OK) { @@ -1766,7 +1744,7 @@ bool GDScriptInstance::get(const StringName &p_name, Variant &r_ret) const { { HashMap<StringName, GDScript::MemberInfo>::ConstIterator E = sptr->static_variables_indices.find(p_name); if (E) { - if (E->value.getter) { + if (likely(sptr->valid) && E->value.getter) { Callable::CallError ce; r_ret = const_cast<GDScript *>(sptr)->callp(E->value.getter, nullptr, 0, ce); return true; @@ -1784,7 +1762,7 @@ bool GDScriptInstance::get(const StringName &p_name, Variant &r_ret) const { } } - { + if (likely(sptr->valid)) { HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(p_name); if (E) { if (sptr->rpc_config.has(p_name)) { @@ -1804,7 +1782,7 @@ bool GDScriptInstance::get(const StringName &p_name, Variant &r_ret) const { } } - { + if (likely(sptr->valid)) { HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get); if (E) { Variant name = p_name; @@ -1844,13 +1822,15 @@ void GDScriptInstance::validate_property(PropertyInfo &p_property) const { const GDScript *sptr = script.ptr(); while (sptr) { - HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._validate_property); - if (E) { - Callable::CallError err; - Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); - if (err.error == Callable::CallError::CALL_OK) { - p_property = PropertyInfo::from_dict(property); - return; + if (likely(sptr->valid)) { + HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._validate_property); + if (E) { + Callable::CallError err; + Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); + if (err.error == Callable::CallError::CALL_OK) { + p_property = PropertyInfo::from_dict(property); + return; + } } } sptr = sptr->_base; @@ -1858,49 +1838,47 @@ void GDScriptInstance::validate_property(PropertyInfo &p_property) const { } void GDScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const { - if (unlikely(!script->valid)) { - return; - } - // exported members, not done yet! const GDScript *sptr = script.ptr(); List<PropertyInfo> props; while (sptr) { - HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get_property_list); - if (E) { - Callable::CallError err; - Variant ret = const_cast<GDScriptFunction *>(E->value)->call(const_cast<GDScriptInstance *>(this), nullptr, 0, err); - if (err.error == Callable::CallError::CALL_OK) { - ERR_FAIL_COND_MSG(ret.get_type() != Variant::ARRAY, "Wrong type for _get_property_list, must be an array of dictionaries."); - - Array arr = ret; - for (int i = 0; i < arr.size(); i++) { - Dictionary d = arr[i]; - ERR_CONTINUE(!d.has("name")); - ERR_CONTINUE(!d.has("type")); - - PropertyInfo pinfo; - pinfo.name = d["name"]; - pinfo.type = Variant::Type(d["type"].operator int()); - if (d.has("hint")) { - pinfo.hint = PropertyHint(d["hint"].operator int()); - } - if (d.has("hint_string")) { - pinfo.hint_string = d["hint_string"]; - } - if (d.has("usage")) { - pinfo.usage = d["usage"]; - } - if (d.has("class_name")) { - pinfo.class_name = d["class_name"]; - } + if (likely(sptr->valid)) { + HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get_property_list); + if (E) { + Callable::CallError err; + Variant ret = const_cast<GDScriptFunction *>(E->value)->call(const_cast<GDScriptInstance *>(this), nullptr, 0, err); + if (err.error == Callable::CallError::CALL_OK) { + ERR_FAIL_COND_MSG(ret.get_type() != Variant::ARRAY, "Wrong type for _get_property_list, must be an array of dictionaries."); + + Array arr = ret; + for (int i = 0; i < arr.size(); i++) { + Dictionary d = arr[i]; + ERR_CONTINUE(!d.has("name")); + ERR_CONTINUE(!d.has("type")); + + PropertyInfo pinfo; + pinfo.name = d["name"]; + pinfo.type = Variant::Type(d["type"].operator int()); + if (d.has("hint")) { + pinfo.hint = PropertyHint(d["hint"].operator int()); + } + if (d.has("hint_string")) { + pinfo.hint_string = d["hint_string"]; + } + if (d.has("usage")) { + pinfo.usage = d["usage"]; + } + if (d.has("class_name")) { + pinfo.class_name = d["class_name"]; + } - ERR_CONTINUE(pinfo.name.is_empty() && (pinfo.usage & PROPERTY_USAGE_STORAGE)); - ERR_CONTINUE(pinfo.type < 0 || pinfo.type >= Variant::VARIANT_MAX); + ERR_CONTINUE(pinfo.name.is_empty() && (pinfo.usage & PROPERTY_USAGE_STORAGE)); + ERR_CONTINUE(pinfo.type < 0 || pinfo.type >= Variant::VARIANT_MAX); - props.push_back(pinfo); + props.push_back(pinfo); + } } } } @@ -1940,21 +1918,19 @@ void GDScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const } bool GDScriptInstance::property_can_revert(const StringName &p_name) const { - if (unlikely(!script->valid)) { - return false; - } - Variant name = p_name; const Variant *args[1] = { &name }; const GDScript *sptr = script.ptr(); while (sptr) { - HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._property_can_revert); - if (E) { - Callable::CallError err; - Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); - if (err.error == Callable::CallError::CALL_OK && ret.get_type() == Variant::BOOL && ret.operator bool()) { - return true; + if (likely(sptr->valid)) { + HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._property_can_revert); + if (E) { + Callable::CallError err; + Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); + if (err.error == Callable::CallError::CALL_OK && ret.get_type() == Variant::BOOL && ret.operator bool()) { + return true; + } } } sptr = sptr->_base; @@ -1964,22 +1940,20 @@ bool GDScriptInstance::property_can_revert(const StringName &p_name) const { } bool GDScriptInstance::property_get_revert(const StringName &p_name, Variant &r_ret) const { - if (unlikely(!script->valid)) { - return false; - } - Variant name = p_name; const Variant *args[1] = { &name }; const GDScript *sptr = script.ptr(); while (sptr) { - HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._property_get_revert); - if (E) { - Callable::CallError err; - Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); - if (err.error == Callable::CallError::CALL_OK && ret.get_type() != Variant::NIL) { - r_ret = ret; - return true; + if (likely(sptr->valid)) { + HashMap<StringName, GDScriptFunction *>::ConstIterator E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._property_get_revert); + if (E) { + Callable::CallError err; + Variant ret = E->value->call(const_cast<GDScriptInstance *>(this), args, 1, err); + if (err.error == Callable::CallError::CALL_OK && ret.get_type() != Variant::NIL) { + r_ret = ret; + return true; + } } } sptr = sptr->_base; @@ -2035,30 +2009,28 @@ void GDScriptInstance::_call_implicit_ready_recursively(GDScript *p_script) { if (p_script->_base) { _call_implicit_ready_recursively(p_script->_base); } - if (p_script->implicit_ready) { + if (likely(p_script->valid) && p_script->implicit_ready) { Callable::CallError err; p_script->implicit_ready->call(this, nullptr, 0, err); } } Variant GDScriptInstance::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) { - if (unlikely(!script->valid)) { - r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; - return Variant(); - } - GDScript *sptr = script.ptr(); if (unlikely(p_method == SceneStringName(_ready))) { // Call implicit ready first, including for the super classes recursively. _call_implicit_ready_recursively(sptr); } while (sptr) { - HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(p_method); - if (E) { - return E->value->call(this, p_args, p_argcount, r_error); + if (likely(sptr->valid)) { + HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(p_method); + if (E) { + return E->value->call(this, p_args, p_argcount, r_error); + } } sptr = sptr->_base; } + r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; return Variant(); } @@ -2083,12 +2055,14 @@ void GDScriptInstance::notification(int p_notification, bool p_reversed) { sptr = sptr->_base; } for (GDScript *sc : pl) { - HashMap<StringName, GDScriptFunction *>::Iterator E = sc->member_functions.find(GDScriptLanguage::get_singleton()->strings._notification); - if (E) { - Callable::CallError err; - E->value->call(this, args, 1, err); - if (err.error != Callable::CallError::CALL_OK) { - //print error about notification call + if (likely(sc->valid)) { + HashMap<StringName, GDScriptFunction *>::Iterator E = sc->member_functions.find(GDScriptLanguage::get_singleton()->strings._notification); + if (E) { + Callable::CallError err; + E->value->call(this, args, 1, err); + if (err.error != Callable::CallError::CALL_OK) { + //print error about notification call + } } } } @@ -2759,7 +2733,7 @@ String GDScriptLanguage::get_global_class_name(const String &p_path, String *r_b String source = f->get_as_utf8_string(); GDScriptParser parser; - err = parser.parse(source, p_path, false); + err = parser.parse(source, p_path, false, false); const GDScriptParser::ClassNode *c = parser.get_tree(); if (!c) { diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index 728459de44..d097cb193b 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -169,9 +169,7 @@ private: GDScriptFunction *static_initializer = nullptr; Error _static_init(); -#ifdef TOOLS_ENABLED void _static_default_init(); // Initialize static variables with default values based on their types. -#endif int subclass_count = 0; RBSet<Object *> instances; diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index aa26bb222d..a6b4bce000 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -2663,6 +2663,44 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig reduce_expression(p_assignment->assignee); +#ifdef DEBUG_ENABLED + { + bool is_subscript = false; + GDScriptParser::ExpressionNode *base = p_assignment->assignee; + while (base && base->type == GDScriptParser::Node::SUBSCRIPT) { + is_subscript = true; + base = static_cast<GDScriptParser::SubscriptNode *>(base)->base; + } + if (base && base->type == GDScriptParser::Node::IDENTIFIER) { + GDScriptParser::IdentifierNode *id = static_cast<GDScriptParser::IdentifierNode *>(base); + if (current_lambda && current_lambda->captures_indices.has(id->name)) { + bool need_warn = false; + if (is_subscript) { + const GDScriptParser::DataType &id_type = id->datatype; + if (id_type.is_hard_type()) { + switch (id_type.kind) { + case GDScriptParser::DataType::BUILTIN: + // TODO: Change `Variant::is_type_shared()` to include packed arrays? + need_warn = !Variant::is_type_shared(id_type.builtin_type) && id_type.builtin_type < Variant::PACKED_BYTE_ARRAY; + break; + case GDScriptParser::DataType::ENUM: + need_warn = true; + break; + default: + break; + } + } + } else { + need_warn = true; + } + if (need_warn) { + parser->push_warning(p_assignment, GDScriptWarning::CONFUSABLE_CAPTURE_REASSIGNMENT, id->name); + } + } + } + } +#endif + if (p_assignment->assigned_value == nullptr || p_assignment->assignee == nullptr) { return; } @@ -4299,7 +4337,8 @@ void GDScriptAnalyzer::reduce_preload(GDScriptParser::PreloadNode *p_preload) { // Must load GDScript separately to permit cyclic references // as ResourceLoader::load() detects and rejects those. - if (ResourceLoader::get_resource_type(p_preload->resolved_path) == "GDScript") { + const String &res_type = ResourceLoader::get_resource_type(p_preload->resolved_path); + if (res_type == "GDScript") { Error err = OK; Ref<GDScript> res = GDScriptCache::get_shallow_script(p_preload->resolved_path, err, parser->script_path); p_preload->resource = res; @@ -4307,7 +4346,11 @@ void GDScriptAnalyzer::reduce_preload(GDScriptParser::PreloadNode *p_preload) { push_error(vformat(R"(Could not preload resource script "%s".)", p_preload->resolved_path), p_preload->path); } } else { - p_preload->resource = ResourceLoader::load(p_preload->resolved_path); + Error err = OK; + p_preload->resource = ResourceLoader::load(p_preload->resolved_path, res_type, ResourceFormatLoader::CACHE_MODE_REUSE, &err); + if (err == ERR_BUSY) { + p_preload->resource = ResourceLoader::ensure_resource_ref_override_for_outer_load(p_preload->resolved_path, res_type); + } if (p_preload->resource.is_null()) { push_error(vformat(R"(Could not preload resource file "%s".)", p_preload->resolved_path), p_preload->path); } @@ -5527,6 +5570,9 @@ bool GDScriptAnalyzer::check_type_compatibility(const GDScriptParser::DataType & // A script type cannot be a subtype of a GDScript class. return false; } + if (p_source.script_type.is_null()) { + return false; + } if (p_source.is_meta_type) { src_native = p_source.script_type->get_class_name(); } else { diff --git a/modules/gdscript/gdscript_cache.cpp b/modules/gdscript/gdscript_cache.cpp index ac6f5f05c6..7c9fba799d 100644 --- a/modules/gdscript/gdscript_cache.cpp +++ b/modules/gdscript/gdscript_cache.cpp @@ -42,6 +42,10 @@ GDScriptParserRef::Status GDScriptParserRef::get_status() const { return status; } +String GDScriptParserRef::get_path() const { + return path; +} + uint32_t GDScriptParserRef::get_source_hash() const { return source_hash; } @@ -91,12 +95,8 @@ Error GDScriptParserRef::raise_status(Status p_new_status) { result = get_analyzer()->resolve_interface(); } break; case INTERFACE_SOLVED: { - status = BODY_SOLVED; - result = get_analyzer()->resolve_body(); - } break; - case BODY_SOLVED: { status = FULLY_SOLVED; - result = get_analyzer()->resolve_dependencies(); + result = get_analyzer()->resolve_body(); } break; case FULLY_SOLVED: { return result; @@ -135,9 +135,7 @@ void GDScriptParserRef::clear() { GDScriptParserRef::~GDScriptParserRef() { clear(); - - MutexLock lock(GDScriptCache::singleton->mutex); - GDScriptCache::singleton->parser_map.erase(path); + GDScriptCache::remove_parser(path); } GDScriptCache *GDScriptCache::singleton = nullptr; @@ -158,6 +156,11 @@ void GDScriptCache::move_script(const String &p_from, const String &p_to) { } singleton->parser_map.erase(p_from); + if (singleton->parser_inverse_dependencies.has(p_from) && !p_from.is_empty()) { + singleton->parser_inverse_dependencies[p_to] = singleton->parser_inverse_dependencies[p_from]; + } + singleton->parser_inverse_dependencies.erase(p_from); + if (singleton->shallow_gdscript_cache.has(p_from) && !p_from.is_empty()) { singleton->shallow_gdscript_cache[p_to] = singleton->shallow_gdscript_cache[p_from]; } @@ -181,13 +184,11 @@ void GDScriptCache::remove_script(const String &p_path) { } if (singleton->parser_map.has(p_path)) { - // Keep a local reference until it goes out of scope. - // Clearing it can trigger a reference to itself to go out of scope, destructing it before clear finishes. - Ref<GDScriptParserRef> parser_ref = singleton->parser_map[p_path]; - singleton->parser_map.erase(p_path); - parser_ref->clear(); + singleton->parser_map[p_path]->clear(); } + remove_parser(p_path); + singleton->dependencies.erase(p_path); singleton->shallow_gdscript_cache.erase(p_path); singleton->full_gdscript_cache.erase(p_path); @@ -198,6 +199,7 @@ Ref<GDScriptParserRef> GDScriptCache::get_parser(const String &p_path, GDScriptP Ref<GDScriptParserRef> ref; if (!p_owner.is_empty()) { singleton->dependencies[p_owner].insert(p_path); + singleton->parser_inverse_dependencies[p_path].insert(p_owner); } if (singleton->parser_map.has(p_path)) { ref = Ref<GDScriptParserRef>(singleton->parser_map[p_path]); @@ -229,6 +231,13 @@ void GDScriptCache::remove_parser(const String &p_path) { MutexLock lock(singleton->mutex); // Can't clear the parser because some other parser might be currently using it in the chain of calls. singleton->parser_map.erase(p_path); + + // Have to copy while iterating, because parser_inverse_dependencies is modified. + HashSet<String> ideps = singleton->parser_inverse_dependencies[p_path]; + singleton->parser_inverse_dependencies.erase(p_path); + for (String idep_path : ideps) { + remove_parser(idep_path); + } } String GDScriptCache::get_source_code(const String &p_path) { @@ -344,7 +353,11 @@ Ref<GDScript> GDScriptCache::get_full_script(const String &p_path, Error &r_erro } } + // Allowing lifting the lock might cause a script to be reloaded multiple times, + // which, as a last resort deadlock prevention strategy, is a good tradeoff. + uint32_t allowance_id = WorkerThreadPool::thread_enter_unlock_allowance_zone(&singleton->mutex); r_error = script->reload(true); + WorkerThreadPool::thread_exit_unlock_allowance_zone(allowance_id); if (r_error) { return script; } @@ -417,6 +430,8 @@ void GDScriptCache::clear() { } singleton->cleared = true; + singleton->parser_inverse_dependencies.clear(); + RBSet<Ref<GDScriptParserRef>> parser_map_refs; for (KeyValue<String, GDScriptParserRef *> &E : singleton->parser_map) { parser_map_refs.insert(E.value); diff --git a/modules/gdscript/gdscript_cache.h b/modules/gdscript/gdscript_cache.h index c738233beb..c927317e19 100644 --- a/modules/gdscript/gdscript_cache.h +++ b/modules/gdscript/gdscript_cache.h @@ -48,7 +48,6 @@ public: PARSED, INHERITANCE_SOLVED, INTERFACE_SOLVED, - BODY_SOLVED, FULLY_SOLVED, }; @@ -66,6 +65,7 @@ private: public: Status get_status() const; + String get_path() const; uint32_t get_source_hash() const; GDScriptParser *get_parser(); GDScriptAnalyzer *get_analyzer(); @@ -83,6 +83,7 @@ class GDScriptCache { HashMap<String, Ref<GDScript>> full_gdscript_cache; HashMap<String, Ref<GDScript>> static_gdscript_cache; HashMap<String, HashSet<String>> dependencies; + HashMap<String, HashSet<String>> parser_inverse_dependencies; friend class GDScript; friend class GDScriptParserRef; diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index eeffc13a10..5469dad3f7 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -3006,6 +3006,8 @@ Error GDScriptCompiler::_compile_class(GDScript *p_script, const GDScriptParser: has_static_data = has_static_data || inner_class->has_static_data; } + p_script->_static_default_init(); + p_script->valid = true; return OK; } @@ -3228,11 +3230,7 @@ Error GDScriptCompiler::compile(const GDScriptParser *p_parser, GDScript *p_scri GDScriptCache::add_static_script(p_script); } - err = GDScriptCache::finish_compiling(main_script->path); - if (err) { - main_script->valid = false; - } - return err; + return GDScriptCache::finish_compiling(main_script->path); } String GDScriptCompiler::get_error() const { diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 8da829907e..b58b44973e 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -1959,11 +1959,14 @@ static bool _guess_expression_type(GDScriptParser::CompletionContext &p_context, break; } - if (base.value.in(index.value)) { - Variant value = base.value.get(index.value); - r_type = _type_from_variant(value, p_context); - found = true; - break; + { + bool valid; + Variant value = base.value.get(index.value, &valid); + if (valid) { + r_type = _type_from_variant(value, p_context); + found = true; + break; + } } // Look if it is a dictionary node. @@ -3657,11 +3660,21 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co return OK; } - StringName enum_name = ClassDB::get_integer_constant_enum(class_name, p_symbol, true); - if (enum_name != StringName()) { - r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM; + List<StringName> enums; + ClassDB::get_enum_list(class_name, &enums); + for (const StringName &E : enums) { + if (E == p_symbol) { + r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_ENUM; + r_result.class_name = base_type.native_type; + r_result.class_member = p_symbol; + return OK; + } + } + + if (!String(ClassDB::get_integer_constant_enum(class_name, p_symbol, true)).is_empty()) { + r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT; r_result.class_name = base_type.native_type; - r_result.class_member = enum_name; + r_result.class_member = p_symbol; return OK; } @@ -3735,6 +3748,15 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co return OK; } } break; + case GDScriptParser::DataType::ENUM: { + if (base_type.enum_values.has(p_symbol)) { + r_result.type = ScriptLanguage::LOOKUP_RESULT_CLASS_CONSTANT; + r_result.class_name = String(base_type.native_type).get_slicec('.', 0); + r_result.class_member = p_symbol; + return OK; + } + base_type.kind = GDScriptParser::DataType::UNRESOLVED; + } break; default: { base_type.kind = GDScriptParser::DataType::UNRESOLVED; } break; diff --git a/modules/gdscript/gdscript_lambda_callable.cpp b/modules/gdscript/gdscript_lambda_callable.cpp index 626ef6ccb0..2162a727b3 100644 --- a/modules/gdscript/gdscript_lambda_callable.cpp +++ b/modules/gdscript/gdscript_lambda_callable.cpp @@ -84,7 +84,7 @@ int GDScriptLambdaCallable::get_argument_count(bool &r_is_valid) const { return 0; } r_is_valid = true; - return function->get_argument_count(); + return function->get_argument_count() - captures.size(); } void GDScriptLambdaCallable::call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const { @@ -198,13 +198,17 @@ ObjectID GDScriptLambdaSelfCallable::get_object() const { return object->get_instance_id(); } +StringName GDScriptLambdaSelfCallable::get_method() const { + return function->get_name(); +} + int GDScriptLambdaSelfCallable::get_argument_count(bool &r_is_valid) const { if (function == nullptr) { r_is_valid = false; return 0; } r_is_valid = true; - return function->get_argument_count(); + return function->get_argument_count() - captures.size(); } void GDScriptLambdaSelfCallable::call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const { diff --git a/modules/gdscript/gdscript_lambda_callable.h b/modules/gdscript/gdscript_lambda_callable.h index 45c0235913..2d27b8d679 100644 --- a/modules/gdscript/gdscript_lambda_callable.h +++ b/modules/gdscript/gdscript_lambda_callable.h @@ -87,6 +87,7 @@ public: CompareEqualFunc get_compare_equal_func() const override; CompareLessFunc get_compare_less_func() const override; ObjectID get_object() const override; + StringName get_method() const override; int get_argument_count(bool &r_is_valid) const override; void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index f1a35c84b7..a1ea94667d 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -137,11 +137,22 @@ GDScriptParser::GDScriptParser() { #endif #ifdef TOOLS_ENABLED - if (theme_color_names.is_empty()) { + if (unlikely(theme_color_names.is_empty())) { + // Vectors. theme_color_names.insert("x", "axis_x_color"); theme_color_names.insert("y", "axis_y_color"); theme_color_names.insert("z", "axis_z_color"); theme_color_names.insert("w", "axis_w_color"); + + // Color. + theme_color_names.insert("r", "axis_x_color"); + theme_color_names.insert("r8", "axis_x_color"); + theme_color_names.insert("g", "axis_y_color"); + theme_color_names.insert("g8", "axis_y_color"); + theme_color_names.insert("b", "axis_z_color"); + theme_color_names.insert("b8", "axis_z_color"); + theme_color_names.insert("a", "axis_w_color"); + theme_color_names.insert("a8", "axis_w_color"); } #endif } @@ -298,13 +309,14 @@ void GDScriptParser::set_last_completion_call_arg(int p_argument) { completion_call_stack.back()->get().argument = p_argument; } -Error GDScriptParser::parse(const String &p_source_code, const String &p_script_path, bool p_for_completion) { +Error GDScriptParser::parse(const String &p_source_code, const String &p_script_path, bool p_for_completion, bool p_parse_body) { clear(); String source = p_source_code; int cursor_line = -1; int cursor_column = -1; for_completion = p_for_completion; + parse_body = p_parse_body; int tab_size = 4; #ifdef TOOLS_ENABLED @@ -678,6 +690,12 @@ void GDScriptParser::parse_program() { } } + // When the only thing needed is the class name and the icon, we don't need to parse the hole file. + // It really speed up the call to GDScriptLanguage::get_global_class_name especially for large script. + if (!parse_body) { + return; + } + #undef PUSH_PENDING_ANNOTATIONS_TO_HEAD parse_class_body(true); @@ -4160,6 +4178,64 @@ static String _get_annotation_error_string(const StringName &p_annotation_name, return vformat(R"("%s" annotation requires a variable of type %s, but type "%s" was given instead.)", p_annotation_name, string, p_provided_type.to_string()); } +static StringName _find_narrowest_native_or_global_class(const GDScriptParser::DataType &p_type) { + switch (p_type.kind) { + case GDScriptParser::DataType::NATIVE: { + if (p_type.is_meta_type) { + return Object::get_class_static(); // `GDScriptNativeClass` is not an exposed class. + } + return p_type.native_type; + } break; + case GDScriptParser::DataType::SCRIPT: { + Ref<Script> script; + if (p_type.script_type.is_valid()) { + script = p_type.script_type; + } else { + script = ResourceLoader::load(p_type.script_path, SNAME("Script")); + } + + if (p_type.is_meta_type) { + return script.is_valid() ? script->get_class() : Script::get_class_static(); + } + if (script.is_null()) { + return p_type.native_type; + } + if (script->get_global_name() != StringName()) { + return script->get_global_name(); + } + + Ref<Script> base_script = script->get_base_script(); + if (base_script.is_null()) { + return script->get_instance_base_type(); + } + + GDScriptParser::DataType base_type; + base_type.kind = GDScriptParser::DataType::SCRIPT; + base_type.builtin_type = Variant::OBJECT; + base_type.native_type = base_script->get_instance_base_type(); + base_type.script_type = base_script; + base_type.script_path = base_script->get_path(); + + return _find_narrowest_native_or_global_class(base_type); + } break; + case GDScriptParser::DataType::CLASS: { + if (p_type.is_meta_type) { + return GDScript::get_class_static(); + } + if (p_type.class_type == nullptr) { + return p_type.native_type; + } + if (p_type.class_type->get_global_name() != StringName()) { + return p_type.class_type->get_global_name(); + } + return _find_narrowest_native_or_global_class(p_type.class_type->base_type); + } break; + default: { + ERR_FAIL_V(StringName()); + } break; + } +} + template <PropertyHint t_hint, Variant::Type t_type> bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node *p_target, ClassNode *p_class) { ERR_FAIL_COND_V_MSG(p_target->type != Node::VARIABLE, false, vformat(R"("%s" annotation can only be applied to variables.)", p_annotation->name)); @@ -4302,57 +4378,9 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node variable->export_info.hint_string = String(); break; case GDScriptParser::DataType::NATIVE: - if (ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) { - variable->export_info.type = Variant::OBJECT; - variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE; - variable->export_info.hint_string = export_type.native_type; - } else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) { - variable->export_info.type = Variant::OBJECT; - variable->export_info.hint = PROPERTY_HINT_NODE_TYPE; - variable->export_info.hint_string = export_type.native_type; - } else { - push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", p_annotation); - return false; - } - break; + case GDScriptParser::DataType::SCRIPT: case GDScriptParser::DataType::CLASS: { - StringName class_name; - if (export_type.class_type) { - class_name = export_type.class_type->get_global_name(); - } - if (class_name == StringName()) { - push_error(R"(Script export type must be a global class.)", p_annotation); - return false; - } - if (ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) { - variable->export_info.type = Variant::OBJECT; - variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE; - variable->export_info.hint_string = class_name; - } else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) { - variable->export_info.type = Variant::OBJECT; - variable->export_info.hint = PROPERTY_HINT_NODE_TYPE; - variable->export_info.hint_string = class_name; - } else { - push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", p_annotation); - return false; - } - } break; - - case GDScriptParser::DataType::SCRIPT: { - StringName class_name; - if (export_type.script_type.is_valid()) { - class_name = export_type.script_type->get_global_name(); - } - if (class_name == StringName()) { - Ref<Script> script = ResourceLoader::load(export_type.script_path, SNAME("Script")); - if (script.is_valid()) { - class_name = script->get_global_name(); - } - } - if (class_name == StringName()) { - push_error(R"(Script export type must be a global class.)", p_annotation); - return false; - } + const StringName class_name = _find_narrowest_native_or_global_class(export_type); if (ClassDB::is_parent_class(export_type.native_type, SNAME("Resource"))) { variable->export_info.type = Variant::OBJECT; variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE; diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index 96358165c0..21942222cf 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -1329,6 +1329,7 @@ private: bool _is_tool = false; String script_path; bool for_completion = false; + bool parse_body = true; bool panic_mode = false; bool can_break = false; bool can_continue = false; @@ -1560,7 +1561,7 @@ private: #endif // TOOLS_ENABLED public: - Error parse(const String &p_source_code, const String &p_script_path, bool p_for_completion); + Error parse(const String &p_source_code, const String &p_script_path, bool p_for_completion, bool p_parse_body = true); Error parse_binary(const Vector<uint8_t> &p_binary, const String &p_script_path); ClassNode *get_tree() const { return head; } bool is_tool() const { return _is_tool; } diff --git a/modules/gdscript/gdscript_warning.cpp b/modules/gdscript/gdscript_warning.cpp index 611a9ad2d9..e8fb1d94b3 100644 --- a/modules/gdscript/gdscript_warning.cpp +++ b/modules/gdscript/gdscript_warning.cpp @@ -145,6 +145,9 @@ String GDScriptWarning::get_message() const { case CONFUSABLE_LOCAL_USAGE: CHECK_SYMBOLS(1); return vformat(R"(The identifier "%s" will be shadowed below in the block.)", symbols[0]); + case CONFUSABLE_CAPTURE_REASSIGNMENT: + CHECK_SYMBOLS(1); + return vformat(R"(Reassigning lambda capture does not modify the outer local variable "%s".)", symbols[0]); case INFERENCE_ON_VARIANT: CHECK_SYMBOLS(1); return vformat("The %s type is being inferred from a Variant value, so it will be typed as Variant.", symbols[0]); @@ -231,6 +234,7 @@ String GDScriptWarning::get_name_from_code(Code p_code) { "CONFUSABLE_IDENTIFIER", "CONFUSABLE_LOCAL_DECLARATION", "CONFUSABLE_LOCAL_USAGE", + "CONFUSABLE_CAPTURE_REASSIGNMENT", "INFERENCE_ON_VARIANT", "NATIVE_METHOD_OVERRIDE", "GET_NODE_DEFAULT_WITHOUT_ONREADY", diff --git a/modules/gdscript/gdscript_warning.h b/modules/gdscript/gdscript_warning.h index 3ad9488138..1c806bb4e2 100644 --- a/modules/gdscript/gdscript_warning.h +++ b/modules/gdscript/gdscript_warning.h @@ -85,6 +85,7 @@ public: CONFUSABLE_IDENTIFIER, // The identifier contains misleading characters that can be confused. E.g. "usеr" (has Cyrillic "е" instead of Latin "e"). CONFUSABLE_LOCAL_DECLARATION, // The parent block declares an identifier with the same name below. CONFUSABLE_LOCAL_USAGE, // The identifier will be shadowed below in the block. + CONFUSABLE_CAPTURE_REASSIGNMENT, // Reassigning lambda capture does not modify the outer local variable. INFERENCE_ON_VARIANT, // The declaration uses type inference but the value is typed as Variant. NATIVE_METHOD_OVERRIDE, // The script method overrides a native one, this may not work as intended. GET_NODE_DEFAULT_WITHOUT_ONREADY, // A class variable uses `get_node()` (or the `$` notation) as its default value, but does not use the @onready annotation. @@ -137,6 +138,7 @@ public: WARN, // CONFUSABLE_IDENTIFIER WARN, // CONFUSABLE_LOCAL_DECLARATION WARN, // CONFUSABLE_LOCAL_USAGE + WARN, // CONFUSABLE_CAPTURE_REASSIGNMENT ERROR, // INFERENCE_ON_VARIANT // Most likely done by accident, usually inference is trying for a particular type. ERROR, // NATIVE_METHOD_OVERRIDE // May not work as expected. ERROR, // GET_NODE_DEFAULT_WITHOUT_ONREADY // May not work as expected. diff --git a/modules/gdscript/icons/GDScript.svg b/modules/gdscript/icons/GDScript.svg index 2671c007f3..e44adf60dc 100644 --- a/modules/gdscript/icons/GDScript.svg +++ b/modules/gdscript/icons/GDScript.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1-.565 2.258a5 5 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994a5 5 0 0 0-.285.685L1 7v2l2.258.564a5 5 0 0 0 .279.688l-1.193 1.99 1.414 1.414 1.994-1.195a5 5 0 0 0 .685.285L7 15h2l.564-2.258a5 5 0 0 0 .688-.28l1.99 1.194 1.414-1.414-1.195-1.994a5 5 0 0 0 .285-.685L15 9V7l-2.258-.564a5 5 0 0 0-.28-.688l1.194-1.99-1.414-1.414-1.994 1.195a5 5 0 0 0-.686-.285L9 1H7zm1 5a2 2 0 0 1 0 4 2 2 0 0 1 0-4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m7 1-.565 2.258a5 5 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994a5 5 0 0 0-.285.685L1 7v2l2.258.564a5 5 0 0 0 .279.688l-1.193 1.99 1.414 1.414 1.994-1.195a5 5 0 0 0 .685.285L7 15h2l.564-2.258a5 5 0 0 0 .688-.28l1.99 1.194 1.414-1.414-1.195-1.994a5 5 0 0 0 .285-.685L15 9V7l-2.258-.564a5 5 0 0 0-.28-.688l1.194-1.99-1.414-1.414-1.994 1.195a5 5 0 0 0-.686-.285L9 1H7zm1 5a2 2 0 0 1 0 4 2 2 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/modules/gdscript/icons/GDScriptInternal.svg b/modules/gdscript/icons/GDScriptInternal.svg index 81a59a7387..57471729cd 100644 --- a/modules/gdscript/icons/GDScriptInternal.svg +++ b/modules/gdscript/icons/GDScriptInternal.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1-.565 2.258a5 5 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994a5 5 0 0 0-.285.685L1 7v2l2.258.564a5 5 0 0 0 .279.688l-1.193 1.99 1.414 1.414 1.994-1.195a5 5 0 0 0 .685.285L7 15h2l.564-2.258a5 5 0 0 0 .688-.28l1.99 1.194 1.414-1.414-1.195-1.994a5 5 0 0 0 .285-.685L15 9V7l-2.258-.564a5 5 0 0 0-.28-.688l1.194-1.99-1.414-1.414-1.994 1.195a5 5 0 0 0-.686-.285L9 1H7zm1 5a2 2 0 0 1 0 4 2 2 0 0 1 0-4z" fill="none" stroke="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#e0e0e0" d="m7 1-.565 2.258a5 5 0 0 0-.689.28L3.758 2.343 2.344 3.758l1.195 1.994a5 5 0 0 0-.285.685L1 7v2l2.258.564a5 5 0 0 0 .279.688l-1.193 1.99 1.414 1.414 1.994-1.195a5 5 0 0 0 .685.285L7 15h2l.564-2.258a5 5 0 0 0 .688-.28l1.99 1.194 1.414-1.414-1.195-1.994a5 5 0 0 0 .285-.685L15 9V7l-2.258-.564a5 5 0 0 0-.28-.688l1.194-1.99-1.414-1.414-1.994 1.195a5 5 0 0 0-.686-.285L9 1H7zm1 5a2 2 0 0 1 0 4 2 2 0 0 1 0-4z"/></svg>
\ No newline at end of file diff --git a/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.gd b/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.gd new file mode 100644 index 0000000000..9e1041db54 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.gd @@ -0,0 +1,23 @@ +var member := 1 + +func test(): + var number := 1 + var string := "1" + var vector := Vector2i(1, 0) + var array_assign := [1] + var array_index := [1] + var dictionary := { x = 0 } + + var lambda := func (): + member = 2 # Member variable, not captured. + number = 2 # Local variable, captured. + string += "2" # Test compound assignment operator. + vector.x = 2 # Test subscript assignment. + array_assign = [2] # Pass-by-reference type, reassignment. + array_index[0] = 2 # Pass-by-reference type, index access. + dictionary.x = 2 # Pass-by-reference type, attribute access. + + prints("lambda", member, number, string, vector, array_assign, array_index, dictionary) + + lambda.call() + prints("outer", member, number, string, vector, array_assign, array_index, dictionary) diff --git a/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.out b/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.out new file mode 100644 index 0000000000..8d953818eb --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/warnings/confusable_capture_reassignment.out @@ -0,0 +1,19 @@ +GDTEST_OK +>> WARNING +>> Line: 13 +>> CONFUSABLE_CAPTURE_REASSIGNMENT +>> Reassigning lambda capture does not modify the outer local variable "number". +>> WARNING +>> Line: 14 +>> CONFUSABLE_CAPTURE_REASSIGNMENT +>> Reassigning lambda capture does not modify the outer local variable "string". +>> WARNING +>> Line: 15 +>> CONFUSABLE_CAPTURE_REASSIGNMENT +>> Reassigning lambda capture does not modify the outer local variable "vector". +>> WARNING +>> Line: 16 +>> CONFUSABLE_CAPTURE_REASSIGNMENT +>> Reassigning lambda capture does not modify the outer local variable "array_assign". +lambda 2 2 12 (2, 0) [2] [2] { "x": 2 } +outer 2 1 1 (1, 0) [1] [2] { "x": 2 } diff --git a/modules/gdscript/tests/scripts/completion/common/identifiers.cfg b/modules/gdscript/tests/scripts/completion/common/identifiers.cfg new file mode 100644 index 0000000000..871a404e3a --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/common/identifiers.cfg @@ -0,0 +1,21 @@ +scene="res://completion/get_node/get_node.tscn" +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, + + ; GDScript: self.gd + {"display": "test_signal_1"}, + {"display": "test_signal_2"}, + {"display": "test_var_1"}, + {"display": "test_var_2"}, + {"display": "test_func_1"}, + {"display": "test_func_2"}, +] diff --git a/modules/gdscript/tests/scripts/completion/common/identifiers.gd b/modules/gdscript/tests/scripts/completion/common/identifiers.gd new file mode 100644 index 0000000000..efbafbee8e --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/common/identifiers.gd @@ -0,0 +1,16 @@ +extends "res://completion/class_a.notest.gd" + +signal test_signal_1(a) +signal test_signal_2(a: int) + +var test_var_1 +var test_var_2: int + +func test_func_1(t): + pass + +func test_func_2(t: int) -> void: + pass + +func _init(): + t➡ diff --git a/modules/gdscript/tests/scripts/completion/common/self.cfg b/modules/gdscript/tests/scripts/completion/common/self.cfg new file mode 100644 index 0000000000..871a404e3a --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/common/self.cfg @@ -0,0 +1,21 @@ +scene="res://completion/get_node/get_node.tscn" +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, + + ; GDScript: self.gd + {"display": "test_signal_1"}, + {"display": "test_signal_2"}, + {"display": "test_var_1"}, + {"display": "test_var_2"}, + {"display": "test_func_1"}, + {"display": "test_func_2"}, +] diff --git a/modules/gdscript/tests/scripts/completion/common/self.gd b/modules/gdscript/tests/scripts/completion/common/self.gd new file mode 100644 index 0000000000..9ad2fbea51 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/common/self.gd @@ -0,0 +1,16 @@ +extends "res://completion/class_a.notest.gd" + +signal test_signal_1(a) +signal test_signal_2(a: int) + +var test_var_1 +var test_var_2: int + +func test_func_1(t): + pass + +func test_func_2(t: int) -> void: + pass + +func _init(): + self.➡ diff --git a/modules/gdscript/tests/scripts/completion/filter/organized_export.cfg b/modules/gdscript/tests/scripts/completion/filter/organized_export.cfg new file mode 100644 index 0000000000..961a9ea58d --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/filter/organized_export.cfg @@ -0,0 +1,6 @@ +[output] +exclude=[ + {"display": "Test Category"}, + {"display": "Test Group"}, + {"display": "Test Subgroup"}, +] diff --git a/modules/gdscript/tests/scripts/completion/filter/organized_export.gd b/modules/gdscript/tests/scripts/completion/filter/organized_export.gd new file mode 100644 index 0000000000..189608904c --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/filter/organized_export.gd @@ -0,0 +1,8 @@ +extends CPUParticles2D + +@export_category("Test Category") +@export_group("Test Group") +@export_subgroup("Test Subgroup") + +func _init(): + ➡ diff --git a/modules/gdscript/tests/scripts/completion/filter/usage_internal.cfg b/modules/gdscript/tests/scripts/completion/filter/usage_internal.cfg new file mode 100644 index 0000000000..8c5bff5eac --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/filter/usage_internal.cfg @@ -0,0 +1,4 @@ +[output] +exclude=[ + {"display": "messages"}, +] diff --git a/modules/gdscript/tests/scripts/completion/filter/usage_internal.gd b/modules/gdscript/tests/scripts/completion/filter/usage_internal.gd new file mode 100644 index 0000000000..484c1c0d10 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/filter/usage_internal.gd @@ -0,0 +1,3 @@ +func test(): + var trans = Translation.new() + trans.➡ diff --git a/modules/gdscript/tests/scripts/completion/types/local/interfered.cfg b/modules/gdscript/tests/scripts/completion/types/local/interfered.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/interfered.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/local/interfered.gd b/modules/gdscript/tests/scripts/completion/types/local/interfered.gd new file mode 100644 index 0000000000..f003c366a4 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/interfered.gd @@ -0,0 +1,8 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +func a(): + var test := A.new() + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/local/no_type.cfg b/modules/gdscript/tests/scripts/completion/types/local/no_type.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/no_type.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/local/no_type.gd b/modules/gdscript/tests/scripts/completion/types/local/no_type.gd new file mode 100644 index 0000000000..f6b5ae3aef --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/no_type.gd @@ -0,0 +1,8 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +func a(): + var test = A.new() + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint.cfg b/modules/gdscript/tests/scripts/completion/types/local/typehint.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint.gd b/modules/gdscript/tests/scripts/completion/types/local/typehint.gd new file mode 100644 index 0000000000..24bcfc04fc --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint.gd @@ -0,0 +1,8 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +func a(): + var test: A + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.cfg b/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.gd b/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.gd new file mode 100644 index 0000000000..88b4812c30 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint_broad.gd @@ -0,0 +1,8 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +func a(): + var test: Node = A.new() + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.cfg b/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.gd b/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.gd new file mode 100644 index 0000000000..8e226546f3 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/local/typehint_incompatible.gd @@ -0,0 +1,8 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +func a(): + var test: A = Node.new() + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/member/interfered.cfg b/modules/gdscript/tests/scripts/completion/types/member/interfered.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/interfered.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/member/interfered.gd b/modules/gdscript/tests/scripts/completion/types/member/interfered.gd new file mode 100644 index 0000000000..069abd7891 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/interfered.gd @@ -0,0 +1,9 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +var test := A.new() + +func a(): + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/member/no_type.cfg b/modules/gdscript/tests/scripts/completion/types/member/no_type.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/no_type.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/member/no_type.gd b/modules/gdscript/tests/scripts/completion/types/member/no_type.gd new file mode 100644 index 0000000000..9bb9549e97 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/no_type.gd @@ -0,0 +1,9 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +var test = A.new() + +func a(): + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint.cfg b/modules/gdscript/tests/scripts/completion/types/member/typehint.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint.gd b/modules/gdscript/tests/scripts/completion/types/member/typehint.gd new file mode 100644 index 0000000000..7763a2e898 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint.gd @@ -0,0 +1,9 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +var test: A + +func a(): + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.cfg b/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.cfg new file mode 100644 index 0000000000..81401316ec --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.cfg @@ -0,0 +1,13 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, +] +exclude=[ + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.gd b/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.gd new file mode 100644 index 0000000000..a8506705a1 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint_broad.gd @@ -0,0 +1,9 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +var test: Node = A.new() + +func a(): + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.cfg b/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.cfg new file mode 100644 index 0000000000..8b68d51a89 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.cfg @@ -0,0 +1,12 @@ +[output] +include=[ + ; Node + {"display": "add_child"}, + {"display": "owner"}, + {"display": "child_entered_tree"}, + + ; GDScript: class_a.notest.gd + {"display": "property_of_a"}, + {"display": "func_of_a"}, + {"display": "signal_of_a"}, +] diff --git a/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.gd b/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.gd new file mode 100644 index 0000000000..8b5a80cfb3 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/types/member/typehint_incompatible.gd @@ -0,0 +1,9 @@ +extends Node + +const A := preload("res://completion/class_a.notest.gd") + +var test: A = Node.new() + +func a(): + test.➡ + pass diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.gd b/modules/gdscript/tests/scripts/parser/features/export_variable.gd index 483e6cab0d..8bcb2bcb9a 100644 --- a/modules/gdscript/tests/scripts/parser/features/export_variable.gd +++ b/modules/gdscript/tests/scripts/parser/features/export_variable.gd @@ -2,7 +2,8 @@ class_name ExportVariableTest extends Node const Utils = preload("../../utils.notest.gd") -const PreloadedScript = preload("./export_variable.notest.gd") +const PreloadedGlobalClass = preload("./export_variable_global.notest.gd") +const PreloadedUnnamedClass = preload("./export_variable_unnamed.notest.gd") # Built-in types. @export var test_weak_int = 1 @@ -24,7 +25,8 @@ const PreloadedScript = preload("./export_variable.notest.gd") # Global custom classes. @export var test_global_class: ExportVariableTest -@export var test_preloaded_script: PreloadedScript +@export var test_preloaded_global_class: PreloadedGlobalClass +@export var test_preloaded_unnamed_class: PreloadedUnnamedClass # GH-93168 # Arrays. @export var test_array: Array diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.notest.gd b/modules/gdscript/tests/scripts/parser/features/export_variable.notest.gd deleted file mode 100644 index 6d064351c1..0000000000 --- a/modules/gdscript/tests/scripts/parser/features/export_variable.notest.gd +++ /dev/null @@ -1,2 +0,0 @@ -class_name ExportPreloadedClassTest -extends Node diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.out b/modules/gdscript/tests/scripts/parser/features/export_variable.out index bb094e14b4..d10462bb8d 100644 --- a/modules/gdscript/tests/scripts/parser/features/export_variable.out +++ b/modules/gdscript/tests/scripts/parser/features/export_variable.out @@ -25,8 +25,10 @@ var test_timer: Timer = null hint=NODE_TYPE hint_string="Timer" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"Timer" var test_global_class: ExportVariableTest = null hint=NODE_TYPE hint_string="ExportVariableTest" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"ExportVariableTest" -var test_preloaded_script: ExportPreloadedClassTest = null - hint=NODE_TYPE hint_string="ExportPreloadedClassTest" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"ExportPreloadedClassTest" +var test_preloaded_global_class: ExportVariableTestGlobalClass = null + hint=NODE_TYPE hint_string="ExportVariableTestGlobalClass" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"ExportVariableTestGlobalClass" +var test_preloaded_unnamed_class: Node2D = null + hint=NODE_TYPE hint_string="Node2D" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"Node2D" var test_array: Array = [] hint=NONE hint_string="" usage=DEFAULT|SCRIPT_VARIABLE class_name=&"" var test_array_bool: Array = Array[bool]([]) diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable_global.notest.gd b/modules/gdscript/tests/scripts/parser/features/export_variable_global.notest.gd new file mode 100644 index 0000000000..caa2ead214 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/export_variable_global.notest.gd @@ -0,0 +1,2 @@ +class_name ExportVariableTestGlobalClass +extends Node2D diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable_unnamed.notest.gd b/modules/gdscript/tests/scripts/parser/features/export_variable_unnamed.notest.gd new file mode 100644 index 0000000000..e251cf8aee --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/export_variable_unnamed.notest.gd @@ -0,0 +1 @@ +extends Node2D diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_ends_with_new_line.gd b/modules/gdscript/tests/scripts/parser/features/lambda_ends_with_new_line.gd index 46b6856d22..c3a42288c7 100644 --- a/modules/gdscript/tests/scripts/parser/features/lambda_ends_with_new_line.gd +++ b/modules/gdscript/tests/scripts/parser/features/lambda_ends_with_new_line.gd @@ -9,6 +9,7 @@ func four_parameters(_a, callable : Callable, b=func(): print(10)): func test(): var v + @warning_ignore("confusable_capture_reassignment") v=func():v=1 if true: v=1 print(v) diff --git a/modules/gdscript/tests/scripts/runtime/errors/typed_array_assign_wrong_to_typed.out b/modules/gdscript/tests/scripts/runtime/errors/typed_array_assign_wrong_to_typed.out index 7b9f1066b0..9b38957101 100644 --- a/modules/gdscript/tests/scripts/runtime/errors/typed_array_assign_wrong_to_typed.out +++ b/modules/gdscript/tests/scripts/runtime/errors/typed_array_assign_wrong_to_typed.out @@ -1,4 +1,5 @@ GDTEST_RUNTIME_ERROR >> ERROR >> Method/function failed. +>> Unable to convert array index 0 from "Object" to "Object". not ok diff --git a/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.gd b/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.gd new file mode 100644 index 0000000000..67225cad6a --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.gd @@ -0,0 +1,18 @@ +# https://github.com/godotengine/godot/issues/93952 + +func foo(): + pass + +func test(): + var a: int + + var lambda_self := func (x: int) -> void: + foo() + print(a, x) + + print(lambda_self.get_argument_count()) # Should print 1. + + var lambda_non_self := func (x: int) -> void: + print(a, x) + + print(lambda_non_self.get_argument_count()) # Should print 1. diff --git a/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.out b/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.out new file mode 100644 index 0000000000..04b4638adf --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/lambda_bind_argument_count.out @@ -0,0 +1,3 @@ +GDTEST_OK +1 +1 diff --git a/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.gd b/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.gd new file mode 100644 index 0000000000..160e43a797 --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.gd @@ -0,0 +1,21 @@ +# https://github.com/godotengine/godot/issues/94074 + +func foo(): + pass + +func test(): + var lambda_self := func test() -> void: + foo() + var anon_lambda_self := func() -> void: + foo() + + print(lambda_self.get_method()) # Should print "test". + print(anon_lambda_self.get_method()) # Should print "<anonymous lambda>". + + var lambda_non_self := func test() -> void: + pass + var anon_lambda_non_self := func() -> void: + pass + + print(lambda_non_self.get_method()) # Should print "test". + print(anon_lambda_non_self.get_method()) # Should print "<anonymous lambda>". diff --git a/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.out b/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.out new file mode 100644 index 0000000000..17ee47fca2 --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/lambda_get_method.out @@ -0,0 +1,5 @@ +GDTEST_OK +test +<anonymous lambda> +test +<anonymous lambda> diff --git a/modules/glslang/register_types.cpp b/modules/glslang/register_types.cpp index 09ad1d6777..b5f70fb98b 100644 --- a/modules/glslang/register_types.cpp +++ b/modules/glslang/register_types.cpp @@ -33,7 +33,6 @@ #include "core/config/engine.h" #include "servers/rendering/rendering_device.h" -#include <glslang/Include/Types.h> #include <glslang/Public/ResourceLimits.h> #include <glslang/Public/ShaderLang.h> #include <glslang/SPIRV/GlslangToSpv.h> diff --git a/modules/gltf/doc_classes/GLTFAccessor.xml b/modules/gltf/doc_classes/GLTFAccessor.xml index 54762faed7..dd059e6b79 100644 --- a/modules/gltf/doc_classes/GLTFAccessor.xml +++ b/modules/gltf/doc_classes/GLTFAccessor.xml @@ -12,7 +12,7 @@ <link title="Runtime file loading and saving">$DOCS_URL/tutorials/io/runtime_file_loading_and_saving.html</link> </tutorials> <members> - <member name="accessor_type" type="int" setter="set_accessor_type" getter="get_accessor_type" default="0"> + <member name="accessor_type" type="int" setter="set_accessor_type" getter="get_accessor_type" enum="GLTFAccessor.GLTFAccessorType" default="0"> The GLTF accessor type as an enum. Possible values are 0 for "SCALAR", 1 for "VEC2", 2 for "VEC3", 3 for "VEC4", 4 for "MAT2", 5 for "MAT3", and 6 for "MAT4". </member> <member name="buffer_view" type="int" setter="set_buffer_view" getter="get_buffer_view" default="-1"> @@ -54,8 +54,31 @@ <member name="sparse_values_byte_offset" type="int" setter="set_sparse_values_byte_offset" getter="get_sparse_values_byte_offset" default="0"> The offset relative to the start of the bufferView in bytes. </member> - <member name="type" type="int" setter="set_type" getter="get_type" default="0" deprecated="Use [member accessor_type] instead."> + <member name="type" type="int" setter="set_type" getter="get_type" deprecated="Use [member accessor_type] instead."> The GLTF accessor type as an enum. Use [member accessor_type] instead. </member> </members> + <constants> + <constant name="TYPE_SCALAR" value="0" enum="GLTFAccessorType"> + Accessor type "SCALAR". For the glTF object model, this can be used to map to a single float, int, or bool value, or a float array. + </constant> + <constant name="TYPE_VEC2" value="1" enum="GLTFAccessorType"> + Accessor type "VEC2". For the glTF object model, this maps to "float2", represented in the glTF JSON as an array of two floats. + </constant> + <constant name="TYPE_VEC3" value="2" enum="GLTFAccessorType"> + Accessor type "VEC3". For the glTF object model, this maps to "float3", represented in the glTF JSON as an array of three floats. + </constant> + <constant name="TYPE_VEC4" value="3" enum="GLTFAccessorType"> + Accessor type "VEC4". For the glTF object model, this maps to "float4", represented in the glTF JSON as an array of four floats. + </constant> + <constant name="TYPE_MAT2" value="4" enum="GLTFAccessorType"> + Accessor type "MAT2". For the glTF object model, this maps to "float2x2", represented in the glTF JSON as an array of four floats. + </constant> + <constant name="TYPE_MAT3" value="5" enum="GLTFAccessorType"> + Accessor type "MAT3". For the glTF object model, this maps to "float3x3", represented in the glTF JSON as an array of nine floats. + </constant> + <constant name="TYPE_MAT4" value="6" enum="GLTFAccessorType"> + Accessor type "MAT4". For the glTF object model, this maps to "float4x4", represented in the glTF JSON as an array of sixteen floats. + </constant> + </constants> </class> diff --git a/modules/gltf/editor/editor_import_blend_runner.cpp b/modules/gltf/editor/editor_import_blend_runner.cpp index 330310d92a..22c8adfe88 100644 --- a/modules/gltf/editor/editor_import_blend_runner.cpp +++ b/modules/gltf/editor/editor_import_blend_runner.cpp @@ -43,6 +43,7 @@ from xmlrpc.server import SimpleXMLRPCServer req = threading.Condition() res = threading.Condition() info = None +export_err = None def xmlrpc_server(): server = SimpleXMLRPCServer(('127.0.0.1', %d)) server.register_function(export_gltf) @@ -54,6 +55,10 @@ def export_gltf(opts): req.notify() with res: res.wait() + if export_err: + raise export_err + # Important to return a value to prevent the error 'cannot marshal None unless allow_none is enabled'. + return 'BLENDER_GODOT_EXPORT_SUCCESSFUL' if bpy.app.version < (3, 0, 0): print('Blender 3.0 or higher is required.', file=sys.stderr) threading.Thread(target=xmlrpc_server).start() @@ -64,12 +69,13 @@ while True: method, opts = info if method == 'export_gltf': try: + export_err = None bpy.ops.wm.open_mainfile(filepath=opts['path']) if opts['unpack_all']: bpy.ops.file.unpack_all(method='USE_LOCAL') bpy.ops.export_scene.gltf(**opts['gltf_options']) - except: - pass + except Exception as e: + export_err = e info = None with res: res.notify() @@ -184,7 +190,9 @@ Error EditorImportBlendRunner::do_import(const Dictionary &p_options) { EditorSettings::get_singleton()->set_manually("filesystem/import/blender/rpc_port", 0); rpc_port = 0; } - err = do_import_direct(p_options); + if (err != ERR_QUERY_FAILED) { + err = do_import_direct(p_options); + } } return err; } else { @@ -259,6 +267,7 @@ Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) { // Wait for response. bool done = false; + PackedByteArray response; while (!done) { status = client->get_status(); switch (status) { @@ -268,7 +277,10 @@ Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) { } case HTTPClient::STATUS_BODY: { client->poll(); - // Parse response here if needed. For now we can just ignore it. + response.append_array(client->read_response_body_chunk()); + break; + } + case HTTPClient::STATUS_CONNECTED: { done = true; break; } @@ -278,9 +290,56 @@ Error EditorImportBlendRunner::do_import_rpc(const Dictionary &p_options) { } } + String response_text = "No response from Blender."; + if (response.size() > 0) { + response_text = String::utf8((const char *)response.ptr(), response.size()); + } + + if (client->get_response_code() != HTTPClient::RESPONSE_OK) { + ERR_FAIL_V_MSG(ERR_QUERY_FAILED, vformat("Error received from Blender - status code: %s, error: %s", client->get_response_code(), response_text)); + } else if (response_text.find("BLENDER_GODOT_EXPORT_SUCCESSFUL") < 0) { + // Previous versions of Godot used a Python script where the RPC function did not return + // a value, causing the error 'cannot marshal None unless allow_none is enabled'. + // If an older version of Godot is running and has started Blender with this script, + // we will receive the error, but there's a good chance that the import was successful. + // We are discarding this error to maintain backward compatibility and prevent situations + // where the user needs to close the older version of Godot or kill Blender. + if (response_text.find("cannot marshal None unless allow_none is enabled") < 0) { + String error_message; + if (_extract_error_message_xml(response, error_message)) { + ERR_FAIL_V_MSG(ERR_QUERY_FAILED, vformat("Blender exportation failed: %s", error_message)); + } else { + ERR_FAIL_V_MSG(ERR_QUERY_FAILED, vformat("Blender exportation failed: %s", response_text)); + } + } + } + return OK; } +bool EditorImportBlendRunner::_extract_error_message_xml(const Vector<uint8_t> &p_response_data, String &r_error_message) { + // Based on RPC Xml spec from: https://xmlrpc.com/spec.md + Ref<XMLParser> parser = memnew(XMLParser); + Error err = parser->open_buffer(p_response_data); + if (err) { + return false; + } + + r_error_message = String(); + while (parser->read() == OK) { + if (parser->get_node_type() == XMLParser::NODE_TEXT) { + if (parser->get_node_data().size()) { + if (r_error_message.size()) { + r_error_message += " "; + } + r_error_message += parser->get_node_data().trim_suffix("\n"); + } + } + } + + return r_error_message.size(); +} + Error EditorImportBlendRunner::do_import_direct(const Dictionary &p_options) { // Export glTF directly. String python = vformat(PYTHON_SCRIPT_DIRECT, dict_to_python(p_options)); diff --git a/modules/gltf/editor/editor_import_blend_runner.h b/modules/gltf/editor/editor_import_blend_runner.h index 626f3c9eba..b3b49ebfb2 100644 --- a/modules/gltf/editor/editor_import_blend_runner.h +++ b/modules/gltf/editor/editor_import_blend_runner.h @@ -47,6 +47,7 @@ class EditorImportBlendRunner : public Node { void _resources_reimported(const PackedStringArray &p_files); void _kill_blender(); void _notification(int p_what); + bool _extract_error_message_xml(const Vector<uint8_t> &p_response_data, String &r_error_message); protected: int rpc_port = 0; diff --git a/modules/gltf/editor/editor_scene_importer_blend.cpp b/modules/gltf/editor/editor_scene_importer_blend.cpp index 79a2184745..b474128fd6 100644 --- a/modules/gltf/editor/editor_scene_importer_blend.cpp +++ b/modules/gltf/editor/editor_scene_importer_blend.cpp @@ -132,12 +132,10 @@ Node *EditorSceneFormatImporterBlend::import_scene(const String &p_path, uint32_ } #endif - source_global = source_global.c_escape(); - const String blend_basename = p_path.get_file().get_basename(); const String sink = ProjectSettings::get_singleton()->get_imported_files_path().path_join( vformat("%s-%s.gltf", blend_basename, p_path.md5_text())); - const String sink_global = ProjectSettings::get_singleton()->globalize_path(sink).c_escape(); + const String sink_global = ProjectSettings::get_singleton()->globalize_path(sink); // Handle configuration options. @@ -188,10 +186,18 @@ Node *EditorSceneFormatImporterBlend::import_scene(const String &p_path, uint32_ } else { parameters_map["export_lights"] = false; } - if (p_options.has(SNAME("blender/meshes/colors")) && p_options[SNAME("blender/meshes/colors")]) { - parameters_map["export_colors"] = true; + if (blender_major_version > 4 || (blender_major_version == 4 && blender_minor_version >= 2)) { + if (p_options.has(SNAME("blender/meshes/colors")) && p_options[SNAME("blender/meshes/colors")]) { + parameters_map["export_vertex_color"] = "MATERIAL"; + } else { + parameters_map["export_vertex_color"] = "NONE"; + } } else { - parameters_map["export_colors"] = false; + if (p_options.has(SNAME("blender/meshes/colors")) && p_options[SNAME("blender/meshes/colors")]) { + parameters_map["export_colors"] = true; + } else { + parameters_map["export_colors"] = false; + } } if (p_options.has(SNAME("blender/nodes/visible"))) { int32_t visible = p_options["blender/nodes/visible"]; diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 32fe37d9af..c0232e6d0c 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -934,58 +934,58 @@ Error GLTFDocument::_encode_accessors(Ref<GLTFState> p_state) { return OK; } -String GLTFDocument::_get_accessor_type_name(const GLTFAccessorType p_accessor_type) { - if (p_accessor_type == GLTFAccessorType::TYPE_SCALAR) { +String GLTFDocument::_get_accessor_type_name(const GLTFAccessor::GLTFAccessorType p_accessor_type) { + if (p_accessor_type == GLTFAccessor::TYPE_SCALAR) { return "SCALAR"; } - if (p_accessor_type == GLTFAccessorType::TYPE_VEC2) { + if (p_accessor_type == GLTFAccessor::TYPE_VEC2) { return "VEC2"; } - if (p_accessor_type == GLTFAccessorType::TYPE_VEC3) { + if (p_accessor_type == GLTFAccessor::TYPE_VEC3) { return "VEC3"; } - if (p_accessor_type == GLTFAccessorType::TYPE_VEC4) { + if (p_accessor_type == GLTFAccessor::TYPE_VEC4) { return "VEC4"; } - if (p_accessor_type == GLTFAccessorType::TYPE_MAT2) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT2) { return "MAT2"; } - if (p_accessor_type == GLTFAccessorType::TYPE_MAT3) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT3) { return "MAT3"; } - if (p_accessor_type == GLTFAccessorType::TYPE_MAT4) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT4) { return "MAT4"; } ERR_FAIL_V("SCALAR"); } -GLTFAccessorType GLTFDocument::_get_accessor_type_from_str(const String &p_string) { +GLTFAccessor::GLTFAccessorType GLTFDocument::_get_accessor_type_from_str(const String &p_string) { if (p_string == "SCALAR") { - return GLTFAccessorType::TYPE_SCALAR; + return GLTFAccessor::TYPE_SCALAR; } if (p_string == "VEC2") { - return GLTFAccessorType::TYPE_VEC2; + return GLTFAccessor::TYPE_VEC2; } if (p_string == "VEC3") { - return GLTFAccessorType::TYPE_VEC3; + return GLTFAccessor::TYPE_VEC3; } if (p_string == "VEC4") { - return GLTFAccessorType::TYPE_VEC4; + return GLTFAccessor::TYPE_VEC4; } if (p_string == "MAT2") { - return GLTFAccessorType::TYPE_MAT2; + return GLTFAccessor::TYPE_MAT2; } if (p_string == "MAT3") { - return GLTFAccessorType::TYPE_MAT3; + return GLTFAccessor::TYPE_MAT3; } if (p_string == "MAT4") { - return GLTFAccessorType::TYPE_MAT4; + return GLTFAccessor::TYPE_MAT4; } - ERR_FAIL_V(GLTFAccessorType::TYPE_SCALAR); + ERR_FAIL_V(GLTFAccessor::TYPE_SCALAR); } Error GLTFDocument::_parse_accessors(Ref<GLTFState> p_state) { @@ -1088,7 +1088,7 @@ String GLTFDocument::_get_component_type_name(const uint32_t p_component) { return "<Error>"; } -Error GLTFDocument::_encode_buffer_view(Ref<GLTFState> p_state, const double *p_src, const int p_count, const GLTFAccessorType p_accessor_type, const int p_component_type, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex, GLTFBufferViewIndex &r_accessor, const bool p_for_vertex_indices) { +Error GLTFDocument::_encode_buffer_view(Ref<GLTFState> p_state, const double *p_src, const int p_count, const GLTFAccessor::GLTFAccessorType p_accessor_type, const int p_component_type, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex, GLTFBufferViewIndex &r_accessor, const bool p_for_vertex_indices) { const int component_count_for_type[7] = { 1, 2, 3, 4, 4, 9, 16 }; @@ -1103,18 +1103,18 @@ Error GLTFDocument::_encode_buffer_view(Ref<GLTFState> p_state, const double *p_ switch (p_component_type) { case COMPONENT_TYPE_BYTE: case COMPONENT_TYPE_UNSIGNED_BYTE: { - if (p_accessor_type == TYPE_MAT2) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT2) { skip_every = 2; skip_bytes = 2; } - if (p_accessor_type == TYPE_MAT3) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT3) { skip_every = 3; skip_bytes = 1; } } break; case COMPONENT_TYPE_SHORT: case COMPONENT_TYPE_UNSIGNED_SHORT: { - if (p_accessor_type == TYPE_MAT3) { + if (p_accessor_type == GLTFAccessor::TYPE_MAT3) { skip_every = 6; skip_bytes = 4; } @@ -1296,7 +1296,7 @@ Error GLTFDocument::_encode_buffer_view(Ref<GLTFState> p_state, const double *p_ return OK; } -Error GLTFDocument::_decode_buffer_view(Ref<GLTFState> p_state, double *p_dst, const GLTFBufferViewIndex p_buffer_view, const int p_skip_every, const int p_skip_bytes, const int p_element_size, const int p_count, const GLTFAccessorType p_accessor_type, const int p_component_count, const int p_component_type, const int p_component_size, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex) { +Error GLTFDocument::_decode_buffer_view(Ref<GLTFState> p_state, double *p_dst, const GLTFBufferViewIndex p_buffer_view, const int p_skip_every, const int p_skip_bytes, const int p_element_size, const int p_count, const GLTFAccessor::GLTFAccessorType p_accessor_type, const int p_component_count, const int p_component_type, const int p_component_size, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex) { const Ref<GLTFBufferView> bv = p_state->buffer_views[p_buffer_view]; int stride = p_element_size; @@ -1427,12 +1427,12 @@ Vector<double> GLTFDocument::_decode_accessor(Ref<GLTFState> p_state, const GLTF switch (a->component_type) { case COMPONENT_TYPE_BYTE: case COMPONENT_TYPE_UNSIGNED_BYTE: { - if (a->accessor_type == TYPE_MAT2) { + if (a->accessor_type == GLTFAccessor::TYPE_MAT2) { skip_every = 2; skip_bytes = 2; element_size = 8; //override for this case } - if (a->accessor_type == TYPE_MAT3) { + if (a->accessor_type == GLTFAccessor::TYPE_MAT3) { skip_every = 3; skip_bytes = 1; element_size = 12; //override for this case @@ -1440,7 +1440,7 @@ Vector<double> GLTFDocument::_decode_accessor(Ref<GLTFState> p_state, const GLTF } break; case COMPONENT_TYPE_SHORT: case COMPONENT_TYPE_UNSIGNED_SHORT: { - if (a->accessor_type == TYPE_MAT3) { + if (a->accessor_type == GLTFAccessor::TYPE_MAT3) { skip_every = 6; skip_bytes = 4; element_size = 16; //override for this case @@ -1474,7 +1474,7 @@ Vector<double> GLTFDocument::_decode_accessor(Ref<GLTFState> p_state, const GLTF indices.resize(a->sparse_count); const int indices_component_size = _get_component_type_size(a->sparse_indices_component_type); - Error err = _decode_buffer_view(p_state, indices.ptrw(), a->sparse_indices_buffer_view, 0, 0, indices_component_size, a->sparse_count, TYPE_SCALAR, 1, a->sparse_indices_component_type, indices_component_size, false, a->sparse_indices_byte_offset, false); + Error err = _decode_buffer_view(p_state, indices.ptrw(), a->sparse_indices_buffer_view, 0, 0, indices_component_size, a->sparse_count, GLTFAccessor::TYPE_SCALAR, 1, a->sparse_indices_component_type, indices_component_size, false, a->sparse_indices_byte_offset, false); if (err != OK) { return Vector<double>(); } @@ -1536,7 +1536,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_ints(Ref<GLTFState> p_state, p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_SCALAR; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_SCALAR; int component_type; if (max_index > 65535 || p_for_vertex) { component_type = GLTFDocument::COMPONENT_TYPE_INT; @@ -1650,7 +1650,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_vec2(Ref<GLTFState> p_state, p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC2; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC2; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -1703,7 +1703,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_color(Ref<GLTFState> p_state p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC4; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC4; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -1770,7 +1770,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_weights(Ref<GLTFState> p_sta p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC4; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC4; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -1821,7 +1821,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_joints(Ref<GLTFState> p_stat p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC4; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC4; const int component_type = GLTFDocument::COMPONENT_TYPE_UNSIGNED_SHORT; accessor->max = type_max; @@ -1874,7 +1874,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_quaternions(Ref<GLTFState> p p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC4; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC4; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -1949,7 +1949,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_floats(Ref<GLTFState> p_stat p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_SCALAR; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_SCALAR; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -1999,7 +1999,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_vec3(Ref<GLTFState> p_state, p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC3; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC3; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -2075,7 +2075,7 @@ GLTFAccessorIndex GLTFDocument::_encode_sparse_accessor_as_vec3(Ref<GLTFState> p p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_VEC3; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_VEC3; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; sparse_accessor->normalized = false; @@ -2103,7 +2103,7 @@ GLTFAccessorIndex GLTFDocument::_encode_sparse_accessor_as_vec3(Ref<GLTFState> p } else { sparse_accessor->sparse_indices_component_type = GLTFDocument::COMPONENT_TYPE_UNSIGNED_SHORT; } - if (_encode_buffer_view(p_state, changed_indices.ptr(), changed_indices.size(), GLTFAccessorType::TYPE_SCALAR, sparse_accessor->sparse_indices_component_type, sparse_accessor->normalized, sparse_accessor->sparse_indices_byte_offset, false, buffer_view_i_indices) != OK) { + if (_encode_buffer_view(p_state, changed_indices.ptr(), changed_indices.size(), GLTFAccessor::TYPE_SCALAR, sparse_accessor->sparse_indices_component_type, sparse_accessor->normalized, sparse_accessor->sparse_indices_byte_offset, false, buffer_view_i_indices) != OK) { return -1; } // We use changed_indices.size() here, because we must pass the number of vec3 values rather than the number of components. @@ -2180,7 +2180,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_xform(Ref<GLTFState> p_state p_state->buffers.push_back(Vector<uint8_t>()); } int64_t size = p_state->buffers[0].size(); - const GLTFAccessorType accessor_type = GLTFAccessorType::TYPE_MAT4; + const GLTFAccessor::GLTFAccessorType accessor_type = GLTFAccessor::TYPE_MAT4; const int component_type = GLTFDocument::COMPONENT_TYPE_FLOAT; accessor->max = type_max; @@ -2234,9 +2234,9 @@ Vector<Color> GLTFDocument::_decode_accessor_as_color(Ref<GLTFState> p_state, co } const int accessor_type = p_state->accessors[p_accessor]->accessor_type; - ERR_FAIL_COND_V(!(accessor_type == TYPE_VEC3 || accessor_type == TYPE_VEC4), ret); + ERR_FAIL_COND_V(!(accessor_type == GLTFAccessor::TYPE_VEC3 || accessor_type == GLTFAccessor::TYPE_VEC4), ret); int vec_len = 3; - if (accessor_type == TYPE_VEC4) { + if (accessor_type == GLTFAccessor::TYPE_VEC4) { vec_len = 4; } @@ -5785,15 +5785,17 @@ struct SceneFormatImporterGLTFInterpolate { return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * t2 + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); } - T bezier(T start, T control_1, T control_2, T end, float t) { - /* Formula from Wikipedia article on Bezier curves. */ - const real_t omt = (1.0 - t); - const real_t omt2 = omt * omt; - const real_t omt3 = omt2 * omt; + T hermite(T start, T tan_start, T end, T tan_end, float t) { + /* Formula from the glTF 2.0 specification. */ const real_t t2 = t * t; const real_t t3 = t2 * t; - return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3; + const real_t h00 = 2.0 * t3 - 3.0 * t2 + 1.0; + const real_t h10 = t3 - 2.0 * t2 + t; + const real_t h01 = -2.0 * t3 + 3.0 * t2; + const real_t h11 = t3 - t2; + + return start * h00 + tan_start * h10 + end * h01 + tan_end * h11; } }; @@ -5814,7 +5816,7 @@ struct SceneFormatImporterGLTFInterpolate<Quaternion> { return p1.slerp(p2, c).normalized(); } - Quaternion bezier(const Quaternion start, const Quaternion control_1, const Quaternion control_2, const Quaternion end, const float t) { + Quaternion hermite(const Quaternion start, const Quaternion tan_start, const Quaternion end, const Quaternion tan_end, const float t) { ERR_FAIL_COND_V_MSG(!start.is_normalized(), Quaternion(), vformat("The start quaternion %s must be normalized.", start)); ERR_FAIL_COND_V_MSG(!end.is_normalized(), Quaternion(), vformat("The end quaternion %s must be normalized.", end)); @@ -5879,14 +5881,15 @@ T GLTFDocument::_interpolate_track(const Vector<real_t> &p_times, const Vector<T return p_values[(p_times.size() - 1) * 3 + 1]; } - const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); + const float td = (p_times[idx + 1] - p_times[idx]); + const float c = (p_time - p_times[idx]) / td; const T &from = p_values[idx * 3 + 1]; - const T c1 = from + p_values[idx * 3 + 2]; + const T tan_from = td * p_values[idx * 3 + 2]; const T &to = p_values[idx * 3 + 4]; - const T c2 = to + p_values[idx * 3 + 3]; + const T tan_to = td * p_values[idx * 3 + 3]; - return interp.bezier(from, c1, c2, to, c); + return interp.hermite(from, tan_from, to, tan_to, c); } break; } diff --git a/modules/gltf/gltf_document.h b/modules/gltf/gltf_document.h index 4f92ceccca..d37544750d 100644 --- a/modules/gltf/gltf_document.h +++ b/modules/gltf/gltf_document.h @@ -111,7 +111,7 @@ private: int _get_component_type_size(const int p_component_type); Error _parse_scenes(Ref<GLTFState> p_state); Error _parse_nodes(Ref<GLTFState> p_state); - String _get_accessor_type_name(const GLTFAccessorType p_accessor_type); + String _get_accessor_type_name(const GLTFAccessor::GLTFAccessorType p_accessor_type); String _sanitize_animation_name(const String &p_name); String _gen_unique_animation_name(Ref<GLTFState> p_state, const String &p_name); String _sanitize_bone_name(const String &p_name); @@ -131,13 +131,13 @@ private: void _compute_node_heights(Ref<GLTFState> p_state); Error _parse_buffers(Ref<GLTFState> p_state, const String &p_base_path); Error _parse_buffer_views(Ref<GLTFState> p_state); - GLTFAccessorType _get_accessor_type_from_str(const String &p_string); + GLTFAccessor::GLTFAccessorType _get_accessor_type_from_str(const String &p_string); Error _parse_accessors(Ref<GLTFState> p_state); Error _decode_buffer_view(Ref<GLTFState> p_state, double *p_dst, const GLTFBufferViewIndex p_buffer_view, const int p_skip_every, const int p_skip_bytes, const int p_element_size, const int p_count, - const GLTFAccessorType p_accessor_type, const int p_component_count, + const GLTFAccessor::GLTFAccessorType p_accessor_type, const int p_component_count, const int p_component_type, const int p_component_size, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex); @@ -266,7 +266,7 @@ private: const Vector<Transform3D> p_attribs, const bool p_for_vertex); Error _encode_buffer_view(Ref<GLTFState> p_state, const double *p_src, - const int p_count, const GLTFAccessorType p_accessor_type, + const int p_count, const GLTFAccessor::GLTFAccessorType p_accessor_type, const int p_component_type, const bool p_normalized, const int p_byte_offset, const bool p_for_vertex, GLTFBufferViewIndex &r_accessor, const bool p_for_indices = false); diff --git a/modules/gltf/structures/gltf_accessor.cpp b/modules/gltf/structures/gltf_accessor.cpp index 602f0d9dc4..1ebc00a514 100644 --- a/modules/gltf/structures/gltf_accessor.cpp +++ b/modules/gltf/structures/gltf_accessor.cpp @@ -31,6 +31,14 @@ #include "gltf_accessor.h" void GLTFAccessor::_bind_methods() { + BIND_ENUM_CONSTANT(TYPE_SCALAR); + BIND_ENUM_CONSTANT(TYPE_VEC2); + BIND_ENUM_CONSTANT(TYPE_VEC3); + BIND_ENUM_CONSTANT(TYPE_VEC4); + BIND_ENUM_CONSTANT(TYPE_MAT2); + BIND_ENUM_CONSTANT(TYPE_MAT3); + BIND_ENUM_CONSTANT(TYPE_MAT4); + ClassDB::bind_method(D_METHOD("get_buffer_view"), &GLTFAccessor::get_buffer_view); ClassDB::bind_method(D_METHOD("set_buffer_view", "buffer_view"), &GLTFAccessor::set_buffer_view); ClassDB::bind_method(D_METHOD("get_byte_offset"), &GLTFAccessor::get_byte_offset); @@ -43,8 +51,8 @@ void GLTFAccessor::_bind_methods() { ClassDB::bind_method(D_METHOD("set_count", "count"), &GLTFAccessor::set_count); ClassDB::bind_method(D_METHOD("get_accessor_type"), &GLTFAccessor::get_accessor_type); ClassDB::bind_method(D_METHOD("set_accessor_type", "accessor_type"), &GLTFAccessor::set_accessor_type); - ClassDB::bind_method(D_METHOD("get_type"), &GLTFAccessor::get_accessor_type); - ClassDB::bind_method(D_METHOD("set_type", "type"), &GLTFAccessor::set_accessor_type); + ClassDB::bind_method(D_METHOD("get_type"), &GLTFAccessor::get_type); + ClassDB::bind_method(D_METHOD("set_type", "type"), &GLTFAccessor::set_type); ClassDB::bind_method(D_METHOD("get_min"), &GLTFAccessor::get_min); ClassDB::bind_method(D_METHOD("set_min", "min"), &GLTFAccessor::set_min); ClassDB::bind_method(D_METHOD("get_max"), &GLTFAccessor::get_max); @@ -67,8 +75,8 @@ void GLTFAccessor::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "component_type"), "set_component_type", "get_component_type"); // int ADD_PROPERTY(PropertyInfo(Variant::BOOL, "normalized"), "set_normalized", "get_normalized"); // bool ADD_PROPERTY(PropertyInfo(Variant::INT, "count"), "set_count", "get_count"); // int - ADD_PROPERTY(PropertyInfo(Variant::INT, "accessor_type"), "set_accessor_type", "get_accessor_type"); // GLTFAccessorType - ADD_PROPERTY(PropertyInfo(Variant::INT, "type"), "set_type", "get_type"); // Deprecated, GLTFAccessorType + ADD_PROPERTY(PropertyInfo(Variant::INT, "accessor_type"), "set_accessor_type", "get_accessor_type"); // GLTFAccessor::GLTFAccessorType + ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_type", "get_type"); // Deprecated, int for GLTFAccessor::GLTFAccessorType ADD_PROPERTY(PropertyInfo(Variant::PACKED_FLOAT64_ARRAY, "min"), "set_min", "get_min"); // Vector<real_t> ADD_PROPERTY(PropertyInfo(Variant::PACKED_FLOAT64_ARRAY, "max"), "set_max", "get_max"); // Vector<real_t> ADD_PROPERTY(PropertyInfo(Variant::INT, "sparse_count"), "set_sparse_count", "get_sparse_count"); // int @@ -119,11 +127,19 @@ void GLTFAccessor::set_count(int p_count) { count = p_count; } -int GLTFAccessor::get_accessor_type() { +GLTFAccessor::GLTFAccessorType GLTFAccessor::get_accessor_type() { + return accessor_type; +} + +void GLTFAccessor::set_accessor_type(GLTFAccessorType p_accessor_type) { + accessor_type = p_accessor_type; +} + +int GLTFAccessor::get_type() { return (int)accessor_type; } -void GLTFAccessor::set_accessor_type(int p_accessor_type) { +void GLTFAccessor::set_type(int p_accessor_type) { accessor_type = (GLTFAccessorType)p_accessor_type; // TODO: Register enum } diff --git a/modules/gltf/structures/gltf_accessor.h b/modules/gltf/structures/gltf_accessor.h index 51ca282630..1a3a2cb494 100644 --- a/modules/gltf/structures/gltf_accessor.h +++ b/modules/gltf/structures/gltf_accessor.h @@ -35,20 +35,21 @@ #include "core/io/resource.h" -enum GLTFAccessorType { - TYPE_SCALAR, - TYPE_VEC2, - TYPE_VEC3, - TYPE_VEC4, - TYPE_MAT2, - TYPE_MAT3, - TYPE_MAT4, -}; - struct GLTFAccessor : public Resource { GDCLASS(GLTFAccessor, Resource); friend class GLTFDocument; +public: + enum GLTFAccessorType { + TYPE_SCALAR, + TYPE_VEC2, + TYPE_VEC3, + TYPE_VEC4, + TYPE_MAT2, + TYPE_MAT3, + TYPE_MAT4, + }; + private: GLTFBufferViewIndex buffer_view = -1; int byte_offset = 0; @@ -84,8 +85,11 @@ public: int get_count(); void set_count(int p_count); - int get_accessor_type(); - void set_accessor_type(int p_accessor_type); + GLTFAccessorType get_accessor_type(); + void set_accessor_type(GLTFAccessorType p_accessor_type); + + int get_type(); + void set_type(int p_accessor_type); Vector<double> get_min(); void set_min(Vector<double> p_min); @@ -112,4 +116,6 @@ public: void set_sparse_values_byte_offset(int p_sparse_values_byte_offset); }; +VARIANT_ENUM_CAST(GLTFAccessor::GLTFAccessorType); + #endif // GLTF_ACCESSOR_H diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp index b93b7c1a8c..f402e2a583 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.cpp +++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp @@ -59,10 +59,18 @@ void GridMapEditor::_menu_option(int p_option) { switch (p_option) { case MENU_OPTION_PREV_LEVEL: { floor->set_value(floor->get_value() - 1); + if (selection.active && input_action == INPUT_SELECT) { + selection.current[edit_axis]--; + _validate_selection(); + } } break; case MENU_OPTION_NEXT_LEVEL: { floor->set_value(floor->get_value() + 1); + if (selection.active && input_action == INPUT_SELECT) { + selection.current[edit_axis]++; + _validate_selection(); + } } break; case MENU_OPTION_X_AXIS: @@ -754,19 +762,6 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D } } } - - if (k->is_shift_pressed() && selection.active && input_action != INPUT_PASTE) { - if (k->get_keycode() == (Key)options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_PREV_LEVEL))) { - selection.click[edit_axis]--; - _validate_selection(); - return EditorPlugin::AFTER_GUI_INPUT_STOP; - } - if (k->get_keycode() == (Key)options->get_popup()->get_item_accelerator(options->get_popup()->get_item_index(MENU_OPTION_NEXT_LEVEL))) { - selection.click[edit_axis]++; - _validate_selection(); - return EditorPlugin::AFTER_GUI_INPUT_STOP; - } - } } } diff --git a/modules/gridmap/icons/GridMap.svg b/modules/gridmap/icons/GridMap.svg index 38e48a2707..eddeadbcac 100644 --- a/modules/gridmap/icons/GridMap.svg +++ b/modules/gridmap/icons/GridMap.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1-6 3v8l6 3 6-3v-2l-2-1-4 2-2-1v-4l2-1v-2l2-1zm4 2-2 1v2l2 1 2-1v-2z" fill="#fc7f7f"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fc7f7f" d="m8 1-6 3v8l6 3 6-3v-2l-2-1-4 2-2-1v-4l2-1v-2l2-1zm4 2-2 1v2l2 1 2-1v-2z"/></svg>
\ No newline at end of file diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp index ada0cd01fa..53046de740 100644 --- a/modules/jpg/image_loader_jpegd.cpp +++ b/modules/jpg/image_loader_jpegd.cpp @@ -162,7 +162,7 @@ static Error _jpgd_save_to_output_stream(jpge::output_stream *p_output_stream, c ERR_FAIL_COND_V_MSG(error != OK, error, "Couldn't decompress image."); } if (image->get_format() != Image::FORMAT_RGB8) { - image = p_img->duplicate(); + image = image->duplicate(); image->convert(Image::FORMAT_RGB8); } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AbstractGenericNode(Of T)_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AbstractGenericNode(Of T)_ScriptProperties.generated.cs index a561c5fc0d..024d4b7fbe 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AbstractGenericNode(Of T)_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AbstractGenericNode(Of T)_ScriptProperties.generated.cs @@ -11,14 +11,14 @@ partial class AbstractGenericNode<T> /// <summary> /// Cached name for the 'MyArray' property. /// </summary> - public new static readonly global::Godot.StringName MyArray = "MyArray"; + public new static readonly global::Godot.StringName @MyArray = "MyArray"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName.MyArray) { - this.MyArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<T>(value); + if (name == PropertyName.@MyArray) { + this.@MyArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<T>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -27,8 +27,8 @@ partial class AbstractGenericNode<T> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName.MyArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this.MyArray); + if (name == PropertyName.@MyArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this.@MyArray); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -42,7 +42,7 @@ partial class AbstractGenericNode<T> internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.MyArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@MyArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllReadOnly_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllReadOnly_ScriptProperties.generated.cs index 825daffe80..dbcefbbcbd 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllReadOnly_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllReadOnly_ScriptProperties.generated.cs @@ -11,38 +11,38 @@ partial class AllReadOnly /// <summary> /// Cached name for the 'ReadOnlyAutoProperty' property. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyAutoProperty = "ReadOnlyAutoProperty"; + public new static readonly global::Godot.StringName @ReadOnlyAutoProperty = "ReadOnlyAutoProperty"; /// <summary> /// Cached name for the 'ReadOnlyProperty' property. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyProperty = "ReadOnlyProperty"; + public new static readonly global::Godot.StringName @ReadOnlyProperty = "ReadOnlyProperty"; /// <summary> /// Cached name for the 'InitOnlyAutoProperty' property. /// </summary> - public new static readonly global::Godot.StringName InitOnlyAutoProperty = "InitOnlyAutoProperty"; + public new static readonly global::Godot.StringName @InitOnlyAutoProperty = "InitOnlyAutoProperty"; /// <summary> /// Cached name for the 'ReadOnlyField' field. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyField = "ReadOnlyField"; + public new static readonly global::Godot.StringName @ReadOnlyField = "ReadOnlyField"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName.ReadOnlyAutoProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyAutoProperty); + if (name == PropertyName.@ReadOnlyAutoProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyAutoProperty); return true; } - if (name == PropertyName.ReadOnlyProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyProperty); + if (name == PropertyName.@ReadOnlyProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyProperty); return true; } - if (name == PropertyName.InitOnlyAutoProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.InitOnlyAutoProperty); + if (name == PropertyName.@InitOnlyAutoProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@InitOnlyAutoProperty); return true; } - if (name == PropertyName.ReadOnlyField) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyField); + if (name == PropertyName.@ReadOnlyField) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyField); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -56,10 +56,10 @@ partial class AllReadOnly internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.InitOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@InitOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllWriteOnly_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllWriteOnly_ScriptProperties.generated.cs index 615450efe8..0d559132ac 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllWriteOnly_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/AllWriteOnly_ScriptProperties.generated.cs @@ -11,22 +11,22 @@ partial class AllWriteOnly /// <summary> /// Cached name for the 'WriteOnlyProperty' property. /// </summary> - public new static readonly global::Godot.StringName WriteOnlyProperty = "WriteOnlyProperty"; + public new static readonly global::Godot.StringName @WriteOnlyProperty = "WriteOnlyProperty"; /// <summary> /// Cached name for the '_writeOnlyBackingField' field. /// </summary> - public new static readonly global::Godot.StringName _writeOnlyBackingField = "_writeOnlyBackingField"; + public new static readonly global::Godot.StringName @_writeOnlyBackingField = "_writeOnlyBackingField"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName.WriteOnlyProperty) { - this.WriteOnlyProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@WriteOnlyProperty) { + this.@WriteOnlyProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } - if (name == PropertyName._writeOnlyBackingField) { - this._writeOnlyBackingField = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@_writeOnlyBackingField) { + this.@_writeOnlyBackingField = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -35,8 +35,8 @@ partial class AllWriteOnly [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName._writeOnlyBackingField) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this._writeOnlyBackingField); + if (name == PropertyName.@_writeOnlyBackingField) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this.@_writeOnlyBackingField); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -50,8 +50,8 @@ partial class AllWriteOnly internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName._writeOnlyBackingField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.WriteOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@_writeOnlyBackingField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@WriteOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/EventSignals_ScriptSignals.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/EventSignals_ScriptSignals.generated.cs index b1c57e6b26..cc45e5746f 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/EventSignals_ScriptSignals.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/EventSignals_ScriptSignals.generated.cs @@ -11,7 +11,7 @@ partial class EventSignals /// <summary> /// Cached name for the 'MySignal' signal. /// </summary> - public new static readonly global::Godot.StringName MySignal = "MySignal"; + public new static readonly global::Godot.StringName @MySignal = "MySignal"; } /// <summary> /// Get the signal information for all the signals declared in this class. @@ -22,13 +22,13 @@ partial class EventSignals internal new static global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo> GetGodotSignalList() { var signals = new global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo>(1); - signals.Add(new(name: SignalName.MySignal, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)4, name: "str", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), new(type: (global::Godot.Variant.Type)2, name: "num", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + signals.Add(new(name: SignalName.@MySignal, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)4, name: "str", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), new(type: (global::Godot.Variant.Type)2, name: "num", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); return signals; } #pragma warning restore CS0109 private global::EventSignals.MySignalEventHandler backing_MySignal; /// <inheritdoc cref="global::EventSignals.MySignalEventHandler"/> - public event global::EventSignals.MySignalEventHandler MySignal { + public event global::EventSignals.MySignalEventHandler @MySignal { add => backing_MySignal += value; remove => backing_MySignal -= value; } @@ -36,7 +36,7 @@ partial class EventSignals [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void RaiseGodotClassSignalCallbacks(in godot_string_name signal, NativeVariantPtrArgs args) { - if (signal == SignalName.MySignal && args.Count == 2) { + if (signal == SignalName.@MySignal && args.Count == 2) { backing_MySignal?.Invoke(global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(args[0]), global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[1])); return; } @@ -46,7 +46,7 @@ partial class EventSignals [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool HasGodotClassSignal(in godot_string_name signal) { - if (signal == SignalName.MySignal) { + if (signal == SignalName.@MySignal) { return true; } return base.HasGodotClassSignal(signal); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0106_OK_ScriptPropertyDefVal.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0106_OK_ScriptPropertyDefVal.generated.cs index f9dc4003e7..8ff51265c1 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0106_OK_ScriptPropertyDefVal.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0106_OK_ScriptPropertyDefVal.generated.cs @@ -13,7 +13,7 @@ partial class ExportDiagnostics_GD0106_OK { var values = new global::System.Collections.Generic.Dictionary<global::Godot.StringName, global::Godot.Variant>(1); int __MyProperty_default_value = default; - values.Add(PropertyName.MyProperty, global::Godot.Variant.From<int>(__MyProperty_default_value)); + values.Add(PropertyName.@MyProperty, global::Godot.Variant.From<int>(__MyProperty_default_value)); return values; } #endif // TOOLS diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0107_OK_ScriptPropertyDefVal.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0107_OK_ScriptPropertyDefVal.generated.cs index 8b823d52c1..217f467637 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0107_OK_ScriptPropertyDefVal.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportDiagnostics_GD0107_OK_ScriptPropertyDefVal.generated.cs @@ -13,9 +13,9 @@ partial class ExportDiagnostics_GD0107_OK { var values = new global::System.Collections.Generic.Dictionary<global::Godot.StringName, global::Godot.Variant>(2); global::Godot.Node __NodeProperty_default_value = default; - values.Add(PropertyName.NodeProperty, global::Godot.Variant.From<global::Godot.Node>(__NodeProperty_default_value)); + values.Add(PropertyName.@NodeProperty, global::Godot.Variant.From<global::Godot.Node>(__NodeProperty_default_value)); global::Godot.Node __NodeField_default_value = default; - values.Add(PropertyName.NodeField, global::Godot.Variant.From<global::Godot.Node>(__NodeField_default_value)); + values.Add(PropertyName.@NodeField, global::Godot.Variant.From<global::Godot.Node>(__NodeField_default_value)); return values; } #endif // TOOLS diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedComplexStrings_ScriptPropertyDefVal.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedComplexStrings_ScriptPropertyDefVal.generated.cs index 69e85b4467..2fc0ca50d1 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedComplexStrings_ScriptPropertyDefVal.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedComplexStrings_ScriptPropertyDefVal.generated.cs @@ -13,15 +13,15 @@ partial class ExportedComplexStrings { var values = new global::System.Collections.Generic.Dictionary<global::Godot.StringName, global::Godot.Variant>(5); string __PropertyInterpolated1_default_value = $"The quick brown fox jumps over {(global::Godot.GD.VarToStr($"the lazy {(global::Godot.Engine.GetVersionInfo())} do"))}g."; - values.Add(PropertyName.PropertyInterpolated1, global::Godot.Variant.From<string>(__PropertyInterpolated1_default_value)); + values.Add(PropertyName.@PropertyInterpolated1, global::Godot.Variant.From<string>(__PropertyInterpolated1_default_value)); string ___fieldInterpolated1_default_value = $"The quick brown fox jumps over ({(global::Godot.Engine.GetVersionInfo())})"; - values.Add(PropertyName._fieldInterpolated1, global::Godot.Variant.From<string>(___fieldInterpolated1_default_value)); + values.Add(PropertyName.@_fieldInterpolated1, global::Godot.Variant.From<string>(___fieldInterpolated1_default_value)); string ___fieldInterpolated2_default_value = $"The quick brown fox jumps over ({(global::Godot.Engine.GetVersionInfo()["major"]),0:G}) the lazy dog."; - values.Add(PropertyName._fieldInterpolated2, global::Godot.Variant.From<string>(___fieldInterpolated2_default_value)); + values.Add(PropertyName.@_fieldInterpolated2, global::Godot.Variant.From<string>(___fieldInterpolated2_default_value)); string ___fieldInterpolated3_default_value = $"{(((int)global::Godot.Engine.GetVersionInfo()["major"]) * -1 * -1):G} the lazy dog."; - values.Add(PropertyName._fieldInterpolated3, global::Godot.Variant.From<string>(___fieldInterpolated3_default_value)); + values.Add(PropertyName.@_fieldInterpolated3, global::Godot.Variant.From<string>(___fieldInterpolated3_default_value)); string ___fieldInterpolated4_default_value = $"{(":::fff,,}<,<}},,}]")}"; - values.Add(PropertyName._fieldInterpolated4, global::Godot.Variant.From<string>(___fieldInterpolated4_default_value)); + values.Add(PropertyName.@_fieldInterpolated4, global::Godot.Variant.From<string>(___fieldInterpolated4_default_value)); return values; } #endif // TOOLS diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptProperties.generated.cs index 67ec4fa883..6a3884dabf 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptProperties.generated.cs @@ -11,486 +11,486 @@ partial class ExportedFields /// <summary> /// Cached name for the '_fieldBoolean' field. /// </summary> - public new static readonly global::Godot.StringName _fieldBoolean = "_fieldBoolean"; + public new static readonly global::Godot.StringName @_fieldBoolean = "_fieldBoolean"; /// <summary> /// Cached name for the '_fieldChar' field. /// </summary> - public new static readonly global::Godot.StringName _fieldChar = "_fieldChar"; + public new static readonly global::Godot.StringName @_fieldChar = "_fieldChar"; /// <summary> /// Cached name for the '_fieldSByte' field. /// </summary> - public new static readonly global::Godot.StringName _fieldSByte = "_fieldSByte"; + public new static readonly global::Godot.StringName @_fieldSByte = "_fieldSByte"; /// <summary> /// Cached name for the '_fieldInt16' field. /// </summary> - public new static readonly global::Godot.StringName _fieldInt16 = "_fieldInt16"; + public new static readonly global::Godot.StringName @_fieldInt16 = "_fieldInt16"; /// <summary> /// Cached name for the '_fieldInt32' field. /// </summary> - public new static readonly global::Godot.StringName _fieldInt32 = "_fieldInt32"; + public new static readonly global::Godot.StringName @_fieldInt32 = "_fieldInt32"; /// <summary> /// Cached name for the '_fieldInt64' field. /// </summary> - public new static readonly global::Godot.StringName _fieldInt64 = "_fieldInt64"; + public new static readonly global::Godot.StringName @_fieldInt64 = "_fieldInt64"; /// <summary> /// Cached name for the '_fieldByte' field. /// </summary> - public new static readonly global::Godot.StringName _fieldByte = "_fieldByte"; + public new static readonly global::Godot.StringName @_fieldByte = "_fieldByte"; /// <summary> /// Cached name for the '_fieldUInt16' field. /// </summary> - public new static readonly global::Godot.StringName _fieldUInt16 = "_fieldUInt16"; + public new static readonly global::Godot.StringName @_fieldUInt16 = "_fieldUInt16"; /// <summary> /// Cached name for the '_fieldUInt32' field. /// </summary> - public new static readonly global::Godot.StringName _fieldUInt32 = "_fieldUInt32"; + public new static readonly global::Godot.StringName @_fieldUInt32 = "_fieldUInt32"; /// <summary> /// Cached name for the '_fieldUInt64' field. /// </summary> - public new static readonly global::Godot.StringName _fieldUInt64 = "_fieldUInt64"; + public new static readonly global::Godot.StringName @_fieldUInt64 = "_fieldUInt64"; /// <summary> /// Cached name for the '_fieldSingle' field. /// </summary> - public new static readonly global::Godot.StringName _fieldSingle = "_fieldSingle"; + public new static readonly global::Godot.StringName @_fieldSingle = "_fieldSingle"; /// <summary> /// Cached name for the '_fieldDouble' field. /// </summary> - public new static readonly global::Godot.StringName _fieldDouble = "_fieldDouble"; + public new static readonly global::Godot.StringName @_fieldDouble = "_fieldDouble"; /// <summary> /// Cached name for the '_fieldString' field. /// </summary> - public new static readonly global::Godot.StringName _fieldString = "_fieldString"; + public new static readonly global::Godot.StringName @_fieldString = "_fieldString"; /// <summary> /// Cached name for the '_fieldVector2' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector2 = "_fieldVector2"; + public new static readonly global::Godot.StringName @_fieldVector2 = "_fieldVector2"; /// <summary> /// Cached name for the '_fieldVector2I' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector2I = "_fieldVector2I"; + public new static readonly global::Godot.StringName @_fieldVector2I = "_fieldVector2I"; /// <summary> /// Cached name for the '_fieldRect2' field. /// </summary> - public new static readonly global::Godot.StringName _fieldRect2 = "_fieldRect2"; + public new static readonly global::Godot.StringName @_fieldRect2 = "_fieldRect2"; /// <summary> /// Cached name for the '_fieldRect2I' field. /// </summary> - public new static readonly global::Godot.StringName _fieldRect2I = "_fieldRect2I"; + public new static readonly global::Godot.StringName @_fieldRect2I = "_fieldRect2I"; /// <summary> /// Cached name for the '_fieldTransform2D' field. /// </summary> - public new static readonly global::Godot.StringName _fieldTransform2D = "_fieldTransform2D"; + public new static readonly global::Godot.StringName @_fieldTransform2D = "_fieldTransform2D"; /// <summary> /// Cached name for the '_fieldVector3' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector3 = "_fieldVector3"; + public new static readonly global::Godot.StringName @_fieldVector3 = "_fieldVector3"; /// <summary> /// Cached name for the '_fieldVector3I' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector3I = "_fieldVector3I"; + public new static readonly global::Godot.StringName @_fieldVector3I = "_fieldVector3I"; /// <summary> /// Cached name for the '_fieldBasis' field. /// </summary> - public new static readonly global::Godot.StringName _fieldBasis = "_fieldBasis"; + public new static readonly global::Godot.StringName @_fieldBasis = "_fieldBasis"; /// <summary> /// Cached name for the '_fieldQuaternion' field. /// </summary> - public new static readonly global::Godot.StringName _fieldQuaternion = "_fieldQuaternion"; + public new static readonly global::Godot.StringName @_fieldQuaternion = "_fieldQuaternion"; /// <summary> /// Cached name for the '_fieldTransform3D' field. /// </summary> - public new static readonly global::Godot.StringName _fieldTransform3D = "_fieldTransform3D"; + public new static readonly global::Godot.StringName @_fieldTransform3D = "_fieldTransform3D"; /// <summary> /// Cached name for the '_fieldVector4' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector4 = "_fieldVector4"; + public new static readonly global::Godot.StringName @_fieldVector4 = "_fieldVector4"; /// <summary> /// Cached name for the '_fieldVector4I' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector4I = "_fieldVector4I"; + public new static readonly global::Godot.StringName @_fieldVector4I = "_fieldVector4I"; /// <summary> /// Cached name for the '_fieldProjection' field. /// </summary> - public new static readonly global::Godot.StringName _fieldProjection = "_fieldProjection"; + public new static readonly global::Godot.StringName @_fieldProjection = "_fieldProjection"; /// <summary> /// Cached name for the '_fieldAabb' field. /// </summary> - public new static readonly global::Godot.StringName _fieldAabb = "_fieldAabb"; + public new static readonly global::Godot.StringName @_fieldAabb = "_fieldAabb"; /// <summary> /// Cached name for the '_fieldColor' field. /// </summary> - public new static readonly global::Godot.StringName _fieldColor = "_fieldColor"; + public new static readonly global::Godot.StringName @_fieldColor = "_fieldColor"; /// <summary> /// Cached name for the '_fieldPlane' field. /// </summary> - public new static readonly global::Godot.StringName _fieldPlane = "_fieldPlane"; + public new static readonly global::Godot.StringName @_fieldPlane = "_fieldPlane"; /// <summary> /// Cached name for the '_fieldCallable' field. /// </summary> - public new static readonly global::Godot.StringName _fieldCallable = "_fieldCallable"; + public new static readonly global::Godot.StringName @_fieldCallable = "_fieldCallable"; /// <summary> /// Cached name for the '_fieldSignal' field. /// </summary> - public new static readonly global::Godot.StringName _fieldSignal = "_fieldSignal"; + public new static readonly global::Godot.StringName @_fieldSignal = "_fieldSignal"; /// <summary> /// Cached name for the '_fieldEnum' field. /// </summary> - public new static readonly global::Godot.StringName _fieldEnum = "_fieldEnum"; + public new static readonly global::Godot.StringName @_fieldEnum = "_fieldEnum"; /// <summary> /// Cached name for the '_fieldFlagsEnum' field. /// </summary> - public new static readonly global::Godot.StringName _fieldFlagsEnum = "_fieldFlagsEnum"; + public new static readonly global::Godot.StringName @_fieldFlagsEnum = "_fieldFlagsEnum"; /// <summary> /// Cached name for the '_fieldByteArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldByteArray = "_fieldByteArray"; + public new static readonly global::Godot.StringName @_fieldByteArray = "_fieldByteArray"; /// <summary> /// Cached name for the '_fieldInt32Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldInt32Array = "_fieldInt32Array"; + public new static readonly global::Godot.StringName @_fieldInt32Array = "_fieldInt32Array"; /// <summary> /// Cached name for the '_fieldInt64Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldInt64Array = "_fieldInt64Array"; + public new static readonly global::Godot.StringName @_fieldInt64Array = "_fieldInt64Array"; /// <summary> /// Cached name for the '_fieldSingleArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldSingleArray = "_fieldSingleArray"; + public new static readonly global::Godot.StringName @_fieldSingleArray = "_fieldSingleArray"; /// <summary> /// Cached name for the '_fieldDoubleArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldDoubleArray = "_fieldDoubleArray"; + public new static readonly global::Godot.StringName @_fieldDoubleArray = "_fieldDoubleArray"; /// <summary> /// Cached name for the '_fieldStringArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldStringArray = "_fieldStringArray"; + public new static readonly global::Godot.StringName @_fieldStringArray = "_fieldStringArray"; /// <summary> /// Cached name for the '_fieldStringArrayEnum' field. /// </summary> - public new static readonly global::Godot.StringName _fieldStringArrayEnum = "_fieldStringArrayEnum"; + public new static readonly global::Godot.StringName @_fieldStringArrayEnum = "_fieldStringArrayEnum"; /// <summary> /// Cached name for the '_fieldVector2Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector2Array = "_fieldVector2Array"; + public new static readonly global::Godot.StringName @_fieldVector2Array = "_fieldVector2Array"; /// <summary> /// Cached name for the '_fieldVector3Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVector3Array = "_fieldVector3Array"; + public new static readonly global::Godot.StringName @_fieldVector3Array = "_fieldVector3Array"; /// <summary> /// Cached name for the '_fieldColorArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldColorArray = "_fieldColorArray"; + public new static readonly global::Godot.StringName @_fieldColorArray = "_fieldColorArray"; /// <summary> /// Cached name for the '_fieldGodotObjectOrDerivedArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotObjectOrDerivedArray = "_fieldGodotObjectOrDerivedArray"; + public new static readonly global::Godot.StringName @_fieldGodotObjectOrDerivedArray = "_fieldGodotObjectOrDerivedArray"; /// <summary> /// Cached name for the '_fieldStringNameArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldStringNameArray = "_fieldStringNameArray"; + public new static readonly global::Godot.StringName @_fieldStringNameArray = "_fieldStringNameArray"; /// <summary> /// Cached name for the '_fieldNodePathArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldNodePathArray = "_fieldNodePathArray"; + public new static readonly global::Godot.StringName @_fieldNodePathArray = "_fieldNodePathArray"; /// <summary> /// Cached name for the '_fieldRidArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldRidArray = "_fieldRidArray"; + public new static readonly global::Godot.StringName @_fieldRidArray = "_fieldRidArray"; /// <summary> /// Cached name for the '_fieldEmptyInt32Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldEmptyInt32Array = "_fieldEmptyInt32Array"; + public new static readonly global::Godot.StringName @_fieldEmptyInt32Array = "_fieldEmptyInt32Array"; /// <summary> /// Cached name for the '_fieldArrayFromList' field. /// </summary> - public new static readonly global::Godot.StringName _fieldArrayFromList = "_fieldArrayFromList"; + public new static readonly global::Godot.StringName @_fieldArrayFromList = "_fieldArrayFromList"; /// <summary> /// Cached name for the '_fieldVariant' field. /// </summary> - public new static readonly global::Godot.StringName _fieldVariant = "_fieldVariant"; + public new static readonly global::Godot.StringName @_fieldVariant = "_fieldVariant"; /// <summary> /// Cached name for the '_fieldGodotObjectOrDerived' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotObjectOrDerived = "_fieldGodotObjectOrDerived"; + public new static readonly global::Godot.StringName @_fieldGodotObjectOrDerived = "_fieldGodotObjectOrDerived"; /// <summary> /// Cached name for the '_fieldGodotResourceTexture' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotResourceTexture = "_fieldGodotResourceTexture"; + public new static readonly global::Godot.StringName @_fieldGodotResourceTexture = "_fieldGodotResourceTexture"; /// <summary> /// Cached name for the '_fieldStringName' field. /// </summary> - public new static readonly global::Godot.StringName _fieldStringName = "_fieldStringName"; + public new static readonly global::Godot.StringName @_fieldStringName = "_fieldStringName"; /// <summary> /// Cached name for the '_fieldNodePath' field. /// </summary> - public new static readonly global::Godot.StringName _fieldNodePath = "_fieldNodePath"; + public new static readonly global::Godot.StringName @_fieldNodePath = "_fieldNodePath"; /// <summary> /// Cached name for the '_fieldRid' field. /// </summary> - public new static readonly global::Godot.StringName _fieldRid = "_fieldRid"; + public new static readonly global::Godot.StringName @_fieldRid = "_fieldRid"; /// <summary> /// Cached name for the '_fieldGodotDictionary' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotDictionary = "_fieldGodotDictionary"; + public new static readonly global::Godot.StringName @_fieldGodotDictionary = "_fieldGodotDictionary"; /// <summary> /// Cached name for the '_fieldGodotArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotArray = "_fieldGodotArray"; + public new static readonly global::Godot.StringName @_fieldGodotArray = "_fieldGodotArray"; /// <summary> /// Cached name for the '_fieldGodotGenericDictionary' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotGenericDictionary = "_fieldGodotGenericDictionary"; + public new static readonly global::Godot.StringName @_fieldGodotGenericDictionary = "_fieldGodotGenericDictionary"; /// <summary> /// Cached name for the '_fieldGodotGenericArray' field. /// </summary> - public new static readonly global::Godot.StringName _fieldGodotGenericArray = "_fieldGodotGenericArray"; + public new static readonly global::Godot.StringName @_fieldGodotGenericArray = "_fieldGodotGenericArray"; /// <summary> /// Cached name for the '_fieldEmptyInt64Array' field. /// </summary> - public new static readonly global::Godot.StringName _fieldEmptyInt64Array = "_fieldEmptyInt64Array"; + public new static readonly global::Godot.StringName @_fieldEmptyInt64Array = "_fieldEmptyInt64Array"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName._fieldBoolean) { - this._fieldBoolean = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@_fieldBoolean) { + this.@_fieldBoolean = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } - if (name == PropertyName._fieldChar) { - this._fieldChar = global::Godot.NativeInterop.VariantUtils.ConvertTo<char>(value); + if (name == PropertyName.@_fieldChar) { + this.@_fieldChar = global::Godot.NativeInterop.VariantUtils.ConvertTo<char>(value); return true; } - if (name == PropertyName._fieldSByte) { - this._fieldSByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<sbyte>(value); + if (name == PropertyName.@_fieldSByte) { + this.@_fieldSByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<sbyte>(value); return true; } - if (name == PropertyName._fieldInt16) { - this._fieldInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<short>(value); + if (name == PropertyName.@_fieldInt16) { + this.@_fieldInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<short>(value); return true; } - if (name == PropertyName._fieldInt32) { - this._fieldInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); + if (name == PropertyName.@_fieldInt32) { + this.@_fieldInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); return true; } - if (name == PropertyName._fieldInt64) { - this._fieldInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<long>(value); + if (name == PropertyName.@_fieldInt64) { + this.@_fieldInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<long>(value); return true; } - if (name == PropertyName._fieldByte) { - this._fieldByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte>(value); + if (name == PropertyName.@_fieldByte) { + this.@_fieldByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte>(value); return true; } - if (name == PropertyName._fieldUInt16) { - this._fieldUInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ushort>(value); + if (name == PropertyName.@_fieldUInt16) { + this.@_fieldUInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ushort>(value); return true; } - if (name == PropertyName._fieldUInt32) { - this._fieldUInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<uint>(value); + if (name == PropertyName.@_fieldUInt32) { + this.@_fieldUInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<uint>(value); return true; } - if (name == PropertyName._fieldUInt64) { - this._fieldUInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ulong>(value); + if (name == PropertyName.@_fieldUInt64) { + this.@_fieldUInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ulong>(value); return true; } - if (name == PropertyName._fieldSingle) { - this._fieldSingle = global::Godot.NativeInterop.VariantUtils.ConvertTo<float>(value); + if (name == PropertyName.@_fieldSingle) { + this.@_fieldSingle = global::Godot.NativeInterop.VariantUtils.ConvertTo<float>(value); return true; } - if (name == PropertyName._fieldDouble) { - this._fieldDouble = global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(value); + if (name == PropertyName.@_fieldDouble) { + this.@_fieldDouble = global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(value); return true; } - if (name == PropertyName._fieldString) { - this._fieldString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@_fieldString) { + this.@_fieldString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName._fieldVector2) { - this._fieldVector2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2>(value); + if (name == PropertyName.@_fieldVector2) { + this.@_fieldVector2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2>(value); return true; } - if (name == PropertyName._fieldVector2I) { - this._fieldVector2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2I>(value); + if (name == PropertyName.@_fieldVector2I) { + this.@_fieldVector2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2I>(value); return true; } - if (name == PropertyName._fieldRect2) { - this._fieldRect2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2>(value); + if (name == PropertyName.@_fieldRect2) { + this.@_fieldRect2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2>(value); return true; } - if (name == PropertyName._fieldRect2I) { - this._fieldRect2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2I>(value); + if (name == PropertyName.@_fieldRect2I) { + this.@_fieldRect2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2I>(value); return true; } - if (name == PropertyName._fieldTransform2D) { - this._fieldTransform2D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform2D>(value); + if (name == PropertyName.@_fieldTransform2D) { + this.@_fieldTransform2D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform2D>(value); return true; } - if (name == PropertyName._fieldVector3) { - this._fieldVector3 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3>(value); + if (name == PropertyName.@_fieldVector3) { + this.@_fieldVector3 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3>(value); return true; } - if (name == PropertyName._fieldVector3I) { - this._fieldVector3I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3I>(value); + if (name == PropertyName.@_fieldVector3I) { + this.@_fieldVector3I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3I>(value); return true; } - if (name == PropertyName._fieldBasis) { - this._fieldBasis = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Basis>(value); + if (name == PropertyName.@_fieldBasis) { + this.@_fieldBasis = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Basis>(value); return true; } - if (name == PropertyName._fieldQuaternion) { - this._fieldQuaternion = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Quaternion>(value); + if (name == PropertyName.@_fieldQuaternion) { + this.@_fieldQuaternion = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Quaternion>(value); return true; } - if (name == PropertyName._fieldTransform3D) { - this._fieldTransform3D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform3D>(value); + if (name == PropertyName.@_fieldTransform3D) { + this.@_fieldTransform3D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform3D>(value); return true; } - if (name == PropertyName._fieldVector4) { - this._fieldVector4 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4>(value); + if (name == PropertyName.@_fieldVector4) { + this.@_fieldVector4 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4>(value); return true; } - if (name == PropertyName._fieldVector4I) { - this._fieldVector4I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4I>(value); + if (name == PropertyName.@_fieldVector4I) { + this.@_fieldVector4I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4I>(value); return true; } - if (name == PropertyName._fieldProjection) { - this._fieldProjection = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Projection>(value); + if (name == PropertyName.@_fieldProjection) { + this.@_fieldProjection = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Projection>(value); return true; } - if (name == PropertyName._fieldAabb) { - this._fieldAabb = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Aabb>(value); + if (name == PropertyName.@_fieldAabb) { + this.@_fieldAabb = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Aabb>(value); return true; } - if (name == PropertyName._fieldColor) { - this._fieldColor = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color>(value); + if (name == PropertyName.@_fieldColor) { + this.@_fieldColor = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color>(value); return true; } - if (name == PropertyName._fieldPlane) { - this._fieldPlane = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Plane>(value); + if (name == PropertyName.@_fieldPlane) { + this.@_fieldPlane = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Plane>(value); return true; } - if (name == PropertyName._fieldCallable) { - this._fieldCallable = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Callable>(value); + if (name == PropertyName.@_fieldCallable) { + this.@_fieldCallable = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Callable>(value); return true; } - if (name == PropertyName._fieldSignal) { - this._fieldSignal = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Signal>(value); + if (name == PropertyName.@_fieldSignal) { + this.@_fieldSignal = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Signal>(value); return true; } - if (name == PropertyName._fieldEnum) { - this._fieldEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedFields.MyEnum>(value); + if (name == PropertyName.@_fieldEnum) { + this.@_fieldEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedFields.MyEnum>(value); return true; } - if (name == PropertyName._fieldFlagsEnum) { - this._fieldFlagsEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedFields.MyFlagsEnum>(value); + if (name == PropertyName.@_fieldFlagsEnum) { + this.@_fieldFlagsEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedFields.MyFlagsEnum>(value); return true; } - if (name == PropertyName._fieldByteArray) { - this._fieldByteArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte[]>(value); + if (name == PropertyName.@_fieldByteArray) { + this.@_fieldByteArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte[]>(value); return true; } - if (name == PropertyName._fieldInt32Array) { - this._fieldInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); + if (name == PropertyName.@_fieldInt32Array) { + this.@_fieldInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); return true; } - if (name == PropertyName._fieldInt64Array) { - this._fieldInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); + if (name == PropertyName.@_fieldInt64Array) { + this.@_fieldInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); return true; } - if (name == PropertyName._fieldSingleArray) { - this._fieldSingleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<float[]>(value); + if (name == PropertyName.@_fieldSingleArray) { + this.@_fieldSingleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<float[]>(value); return true; } - if (name == PropertyName._fieldDoubleArray) { - this._fieldDoubleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<double[]>(value); + if (name == PropertyName.@_fieldDoubleArray) { + this.@_fieldDoubleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<double[]>(value); return true; } - if (name == PropertyName._fieldStringArray) { - this._fieldStringArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); + if (name == PropertyName.@_fieldStringArray) { + this.@_fieldStringArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); return true; } - if (name == PropertyName._fieldStringArrayEnum) { - this._fieldStringArrayEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); + if (name == PropertyName.@_fieldStringArrayEnum) { + this.@_fieldStringArrayEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); return true; } - if (name == PropertyName._fieldVector2Array) { - this._fieldVector2Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2[]>(value); + if (name == PropertyName.@_fieldVector2Array) { + this.@_fieldVector2Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2[]>(value); return true; } - if (name == PropertyName._fieldVector3Array) { - this._fieldVector3Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3[]>(value); + if (name == PropertyName.@_fieldVector3Array) { + this.@_fieldVector3Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3[]>(value); return true; } - if (name == PropertyName._fieldColorArray) { - this._fieldColorArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color[]>(value); + if (name == PropertyName.@_fieldColorArray) { + this.@_fieldColorArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color[]>(value); return true; } - if (name == PropertyName._fieldGodotObjectOrDerivedArray) { - this._fieldGodotObjectOrDerivedArray = global::Godot.NativeInterop.VariantUtils.ConvertToSystemArrayOfGodotObject<global::Godot.GodotObject>(value); + if (name == PropertyName.@_fieldGodotObjectOrDerivedArray) { + this.@_fieldGodotObjectOrDerivedArray = global::Godot.NativeInterop.VariantUtils.ConvertToSystemArrayOfGodotObject<global::Godot.GodotObject>(value); return true; } - if (name == PropertyName._fieldStringNameArray) { - this._fieldStringNameArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName[]>(value); + if (name == PropertyName.@_fieldStringNameArray) { + this.@_fieldStringNameArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName[]>(value); return true; } - if (name == PropertyName._fieldNodePathArray) { - this._fieldNodePathArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath[]>(value); + if (name == PropertyName.@_fieldNodePathArray) { + this.@_fieldNodePathArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath[]>(value); return true; } - if (name == PropertyName._fieldRidArray) { - this._fieldRidArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid[]>(value); + if (name == PropertyName.@_fieldRidArray) { + this.@_fieldRidArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid[]>(value); return true; } - if (name == PropertyName._fieldEmptyInt32Array) { - this._fieldEmptyInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); + if (name == PropertyName.@_fieldEmptyInt32Array) { + this.@_fieldEmptyInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); return true; } - if (name == PropertyName._fieldArrayFromList) { - this._fieldArrayFromList = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); + if (name == PropertyName.@_fieldArrayFromList) { + this.@_fieldArrayFromList = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); return true; } - if (name == PropertyName._fieldVariant) { - this._fieldVariant = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Variant>(value); + if (name == PropertyName.@_fieldVariant) { + this.@_fieldVariant = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Variant>(value); return true; } - if (name == PropertyName._fieldGodotObjectOrDerived) { - this._fieldGodotObjectOrDerived = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.GodotObject>(value); + if (name == PropertyName.@_fieldGodotObjectOrDerived) { + this.@_fieldGodotObjectOrDerived = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.GodotObject>(value); return true; } - if (name == PropertyName._fieldGodotResourceTexture) { - this._fieldGodotResourceTexture = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Texture>(value); + if (name == PropertyName.@_fieldGodotResourceTexture) { + this.@_fieldGodotResourceTexture = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Texture>(value); return true; } - if (name == PropertyName._fieldStringName) { - this._fieldStringName = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(value); + if (name == PropertyName.@_fieldStringName) { + this.@_fieldStringName = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(value); return true; } - if (name == PropertyName._fieldNodePath) { - this._fieldNodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); + if (name == PropertyName.@_fieldNodePath) { + this.@_fieldNodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); return true; } - if (name == PropertyName._fieldRid) { - this._fieldRid = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid>(value); + if (name == PropertyName.@_fieldRid) { + this.@_fieldRid = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid>(value); return true; } - if (name == PropertyName._fieldGodotDictionary) { - this._fieldGodotDictionary = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Dictionary>(value); + if (name == PropertyName.@_fieldGodotDictionary) { + this.@_fieldGodotDictionary = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Dictionary>(value); return true; } - if (name == PropertyName._fieldGodotArray) { - this._fieldGodotArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Array>(value); + if (name == PropertyName.@_fieldGodotArray) { + this.@_fieldGodotArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Array>(value); return true; } - if (name == PropertyName._fieldGodotGenericDictionary) { - this._fieldGodotGenericDictionary = global::Godot.NativeInterop.VariantUtils.ConvertToDictionary<string, bool>(value); + if (name == PropertyName.@_fieldGodotGenericDictionary) { + this.@_fieldGodotGenericDictionary = global::Godot.NativeInterop.VariantUtils.ConvertToDictionary<string, bool>(value); return true; } - if (name == PropertyName._fieldGodotGenericArray) { - this._fieldGodotGenericArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<int>(value); + if (name == PropertyName.@_fieldGodotGenericArray) { + this.@_fieldGodotGenericArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<int>(value); return true; } - if (name == PropertyName._fieldEmptyInt64Array) { - this._fieldEmptyInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); + if (name == PropertyName.@_fieldEmptyInt64Array) { + this.@_fieldEmptyInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -499,244 +499,244 @@ partial class ExportedFields [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName._fieldBoolean) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this._fieldBoolean); + if (name == PropertyName.@_fieldBoolean) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this.@_fieldBoolean); return true; } - if (name == PropertyName._fieldChar) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<char>(this._fieldChar); + if (name == PropertyName.@_fieldChar) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<char>(this.@_fieldChar); return true; } - if (name == PropertyName._fieldSByte) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<sbyte>(this._fieldSByte); + if (name == PropertyName.@_fieldSByte) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<sbyte>(this.@_fieldSByte); return true; } - if (name == PropertyName._fieldInt16) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<short>(this._fieldInt16); + if (name == PropertyName.@_fieldInt16) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<short>(this.@_fieldInt16); return true; } - if (name == PropertyName._fieldInt32) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this._fieldInt32); + if (name == PropertyName.@_fieldInt32) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this.@_fieldInt32); return true; } - if (name == PropertyName._fieldInt64) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long>(this._fieldInt64); + if (name == PropertyName.@_fieldInt64) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long>(this.@_fieldInt64); return true; } - if (name == PropertyName._fieldByte) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte>(this._fieldByte); + if (name == PropertyName.@_fieldByte) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte>(this.@_fieldByte); return true; } - if (name == PropertyName._fieldUInt16) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ushort>(this._fieldUInt16); + if (name == PropertyName.@_fieldUInt16) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ushort>(this.@_fieldUInt16); return true; } - if (name == PropertyName._fieldUInt32) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<uint>(this._fieldUInt32); + if (name == PropertyName.@_fieldUInt32) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<uint>(this.@_fieldUInt32); return true; } - if (name == PropertyName._fieldUInt64) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ulong>(this._fieldUInt64); + if (name == PropertyName.@_fieldUInt64) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ulong>(this.@_fieldUInt64); return true; } - if (name == PropertyName._fieldSingle) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float>(this._fieldSingle); + if (name == PropertyName.@_fieldSingle) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float>(this.@_fieldSingle); return true; } - if (name == PropertyName._fieldDouble) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double>(this._fieldDouble); + if (name == PropertyName.@_fieldDouble) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double>(this.@_fieldDouble); return true; } - if (name == PropertyName._fieldString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this._fieldString); + if (name == PropertyName.@_fieldString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@_fieldString); return true; } - if (name == PropertyName._fieldVector2) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2>(this._fieldVector2); + if (name == PropertyName.@_fieldVector2) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2>(this.@_fieldVector2); return true; } - if (name == PropertyName._fieldVector2I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2I>(this._fieldVector2I); + if (name == PropertyName.@_fieldVector2I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2I>(this.@_fieldVector2I); return true; } - if (name == PropertyName._fieldRect2) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2>(this._fieldRect2); + if (name == PropertyName.@_fieldRect2) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2>(this.@_fieldRect2); return true; } - if (name == PropertyName._fieldRect2I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2I>(this._fieldRect2I); + if (name == PropertyName.@_fieldRect2I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2I>(this.@_fieldRect2I); return true; } - if (name == PropertyName._fieldTransform2D) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform2D>(this._fieldTransform2D); + if (name == PropertyName.@_fieldTransform2D) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform2D>(this.@_fieldTransform2D); return true; } - if (name == PropertyName._fieldVector3) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3>(this._fieldVector3); + if (name == PropertyName.@_fieldVector3) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3>(this.@_fieldVector3); return true; } - if (name == PropertyName._fieldVector3I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3I>(this._fieldVector3I); + if (name == PropertyName.@_fieldVector3I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3I>(this.@_fieldVector3I); return true; } - if (name == PropertyName._fieldBasis) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Basis>(this._fieldBasis); + if (name == PropertyName.@_fieldBasis) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Basis>(this.@_fieldBasis); return true; } - if (name == PropertyName._fieldQuaternion) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Quaternion>(this._fieldQuaternion); + if (name == PropertyName.@_fieldQuaternion) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Quaternion>(this.@_fieldQuaternion); return true; } - if (name == PropertyName._fieldTransform3D) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform3D>(this._fieldTransform3D); + if (name == PropertyName.@_fieldTransform3D) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform3D>(this.@_fieldTransform3D); return true; } - if (name == PropertyName._fieldVector4) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4>(this._fieldVector4); + if (name == PropertyName.@_fieldVector4) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4>(this.@_fieldVector4); return true; } - if (name == PropertyName._fieldVector4I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4I>(this._fieldVector4I); + if (name == PropertyName.@_fieldVector4I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4I>(this.@_fieldVector4I); return true; } - if (name == PropertyName._fieldProjection) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Projection>(this._fieldProjection); + if (name == PropertyName.@_fieldProjection) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Projection>(this.@_fieldProjection); return true; } - if (name == PropertyName._fieldAabb) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Aabb>(this._fieldAabb); + if (name == PropertyName.@_fieldAabb) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Aabb>(this.@_fieldAabb); return true; } - if (name == PropertyName._fieldColor) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color>(this._fieldColor); + if (name == PropertyName.@_fieldColor) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color>(this.@_fieldColor); return true; } - if (name == PropertyName._fieldPlane) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Plane>(this._fieldPlane); + if (name == PropertyName.@_fieldPlane) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Plane>(this.@_fieldPlane); return true; } - if (name == PropertyName._fieldCallable) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Callable>(this._fieldCallable); + if (name == PropertyName.@_fieldCallable) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Callable>(this.@_fieldCallable); return true; } - if (name == PropertyName._fieldSignal) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Signal>(this._fieldSignal); + if (name == PropertyName.@_fieldSignal) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Signal>(this.@_fieldSignal); return true; } - if (name == PropertyName._fieldEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedFields.MyEnum>(this._fieldEnum); + if (name == PropertyName.@_fieldEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedFields.MyEnum>(this.@_fieldEnum); return true; } - if (name == PropertyName._fieldFlagsEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedFields.MyFlagsEnum>(this._fieldFlagsEnum); + if (name == PropertyName.@_fieldFlagsEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedFields.MyFlagsEnum>(this.@_fieldFlagsEnum); return true; } - if (name == PropertyName._fieldByteArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte[]>(this._fieldByteArray); + if (name == PropertyName.@_fieldByteArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte[]>(this.@_fieldByteArray); return true; } - if (name == PropertyName._fieldInt32Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this._fieldInt32Array); + if (name == PropertyName.@_fieldInt32Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this.@_fieldInt32Array); return true; } - if (name == PropertyName._fieldInt64Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this._fieldInt64Array); + if (name == PropertyName.@_fieldInt64Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this.@_fieldInt64Array); return true; } - if (name == PropertyName._fieldSingleArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float[]>(this._fieldSingleArray); + if (name == PropertyName.@_fieldSingleArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float[]>(this.@_fieldSingleArray); return true; } - if (name == PropertyName._fieldDoubleArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double[]>(this._fieldDoubleArray); + if (name == PropertyName.@_fieldDoubleArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double[]>(this.@_fieldDoubleArray); return true; } - if (name == PropertyName._fieldStringArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this._fieldStringArray); + if (name == PropertyName.@_fieldStringArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.@_fieldStringArray); return true; } - if (name == PropertyName._fieldStringArrayEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this._fieldStringArrayEnum); + if (name == PropertyName.@_fieldStringArrayEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.@_fieldStringArrayEnum); return true; } - if (name == PropertyName._fieldVector2Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2[]>(this._fieldVector2Array); + if (name == PropertyName.@_fieldVector2Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2[]>(this.@_fieldVector2Array); return true; } - if (name == PropertyName._fieldVector3Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3[]>(this._fieldVector3Array); + if (name == PropertyName.@_fieldVector3Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3[]>(this.@_fieldVector3Array); return true; } - if (name == PropertyName._fieldColorArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color[]>(this._fieldColorArray); + if (name == PropertyName.@_fieldColorArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color[]>(this.@_fieldColorArray); return true; } - if (name == PropertyName._fieldGodotObjectOrDerivedArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromSystemArrayOfGodotObject(this._fieldGodotObjectOrDerivedArray); + if (name == PropertyName.@_fieldGodotObjectOrDerivedArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromSystemArrayOfGodotObject(this.@_fieldGodotObjectOrDerivedArray); return true; } - if (name == PropertyName._fieldStringNameArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName[]>(this._fieldStringNameArray); + if (name == PropertyName.@_fieldStringNameArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName[]>(this.@_fieldStringNameArray); return true; } - if (name == PropertyName._fieldNodePathArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath[]>(this._fieldNodePathArray); + if (name == PropertyName.@_fieldNodePathArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath[]>(this.@_fieldNodePathArray); return true; } - if (name == PropertyName._fieldRidArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid[]>(this._fieldRidArray); + if (name == PropertyName.@_fieldRidArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid[]>(this.@_fieldRidArray); return true; } - if (name == PropertyName._fieldEmptyInt32Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this._fieldEmptyInt32Array); + if (name == PropertyName.@_fieldEmptyInt32Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this.@_fieldEmptyInt32Array); return true; } - if (name == PropertyName._fieldArrayFromList) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this._fieldArrayFromList); + if (name == PropertyName.@_fieldArrayFromList) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this.@_fieldArrayFromList); return true; } - if (name == PropertyName._fieldVariant) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Variant>(this._fieldVariant); + if (name == PropertyName.@_fieldVariant) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Variant>(this.@_fieldVariant); return true; } - if (name == PropertyName._fieldGodotObjectOrDerived) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.GodotObject>(this._fieldGodotObjectOrDerived); + if (name == PropertyName.@_fieldGodotObjectOrDerived) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.GodotObject>(this.@_fieldGodotObjectOrDerived); return true; } - if (name == PropertyName._fieldGodotResourceTexture) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Texture>(this._fieldGodotResourceTexture); + if (name == PropertyName.@_fieldGodotResourceTexture) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Texture>(this.@_fieldGodotResourceTexture); return true; } - if (name == PropertyName._fieldStringName) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName>(this._fieldStringName); + if (name == PropertyName.@_fieldStringName) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName>(this.@_fieldStringName); return true; } - if (name == PropertyName._fieldNodePath) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this._fieldNodePath); + if (name == PropertyName.@_fieldNodePath) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this.@_fieldNodePath); return true; } - if (name == PropertyName._fieldRid) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid>(this._fieldRid); + if (name == PropertyName.@_fieldRid) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid>(this.@_fieldRid); return true; } - if (name == PropertyName._fieldGodotDictionary) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Dictionary>(this._fieldGodotDictionary); + if (name == PropertyName.@_fieldGodotDictionary) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Dictionary>(this.@_fieldGodotDictionary); return true; } - if (name == PropertyName._fieldGodotArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Array>(this._fieldGodotArray); + if (name == PropertyName.@_fieldGodotArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Array>(this.@_fieldGodotArray); return true; } - if (name == PropertyName._fieldGodotGenericDictionary) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromDictionary(this._fieldGodotGenericDictionary); + if (name == PropertyName.@_fieldGodotGenericDictionary) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromDictionary(this.@_fieldGodotGenericDictionary); return true; } - if (name == PropertyName._fieldGodotGenericArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this._fieldGodotGenericArray); + if (name == PropertyName.@_fieldGodotGenericArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this.@_fieldGodotGenericArray); return true; } - if (name == PropertyName._fieldEmptyInt64Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this._fieldEmptyInt64Array); + if (name == PropertyName.@_fieldEmptyInt64Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this.@_fieldEmptyInt64Array); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -750,66 +750,66 @@ partial class ExportedFields internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName._fieldBoolean, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldChar, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldSByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldUInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldUInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldUInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName._fieldSingle, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName._fieldDouble, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName._fieldString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)5, name: PropertyName._fieldVector2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)6, name: PropertyName._fieldVector2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)7, name: PropertyName._fieldRect2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)8, name: PropertyName._fieldRect2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)11, name: PropertyName._fieldTransform2D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)9, name: PropertyName._fieldVector3, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)10, name: PropertyName._fieldVector3I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)17, name: PropertyName._fieldBasis, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)15, name: PropertyName._fieldQuaternion, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)18, name: PropertyName._fieldTransform3D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)12, name: PropertyName._fieldVector4, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)13, name: PropertyName._fieldVector4I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)19, name: PropertyName._fieldProjection, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)16, name: PropertyName._fieldAabb, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)20, name: PropertyName._fieldColor, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)14, name: PropertyName._fieldPlane, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)25, name: PropertyName._fieldCallable, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)26, name: PropertyName._fieldSignal, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldEnum, hint: (global::Godot.PropertyHint)2, hintString: "A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._fieldFlagsEnum, hint: (global::Godot.PropertyHint)6, hintString: "A:0,B:1,C:2", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)29, name: PropertyName._fieldByteArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName._fieldInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName._fieldInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)32, name: PropertyName._fieldSingleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)33, name: PropertyName._fieldDoubleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName._fieldStringArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName._fieldStringArrayEnum, hint: (global::Godot.PropertyHint)23, hintString: "4/2:A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)35, name: PropertyName._fieldVector2Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)36, name: PropertyName._fieldVector3Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)37, name: PropertyName._fieldColorArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldGodotObjectOrDerivedArray, hint: (global::Godot.PropertyHint)23, hintString: "24/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldStringNameArray, hint: (global::Godot.PropertyHint)23, hintString: "21/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldNodePathArray, hint: (global::Godot.PropertyHint)23, hintString: "22/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldRidArray, hint: (global::Godot.PropertyHint)23, hintString: "23/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName._fieldEmptyInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName._fieldArrayFromList, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)0, name: PropertyName._fieldVariant, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)135174, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName._fieldGodotObjectOrDerived, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName._fieldGodotResourceTexture, hint: (global::Godot.PropertyHint)17, hintString: "Texture", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)21, name: PropertyName._fieldStringName, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName._fieldNodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)23, name: PropertyName._fieldRid, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName._fieldGodotDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldGodotArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName._fieldGodotGenericDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName._fieldGodotGenericArray, hint: (global::Godot.PropertyHint)23, hintString: "2/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName._fieldEmptyInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@_fieldBoolean, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldChar, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldSByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldUInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldUInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldUInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.@_fieldSingle, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.@_fieldDouble, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@_fieldString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)5, name: PropertyName.@_fieldVector2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)6, name: PropertyName.@_fieldVector2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)7, name: PropertyName.@_fieldRect2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)8, name: PropertyName.@_fieldRect2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)11, name: PropertyName.@_fieldTransform2D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)9, name: PropertyName.@_fieldVector3, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)10, name: PropertyName.@_fieldVector3I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)17, name: PropertyName.@_fieldBasis, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)15, name: PropertyName.@_fieldQuaternion, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)18, name: PropertyName.@_fieldTransform3D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)12, name: PropertyName.@_fieldVector4, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)13, name: PropertyName.@_fieldVector4I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)19, name: PropertyName.@_fieldProjection, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)16, name: PropertyName.@_fieldAabb, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)20, name: PropertyName.@_fieldColor, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)14, name: PropertyName.@_fieldPlane, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)25, name: PropertyName.@_fieldCallable, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)26, name: PropertyName.@_fieldSignal, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldEnum, hint: (global::Godot.PropertyHint)2, hintString: "A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_fieldFlagsEnum, hint: (global::Godot.PropertyHint)6, hintString: "A:0,B:1,C:2", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)29, name: PropertyName.@_fieldByteArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName.@_fieldInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName.@_fieldInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)32, name: PropertyName.@_fieldSingleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)33, name: PropertyName.@_fieldDoubleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.@_fieldStringArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.@_fieldStringArrayEnum, hint: (global::Godot.PropertyHint)23, hintString: "4/2:A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)35, name: PropertyName.@_fieldVector2Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)36, name: PropertyName.@_fieldVector3Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)37, name: PropertyName.@_fieldColorArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldGodotObjectOrDerivedArray, hint: (global::Godot.PropertyHint)23, hintString: "24/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldStringNameArray, hint: (global::Godot.PropertyHint)23, hintString: "21/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldNodePathArray, hint: (global::Godot.PropertyHint)23, hintString: "22/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldRidArray, hint: (global::Godot.PropertyHint)23, hintString: "23/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName.@_fieldEmptyInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName.@_fieldArrayFromList, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)0, name: PropertyName.@_fieldVariant, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)135174, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.@_fieldGodotObjectOrDerived, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.@_fieldGodotResourceTexture, hint: (global::Godot.PropertyHint)17, hintString: "Texture", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)21, name: PropertyName.@_fieldStringName, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName.@_fieldNodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)23, name: PropertyName.@_fieldRid, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.@_fieldGodotDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldGodotArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.@_fieldGodotGenericDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@_fieldGodotGenericArray, hint: (global::Godot.PropertyHint)23, hintString: "2/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName.@_fieldEmptyInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptPropertyDefVal.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptPropertyDefVal.generated.cs index 367cb073c0..f201b7c8d8 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptPropertyDefVal.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedFields_ScriptPropertyDefVal.generated.cs @@ -13,125 +13,125 @@ partial class ExportedFields { var values = new global::System.Collections.Generic.Dictionary<global::Godot.StringName, global::Godot.Variant>(60); bool ___fieldBoolean_default_value = true; - values.Add(PropertyName._fieldBoolean, global::Godot.Variant.From<bool>(___fieldBoolean_default_value)); + values.Add(PropertyName.@_fieldBoolean, global::Godot.Variant.From<bool>(___fieldBoolean_default_value)); char ___fieldChar_default_value = 'f'; - values.Add(PropertyName._fieldChar, global::Godot.Variant.From<char>(___fieldChar_default_value)); + values.Add(PropertyName.@_fieldChar, global::Godot.Variant.From<char>(___fieldChar_default_value)); sbyte ___fieldSByte_default_value = 10; - values.Add(PropertyName._fieldSByte, global::Godot.Variant.From<sbyte>(___fieldSByte_default_value)); + values.Add(PropertyName.@_fieldSByte, global::Godot.Variant.From<sbyte>(___fieldSByte_default_value)); short ___fieldInt16_default_value = 10; - values.Add(PropertyName._fieldInt16, global::Godot.Variant.From<short>(___fieldInt16_default_value)); + values.Add(PropertyName.@_fieldInt16, global::Godot.Variant.From<short>(___fieldInt16_default_value)); int ___fieldInt32_default_value = 10; - values.Add(PropertyName._fieldInt32, global::Godot.Variant.From<int>(___fieldInt32_default_value)); + values.Add(PropertyName.@_fieldInt32, global::Godot.Variant.From<int>(___fieldInt32_default_value)); long ___fieldInt64_default_value = 10; - values.Add(PropertyName._fieldInt64, global::Godot.Variant.From<long>(___fieldInt64_default_value)); + values.Add(PropertyName.@_fieldInt64, global::Godot.Variant.From<long>(___fieldInt64_default_value)); byte ___fieldByte_default_value = 10; - values.Add(PropertyName._fieldByte, global::Godot.Variant.From<byte>(___fieldByte_default_value)); + values.Add(PropertyName.@_fieldByte, global::Godot.Variant.From<byte>(___fieldByte_default_value)); ushort ___fieldUInt16_default_value = 10; - values.Add(PropertyName._fieldUInt16, global::Godot.Variant.From<ushort>(___fieldUInt16_default_value)); + values.Add(PropertyName.@_fieldUInt16, global::Godot.Variant.From<ushort>(___fieldUInt16_default_value)); uint ___fieldUInt32_default_value = 10; - values.Add(PropertyName._fieldUInt32, global::Godot.Variant.From<uint>(___fieldUInt32_default_value)); + values.Add(PropertyName.@_fieldUInt32, global::Godot.Variant.From<uint>(___fieldUInt32_default_value)); ulong ___fieldUInt64_default_value = 10; - values.Add(PropertyName._fieldUInt64, global::Godot.Variant.From<ulong>(___fieldUInt64_default_value)); + values.Add(PropertyName.@_fieldUInt64, global::Godot.Variant.From<ulong>(___fieldUInt64_default_value)); float ___fieldSingle_default_value = 10; - values.Add(PropertyName._fieldSingle, global::Godot.Variant.From<float>(___fieldSingle_default_value)); + values.Add(PropertyName.@_fieldSingle, global::Godot.Variant.From<float>(___fieldSingle_default_value)); double ___fieldDouble_default_value = 10; - values.Add(PropertyName._fieldDouble, global::Godot.Variant.From<double>(___fieldDouble_default_value)); + values.Add(PropertyName.@_fieldDouble, global::Godot.Variant.From<double>(___fieldDouble_default_value)); string ___fieldString_default_value = "foo"; - values.Add(PropertyName._fieldString, global::Godot.Variant.From<string>(___fieldString_default_value)); + values.Add(PropertyName.@_fieldString, global::Godot.Variant.From<string>(___fieldString_default_value)); global::Godot.Vector2 ___fieldVector2_default_value = new(10f, 10f); - values.Add(PropertyName._fieldVector2, global::Godot.Variant.From<global::Godot.Vector2>(___fieldVector2_default_value)); + values.Add(PropertyName.@_fieldVector2, global::Godot.Variant.From<global::Godot.Vector2>(___fieldVector2_default_value)); global::Godot.Vector2I ___fieldVector2I_default_value = global::Godot.Vector2I.Up; - values.Add(PropertyName._fieldVector2I, global::Godot.Variant.From<global::Godot.Vector2I>(___fieldVector2I_default_value)); + values.Add(PropertyName.@_fieldVector2I, global::Godot.Variant.From<global::Godot.Vector2I>(___fieldVector2I_default_value)); global::Godot.Rect2 ___fieldRect2_default_value = new(new global::Godot.Vector2(10f, 10f), new global::Godot.Vector2(10f, 10f)); - values.Add(PropertyName._fieldRect2, global::Godot.Variant.From<global::Godot.Rect2>(___fieldRect2_default_value)); + values.Add(PropertyName.@_fieldRect2, global::Godot.Variant.From<global::Godot.Rect2>(___fieldRect2_default_value)); global::Godot.Rect2I ___fieldRect2I_default_value = new(new global::Godot.Vector2I(10, 10), new global::Godot.Vector2I(10, 10)); - values.Add(PropertyName._fieldRect2I, global::Godot.Variant.From<global::Godot.Rect2I>(___fieldRect2I_default_value)); + values.Add(PropertyName.@_fieldRect2I, global::Godot.Variant.From<global::Godot.Rect2I>(___fieldRect2I_default_value)); global::Godot.Transform2D ___fieldTransform2D_default_value = global::Godot.Transform2D.Identity; - values.Add(PropertyName._fieldTransform2D, global::Godot.Variant.From<global::Godot.Transform2D>(___fieldTransform2D_default_value)); + values.Add(PropertyName.@_fieldTransform2D, global::Godot.Variant.From<global::Godot.Transform2D>(___fieldTransform2D_default_value)); global::Godot.Vector3 ___fieldVector3_default_value = new(10f, 10f, 10f); - values.Add(PropertyName._fieldVector3, global::Godot.Variant.From<global::Godot.Vector3>(___fieldVector3_default_value)); + values.Add(PropertyName.@_fieldVector3, global::Godot.Variant.From<global::Godot.Vector3>(___fieldVector3_default_value)); global::Godot.Vector3I ___fieldVector3I_default_value = global::Godot.Vector3I.Back; - values.Add(PropertyName._fieldVector3I, global::Godot.Variant.From<global::Godot.Vector3I>(___fieldVector3I_default_value)); + values.Add(PropertyName.@_fieldVector3I, global::Godot.Variant.From<global::Godot.Vector3I>(___fieldVector3I_default_value)); global::Godot.Basis ___fieldBasis_default_value = new global::Godot.Basis(global::Godot.Quaternion.Identity); - values.Add(PropertyName._fieldBasis, global::Godot.Variant.From<global::Godot.Basis>(___fieldBasis_default_value)); + values.Add(PropertyName.@_fieldBasis, global::Godot.Variant.From<global::Godot.Basis>(___fieldBasis_default_value)); global::Godot.Quaternion ___fieldQuaternion_default_value = new global::Godot.Quaternion(global::Godot.Basis.Identity); - values.Add(PropertyName._fieldQuaternion, global::Godot.Variant.From<global::Godot.Quaternion>(___fieldQuaternion_default_value)); + values.Add(PropertyName.@_fieldQuaternion, global::Godot.Variant.From<global::Godot.Quaternion>(___fieldQuaternion_default_value)); global::Godot.Transform3D ___fieldTransform3D_default_value = global::Godot.Transform3D.Identity; - values.Add(PropertyName._fieldTransform3D, global::Godot.Variant.From<global::Godot.Transform3D>(___fieldTransform3D_default_value)); + values.Add(PropertyName.@_fieldTransform3D, global::Godot.Variant.From<global::Godot.Transform3D>(___fieldTransform3D_default_value)); global::Godot.Vector4 ___fieldVector4_default_value = new(10f, 10f, 10f, 10f); - values.Add(PropertyName._fieldVector4, global::Godot.Variant.From<global::Godot.Vector4>(___fieldVector4_default_value)); + values.Add(PropertyName.@_fieldVector4, global::Godot.Variant.From<global::Godot.Vector4>(___fieldVector4_default_value)); global::Godot.Vector4I ___fieldVector4I_default_value = global::Godot.Vector4I.One; - values.Add(PropertyName._fieldVector4I, global::Godot.Variant.From<global::Godot.Vector4I>(___fieldVector4I_default_value)); + values.Add(PropertyName.@_fieldVector4I, global::Godot.Variant.From<global::Godot.Vector4I>(___fieldVector4I_default_value)); global::Godot.Projection ___fieldProjection_default_value = global::Godot.Projection.Identity; - values.Add(PropertyName._fieldProjection, global::Godot.Variant.From<global::Godot.Projection>(___fieldProjection_default_value)); + values.Add(PropertyName.@_fieldProjection, global::Godot.Variant.From<global::Godot.Projection>(___fieldProjection_default_value)); global::Godot.Aabb ___fieldAabb_default_value = new global::Godot.Aabb(10f, 10f, 10f, new global::Godot.Vector3(1f, 1f, 1f)); - values.Add(PropertyName._fieldAabb, global::Godot.Variant.From<global::Godot.Aabb>(___fieldAabb_default_value)); + values.Add(PropertyName.@_fieldAabb, global::Godot.Variant.From<global::Godot.Aabb>(___fieldAabb_default_value)); global::Godot.Color ___fieldColor_default_value = global::Godot.Colors.Aquamarine; - values.Add(PropertyName._fieldColor, global::Godot.Variant.From<global::Godot.Color>(___fieldColor_default_value)); + values.Add(PropertyName.@_fieldColor, global::Godot.Variant.From<global::Godot.Color>(___fieldColor_default_value)); global::Godot.Plane ___fieldPlane_default_value = global::Godot.Plane.PlaneXZ; - values.Add(PropertyName._fieldPlane, global::Godot.Variant.From<global::Godot.Plane>(___fieldPlane_default_value)); + values.Add(PropertyName.@_fieldPlane, global::Godot.Variant.From<global::Godot.Plane>(___fieldPlane_default_value)); global::Godot.Callable ___fieldCallable_default_value = new global::Godot.Callable(global::Godot.Engine.GetMainLoop(), "_process"); - values.Add(PropertyName._fieldCallable, global::Godot.Variant.From<global::Godot.Callable>(___fieldCallable_default_value)); + values.Add(PropertyName.@_fieldCallable, global::Godot.Variant.From<global::Godot.Callable>(___fieldCallable_default_value)); global::Godot.Signal ___fieldSignal_default_value = new global::Godot.Signal(global::Godot.Engine.GetMainLoop(), "property_list_changed"); - values.Add(PropertyName._fieldSignal, global::Godot.Variant.From<global::Godot.Signal>(___fieldSignal_default_value)); + values.Add(PropertyName.@_fieldSignal, global::Godot.Variant.From<global::Godot.Signal>(___fieldSignal_default_value)); global::ExportedFields.MyEnum ___fieldEnum_default_value = global::ExportedFields.MyEnum.C; - values.Add(PropertyName._fieldEnum, global::Godot.Variant.From<global::ExportedFields.MyEnum>(___fieldEnum_default_value)); + values.Add(PropertyName.@_fieldEnum, global::Godot.Variant.From<global::ExportedFields.MyEnum>(___fieldEnum_default_value)); global::ExportedFields.MyFlagsEnum ___fieldFlagsEnum_default_value = global::ExportedFields.MyFlagsEnum.C; - values.Add(PropertyName._fieldFlagsEnum, global::Godot.Variant.From<global::ExportedFields.MyFlagsEnum>(___fieldFlagsEnum_default_value)); + values.Add(PropertyName.@_fieldFlagsEnum, global::Godot.Variant.From<global::ExportedFields.MyFlagsEnum>(___fieldFlagsEnum_default_value)); byte[] ___fieldByteArray_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName._fieldByteArray, global::Godot.Variant.From<byte[]>(___fieldByteArray_default_value)); + values.Add(PropertyName.@_fieldByteArray, global::Godot.Variant.From<byte[]>(___fieldByteArray_default_value)); int[] ___fieldInt32Array_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName._fieldInt32Array, global::Godot.Variant.From<int[]>(___fieldInt32Array_default_value)); + values.Add(PropertyName.@_fieldInt32Array, global::Godot.Variant.From<int[]>(___fieldInt32Array_default_value)); long[] ___fieldInt64Array_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName._fieldInt64Array, global::Godot.Variant.From<long[]>(___fieldInt64Array_default_value)); + values.Add(PropertyName.@_fieldInt64Array, global::Godot.Variant.From<long[]>(___fieldInt64Array_default_value)); float[] ___fieldSingleArray_default_value = { 0f, 1f, 2f, 3f, 4f, 5f, 6f }; - values.Add(PropertyName._fieldSingleArray, global::Godot.Variant.From<float[]>(___fieldSingleArray_default_value)); + values.Add(PropertyName.@_fieldSingleArray, global::Godot.Variant.From<float[]>(___fieldSingleArray_default_value)); double[] ___fieldDoubleArray_default_value = { 0d, 1d, 2d, 3d, 4d, 5d, 6d }; - values.Add(PropertyName._fieldDoubleArray, global::Godot.Variant.From<double[]>(___fieldDoubleArray_default_value)); + values.Add(PropertyName.@_fieldDoubleArray, global::Godot.Variant.From<double[]>(___fieldDoubleArray_default_value)); string[] ___fieldStringArray_default_value = { "foo", "bar" }; - values.Add(PropertyName._fieldStringArray, global::Godot.Variant.From<string[]>(___fieldStringArray_default_value)); + values.Add(PropertyName.@_fieldStringArray, global::Godot.Variant.From<string[]>(___fieldStringArray_default_value)); string[] ___fieldStringArrayEnum_default_value = { "foo", "bar" }; - values.Add(PropertyName._fieldStringArrayEnum, global::Godot.Variant.From<string[]>(___fieldStringArrayEnum_default_value)); + values.Add(PropertyName.@_fieldStringArrayEnum, global::Godot.Variant.From<string[]>(___fieldStringArrayEnum_default_value)); global::Godot.Vector2[] ___fieldVector2Array_default_value = { global::Godot.Vector2.Up, global::Godot.Vector2.Down, global::Godot.Vector2.Left, global::Godot.Vector2.Right }; - values.Add(PropertyName._fieldVector2Array, global::Godot.Variant.From<global::Godot.Vector2[]>(___fieldVector2Array_default_value)); + values.Add(PropertyName.@_fieldVector2Array, global::Godot.Variant.From<global::Godot.Vector2[]>(___fieldVector2Array_default_value)); global::Godot.Vector3[] ___fieldVector3Array_default_value = { global::Godot.Vector3.Up, global::Godot.Vector3.Down, global::Godot.Vector3.Left, global::Godot.Vector3.Right }; - values.Add(PropertyName._fieldVector3Array, global::Godot.Variant.From<global::Godot.Vector3[]>(___fieldVector3Array_default_value)); + values.Add(PropertyName.@_fieldVector3Array, global::Godot.Variant.From<global::Godot.Vector3[]>(___fieldVector3Array_default_value)); global::Godot.Color[] ___fieldColorArray_default_value = { global::Godot.Colors.Aqua, global::Godot.Colors.Aquamarine, global::Godot.Colors.Azure, global::Godot.Colors.Beige }; - values.Add(PropertyName._fieldColorArray, global::Godot.Variant.From<global::Godot.Color[]>(___fieldColorArray_default_value)); + values.Add(PropertyName.@_fieldColorArray, global::Godot.Variant.From<global::Godot.Color[]>(___fieldColorArray_default_value)); global::Godot.GodotObject[] ___fieldGodotObjectOrDerivedArray_default_value = { null }; - values.Add(PropertyName._fieldGodotObjectOrDerivedArray, global::Godot.Variant.CreateFrom(___fieldGodotObjectOrDerivedArray_default_value)); + values.Add(PropertyName.@_fieldGodotObjectOrDerivedArray, global::Godot.Variant.CreateFrom(___fieldGodotObjectOrDerivedArray_default_value)); global::Godot.StringName[] ___fieldStringNameArray_default_value = { "foo", "bar" }; - values.Add(PropertyName._fieldStringNameArray, global::Godot.Variant.From<global::Godot.StringName[]>(___fieldStringNameArray_default_value)); + values.Add(PropertyName.@_fieldStringNameArray, global::Godot.Variant.From<global::Godot.StringName[]>(___fieldStringNameArray_default_value)); global::Godot.NodePath[] ___fieldNodePathArray_default_value = { "foo", "bar" }; - values.Add(PropertyName._fieldNodePathArray, global::Godot.Variant.From<global::Godot.NodePath[]>(___fieldNodePathArray_default_value)); + values.Add(PropertyName.@_fieldNodePathArray, global::Godot.Variant.From<global::Godot.NodePath[]>(___fieldNodePathArray_default_value)); global::Godot.Rid[] ___fieldRidArray_default_value = { default, default, default }; - values.Add(PropertyName._fieldRidArray, global::Godot.Variant.From<global::Godot.Rid[]>(___fieldRidArray_default_value)); + values.Add(PropertyName.@_fieldRidArray, global::Godot.Variant.From<global::Godot.Rid[]>(___fieldRidArray_default_value)); int[] ___fieldEmptyInt32Array_default_value = global::System.Array.Empty<int>(); - values.Add(PropertyName._fieldEmptyInt32Array, global::Godot.Variant.From<int[]>(___fieldEmptyInt32Array_default_value)); + values.Add(PropertyName.@_fieldEmptyInt32Array, global::Godot.Variant.From<int[]>(___fieldEmptyInt32Array_default_value)); int[] ___fieldArrayFromList_default_value = new global::System.Collections.Generic.List<int>(global::System.Array.Empty<int>()).ToArray(); - values.Add(PropertyName._fieldArrayFromList, global::Godot.Variant.From<int[]>(___fieldArrayFromList_default_value)); + values.Add(PropertyName.@_fieldArrayFromList, global::Godot.Variant.From<int[]>(___fieldArrayFromList_default_value)); global::Godot.Variant ___fieldVariant_default_value = "foo"; - values.Add(PropertyName._fieldVariant, global::Godot.Variant.From<global::Godot.Variant>(___fieldVariant_default_value)); + values.Add(PropertyName.@_fieldVariant, global::Godot.Variant.From<global::Godot.Variant>(___fieldVariant_default_value)); global::Godot.GodotObject ___fieldGodotObjectOrDerived_default_value = default; - values.Add(PropertyName._fieldGodotObjectOrDerived, global::Godot.Variant.From<global::Godot.GodotObject>(___fieldGodotObjectOrDerived_default_value)); + values.Add(PropertyName.@_fieldGodotObjectOrDerived, global::Godot.Variant.From<global::Godot.GodotObject>(___fieldGodotObjectOrDerived_default_value)); global::Godot.Texture ___fieldGodotResourceTexture_default_value = default; - values.Add(PropertyName._fieldGodotResourceTexture, global::Godot.Variant.From<global::Godot.Texture>(___fieldGodotResourceTexture_default_value)); + values.Add(PropertyName.@_fieldGodotResourceTexture, global::Godot.Variant.From<global::Godot.Texture>(___fieldGodotResourceTexture_default_value)); global::Godot.StringName ___fieldStringName_default_value = new global::Godot.StringName("foo"); - values.Add(PropertyName._fieldStringName, global::Godot.Variant.From<global::Godot.StringName>(___fieldStringName_default_value)); + values.Add(PropertyName.@_fieldStringName, global::Godot.Variant.From<global::Godot.StringName>(___fieldStringName_default_value)); global::Godot.NodePath ___fieldNodePath_default_value = new global::Godot.NodePath("foo"); - values.Add(PropertyName._fieldNodePath, global::Godot.Variant.From<global::Godot.NodePath>(___fieldNodePath_default_value)); + values.Add(PropertyName.@_fieldNodePath, global::Godot.Variant.From<global::Godot.NodePath>(___fieldNodePath_default_value)); global::Godot.Rid ___fieldRid_default_value = default; - values.Add(PropertyName._fieldRid, global::Godot.Variant.From<global::Godot.Rid>(___fieldRid_default_value)); + values.Add(PropertyName.@_fieldRid, global::Godot.Variant.From<global::Godot.Rid>(___fieldRid_default_value)); global::Godot.Collections.Dictionary ___fieldGodotDictionary_default_value = new() { { "foo", 10 }, { global::Godot.Vector2.Up, global::Godot.Colors.Chocolate } }; - values.Add(PropertyName._fieldGodotDictionary, global::Godot.Variant.From<global::Godot.Collections.Dictionary>(___fieldGodotDictionary_default_value)); + values.Add(PropertyName.@_fieldGodotDictionary, global::Godot.Variant.From<global::Godot.Collections.Dictionary>(___fieldGodotDictionary_default_value)); global::Godot.Collections.Array ___fieldGodotArray_default_value = new() { "foo", 10, global::Godot.Vector2.Up, global::Godot.Colors.Chocolate }; - values.Add(PropertyName._fieldGodotArray, global::Godot.Variant.From<global::Godot.Collections.Array>(___fieldGodotArray_default_value)); + values.Add(PropertyName.@_fieldGodotArray, global::Godot.Variant.From<global::Godot.Collections.Array>(___fieldGodotArray_default_value)); global::Godot.Collections.Dictionary<string, bool> ___fieldGodotGenericDictionary_default_value = new() { { "foo", true }, { "bar", false } }; - values.Add(PropertyName._fieldGodotGenericDictionary, global::Godot.Variant.CreateFrom(___fieldGodotGenericDictionary_default_value)); + values.Add(PropertyName.@_fieldGodotGenericDictionary, global::Godot.Variant.CreateFrom(___fieldGodotGenericDictionary_default_value)); global::Godot.Collections.Array<int> ___fieldGodotGenericArray_default_value = new() { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName._fieldGodotGenericArray, global::Godot.Variant.CreateFrom(___fieldGodotGenericArray_default_value)); + values.Add(PropertyName.@_fieldGodotGenericArray, global::Godot.Variant.CreateFrom(___fieldGodotGenericArray_default_value)); long[] ___fieldEmptyInt64Array_default_value = global::System.Array.Empty<long>(); - values.Add(PropertyName._fieldEmptyInt64Array, global::Godot.Variant.From<long[]>(___fieldEmptyInt64Array_default_value)); + values.Add(PropertyName.@_fieldEmptyInt64Array, global::Godot.Variant.From<long[]>(___fieldEmptyInt64Array_default_value)); return values; } #endif // TOOLS diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptProperties.generated.cs index aa876d8d7d..3c48740773 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptProperties.generated.cs @@ -11,558 +11,558 @@ partial class ExportedProperties /// <summary> /// Cached name for the 'NotGenerateComplexLamdaProperty' property. /// </summary> - public new static readonly global::Godot.StringName NotGenerateComplexLamdaProperty = "NotGenerateComplexLamdaProperty"; + public new static readonly global::Godot.StringName @NotGenerateComplexLamdaProperty = "NotGenerateComplexLamdaProperty"; /// <summary> /// Cached name for the 'NotGenerateLamdaNoFieldProperty' property. /// </summary> - public new static readonly global::Godot.StringName NotGenerateLamdaNoFieldProperty = "NotGenerateLamdaNoFieldProperty"; + public new static readonly global::Godot.StringName @NotGenerateLamdaNoFieldProperty = "NotGenerateLamdaNoFieldProperty"; /// <summary> /// Cached name for the 'NotGenerateComplexReturnProperty' property. /// </summary> - public new static readonly global::Godot.StringName NotGenerateComplexReturnProperty = "NotGenerateComplexReturnProperty"; + public new static readonly global::Godot.StringName @NotGenerateComplexReturnProperty = "NotGenerateComplexReturnProperty"; /// <summary> /// Cached name for the 'NotGenerateReturnsProperty' property. /// </summary> - public new static readonly global::Godot.StringName NotGenerateReturnsProperty = "NotGenerateReturnsProperty"; + public new static readonly global::Godot.StringName @NotGenerateReturnsProperty = "NotGenerateReturnsProperty"; /// <summary> /// Cached name for the 'FullPropertyString' property. /// </summary> - public new static readonly global::Godot.StringName FullPropertyString = "FullPropertyString"; + public new static readonly global::Godot.StringName @FullPropertyString = "FullPropertyString"; /// <summary> /// Cached name for the 'FullPropertyString_Complex' property. /// </summary> - public new static readonly global::Godot.StringName FullPropertyString_Complex = "FullPropertyString_Complex"; + public new static readonly global::Godot.StringName @FullPropertyString_Complex = "FullPropertyString_Complex"; /// <summary> /// Cached name for the 'LamdaPropertyString' property. /// </summary> - public new static readonly global::Godot.StringName LamdaPropertyString = "LamdaPropertyString"; + public new static readonly global::Godot.StringName @LamdaPropertyString = "LamdaPropertyString"; /// <summary> /// Cached name for the 'PropertyBoolean' property. /// </summary> - public new static readonly global::Godot.StringName PropertyBoolean = "PropertyBoolean"; + public new static readonly global::Godot.StringName @PropertyBoolean = "PropertyBoolean"; /// <summary> /// Cached name for the 'PropertyChar' property. /// </summary> - public new static readonly global::Godot.StringName PropertyChar = "PropertyChar"; + public new static readonly global::Godot.StringName @PropertyChar = "PropertyChar"; /// <summary> /// Cached name for the 'PropertySByte' property. /// </summary> - public new static readonly global::Godot.StringName PropertySByte = "PropertySByte"; + public new static readonly global::Godot.StringName @PropertySByte = "PropertySByte"; /// <summary> /// Cached name for the 'PropertyInt16' property. /// </summary> - public new static readonly global::Godot.StringName PropertyInt16 = "PropertyInt16"; + public new static readonly global::Godot.StringName @PropertyInt16 = "PropertyInt16"; /// <summary> /// Cached name for the 'PropertyInt32' property. /// </summary> - public new static readonly global::Godot.StringName PropertyInt32 = "PropertyInt32"; + public new static readonly global::Godot.StringName @PropertyInt32 = "PropertyInt32"; /// <summary> /// Cached name for the 'PropertyInt64' property. /// </summary> - public new static readonly global::Godot.StringName PropertyInt64 = "PropertyInt64"; + public new static readonly global::Godot.StringName @PropertyInt64 = "PropertyInt64"; /// <summary> /// Cached name for the 'PropertyByte' property. /// </summary> - public new static readonly global::Godot.StringName PropertyByte = "PropertyByte"; + public new static readonly global::Godot.StringName @PropertyByte = "PropertyByte"; /// <summary> /// Cached name for the 'PropertyUInt16' property. /// </summary> - public new static readonly global::Godot.StringName PropertyUInt16 = "PropertyUInt16"; + public new static readonly global::Godot.StringName @PropertyUInt16 = "PropertyUInt16"; /// <summary> /// Cached name for the 'PropertyUInt32' property. /// </summary> - public new static readonly global::Godot.StringName PropertyUInt32 = "PropertyUInt32"; + public new static readonly global::Godot.StringName @PropertyUInt32 = "PropertyUInt32"; /// <summary> /// Cached name for the 'PropertyUInt64' property. /// </summary> - public new static readonly global::Godot.StringName PropertyUInt64 = "PropertyUInt64"; + public new static readonly global::Godot.StringName @PropertyUInt64 = "PropertyUInt64"; /// <summary> /// Cached name for the 'PropertySingle' property. /// </summary> - public new static readonly global::Godot.StringName PropertySingle = "PropertySingle"; + public new static readonly global::Godot.StringName @PropertySingle = "PropertySingle"; /// <summary> /// Cached name for the 'PropertyDouble' property. /// </summary> - public new static readonly global::Godot.StringName PropertyDouble = "PropertyDouble"; + public new static readonly global::Godot.StringName @PropertyDouble = "PropertyDouble"; /// <summary> /// Cached name for the 'PropertyString' property. /// </summary> - public new static readonly global::Godot.StringName PropertyString = "PropertyString"; + public new static readonly global::Godot.StringName @PropertyString = "PropertyString"; /// <summary> /// Cached name for the 'PropertyVector2' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector2 = "PropertyVector2"; + public new static readonly global::Godot.StringName @PropertyVector2 = "PropertyVector2"; /// <summary> /// Cached name for the 'PropertyVector2I' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector2I = "PropertyVector2I"; + public new static readonly global::Godot.StringName @PropertyVector2I = "PropertyVector2I"; /// <summary> /// Cached name for the 'PropertyRect2' property. /// </summary> - public new static readonly global::Godot.StringName PropertyRect2 = "PropertyRect2"; + public new static readonly global::Godot.StringName @PropertyRect2 = "PropertyRect2"; /// <summary> /// Cached name for the 'PropertyRect2I' property. /// </summary> - public new static readonly global::Godot.StringName PropertyRect2I = "PropertyRect2I"; + public new static readonly global::Godot.StringName @PropertyRect2I = "PropertyRect2I"; /// <summary> /// Cached name for the 'PropertyTransform2D' property. /// </summary> - public new static readonly global::Godot.StringName PropertyTransform2D = "PropertyTransform2D"; + public new static readonly global::Godot.StringName @PropertyTransform2D = "PropertyTransform2D"; /// <summary> /// Cached name for the 'PropertyVector3' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector3 = "PropertyVector3"; + public new static readonly global::Godot.StringName @PropertyVector3 = "PropertyVector3"; /// <summary> /// Cached name for the 'PropertyVector3I' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector3I = "PropertyVector3I"; + public new static readonly global::Godot.StringName @PropertyVector3I = "PropertyVector3I"; /// <summary> /// Cached name for the 'PropertyBasis' property. /// </summary> - public new static readonly global::Godot.StringName PropertyBasis = "PropertyBasis"; + public new static readonly global::Godot.StringName @PropertyBasis = "PropertyBasis"; /// <summary> /// Cached name for the 'PropertyQuaternion' property. /// </summary> - public new static readonly global::Godot.StringName PropertyQuaternion = "PropertyQuaternion"; + public new static readonly global::Godot.StringName @PropertyQuaternion = "PropertyQuaternion"; /// <summary> /// Cached name for the 'PropertyTransform3D' property. /// </summary> - public new static readonly global::Godot.StringName PropertyTransform3D = "PropertyTransform3D"; + public new static readonly global::Godot.StringName @PropertyTransform3D = "PropertyTransform3D"; /// <summary> /// Cached name for the 'PropertyVector4' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector4 = "PropertyVector4"; + public new static readonly global::Godot.StringName @PropertyVector4 = "PropertyVector4"; /// <summary> /// Cached name for the 'PropertyVector4I' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector4I = "PropertyVector4I"; + public new static readonly global::Godot.StringName @PropertyVector4I = "PropertyVector4I"; /// <summary> /// Cached name for the 'PropertyProjection' property. /// </summary> - public new static readonly global::Godot.StringName PropertyProjection = "PropertyProjection"; + public new static readonly global::Godot.StringName @PropertyProjection = "PropertyProjection"; /// <summary> /// Cached name for the 'PropertyAabb' property. /// </summary> - public new static readonly global::Godot.StringName PropertyAabb = "PropertyAabb"; + public new static readonly global::Godot.StringName @PropertyAabb = "PropertyAabb"; /// <summary> /// Cached name for the 'PropertyColor' property. /// </summary> - public new static readonly global::Godot.StringName PropertyColor = "PropertyColor"; + public new static readonly global::Godot.StringName @PropertyColor = "PropertyColor"; /// <summary> /// Cached name for the 'PropertyPlane' property. /// </summary> - public new static readonly global::Godot.StringName PropertyPlane = "PropertyPlane"; + public new static readonly global::Godot.StringName @PropertyPlane = "PropertyPlane"; /// <summary> /// Cached name for the 'PropertyCallable' property. /// </summary> - public new static readonly global::Godot.StringName PropertyCallable = "PropertyCallable"; + public new static readonly global::Godot.StringName @PropertyCallable = "PropertyCallable"; /// <summary> /// Cached name for the 'PropertySignal' property. /// </summary> - public new static readonly global::Godot.StringName PropertySignal = "PropertySignal"; + public new static readonly global::Godot.StringName @PropertySignal = "PropertySignal"; /// <summary> /// Cached name for the 'PropertyEnum' property. /// </summary> - public new static readonly global::Godot.StringName PropertyEnum = "PropertyEnum"; + public new static readonly global::Godot.StringName @PropertyEnum = "PropertyEnum"; /// <summary> /// Cached name for the 'PropertyFlagsEnum' property. /// </summary> - public new static readonly global::Godot.StringName PropertyFlagsEnum = "PropertyFlagsEnum"; + public new static readonly global::Godot.StringName @PropertyFlagsEnum = "PropertyFlagsEnum"; /// <summary> /// Cached name for the 'PropertyByteArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyByteArray = "PropertyByteArray"; + public new static readonly global::Godot.StringName @PropertyByteArray = "PropertyByteArray"; /// <summary> /// Cached name for the 'PropertyInt32Array' property. /// </summary> - public new static readonly global::Godot.StringName PropertyInt32Array = "PropertyInt32Array"; + public new static readonly global::Godot.StringName @PropertyInt32Array = "PropertyInt32Array"; /// <summary> /// Cached name for the 'PropertyInt64Array' property. /// </summary> - public new static readonly global::Godot.StringName PropertyInt64Array = "PropertyInt64Array"; + public new static readonly global::Godot.StringName @PropertyInt64Array = "PropertyInt64Array"; /// <summary> /// Cached name for the 'PropertySingleArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertySingleArray = "PropertySingleArray"; + public new static readonly global::Godot.StringName @PropertySingleArray = "PropertySingleArray"; /// <summary> /// Cached name for the 'PropertyDoubleArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyDoubleArray = "PropertyDoubleArray"; + public new static readonly global::Godot.StringName @PropertyDoubleArray = "PropertyDoubleArray"; /// <summary> /// Cached name for the 'PropertyStringArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyStringArray = "PropertyStringArray"; + public new static readonly global::Godot.StringName @PropertyStringArray = "PropertyStringArray"; /// <summary> /// Cached name for the 'PropertyStringArrayEnum' property. /// </summary> - public new static readonly global::Godot.StringName PropertyStringArrayEnum = "PropertyStringArrayEnum"; + public new static readonly global::Godot.StringName @PropertyStringArrayEnum = "PropertyStringArrayEnum"; /// <summary> /// Cached name for the 'PropertyVector2Array' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector2Array = "PropertyVector2Array"; + public new static readonly global::Godot.StringName @PropertyVector2Array = "PropertyVector2Array"; /// <summary> /// Cached name for the 'PropertyVector3Array' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVector3Array = "PropertyVector3Array"; + public new static readonly global::Godot.StringName @PropertyVector3Array = "PropertyVector3Array"; /// <summary> /// Cached name for the 'PropertyColorArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyColorArray = "PropertyColorArray"; + public new static readonly global::Godot.StringName @PropertyColorArray = "PropertyColorArray"; /// <summary> /// Cached name for the 'PropertyGodotObjectOrDerivedArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotObjectOrDerivedArray = "PropertyGodotObjectOrDerivedArray"; + public new static readonly global::Godot.StringName @PropertyGodotObjectOrDerivedArray = "PropertyGodotObjectOrDerivedArray"; /// <summary> /// Cached name for the 'field_StringNameArray' property. /// </summary> - public new static readonly global::Godot.StringName field_StringNameArray = "field_StringNameArray"; + public new static readonly global::Godot.StringName @field_StringNameArray = "field_StringNameArray"; /// <summary> /// Cached name for the 'field_NodePathArray' property. /// </summary> - public new static readonly global::Godot.StringName field_NodePathArray = "field_NodePathArray"; + public new static readonly global::Godot.StringName @field_NodePathArray = "field_NodePathArray"; /// <summary> /// Cached name for the 'field_RidArray' property. /// </summary> - public new static readonly global::Godot.StringName field_RidArray = "field_RidArray"; + public new static readonly global::Godot.StringName @field_RidArray = "field_RidArray"; /// <summary> /// Cached name for the 'PropertyVariant' property. /// </summary> - public new static readonly global::Godot.StringName PropertyVariant = "PropertyVariant"; + public new static readonly global::Godot.StringName @PropertyVariant = "PropertyVariant"; /// <summary> /// Cached name for the 'PropertyGodotObjectOrDerived' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotObjectOrDerived = "PropertyGodotObjectOrDerived"; + public new static readonly global::Godot.StringName @PropertyGodotObjectOrDerived = "PropertyGodotObjectOrDerived"; /// <summary> /// Cached name for the 'PropertyGodotResourceTexture' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotResourceTexture = "PropertyGodotResourceTexture"; + public new static readonly global::Godot.StringName @PropertyGodotResourceTexture = "PropertyGodotResourceTexture"; /// <summary> /// Cached name for the 'PropertyStringName' property. /// </summary> - public new static readonly global::Godot.StringName PropertyStringName = "PropertyStringName"; + public new static readonly global::Godot.StringName @PropertyStringName = "PropertyStringName"; /// <summary> /// Cached name for the 'PropertyNodePath' property. /// </summary> - public new static readonly global::Godot.StringName PropertyNodePath = "PropertyNodePath"; + public new static readonly global::Godot.StringName @PropertyNodePath = "PropertyNodePath"; /// <summary> /// Cached name for the 'PropertyRid' property. /// </summary> - public new static readonly global::Godot.StringName PropertyRid = "PropertyRid"; + public new static readonly global::Godot.StringName @PropertyRid = "PropertyRid"; /// <summary> /// Cached name for the 'PropertyGodotDictionary' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotDictionary = "PropertyGodotDictionary"; + public new static readonly global::Godot.StringName @PropertyGodotDictionary = "PropertyGodotDictionary"; /// <summary> /// Cached name for the 'PropertyGodotArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotArray = "PropertyGodotArray"; + public new static readonly global::Godot.StringName @PropertyGodotArray = "PropertyGodotArray"; /// <summary> /// Cached name for the 'PropertyGodotGenericDictionary' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotGenericDictionary = "PropertyGodotGenericDictionary"; + public new static readonly global::Godot.StringName @PropertyGodotGenericDictionary = "PropertyGodotGenericDictionary"; /// <summary> /// Cached name for the 'PropertyGodotGenericArray' property. /// </summary> - public new static readonly global::Godot.StringName PropertyGodotGenericArray = "PropertyGodotGenericArray"; + public new static readonly global::Godot.StringName @PropertyGodotGenericArray = "PropertyGodotGenericArray"; /// <summary> /// Cached name for the '_notGeneratePropertyString' field. /// </summary> - public new static readonly global::Godot.StringName _notGeneratePropertyString = "_notGeneratePropertyString"; + public new static readonly global::Godot.StringName @_notGeneratePropertyString = "_notGeneratePropertyString"; /// <summary> /// Cached name for the '_notGeneratePropertyInt' field. /// </summary> - public new static readonly global::Godot.StringName _notGeneratePropertyInt = "_notGeneratePropertyInt"; + public new static readonly global::Godot.StringName @_notGeneratePropertyInt = "_notGeneratePropertyInt"; /// <summary> /// Cached name for the '_fullPropertyString' field. /// </summary> - public new static readonly global::Godot.StringName _fullPropertyString = "_fullPropertyString"; + public new static readonly global::Godot.StringName @_fullPropertyString = "_fullPropertyString"; /// <summary> /// Cached name for the '_fullPropertyStringComplex' field. /// </summary> - public new static readonly global::Godot.StringName _fullPropertyStringComplex = "_fullPropertyStringComplex"; + public new static readonly global::Godot.StringName @_fullPropertyStringComplex = "_fullPropertyStringComplex"; /// <summary> /// Cached name for the '_lamdaPropertyString' field. /// </summary> - public new static readonly global::Godot.StringName _lamdaPropertyString = "_lamdaPropertyString"; + public new static readonly global::Godot.StringName @_lamdaPropertyString = "_lamdaPropertyString"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName.NotGenerateComplexLamdaProperty) { - this.NotGenerateComplexLamdaProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@NotGenerateComplexLamdaProperty) { + this.@NotGenerateComplexLamdaProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.NotGenerateLamdaNoFieldProperty) { - this.NotGenerateLamdaNoFieldProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@NotGenerateLamdaNoFieldProperty) { + this.@NotGenerateLamdaNoFieldProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.NotGenerateComplexReturnProperty) { - this.NotGenerateComplexReturnProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@NotGenerateComplexReturnProperty) { + this.@NotGenerateComplexReturnProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.NotGenerateReturnsProperty) { - this.NotGenerateReturnsProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@NotGenerateReturnsProperty) { + this.@NotGenerateReturnsProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.FullPropertyString) { - this.FullPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@FullPropertyString) { + this.@FullPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.FullPropertyString_Complex) { - this.FullPropertyString_Complex = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@FullPropertyString_Complex) { + this.@FullPropertyString_Complex = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.LamdaPropertyString) { - this.LamdaPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@LamdaPropertyString) { + this.@LamdaPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.PropertyBoolean) { - this.PropertyBoolean = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@PropertyBoolean) { + this.@PropertyBoolean = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } - if (name == PropertyName.PropertyChar) { - this.PropertyChar = global::Godot.NativeInterop.VariantUtils.ConvertTo<char>(value); + if (name == PropertyName.@PropertyChar) { + this.@PropertyChar = global::Godot.NativeInterop.VariantUtils.ConvertTo<char>(value); return true; } - if (name == PropertyName.PropertySByte) { - this.PropertySByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<sbyte>(value); + if (name == PropertyName.@PropertySByte) { + this.@PropertySByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<sbyte>(value); return true; } - if (name == PropertyName.PropertyInt16) { - this.PropertyInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<short>(value); + if (name == PropertyName.@PropertyInt16) { + this.@PropertyInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<short>(value); return true; } - if (name == PropertyName.PropertyInt32) { - this.PropertyInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); + if (name == PropertyName.@PropertyInt32) { + this.@PropertyInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); return true; } - if (name == PropertyName.PropertyInt64) { - this.PropertyInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<long>(value); + if (name == PropertyName.@PropertyInt64) { + this.@PropertyInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<long>(value); return true; } - if (name == PropertyName.PropertyByte) { - this.PropertyByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte>(value); + if (name == PropertyName.@PropertyByte) { + this.@PropertyByte = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte>(value); return true; } - if (name == PropertyName.PropertyUInt16) { - this.PropertyUInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ushort>(value); + if (name == PropertyName.@PropertyUInt16) { + this.@PropertyUInt16 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ushort>(value); return true; } - if (name == PropertyName.PropertyUInt32) { - this.PropertyUInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<uint>(value); + if (name == PropertyName.@PropertyUInt32) { + this.@PropertyUInt32 = global::Godot.NativeInterop.VariantUtils.ConvertTo<uint>(value); return true; } - if (name == PropertyName.PropertyUInt64) { - this.PropertyUInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ulong>(value); + if (name == PropertyName.@PropertyUInt64) { + this.@PropertyUInt64 = global::Godot.NativeInterop.VariantUtils.ConvertTo<ulong>(value); return true; } - if (name == PropertyName.PropertySingle) { - this.PropertySingle = global::Godot.NativeInterop.VariantUtils.ConvertTo<float>(value); + if (name == PropertyName.@PropertySingle) { + this.@PropertySingle = global::Godot.NativeInterop.VariantUtils.ConvertTo<float>(value); return true; } - if (name == PropertyName.PropertyDouble) { - this.PropertyDouble = global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(value); + if (name == PropertyName.@PropertyDouble) { + this.@PropertyDouble = global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(value); return true; } - if (name == PropertyName.PropertyString) { - this.PropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@PropertyString) { + this.@PropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName.PropertyVector2) { - this.PropertyVector2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2>(value); + if (name == PropertyName.@PropertyVector2) { + this.@PropertyVector2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2>(value); return true; } - if (name == PropertyName.PropertyVector2I) { - this.PropertyVector2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2I>(value); + if (name == PropertyName.@PropertyVector2I) { + this.@PropertyVector2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2I>(value); return true; } - if (name == PropertyName.PropertyRect2) { - this.PropertyRect2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2>(value); + if (name == PropertyName.@PropertyRect2) { + this.@PropertyRect2 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2>(value); return true; } - if (name == PropertyName.PropertyRect2I) { - this.PropertyRect2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2I>(value); + if (name == PropertyName.@PropertyRect2I) { + this.@PropertyRect2I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rect2I>(value); return true; } - if (name == PropertyName.PropertyTransform2D) { - this.PropertyTransform2D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform2D>(value); + if (name == PropertyName.@PropertyTransform2D) { + this.@PropertyTransform2D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform2D>(value); return true; } - if (name == PropertyName.PropertyVector3) { - this.PropertyVector3 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3>(value); + if (name == PropertyName.@PropertyVector3) { + this.@PropertyVector3 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3>(value); return true; } - if (name == PropertyName.PropertyVector3I) { - this.PropertyVector3I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3I>(value); + if (name == PropertyName.@PropertyVector3I) { + this.@PropertyVector3I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3I>(value); return true; } - if (name == PropertyName.PropertyBasis) { - this.PropertyBasis = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Basis>(value); + if (name == PropertyName.@PropertyBasis) { + this.@PropertyBasis = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Basis>(value); return true; } - if (name == PropertyName.PropertyQuaternion) { - this.PropertyQuaternion = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Quaternion>(value); + if (name == PropertyName.@PropertyQuaternion) { + this.@PropertyQuaternion = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Quaternion>(value); return true; } - if (name == PropertyName.PropertyTransform3D) { - this.PropertyTransform3D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform3D>(value); + if (name == PropertyName.@PropertyTransform3D) { + this.@PropertyTransform3D = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Transform3D>(value); return true; } - if (name == PropertyName.PropertyVector4) { - this.PropertyVector4 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4>(value); + if (name == PropertyName.@PropertyVector4) { + this.@PropertyVector4 = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4>(value); return true; } - if (name == PropertyName.PropertyVector4I) { - this.PropertyVector4I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4I>(value); + if (name == PropertyName.@PropertyVector4I) { + this.@PropertyVector4I = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector4I>(value); return true; } - if (name == PropertyName.PropertyProjection) { - this.PropertyProjection = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Projection>(value); + if (name == PropertyName.@PropertyProjection) { + this.@PropertyProjection = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Projection>(value); return true; } - if (name == PropertyName.PropertyAabb) { - this.PropertyAabb = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Aabb>(value); + if (name == PropertyName.@PropertyAabb) { + this.@PropertyAabb = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Aabb>(value); return true; } - if (name == PropertyName.PropertyColor) { - this.PropertyColor = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color>(value); + if (name == PropertyName.@PropertyColor) { + this.@PropertyColor = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color>(value); return true; } - if (name == PropertyName.PropertyPlane) { - this.PropertyPlane = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Plane>(value); + if (name == PropertyName.@PropertyPlane) { + this.@PropertyPlane = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Plane>(value); return true; } - if (name == PropertyName.PropertyCallable) { - this.PropertyCallable = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Callable>(value); + if (name == PropertyName.@PropertyCallable) { + this.@PropertyCallable = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Callable>(value); return true; } - if (name == PropertyName.PropertySignal) { - this.PropertySignal = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Signal>(value); + if (name == PropertyName.@PropertySignal) { + this.@PropertySignal = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Signal>(value); return true; } - if (name == PropertyName.PropertyEnum) { - this.PropertyEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedProperties.MyEnum>(value); + if (name == PropertyName.@PropertyEnum) { + this.@PropertyEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedProperties.MyEnum>(value); return true; } - if (name == PropertyName.PropertyFlagsEnum) { - this.PropertyFlagsEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedProperties.MyFlagsEnum>(value); + if (name == PropertyName.@PropertyFlagsEnum) { + this.@PropertyFlagsEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::ExportedProperties.MyFlagsEnum>(value); return true; } - if (name == PropertyName.PropertyByteArray) { - this.PropertyByteArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte[]>(value); + if (name == PropertyName.@PropertyByteArray) { + this.@PropertyByteArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<byte[]>(value); return true; } - if (name == PropertyName.PropertyInt32Array) { - this.PropertyInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); + if (name == PropertyName.@PropertyInt32Array) { + this.@PropertyInt32Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<int[]>(value); return true; } - if (name == PropertyName.PropertyInt64Array) { - this.PropertyInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); + if (name == PropertyName.@PropertyInt64Array) { + this.@PropertyInt64Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<long[]>(value); return true; } - if (name == PropertyName.PropertySingleArray) { - this.PropertySingleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<float[]>(value); + if (name == PropertyName.@PropertySingleArray) { + this.@PropertySingleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<float[]>(value); return true; } - if (name == PropertyName.PropertyDoubleArray) { - this.PropertyDoubleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<double[]>(value); + if (name == PropertyName.@PropertyDoubleArray) { + this.@PropertyDoubleArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<double[]>(value); return true; } - if (name == PropertyName.PropertyStringArray) { - this.PropertyStringArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); + if (name == PropertyName.@PropertyStringArray) { + this.@PropertyStringArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); return true; } - if (name == PropertyName.PropertyStringArrayEnum) { - this.PropertyStringArrayEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); + if (name == PropertyName.@PropertyStringArrayEnum) { + this.@PropertyStringArrayEnum = global::Godot.NativeInterop.VariantUtils.ConvertTo<string[]>(value); return true; } - if (name == PropertyName.PropertyVector2Array) { - this.PropertyVector2Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2[]>(value); + if (name == PropertyName.@PropertyVector2Array) { + this.@PropertyVector2Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector2[]>(value); return true; } - if (name == PropertyName.PropertyVector3Array) { - this.PropertyVector3Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3[]>(value); + if (name == PropertyName.@PropertyVector3Array) { + this.@PropertyVector3Array = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Vector3[]>(value); return true; } - if (name == PropertyName.PropertyColorArray) { - this.PropertyColorArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color[]>(value); + if (name == PropertyName.@PropertyColorArray) { + this.@PropertyColorArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Color[]>(value); return true; } - if (name == PropertyName.PropertyGodotObjectOrDerivedArray) { - this.PropertyGodotObjectOrDerivedArray = global::Godot.NativeInterop.VariantUtils.ConvertToSystemArrayOfGodotObject<global::Godot.GodotObject>(value); + if (name == PropertyName.@PropertyGodotObjectOrDerivedArray) { + this.@PropertyGodotObjectOrDerivedArray = global::Godot.NativeInterop.VariantUtils.ConvertToSystemArrayOfGodotObject<global::Godot.GodotObject>(value); return true; } - if (name == PropertyName.field_StringNameArray) { - this.field_StringNameArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName[]>(value); + if (name == PropertyName.@field_StringNameArray) { + this.@field_StringNameArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName[]>(value); return true; } - if (name == PropertyName.field_NodePathArray) { - this.field_NodePathArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath[]>(value); + if (name == PropertyName.@field_NodePathArray) { + this.@field_NodePathArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath[]>(value); return true; } - if (name == PropertyName.field_RidArray) { - this.field_RidArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid[]>(value); + if (name == PropertyName.@field_RidArray) { + this.@field_RidArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid[]>(value); return true; } - if (name == PropertyName.PropertyVariant) { - this.PropertyVariant = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Variant>(value); + if (name == PropertyName.@PropertyVariant) { + this.@PropertyVariant = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Variant>(value); return true; } - if (name == PropertyName.PropertyGodotObjectOrDerived) { - this.PropertyGodotObjectOrDerived = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.GodotObject>(value); + if (name == PropertyName.@PropertyGodotObjectOrDerived) { + this.@PropertyGodotObjectOrDerived = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.GodotObject>(value); return true; } - if (name == PropertyName.PropertyGodotResourceTexture) { - this.PropertyGodotResourceTexture = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Texture>(value); + if (name == PropertyName.@PropertyGodotResourceTexture) { + this.@PropertyGodotResourceTexture = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Texture>(value); return true; } - if (name == PropertyName.PropertyStringName) { - this.PropertyStringName = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(value); + if (name == PropertyName.@PropertyStringName) { + this.@PropertyStringName = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(value); return true; } - if (name == PropertyName.PropertyNodePath) { - this.PropertyNodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); + if (name == PropertyName.@PropertyNodePath) { + this.@PropertyNodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); return true; } - if (name == PropertyName.PropertyRid) { - this.PropertyRid = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid>(value); + if (name == PropertyName.@PropertyRid) { + this.@PropertyRid = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Rid>(value); return true; } - if (name == PropertyName.PropertyGodotDictionary) { - this.PropertyGodotDictionary = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Dictionary>(value); + if (name == PropertyName.@PropertyGodotDictionary) { + this.@PropertyGodotDictionary = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Dictionary>(value); return true; } - if (name == PropertyName.PropertyGodotArray) { - this.PropertyGodotArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Array>(value); + if (name == PropertyName.@PropertyGodotArray) { + this.@PropertyGodotArray = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.Collections.Array>(value); return true; } - if (name == PropertyName.PropertyGodotGenericDictionary) { - this.PropertyGodotGenericDictionary = global::Godot.NativeInterop.VariantUtils.ConvertToDictionary<string, bool>(value); + if (name == PropertyName.@PropertyGodotGenericDictionary) { + this.@PropertyGodotGenericDictionary = global::Godot.NativeInterop.VariantUtils.ConvertToDictionary<string, bool>(value); return true; } - if (name == PropertyName.PropertyGodotGenericArray) { - this.PropertyGodotGenericArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<int>(value); + if (name == PropertyName.@PropertyGodotGenericArray) { + this.@PropertyGodotGenericArray = global::Godot.NativeInterop.VariantUtils.ConvertToArray<int>(value); return true; } - if (name == PropertyName._notGeneratePropertyString) { - this._notGeneratePropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@_notGeneratePropertyString) { + this.@_notGeneratePropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName._notGeneratePropertyInt) { - this._notGeneratePropertyInt = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); + if (name == PropertyName.@_notGeneratePropertyInt) { + this.@_notGeneratePropertyInt = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); return true; } - if (name == PropertyName._fullPropertyString) { - this._fullPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@_fullPropertyString) { + this.@_fullPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName._fullPropertyStringComplex) { - this._fullPropertyStringComplex = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@_fullPropertyStringComplex) { + this.@_fullPropertyStringComplex = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } - if (name == PropertyName._lamdaPropertyString) { - this._lamdaPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); + if (name == PropertyName.@_lamdaPropertyString) { + this.@_lamdaPropertyString = global::Godot.NativeInterop.VariantUtils.ConvertTo<string>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -571,280 +571,280 @@ partial class ExportedProperties [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName.NotGenerateComplexLamdaProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.NotGenerateComplexLamdaProperty); + if (name == PropertyName.@NotGenerateComplexLamdaProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@NotGenerateComplexLamdaProperty); return true; } - if (name == PropertyName.NotGenerateLamdaNoFieldProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.NotGenerateLamdaNoFieldProperty); + if (name == PropertyName.@NotGenerateLamdaNoFieldProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@NotGenerateLamdaNoFieldProperty); return true; } - if (name == PropertyName.NotGenerateComplexReturnProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.NotGenerateComplexReturnProperty); + if (name == PropertyName.@NotGenerateComplexReturnProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@NotGenerateComplexReturnProperty); return true; } - if (name == PropertyName.NotGenerateReturnsProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.NotGenerateReturnsProperty); + if (name == PropertyName.@NotGenerateReturnsProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@NotGenerateReturnsProperty); return true; } - if (name == PropertyName.FullPropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.FullPropertyString); + if (name == PropertyName.@FullPropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@FullPropertyString); return true; } - if (name == PropertyName.FullPropertyString_Complex) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.FullPropertyString_Complex); + if (name == PropertyName.@FullPropertyString_Complex) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@FullPropertyString_Complex); return true; } - if (name == PropertyName.LamdaPropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.LamdaPropertyString); + if (name == PropertyName.@LamdaPropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@LamdaPropertyString); return true; } - if (name == PropertyName.PropertyBoolean) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this.PropertyBoolean); + if (name == PropertyName.@PropertyBoolean) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this.@PropertyBoolean); return true; } - if (name == PropertyName.PropertyChar) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<char>(this.PropertyChar); + if (name == PropertyName.@PropertyChar) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<char>(this.@PropertyChar); return true; } - if (name == PropertyName.PropertySByte) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<sbyte>(this.PropertySByte); + if (name == PropertyName.@PropertySByte) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<sbyte>(this.@PropertySByte); return true; } - if (name == PropertyName.PropertyInt16) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<short>(this.PropertyInt16); + if (name == PropertyName.@PropertyInt16) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<short>(this.@PropertyInt16); return true; } - if (name == PropertyName.PropertyInt32) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this.PropertyInt32); + if (name == PropertyName.@PropertyInt32) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this.@PropertyInt32); return true; } - if (name == PropertyName.PropertyInt64) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long>(this.PropertyInt64); + if (name == PropertyName.@PropertyInt64) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long>(this.@PropertyInt64); return true; } - if (name == PropertyName.PropertyByte) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte>(this.PropertyByte); + if (name == PropertyName.@PropertyByte) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte>(this.@PropertyByte); return true; } - if (name == PropertyName.PropertyUInt16) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ushort>(this.PropertyUInt16); + if (name == PropertyName.@PropertyUInt16) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ushort>(this.@PropertyUInt16); return true; } - if (name == PropertyName.PropertyUInt32) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<uint>(this.PropertyUInt32); + if (name == PropertyName.@PropertyUInt32) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<uint>(this.@PropertyUInt32); return true; } - if (name == PropertyName.PropertyUInt64) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ulong>(this.PropertyUInt64); + if (name == PropertyName.@PropertyUInt64) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<ulong>(this.@PropertyUInt64); return true; } - if (name == PropertyName.PropertySingle) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float>(this.PropertySingle); + if (name == PropertyName.@PropertySingle) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float>(this.@PropertySingle); return true; } - if (name == PropertyName.PropertyDouble) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double>(this.PropertyDouble); + if (name == PropertyName.@PropertyDouble) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double>(this.@PropertyDouble); return true; } - if (name == PropertyName.PropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.PropertyString); + if (name == PropertyName.@PropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@PropertyString); return true; } - if (name == PropertyName.PropertyVector2) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2>(this.PropertyVector2); + if (name == PropertyName.@PropertyVector2) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2>(this.@PropertyVector2); return true; } - if (name == PropertyName.PropertyVector2I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2I>(this.PropertyVector2I); + if (name == PropertyName.@PropertyVector2I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2I>(this.@PropertyVector2I); return true; } - if (name == PropertyName.PropertyRect2) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2>(this.PropertyRect2); + if (name == PropertyName.@PropertyRect2) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2>(this.@PropertyRect2); return true; } - if (name == PropertyName.PropertyRect2I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2I>(this.PropertyRect2I); + if (name == PropertyName.@PropertyRect2I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rect2I>(this.@PropertyRect2I); return true; } - if (name == PropertyName.PropertyTransform2D) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform2D>(this.PropertyTransform2D); + if (name == PropertyName.@PropertyTransform2D) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform2D>(this.@PropertyTransform2D); return true; } - if (name == PropertyName.PropertyVector3) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3>(this.PropertyVector3); + if (name == PropertyName.@PropertyVector3) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3>(this.@PropertyVector3); return true; } - if (name == PropertyName.PropertyVector3I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3I>(this.PropertyVector3I); + if (name == PropertyName.@PropertyVector3I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3I>(this.@PropertyVector3I); return true; } - if (name == PropertyName.PropertyBasis) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Basis>(this.PropertyBasis); + if (name == PropertyName.@PropertyBasis) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Basis>(this.@PropertyBasis); return true; } - if (name == PropertyName.PropertyQuaternion) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Quaternion>(this.PropertyQuaternion); + if (name == PropertyName.@PropertyQuaternion) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Quaternion>(this.@PropertyQuaternion); return true; } - if (name == PropertyName.PropertyTransform3D) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform3D>(this.PropertyTransform3D); + if (name == PropertyName.@PropertyTransform3D) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Transform3D>(this.@PropertyTransform3D); return true; } - if (name == PropertyName.PropertyVector4) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4>(this.PropertyVector4); + if (name == PropertyName.@PropertyVector4) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4>(this.@PropertyVector4); return true; } - if (name == PropertyName.PropertyVector4I) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4I>(this.PropertyVector4I); + if (name == PropertyName.@PropertyVector4I) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector4I>(this.@PropertyVector4I); return true; } - if (name == PropertyName.PropertyProjection) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Projection>(this.PropertyProjection); + if (name == PropertyName.@PropertyProjection) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Projection>(this.@PropertyProjection); return true; } - if (name == PropertyName.PropertyAabb) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Aabb>(this.PropertyAabb); + if (name == PropertyName.@PropertyAabb) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Aabb>(this.@PropertyAabb); return true; } - if (name == PropertyName.PropertyColor) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color>(this.PropertyColor); + if (name == PropertyName.@PropertyColor) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color>(this.@PropertyColor); return true; } - if (name == PropertyName.PropertyPlane) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Plane>(this.PropertyPlane); + if (name == PropertyName.@PropertyPlane) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Plane>(this.@PropertyPlane); return true; } - if (name == PropertyName.PropertyCallable) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Callable>(this.PropertyCallable); + if (name == PropertyName.@PropertyCallable) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Callable>(this.@PropertyCallable); return true; } - if (name == PropertyName.PropertySignal) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Signal>(this.PropertySignal); + if (name == PropertyName.@PropertySignal) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Signal>(this.@PropertySignal); return true; } - if (name == PropertyName.PropertyEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedProperties.MyEnum>(this.PropertyEnum); + if (name == PropertyName.@PropertyEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedProperties.MyEnum>(this.@PropertyEnum); return true; } - if (name == PropertyName.PropertyFlagsEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedProperties.MyFlagsEnum>(this.PropertyFlagsEnum); + if (name == PropertyName.@PropertyFlagsEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::ExportedProperties.MyFlagsEnum>(this.@PropertyFlagsEnum); return true; } - if (name == PropertyName.PropertyByteArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte[]>(this.PropertyByteArray); + if (name == PropertyName.@PropertyByteArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<byte[]>(this.@PropertyByteArray); return true; } - if (name == PropertyName.PropertyInt32Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this.PropertyInt32Array); + if (name == PropertyName.@PropertyInt32Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int[]>(this.@PropertyInt32Array); return true; } - if (name == PropertyName.PropertyInt64Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this.PropertyInt64Array); + if (name == PropertyName.@PropertyInt64Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<long[]>(this.@PropertyInt64Array); return true; } - if (name == PropertyName.PropertySingleArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float[]>(this.PropertySingleArray); + if (name == PropertyName.@PropertySingleArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<float[]>(this.@PropertySingleArray); return true; } - if (name == PropertyName.PropertyDoubleArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double[]>(this.PropertyDoubleArray); + if (name == PropertyName.@PropertyDoubleArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<double[]>(this.@PropertyDoubleArray); return true; } - if (name == PropertyName.PropertyStringArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.PropertyStringArray); + if (name == PropertyName.@PropertyStringArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.@PropertyStringArray); return true; } - if (name == PropertyName.PropertyStringArrayEnum) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.PropertyStringArrayEnum); + if (name == PropertyName.@PropertyStringArrayEnum) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string[]>(this.@PropertyStringArrayEnum); return true; } - if (name == PropertyName.PropertyVector2Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2[]>(this.PropertyVector2Array); + if (name == PropertyName.@PropertyVector2Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector2[]>(this.@PropertyVector2Array); return true; } - if (name == PropertyName.PropertyVector3Array) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3[]>(this.PropertyVector3Array); + if (name == PropertyName.@PropertyVector3Array) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Vector3[]>(this.@PropertyVector3Array); return true; } - if (name == PropertyName.PropertyColorArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color[]>(this.PropertyColorArray); + if (name == PropertyName.@PropertyColorArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Color[]>(this.@PropertyColorArray); return true; } - if (name == PropertyName.PropertyGodotObjectOrDerivedArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromSystemArrayOfGodotObject(this.PropertyGodotObjectOrDerivedArray); + if (name == PropertyName.@PropertyGodotObjectOrDerivedArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromSystemArrayOfGodotObject(this.@PropertyGodotObjectOrDerivedArray); return true; } - if (name == PropertyName.field_StringNameArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName[]>(this.field_StringNameArray); + if (name == PropertyName.@field_StringNameArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName[]>(this.@field_StringNameArray); return true; } - if (name == PropertyName.field_NodePathArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath[]>(this.field_NodePathArray); + if (name == PropertyName.@field_NodePathArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath[]>(this.@field_NodePathArray); return true; } - if (name == PropertyName.field_RidArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid[]>(this.field_RidArray); + if (name == PropertyName.@field_RidArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid[]>(this.@field_RidArray); return true; } - if (name == PropertyName.PropertyVariant) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Variant>(this.PropertyVariant); + if (name == PropertyName.@PropertyVariant) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Variant>(this.@PropertyVariant); return true; } - if (name == PropertyName.PropertyGodotObjectOrDerived) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.GodotObject>(this.PropertyGodotObjectOrDerived); + if (name == PropertyName.@PropertyGodotObjectOrDerived) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.GodotObject>(this.@PropertyGodotObjectOrDerived); return true; } - if (name == PropertyName.PropertyGodotResourceTexture) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Texture>(this.PropertyGodotResourceTexture); + if (name == PropertyName.@PropertyGodotResourceTexture) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Texture>(this.@PropertyGodotResourceTexture); return true; } - if (name == PropertyName.PropertyStringName) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName>(this.PropertyStringName); + if (name == PropertyName.@PropertyStringName) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.StringName>(this.@PropertyStringName); return true; } - if (name == PropertyName.PropertyNodePath) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this.PropertyNodePath); + if (name == PropertyName.@PropertyNodePath) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this.@PropertyNodePath); return true; } - if (name == PropertyName.PropertyRid) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid>(this.PropertyRid); + if (name == PropertyName.@PropertyRid) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Rid>(this.@PropertyRid); return true; } - if (name == PropertyName.PropertyGodotDictionary) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Dictionary>(this.PropertyGodotDictionary); + if (name == PropertyName.@PropertyGodotDictionary) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Dictionary>(this.@PropertyGodotDictionary); return true; } - if (name == PropertyName.PropertyGodotArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Array>(this.PropertyGodotArray); + if (name == PropertyName.@PropertyGodotArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Collections.Array>(this.@PropertyGodotArray); return true; } - if (name == PropertyName.PropertyGodotGenericDictionary) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromDictionary(this.PropertyGodotGenericDictionary); + if (name == PropertyName.@PropertyGodotGenericDictionary) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromDictionary(this.@PropertyGodotGenericDictionary); return true; } - if (name == PropertyName.PropertyGodotGenericArray) { - value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this.PropertyGodotGenericArray); + if (name == PropertyName.@PropertyGodotGenericArray) { + value = global::Godot.NativeInterop.VariantUtils.CreateFromArray(this.@PropertyGodotGenericArray); return true; } - if (name == PropertyName._notGeneratePropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this._notGeneratePropertyString); + if (name == PropertyName.@_notGeneratePropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@_notGeneratePropertyString); return true; } - if (name == PropertyName._notGeneratePropertyInt) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this._notGeneratePropertyInt); + if (name == PropertyName.@_notGeneratePropertyInt) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this.@_notGeneratePropertyInt); return true; } - if (name == PropertyName._fullPropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this._fullPropertyString); + if (name == PropertyName.@_fullPropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@_fullPropertyString); return true; } - if (name == PropertyName._fullPropertyStringComplex) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this._fullPropertyStringComplex); + if (name == PropertyName.@_fullPropertyStringComplex) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@_fullPropertyStringComplex); return true; } - if (name == PropertyName._lamdaPropertyString) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this._lamdaPropertyString); + if (name == PropertyName.@_lamdaPropertyString) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@_lamdaPropertyString); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -858,75 +858,75 @@ partial class ExportedProperties internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName._notGeneratePropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.NotGenerateComplexLamdaProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.NotGenerateLamdaNoFieldProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.NotGenerateComplexReturnProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._notGeneratePropertyInt, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.NotGenerateReturnsProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName._fullPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.FullPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName._fullPropertyStringComplex, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.FullPropertyString_Complex, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName._lamdaPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.LamdaPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.PropertyBoolean, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyChar, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertySByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyUInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyUInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyUInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.PropertySingle, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.PropertyDouble, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.PropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)5, name: PropertyName.PropertyVector2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)6, name: PropertyName.PropertyVector2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)7, name: PropertyName.PropertyRect2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)8, name: PropertyName.PropertyRect2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)11, name: PropertyName.PropertyTransform2D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)9, name: PropertyName.PropertyVector3, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)10, name: PropertyName.PropertyVector3I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)17, name: PropertyName.PropertyBasis, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)15, name: PropertyName.PropertyQuaternion, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)18, name: PropertyName.PropertyTransform3D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)12, name: PropertyName.PropertyVector4, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)13, name: PropertyName.PropertyVector4I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)19, name: PropertyName.PropertyProjection, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)16, name: PropertyName.PropertyAabb, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)20, name: PropertyName.PropertyColor, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)14, name: PropertyName.PropertyPlane, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)25, name: PropertyName.PropertyCallable, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)26, name: PropertyName.PropertySignal, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyEnum, hint: (global::Godot.PropertyHint)2, hintString: "A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.PropertyFlagsEnum, hint: (global::Godot.PropertyHint)6, hintString: "A:0,B:1,C:2", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)29, name: PropertyName.PropertyByteArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName.PropertyInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName.PropertyInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)32, name: PropertyName.PropertySingleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)33, name: PropertyName.PropertyDoubleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.PropertyStringArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.PropertyStringArrayEnum, hint: (global::Godot.PropertyHint)23, hintString: "4/2:A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)35, name: PropertyName.PropertyVector2Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)36, name: PropertyName.PropertyVector3Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)37, name: PropertyName.PropertyColorArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.PropertyGodotObjectOrDerivedArray, hint: (global::Godot.PropertyHint)23, hintString: "24/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.field_StringNameArray, hint: (global::Godot.PropertyHint)23, hintString: "21/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.field_NodePathArray, hint: (global::Godot.PropertyHint)23, hintString: "22/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.field_RidArray, hint: (global::Godot.PropertyHint)23, hintString: "23/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)0, name: PropertyName.PropertyVariant, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)135174, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.PropertyGodotObjectOrDerived, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.PropertyGodotResourceTexture, hint: (global::Godot.PropertyHint)17, hintString: "Texture", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)21, name: PropertyName.PropertyStringName, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName.PropertyNodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)23, name: PropertyName.PropertyRid, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.PropertyGodotDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.PropertyGodotArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.PropertyGodotGenericDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); - properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.PropertyGodotGenericArray, hint: (global::Godot.PropertyHint)23, hintString: "2/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@_notGeneratePropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@NotGenerateComplexLamdaProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@NotGenerateLamdaNoFieldProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@NotGenerateComplexReturnProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_notGeneratePropertyInt, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@NotGenerateReturnsProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@_fullPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@FullPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@_fullPropertyStringComplex, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@FullPropertyString_Complex, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@_lamdaPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@LamdaPropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@PropertyBoolean, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyChar, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertySByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyByte, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyUInt16, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyUInt32, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyUInt64, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.@PropertySingle, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)3, name: PropertyName.@PropertyDouble, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@PropertyString, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)5, name: PropertyName.@PropertyVector2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)6, name: PropertyName.@PropertyVector2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)7, name: PropertyName.@PropertyRect2, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)8, name: PropertyName.@PropertyRect2I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)11, name: PropertyName.@PropertyTransform2D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)9, name: PropertyName.@PropertyVector3, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)10, name: PropertyName.@PropertyVector3I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)17, name: PropertyName.@PropertyBasis, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)15, name: PropertyName.@PropertyQuaternion, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)18, name: PropertyName.@PropertyTransform3D, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)12, name: PropertyName.@PropertyVector4, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)13, name: PropertyName.@PropertyVector4I, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)19, name: PropertyName.@PropertyProjection, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)16, name: PropertyName.@PropertyAabb, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)20, name: PropertyName.@PropertyColor, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)14, name: PropertyName.@PropertyPlane, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)25, name: PropertyName.@PropertyCallable, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)26, name: PropertyName.@PropertySignal, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyEnum, hint: (global::Godot.PropertyHint)2, hintString: "A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@PropertyFlagsEnum, hint: (global::Godot.PropertyHint)6, hintString: "A:0,B:1,C:2", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)29, name: PropertyName.@PropertyByteArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)30, name: PropertyName.@PropertyInt32Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)31, name: PropertyName.@PropertyInt64Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)32, name: PropertyName.@PropertySingleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)33, name: PropertyName.@PropertyDoubleArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.@PropertyStringArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)34, name: PropertyName.@PropertyStringArrayEnum, hint: (global::Godot.PropertyHint)23, hintString: "4/2:A,B,C", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)35, name: PropertyName.@PropertyVector2Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)36, name: PropertyName.@PropertyVector3Array, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)37, name: PropertyName.@PropertyColorArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@PropertyGodotObjectOrDerivedArray, hint: (global::Godot.PropertyHint)23, hintString: "24/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@field_StringNameArray, hint: (global::Godot.PropertyHint)23, hintString: "21/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@field_NodePathArray, hint: (global::Godot.PropertyHint)23, hintString: "22/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@field_RidArray, hint: (global::Godot.PropertyHint)23, hintString: "23/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)0, name: PropertyName.@PropertyVariant, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)135174, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.@PropertyGodotObjectOrDerived, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)24, name: PropertyName.@PropertyGodotResourceTexture, hint: (global::Godot.PropertyHint)17, hintString: "Texture", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)21, name: PropertyName.@PropertyStringName, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName.@PropertyNodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)23, name: PropertyName.@PropertyRid, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.@PropertyGodotDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@PropertyGodotArray, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)27, name: PropertyName.@PropertyGodotGenericDictionary, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); + properties.Add(new(type: (global::Godot.Variant.Type)28, name: PropertyName.@PropertyGodotGenericArray, hint: (global::Godot.PropertyHint)23, hintString: "2/0:", usage: (global::Godot.PropertyUsageFlags)4102, exported: true)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptPropertyDefVal.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptPropertyDefVal.generated.cs index a1b01aed4f..ce154cad8e 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptPropertyDefVal.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ExportedProperties_ScriptPropertyDefVal.generated.cs @@ -13,133 +13,133 @@ partial class ExportedProperties { var values = new global::System.Collections.Generic.Dictionary<global::Godot.StringName, global::Godot.Variant>(64); string __NotGenerateComplexLamdaProperty_default_value = default; - values.Add(PropertyName.NotGenerateComplexLamdaProperty, global::Godot.Variant.From<string>(__NotGenerateComplexLamdaProperty_default_value)); + values.Add(PropertyName.@NotGenerateComplexLamdaProperty, global::Godot.Variant.From<string>(__NotGenerateComplexLamdaProperty_default_value)); string __NotGenerateLamdaNoFieldProperty_default_value = default; - values.Add(PropertyName.NotGenerateLamdaNoFieldProperty, global::Godot.Variant.From<string>(__NotGenerateLamdaNoFieldProperty_default_value)); + values.Add(PropertyName.@NotGenerateLamdaNoFieldProperty, global::Godot.Variant.From<string>(__NotGenerateLamdaNoFieldProperty_default_value)); string __NotGenerateComplexReturnProperty_default_value = default; - values.Add(PropertyName.NotGenerateComplexReturnProperty, global::Godot.Variant.From<string>(__NotGenerateComplexReturnProperty_default_value)); + values.Add(PropertyName.@NotGenerateComplexReturnProperty, global::Godot.Variant.From<string>(__NotGenerateComplexReturnProperty_default_value)); string __NotGenerateReturnsProperty_default_value = default; - values.Add(PropertyName.NotGenerateReturnsProperty, global::Godot.Variant.From<string>(__NotGenerateReturnsProperty_default_value)); + values.Add(PropertyName.@NotGenerateReturnsProperty, global::Godot.Variant.From<string>(__NotGenerateReturnsProperty_default_value)); string __FullPropertyString_default_value = "FullPropertyString"; - values.Add(PropertyName.FullPropertyString, global::Godot.Variant.From<string>(__FullPropertyString_default_value)); + values.Add(PropertyName.@FullPropertyString, global::Godot.Variant.From<string>(__FullPropertyString_default_value)); string __FullPropertyString_Complex_default_value = new string("FullPropertyString_Complex") + global::System.Convert.ToInt32("1"); - values.Add(PropertyName.FullPropertyString_Complex, global::Godot.Variant.From<string>(__FullPropertyString_Complex_default_value)); + values.Add(PropertyName.@FullPropertyString_Complex, global::Godot.Variant.From<string>(__FullPropertyString_Complex_default_value)); string __LamdaPropertyString_default_value = "LamdaPropertyString"; - values.Add(PropertyName.LamdaPropertyString, global::Godot.Variant.From<string>(__LamdaPropertyString_default_value)); + values.Add(PropertyName.@LamdaPropertyString, global::Godot.Variant.From<string>(__LamdaPropertyString_default_value)); bool __PropertyBoolean_default_value = true; - values.Add(PropertyName.PropertyBoolean, global::Godot.Variant.From<bool>(__PropertyBoolean_default_value)); + values.Add(PropertyName.@PropertyBoolean, global::Godot.Variant.From<bool>(__PropertyBoolean_default_value)); char __PropertyChar_default_value = 'f'; - values.Add(PropertyName.PropertyChar, global::Godot.Variant.From<char>(__PropertyChar_default_value)); + values.Add(PropertyName.@PropertyChar, global::Godot.Variant.From<char>(__PropertyChar_default_value)); sbyte __PropertySByte_default_value = 10; - values.Add(PropertyName.PropertySByte, global::Godot.Variant.From<sbyte>(__PropertySByte_default_value)); + values.Add(PropertyName.@PropertySByte, global::Godot.Variant.From<sbyte>(__PropertySByte_default_value)); short __PropertyInt16_default_value = 10; - values.Add(PropertyName.PropertyInt16, global::Godot.Variant.From<short>(__PropertyInt16_default_value)); + values.Add(PropertyName.@PropertyInt16, global::Godot.Variant.From<short>(__PropertyInt16_default_value)); int __PropertyInt32_default_value = 10; - values.Add(PropertyName.PropertyInt32, global::Godot.Variant.From<int>(__PropertyInt32_default_value)); + values.Add(PropertyName.@PropertyInt32, global::Godot.Variant.From<int>(__PropertyInt32_default_value)); long __PropertyInt64_default_value = 10; - values.Add(PropertyName.PropertyInt64, global::Godot.Variant.From<long>(__PropertyInt64_default_value)); + values.Add(PropertyName.@PropertyInt64, global::Godot.Variant.From<long>(__PropertyInt64_default_value)); byte __PropertyByte_default_value = 10; - values.Add(PropertyName.PropertyByte, global::Godot.Variant.From<byte>(__PropertyByte_default_value)); + values.Add(PropertyName.@PropertyByte, global::Godot.Variant.From<byte>(__PropertyByte_default_value)); ushort __PropertyUInt16_default_value = 10; - values.Add(PropertyName.PropertyUInt16, global::Godot.Variant.From<ushort>(__PropertyUInt16_default_value)); + values.Add(PropertyName.@PropertyUInt16, global::Godot.Variant.From<ushort>(__PropertyUInt16_default_value)); uint __PropertyUInt32_default_value = 10; - values.Add(PropertyName.PropertyUInt32, global::Godot.Variant.From<uint>(__PropertyUInt32_default_value)); + values.Add(PropertyName.@PropertyUInt32, global::Godot.Variant.From<uint>(__PropertyUInt32_default_value)); ulong __PropertyUInt64_default_value = 10; - values.Add(PropertyName.PropertyUInt64, global::Godot.Variant.From<ulong>(__PropertyUInt64_default_value)); + values.Add(PropertyName.@PropertyUInt64, global::Godot.Variant.From<ulong>(__PropertyUInt64_default_value)); float __PropertySingle_default_value = 10; - values.Add(PropertyName.PropertySingle, global::Godot.Variant.From<float>(__PropertySingle_default_value)); + values.Add(PropertyName.@PropertySingle, global::Godot.Variant.From<float>(__PropertySingle_default_value)); double __PropertyDouble_default_value = 10; - values.Add(PropertyName.PropertyDouble, global::Godot.Variant.From<double>(__PropertyDouble_default_value)); + values.Add(PropertyName.@PropertyDouble, global::Godot.Variant.From<double>(__PropertyDouble_default_value)); string __PropertyString_default_value = "foo"; - values.Add(PropertyName.PropertyString, global::Godot.Variant.From<string>(__PropertyString_default_value)); + values.Add(PropertyName.@PropertyString, global::Godot.Variant.From<string>(__PropertyString_default_value)); global::Godot.Vector2 __PropertyVector2_default_value = new(10f, 10f); - values.Add(PropertyName.PropertyVector2, global::Godot.Variant.From<global::Godot.Vector2>(__PropertyVector2_default_value)); + values.Add(PropertyName.@PropertyVector2, global::Godot.Variant.From<global::Godot.Vector2>(__PropertyVector2_default_value)); global::Godot.Vector2I __PropertyVector2I_default_value = global::Godot.Vector2I.Up; - values.Add(PropertyName.PropertyVector2I, global::Godot.Variant.From<global::Godot.Vector2I>(__PropertyVector2I_default_value)); + values.Add(PropertyName.@PropertyVector2I, global::Godot.Variant.From<global::Godot.Vector2I>(__PropertyVector2I_default_value)); global::Godot.Rect2 __PropertyRect2_default_value = new(new global::Godot.Vector2(10f, 10f), new global::Godot.Vector2(10f, 10f)); - values.Add(PropertyName.PropertyRect2, global::Godot.Variant.From<global::Godot.Rect2>(__PropertyRect2_default_value)); + values.Add(PropertyName.@PropertyRect2, global::Godot.Variant.From<global::Godot.Rect2>(__PropertyRect2_default_value)); global::Godot.Rect2I __PropertyRect2I_default_value = new(new global::Godot.Vector2I(10, 10), new global::Godot.Vector2I(10, 10)); - values.Add(PropertyName.PropertyRect2I, global::Godot.Variant.From<global::Godot.Rect2I>(__PropertyRect2I_default_value)); + values.Add(PropertyName.@PropertyRect2I, global::Godot.Variant.From<global::Godot.Rect2I>(__PropertyRect2I_default_value)); global::Godot.Transform2D __PropertyTransform2D_default_value = global::Godot.Transform2D.Identity; - values.Add(PropertyName.PropertyTransform2D, global::Godot.Variant.From<global::Godot.Transform2D>(__PropertyTransform2D_default_value)); + values.Add(PropertyName.@PropertyTransform2D, global::Godot.Variant.From<global::Godot.Transform2D>(__PropertyTransform2D_default_value)); global::Godot.Vector3 __PropertyVector3_default_value = new(10f, 10f, 10f); - values.Add(PropertyName.PropertyVector3, global::Godot.Variant.From<global::Godot.Vector3>(__PropertyVector3_default_value)); + values.Add(PropertyName.@PropertyVector3, global::Godot.Variant.From<global::Godot.Vector3>(__PropertyVector3_default_value)); global::Godot.Vector3I __PropertyVector3I_default_value = global::Godot.Vector3I.Back; - values.Add(PropertyName.PropertyVector3I, global::Godot.Variant.From<global::Godot.Vector3I>(__PropertyVector3I_default_value)); + values.Add(PropertyName.@PropertyVector3I, global::Godot.Variant.From<global::Godot.Vector3I>(__PropertyVector3I_default_value)); global::Godot.Basis __PropertyBasis_default_value = new global::Godot.Basis(global::Godot.Quaternion.Identity); - values.Add(PropertyName.PropertyBasis, global::Godot.Variant.From<global::Godot.Basis>(__PropertyBasis_default_value)); + values.Add(PropertyName.@PropertyBasis, global::Godot.Variant.From<global::Godot.Basis>(__PropertyBasis_default_value)); global::Godot.Quaternion __PropertyQuaternion_default_value = new global::Godot.Quaternion(global::Godot.Basis.Identity); - values.Add(PropertyName.PropertyQuaternion, global::Godot.Variant.From<global::Godot.Quaternion>(__PropertyQuaternion_default_value)); + values.Add(PropertyName.@PropertyQuaternion, global::Godot.Variant.From<global::Godot.Quaternion>(__PropertyQuaternion_default_value)); global::Godot.Transform3D __PropertyTransform3D_default_value = global::Godot.Transform3D.Identity; - values.Add(PropertyName.PropertyTransform3D, global::Godot.Variant.From<global::Godot.Transform3D>(__PropertyTransform3D_default_value)); + values.Add(PropertyName.@PropertyTransform3D, global::Godot.Variant.From<global::Godot.Transform3D>(__PropertyTransform3D_default_value)); global::Godot.Vector4 __PropertyVector4_default_value = new(10f, 10f, 10f, 10f); - values.Add(PropertyName.PropertyVector4, global::Godot.Variant.From<global::Godot.Vector4>(__PropertyVector4_default_value)); + values.Add(PropertyName.@PropertyVector4, global::Godot.Variant.From<global::Godot.Vector4>(__PropertyVector4_default_value)); global::Godot.Vector4I __PropertyVector4I_default_value = global::Godot.Vector4I.One; - values.Add(PropertyName.PropertyVector4I, global::Godot.Variant.From<global::Godot.Vector4I>(__PropertyVector4I_default_value)); + values.Add(PropertyName.@PropertyVector4I, global::Godot.Variant.From<global::Godot.Vector4I>(__PropertyVector4I_default_value)); global::Godot.Projection __PropertyProjection_default_value = global::Godot.Projection.Identity; - values.Add(PropertyName.PropertyProjection, global::Godot.Variant.From<global::Godot.Projection>(__PropertyProjection_default_value)); + values.Add(PropertyName.@PropertyProjection, global::Godot.Variant.From<global::Godot.Projection>(__PropertyProjection_default_value)); global::Godot.Aabb __PropertyAabb_default_value = new global::Godot.Aabb(10f, 10f, 10f, new global::Godot.Vector3(1f, 1f, 1f)); - values.Add(PropertyName.PropertyAabb, global::Godot.Variant.From<global::Godot.Aabb>(__PropertyAabb_default_value)); + values.Add(PropertyName.@PropertyAabb, global::Godot.Variant.From<global::Godot.Aabb>(__PropertyAabb_default_value)); global::Godot.Color __PropertyColor_default_value = global::Godot.Colors.Aquamarine; - values.Add(PropertyName.PropertyColor, global::Godot.Variant.From<global::Godot.Color>(__PropertyColor_default_value)); + values.Add(PropertyName.@PropertyColor, global::Godot.Variant.From<global::Godot.Color>(__PropertyColor_default_value)); global::Godot.Plane __PropertyPlane_default_value = global::Godot.Plane.PlaneXZ; - values.Add(PropertyName.PropertyPlane, global::Godot.Variant.From<global::Godot.Plane>(__PropertyPlane_default_value)); + values.Add(PropertyName.@PropertyPlane, global::Godot.Variant.From<global::Godot.Plane>(__PropertyPlane_default_value)); global::Godot.Callable __PropertyCallable_default_value = new global::Godot.Callable(global::Godot.Engine.GetMainLoop(), "_process"); - values.Add(PropertyName.PropertyCallable, global::Godot.Variant.From<global::Godot.Callable>(__PropertyCallable_default_value)); + values.Add(PropertyName.@PropertyCallable, global::Godot.Variant.From<global::Godot.Callable>(__PropertyCallable_default_value)); global::Godot.Signal __PropertySignal_default_value = new global::Godot.Signal(global::Godot.Engine.GetMainLoop(), "Propertylist_changed"); - values.Add(PropertyName.PropertySignal, global::Godot.Variant.From<global::Godot.Signal>(__PropertySignal_default_value)); + values.Add(PropertyName.@PropertySignal, global::Godot.Variant.From<global::Godot.Signal>(__PropertySignal_default_value)); global::ExportedProperties.MyEnum __PropertyEnum_default_value = global::ExportedProperties.MyEnum.C; - values.Add(PropertyName.PropertyEnum, global::Godot.Variant.From<global::ExportedProperties.MyEnum>(__PropertyEnum_default_value)); + values.Add(PropertyName.@PropertyEnum, global::Godot.Variant.From<global::ExportedProperties.MyEnum>(__PropertyEnum_default_value)); global::ExportedProperties.MyFlagsEnum __PropertyFlagsEnum_default_value = global::ExportedProperties.MyFlagsEnum.C; - values.Add(PropertyName.PropertyFlagsEnum, global::Godot.Variant.From<global::ExportedProperties.MyFlagsEnum>(__PropertyFlagsEnum_default_value)); + values.Add(PropertyName.@PropertyFlagsEnum, global::Godot.Variant.From<global::ExportedProperties.MyFlagsEnum>(__PropertyFlagsEnum_default_value)); byte[] __PropertyByteArray_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName.PropertyByteArray, global::Godot.Variant.From<byte[]>(__PropertyByteArray_default_value)); + values.Add(PropertyName.@PropertyByteArray, global::Godot.Variant.From<byte[]>(__PropertyByteArray_default_value)); int[] __PropertyInt32Array_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName.PropertyInt32Array, global::Godot.Variant.From<int[]>(__PropertyInt32Array_default_value)); + values.Add(PropertyName.@PropertyInt32Array, global::Godot.Variant.From<int[]>(__PropertyInt32Array_default_value)); long[] __PropertyInt64Array_default_value = { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName.PropertyInt64Array, global::Godot.Variant.From<long[]>(__PropertyInt64Array_default_value)); + values.Add(PropertyName.@PropertyInt64Array, global::Godot.Variant.From<long[]>(__PropertyInt64Array_default_value)); float[] __PropertySingleArray_default_value = { 0f, 1f, 2f, 3f, 4f, 5f, 6f }; - values.Add(PropertyName.PropertySingleArray, global::Godot.Variant.From<float[]>(__PropertySingleArray_default_value)); + values.Add(PropertyName.@PropertySingleArray, global::Godot.Variant.From<float[]>(__PropertySingleArray_default_value)); double[] __PropertyDoubleArray_default_value = { 0d, 1d, 2d, 3d, 4d, 5d, 6d }; - values.Add(PropertyName.PropertyDoubleArray, global::Godot.Variant.From<double[]>(__PropertyDoubleArray_default_value)); + values.Add(PropertyName.@PropertyDoubleArray, global::Godot.Variant.From<double[]>(__PropertyDoubleArray_default_value)); string[] __PropertyStringArray_default_value = { "foo", "bar" }; - values.Add(PropertyName.PropertyStringArray, global::Godot.Variant.From<string[]>(__PropertyStringArray_default_value)); + values.Add(PropertyName.@PropertyStringArray, global::Godot.Variant.From<string[]>(__PropertyStringArray_default_value)); string[] __PropertyStringArrayEnum_default_value = { "foo", "bar" }; - values.Add(PropertyName.PropertyStringArrayEnum, global::Godot.Variant.From<string[]>(__PropertyStringArrayEnum_default_value)); + values.Add(PropertyName.@PropertyStringArrayEnum, global::Godot.Variant.From<string[]>(__PropertyStringArrayEnum_default_value)); global::Godot.Vector2[] __PropertyVector2Array_default_value = { global::Godot.Vector2.Up, global::Godot.Vector2.Down, global::Godot.Vector2.Left, global::Godot.Vector2.Right }; - values.Add(PropertyName.PropertyVector2Array, global::Godot.Variant.From<global::Godot.Vector2[]>(__PropertyVector2Array_default_value)); + values.Add(PropertyName.@PropertyVector2Array, global::Godot.Variant.From<global::Godot.Vector2[]>(__PropertyVector2Array_default_value)); global::Godot.Vector3[] __PropertyVector3Array_default_value = { global::Godot.Vector3.Up, global::Godot.Vector3.Down, global::Godot.Vector3.Left, global::Godot.Vector3.Right }; - values.Add(PropertyName.PropertyVector3Array, global::Godot.Variant.From<global::Godot.Vector3[]>(__PropertyVector3Array_default_value)); + values.Add(PropertyName.@PropertyVector3Array, global::Godot.Variant.From<global::Godot.Vector3[]>(__PropertyVector3Array_default_value)); global::Godot.Color[] __PropertyColorArray_default_value = { global::Godot.Colors.Aqua, global::Godot.Colors.Aquamarine, global::Godot.Colors.Azure, global::Godot.Colors.Beige }; - values.Add(PropertyName.PropertyColorArray, global::Godot.Variant.From<global::Godot.Color[]>(__PropertyColorArray_default_value)); + values.Add(PropertyName.@PropertyColorArray, global::Godot.Variant.From<global::Godot.Color[]>(__PropertyColorArray_default_value)); global::Godot.GodotObject[] __PropertyGodotObjectOrDerivedArray_default_value = { null }; - values.Add(PropertyName.PropertyGodotObjectOrDerivedArray, global::Godot.Variant.CreateFrom(__PropertyGodotObjectOrDerivedArray_default_value)); + values.Add(PropertyName.@PropertyGodotObjectOrDerivedArray, global::Godot.Variant.CreateFrom(__PropertyGodotObjectOrDerivedArray_default_value)); global::Godot.StringName[] __field_StringNameArray_default_value = { "foo", "bar" }; - values.Add(PropertyName.field_StringNameArray, global::Godot.Variant.From<global::Godot.StringName[]>(__field_StringNameArray_default_value)); + values.Add(PropertyName.@field_StringNameArray, global::Godot.Variant.From<global::Godot.StringName[]>(__field_StringNameArray_default_value)); global::Godot.NodePath[] __field_NodePathArray_default_value = { "foo", "bar" }; - values.Add(PropertyName.field_NodePathArray, global::Godot.Variant.From<global::Godot.NodePath[]>(__field_NodePathArray_default_value)); + values.Add(PropertyName.@field_NodePathArray, global::Godot.Variant.From<global::Godot.NodePath[]>(__field_NodePathArray_default_value)); global::Godot.Rid[] __field_RidArray_default_value = { default, default, default }; - values.Add(PropertyName.field_RidArray, global::Godot.Variant.From<global::Godot.Rid[]>(__field_RidArray_default_value)); + values.Add(PropertyName.@field_RidArray, global::Godot.Variant.From<global::Godot.Rid[]>(__field_RidArray_default_value)); global::Godot.Variant __PropertyVariant_default_value = "foo"; - values.Add(PropertyName.PropertyVariant, global::Godot.Variant.From<global::Godot.Variant>(__PropertyVariant_default_value)); + values.Add(PropertyName.@PropertyVariant, global::Godot.Variant.From<global::Godot.Variant>(__PropertyVariant_default_value)); global::Godot.GodotObject __PropertyGodotObjectOrDerived_default_value = default; - values.Add(PropertyName.PropertyGodotObjectOrDerived, global::Godot.Variant.From<global::Godot.GodotObject>(__PropertyGodotObjectOrDerived_default_value)); + values.Add(PropertyName.@PropertyGodotObjectOrDerived, global::Godot.Variant.From<global::Godot.GodotObject>(__PropertyGodotObjectOrDerived_default_value)); global::Godot.Texture __PropertyGodotResourceTexture_default_value = default; - values.Add(PropertyName.PropertyGodotResourceTexture, global::Godot.Variant.From<global::Godot.Texture>(__PropertyGodotResourceTexture_default_value)); + values.Add(PropertyName.@PropertyGodotResourceTexture, global::Godot.Variant.From<global::Godot.Texture>(__PropertyGodotResourceTexture_default_value)); global::Godot.StringName __PropertyStringName_default_value = new global::Godot.StringName("foo"); - values.Add(PropertyName.PropertyStringName, global::Godot.Variant.From<global::Godot.StringName>(__PropertyStringName_default_value)); + values.Add(PropertyName.@PropertyStringName, global::Godot.Variant.From<global::Godot.StringName>(__PropertyStringName_default_value)); global::Godot.NodePath __PropertyNodePath_default_value = new global::Godot.NodePath("foo"); - values.Add(PropertyName.PropertyNodePath, global::Godot.Variant.From<global::Godot.NodePath>(__PropertyNodePath_default_value)); + values.Add(PropertyName.@PropertyNodePath, global::Godot.Variant.From<global::Godot.NodePath>(__PropertyNodePath_default_value)); global::Godot.Rid __PropertyRid_default_value = default; - values.Add(PropertyName.PropertyRid, global::Godot.Variant.From<global::Godot.Rid>(__PropertyRid_default_value)); + values.Add(PropertyName.@PropertyRid, global::Godot.Variant.From<global::Godot.Rid>(__PropertyRid_default_value)); global::Godot.Collections.Dictionary __PropertyGodotDictionary_default_value = new() { { "foo", 10 }, { global::Godot.Vector2.Up, global::Godot.Colors.Chocolate } }; - values.Add(PropertyName.PropertyGodotDictionary, global::Godot.Variant.From<global::Godot.Collections.Dictionary>(__PropertyGodotDictionary_default_value)); + values.Add(PropertyName.@PropertyGodotDictionary, global::Godot.Variant.From<global::Godot.Collections.Dictionary>(__PropertyGodotDictionary_default_value)); global::Godot.Collections.Array __PropertyGodotArray_default_value = new() { "foo", 10, global::Godot.Vector2.Up, global::Godot.Colors.Chocolate }; - values.Add(PropertyName.PropertyGodotArray, global::Godot.Variant.From<global::Godot.Collections.Array>(__PropertyGodotArray_default_value)); + values.Add(PropertyName.@PropertyGodotArray, global::Godot.Variant.From<global::Godot.Collections.Array>(__PropertyGodotArray_default_value)); global::Godot.Collections.Dictionary<string, bool> __PropertyGodotGenericDictionary_default_value = new() { { "foo", true }, { "bar", false } }; - values.Add(PropertyName.PropertyGodotGenericDictionary, global::Godot.Variant.CreateFrom(__PropertyGodotGenericDictionary_default_value)); + values.Add(PropertyName.@PropertyGodotGenericDictionary, global::Godot.Variant.CreateFrom(__PropertyGodotGenericDictionary_default_value)); global::Godot.Collections.Array<int> __PropertyGodotGenericArray_default_value = new() { 0, 1, 2, 3, 4, 5, 6 }; - values.Add(PropertyName.PropertyGodotGenericArray, global::Godot.Variant.CreateFrom(__PropertyGodotGenericArray_default_value)); + values.Add(PropertyName.@PropertyGodotGenericArray, global::Godot.Variant.CreateFrom(__PropertyGodotGenericArray_default_value)); return values; } #endif // TOOLS diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/Methods_ScriptMethods.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/Methods_ScriptMethods.generated.cs index f757497618..fe54e2cb70 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/Methods_ScriptMethods.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/Methods_ScriptMethods.generated.cs @@ -11,7 +11,7 @@ partial class Methods /// <summary> /// Cached name for the 'MethodWithOverload' method. /// </summary> - public new static readonly global::Godot.StringName MethodWithOverload = "MethodWithOverload"; + public new static readonly global::Godot.StringName @MethodWithOverload = "MethodWithOverload"; } /// <summary> /// Get the method information for all the methods declared in this class. @@ -22,9 +22,9 @@ partial class Methods internal new static global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo> GetGodotMethodList() { var methods = new global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo>(3); - methods.Add(new(name: MethodName.MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: null, defaultArguments: null)); - methods.Add(new(name: MethodName.MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)2, name: "a", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); - methods.Add(new(name: MethodName.MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)2, name: "a", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), new(type: (global::Godot.Variant.Type)2, name: "b", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + methods.Add(new(name: MethodName.@MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: null, defaultArguments: null)); + methods.Add(new(name: MethodName.@MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)2, name: "a", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + methods.Add(new(name: MethodName.@MethodWithOverload, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)2, name: "a", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), new(type: (global::Godot.Variant.Type)2, name: "b", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); return methods; } #pragma warning restore CS0109 @@ -32,18 +32,18 @@ partial class Methods [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret) { - if (method == MethodName.MethodWithOverload && args.Count == 0) { - MethodWithOverload(); + if (method == MethodName.@MethodWithOverload && args.Count == 0) { + @MethodWithOverload(); ret = default; return true; } - if (method == MethodName.MethodWithOverload && args.Count == 1) { - MethodWithOverload(global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[0])); + if (method == MethodName.@MethodWithOverload && args.Count == 1) { + @MethodWithOverload(global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[0])); ret = default; return true; } - if (method == MethodName.MethodWithOverload && args.Count == 2) { - MethodWithOverload(global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[0]), global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[1])); + if (method == MethodName.@MethodWithOverload && args.Count == 2) { + @MethodWithOverload(global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[0]), global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(args[1])); ret = default; return true; } @@ -53,7 +53,7 @@ partial class Methods [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool HasGodotClassMethod(in godot_string_name method) { - if (method == MethodName.MethodWithOverload) { + if (method == MethodName.@MethodWithOverload) { return true; } return base.HasGodotClassMethod(method); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/MixedReadOnlyWriteOnly_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/MixedReadOnlyWriteOnly_ScriptProperties.generated.cs index cabdbe8d99..6be6296d3b 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/MixedReadOnlyWriteOnly_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/MixedReadOnlyWriteOnly_ScriptProperties.generated.cs @@ -11,38 +11,38 @@ partial class MixedReadOnlyWriteOnly /// <summary> /// Cached name for the 'ReadOnlyAutoProperty' property. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyAutoProperty = "ReadOnlyAutoProperty"; + public new static readonly global::Godot.StringName @ReadOnlyAutoProperty = "ReadOnlyAutoProperty"; /// <summary> /// Cached name for the 'ReadOnlyProperty' property. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyProperty = "ReadOnlyProperty"; + public new static readonly global::Godot.StringName @ReadOnlyProperty = "ReadOnlyProperty"; /// <summary> /// Cached name for the 'InitOnlyAutoProperty' property. /// </summary> - public new static readonly global::Godot.StringName InitOnlyAutoProperty = "InitOnlyAutoProperty"; + public new static readonly global::Godot.StringName @InitOnlyAutoProperty = "InitOnlyAutoProperty"; /// <summary> /// Cached name for the 'WriteOnlyProperty' property. /// </summary> - public new static readonly global::Godot.StringName WriteOnlyProperty = "WriteOnlyProperty"; + public new static readonly global::Godot.StringName @WriteOnlyProperty = "WriteOnlyProperty"; /// <summary> /// Cached name for the 'ReadOnlyField' field. /// </summary> - public new static readonly global::Godot.StringName ReadOnlyField = "ReadOnlyField"; + public new static readonly global::Godot.StringName @ReadOnlyField = "ReadOnlyField"; /// <summary> /// Cached name for the '_writeOnlyBackingField' field. /// </summary> - public new static readonly global::Godot.StringName _writeOnlyBackingField = "_writeOnlyBackingField"; + public new static readonly global::Godot.StringName @_writeOnlyBackingField = "_writeOnlyBackingField"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName.WriteOnlyProperty) { - this.WriteOnlyProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@WriteOnlyProperty) { + this.@WriteOnlyProperty = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } - if (name == PropertyName._writeOnlyBackingField) { - this._writeOnlyBackingField = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); + if (name == PropertyName.@_writeOnlyBackingField) { + this.@_writeOnlyBackingField = global::Godot.NativeInterop.VariantUtils.ConvertTo<bool>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -51,24 +51,24 @@ partial class MixedReadOnlyWriteOnly [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName.ReadOnlyAutoProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyAutoProperty); + if (name == PropertyName.@ReadOnlyAutoProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyAutoProperty); return true; } - if (name == PropertyName.ReadOnlyProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyProperty); + if (name == PropertyName.@ReadOnlyProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyProperty); return true; } - if (name == PropertyName.InitOnlyAutoProperty) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.InitOnlyAutoProperty); + if (name == PropertyName.@InitOnlyAutoProperty) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@InitOnlyAutoProperty); return true; } - if (name == PropertyName.ReadOnlyField) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.ReadOnlyField); + if (name == PropertyName.@ReadOnlyField) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<string>(this.@ReadOnlyField); return true; } - if (name == PropertyName._writeOnlyBackingField) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this._writeOnlyBackingField); + if (name == PropertyName.@_writeOnlyBackingField) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<bool>(this.@_writeOnlyBackingField); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -82,12 +82,12 @@ partial class MixedReadOnlyWriteOnly internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.ReadOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.InitOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName._writeOnlyBackingField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.WriteOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@ReadOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)4, name: PropertyName.@InitOnlyAutoProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@_writeOnlyBackingField, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)1, name: PropertyName.@WriteOnlyProperty, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/OuterClass.NestedClass_ScriptMethods.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/OuterClass.NestedClass_ScriptMethods.generated.cs index 328107a237..2cc8f82f73 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/OuterClass.NestedClass_ScriptMethods.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/OuterClass.NestedClass_ScriptMethods.generated.cs @@ -13,7 +13,7 @@ partial class NestedClass /// <summary> /// Cached name for the '_Get' method. /// </summary> - public new static readonly global::Godot.StringName _Get = "_Get"; + public new static readonly global::Godot.StringName @_Get = "_Get"; } /// <summary> /// Get the method information for all the methods declared in this class. @@ -24,7 +24,7 @@ partial class NestedClass internal new static global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo> GetGodotMethodList() { var methods = new global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo>(1); - methods.Add(new(name: MethodName._Get, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)131078, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)21, name: "property", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + methods.Add(new(name: MethodName.@_Get, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)131078, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)21, name: "property", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); return methods; } #pragma warning restore CS0109 @@ -32,8 +32,8 @@ partial class NestedClass [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret) { - if (method == MethodName._Get && args.Count == 1) { - var callRet = _Get(global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(args[0])); + if (method == MethodName.@_Get && args.Count == 1) { + var callRet = @_Get(global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(args[0])); ret = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.Variant>(callRet); return true; } @@ -43,7 +43,7 @@ partial class NestedClass [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool HasGodotClassMethod(in godot_string_name method) { - if (method == MethodName._Get) { + if (method == MethodName.@_Get) { return true; } return base.HasGodotClassMethod(method); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptMethods.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptMethods.generated.cs index a6e58bf27d..3b06c95a9a 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptMethods.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptMethods.generated.cs @@ -11,11 +11,11 @@ partial class ScriptBoilerplate /// <summary> /// Cached name for the '_Process' method. /// </summary> - public new static readonly global::Godot.StringName _Process = "_Process"; + public new static readonly global::Godot.StringName @_Process = "_Process"; /// <summary> /// Cached name for the 'Bazz' method. /// </summary> - public new static readonly global::Godot.StringName Bazz = "Bazz"; + public new static readonly global::Godot.StringName @Bazz = "Bazz"; } /// <summary> /// Get the method information for all the methods declared in this class. @@ -26,8 +26,8 @@ partial class ScriptBoilerplate internal new static global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo> GetGodotMethodList() { var methods = new global::System.Collections.Generic.List<global::Godot.Bridge.MethodInfo>(2); - methods.Add(new(name: MethodName._Process, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)3, name: "delta", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); - methods.Add(new(name: MethodName.Bazz, returnVal: new(type: (global::Godot.Variant.Type)2, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)21, name: "name", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + methods.Add(new(name: MethodName.@_Process, returnVal: new(type: (global::Godot.Variant.Type)0, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)3, name: "delta", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); + methods.Add(new(name: MethodName.@Bazz, returnVal: new(type: (global::Godot.Variant.Type)2, name: "", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), flags: (global::Godot.MethodFlags)1, arguments: new() { new(type: (global::Godot.Variant.Type)21, name: "name", hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)6, exported: false), }, defaultArguments: null)); return methods; } #pragma warning restore CS0109 @@ -35,13 +35,13 @@ partial class ScriptBoilerplate [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret) { - if (method == MethodName._Process && args.Count == 1) { - _Process(global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(args[0])); + if (method == MethodName.@_Process && args.Count == 1) { + @_Process(global::Godot.NativeInterop.VariantUtils.ConvertTo<double>(args[0])); ret = default; return true; } - if (method == MethodName.Bazz && args.Count == 1) { - var callRet = Bazz(global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(args[0])); + if (method == MethodName.@Bazz && args.Count == 1) { + var callRet = @Bazz(global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.StringName>(args[0])); ret = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(callRet); return true; } @@ -51,10 +51,10 @@ partial class ScriptBoilerplate [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool HasGodotClassMethod(in godot_string_name method) { - if (method == MethodName._Process) { + if (method == MethodName.@_Process) { return true; } - if (method == MethodName.Bazz) { + if (method == MethodName.@Bazz) { return true; } return base.HasGodotClassMethod(method); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptProperties.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptProperties.generated.cs index 81cc27502f..ef0eba5e09 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptProperties.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptProperties.generated.cs @@ -11,22 +11,22 @@ partial class ScriptBoilerplate /// <summary> /// Cached name for the '_nodePath' field. /// </summary> - public new static readonly global::Godot.StringName _nodePath = "_nodePath"; + public new static readonly global::Godot.StringName @_nodePath = "_nodePath"; /// <summary> /// Cached name for the '_velocity' field. /// </summary> - public new static readonly global::Godot.StringName _velocity = "_velocity"; + public new static readonly global::Godot.StringName @_velocity = "_velocity"; } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { - if (name == PropertyName._nodePath) { - this._nodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); + if (name == PropertyName.@_nodePath) { + this.@_nodePath = global::Godot.NativeInterop.VariantUtils.ConvertTo<global::Godot.NodePath>(value); return true; } - if (name == PropertyName._velocity) { - this._velocity = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); + if (name == PropertyName.@_velocity) { + this.@_velocity = global::Godot.NativeInterop.VariantUtils.ConvertTo<int>(value); return true; } return base.SetGodotClassPropertyValue(name, value); @@ -35,12 +35,12 @@ partial class ScriptBoilerplate [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { - if (name == PropertyName._nodePath) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this._nodePath); + if (name == PropertyName.@_nodePath) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<global::Godot.NodePath>(this.@_nodePath); return true; } - if (name == PropertyName._velocity) { - value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this._velocity); + if (name == PropertyName.@_velocity) { + value = global::Godot.NativeInterop.VariantUtils.CreateFrom<int>(this.@_velocity); return true; } return base.GetGodotClassPropertyValue(name, out value); @@ -54,8 +54,8 @@ partial class ScriptBoilerplate internal new static global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo> GetGodotPropertyList() { var properties = new global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>(); - properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName._nodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); - properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName._velocity, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)22, name: PropertyName.@_nodePath, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); + properties.Add(new(type: (global::Godot.Variant.Type)2, name: PropertyName.@_velocity, hint: (global::Godot.PropertyHint)0, hintString: "", usage: (global::Godot.PropertyUsageFlags)4096, exported: false)); return properties; } #pragma warning restore CS0109 diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptSerialization.generated.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptSerialization.generated.cs index 28bc863b0a..38f532c502 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptSerialization.generated.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests/TestData/GeneratedSources/ScriptBoilerplate_ScriptSerialization.generated.cs @@ -8,17 +8,17 @@ partial class ScriptBoilerplate protected override void SaveGodotObjectData(global::Godot.Bridge.GodotSerializationInfo info) { base.SaveGodotObjectData(info); - info.AddProperty(PropertyName._nodePath, global::Godot.Variant.From<global::Godot.NodePath>(this._nodePath)); - info.AddProperty(PropertyName._velocity, global::Godot.Variant.From<int>(this._velocity)); + info.AddProperty(PropertyName.@_nodePath, global::Godot.Variant.From<global::Godot.NodePath>(this.@_nodePath)); + info.AddProperty(PropertyName.@_velocity, global::Godot.Variant.From<int>(this.@_velocity)); } /// <inheritdoc/> [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void RestoreGodotObjectData(global::Godot.Bridge.GodotSerializationInfo info) { base.RestoreGodotObjectData(info); - if (info.TryGetProperty(PropertyName._nodePath, out var _value__nodePath)) - this._nodePath = _value__nodePath.As<global::Godot.NodePath>(); - if (info.TryGetProperty(PropertyName._velocity, out var _value__velocity)) - this._velocity = _value__velocity.As<int>(); + if (info.TryGetProperty(PropertyName.@_nodePath, out var _value__nodePath)) + this.@_nodePath = _value__nodePath.As<global::Godot.NodePath>(); + if (info.TryGetProperty(PropertyName.@_velocity, out var _value__velocity)) + this.@_velocity = _value__velocity.As<int>(); } } diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs index 39d3a6f94e..e482d9ca79 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs @@ -158,7 +158,7 @@ namespace Godot.SourceGenerators .Append("' method.\n") .Append(" /// </summary>\n"); - source.Append(" public new static readonly global::Godot.StringName "); + source.Append(" public new static readonly global::Godot.StringName @"); source.Append(methodName); source.Append(" = \""); source.Append(methodName); @@ -287,7 +287,7 @@ namespace Godot.SourceGenerators private static void AppendMethodInfo(StringBuilder source, MethodInfo methodInfo) { - source.Append(" methods.Add(new(name: MethodName.") + source.Append(" methods.Add(new(name: MethodName.@") .Append(methodInfo.Name) .Append(", returnVal: "); @@ -414,7 +414,7 @@ namespace Godot.SourceGenerators ) { source.Append(" "); - source.Append("if (method == MethodName."); + source.Append("if (method == MethodName.@"); source.Append(methodName); source.Append(") {\n return true;\n }\n"); } @@ -426,7 +426,7 @@ namespace Godot.SourceGenerators { string methodName = method.Method.Name; - source.Append(" if (method == MethodName."); + source.Append(" if (method == MethodName.@"); source.Append(methodName); source.Append(" && args.Count == "); source.Append(method.ParamTypes.Length); @@ -437,6 +437,7 @@ namespace Godot.SourceGenerators else source.Append(" "); + source.Append("@"); source.Append(methodName); source.Append("("); diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs index 02c2cd4034..29bae6413d 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs @@ -144,7 +144,7 @@ namespace Godot.SourceGenerators .Append("' property.\n") .Append(" /// </summary>\n"); - source.Append(" public new static readonly global::Godot.StringName "); + source.Append(" public new static readonly global::Godot.StringName @"); source.Append(propertyName); source.Append(" = \""); source.Append(propertyName); @@ -161,7 +161,7 @@ namespace Godot.SourceGenerators .Append("' field.\n") .Append(" /// </summary>\n"); - source.Append(" public new static readonly global::Godot.StringName "); + source.Append(" public new static readonly global::Godot.StringName @"); source.Append(fieldName); source.Append(" = \""); source.Append(fieldName); @@ -316,10 +316,10 @@ namespace Godot.SourceGenerators { source.Append(" "); - source.Append("if (name == PropertyName.") + source.Append("if (name == PropertyName.@") .Append(propertyMemberName) .Append(") {\n") - .Append(" this.") + .Append(" this.@") .Append(propertyMemberName) .Append(" = ") .AppendNativeVariantToManagedExpr("value", propertyTypeSymbol, propertyMarshalType) @@ -337,11 +337,11 @@ namespace Godot.SourceGenerators { source.Append(" "); - source.Append("if (name == PropertyName.") + source.Append("if (name == PropertyName.@") .Append(propertyMemberName) .Append(") {\n") .Append(" value = ") - .AppendManagedToNativeVariantExpr("this." + propertyMemberName, + .AppendManagedToNativeVariantExpr("this.@" + propertyMemberName, propertyTypeSymbol, propertyMarshalType) .Append(";\n") .Append(" return true;\n") @@ -367,7 +367,7 @@ namespace Godot.SourceGenerators { source.Append(" properties.Add(new(type: (global::Godot.Variant.Type)") .Append((int)propertyInfo.Type) - .Append(", name: PropertyName.") + .Append(", name: PropertyName.@") .Append(propertyInfo.Name) .Append(", hint: (global::Godot.PropertyHint)") .Append((int)propertyInfo.Hint) diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs index d13a828875..efe88d8468 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs @@ -386,7 +386,7 @@ namespace Godot.SourceGenerators source.Append(" = "); source.Append(exportedMember.Value ?? "default"); source.Append(";\n"); - source.Append(" values.Add(PropertyName."); + source.Append(" values.Add(PropertyName.@"); source.Append(exportedMember.Name); source.Append(", "); source.AppendManagedToVariantExpr(defaultValueLocalName, diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs index df0484333a..937da76335 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs @@ -169,10 +169,10 @@ namespace Godot.SourceGenerators { string propertyName = property.PropertySymbol.Name; - source.Append(" info.AddProperty(PropertyName.") + source.Append(" info.AddProperty(PropertyName.@") .Append(propertyName) .Append(", ") - .AppendManagedToVariantExpr(string.Concat("this.", propertyName), + .AppendManagedToVariantExpr(string.Concat("this.@", propertyName), property.PropertySymbol.Type, property.Type) .Append(");\n"); } @@ -183,10 +183,10 @@ namespace Godot.SourceGenerators { string fieldName = field.FieldSymbol.Name; - source.Append(" info.AddProperty(PropertyName.") + source.Append(" info.AddProperty(PropertyName.@") .Append(fieldName) .Append(", ") - .AppendManagedToVariantExpr(string.Concat("this.", fieldName), + .AppendManagedToVariantExpr(string.Concat("this.@", fieldName), field.FieldSymbol.Type, field.Type) .Append(");\n"); } @@ -197,7 +197,7 @@ namespace Godot.SourceGenerators { string signalName = signalDelegate.Name; - source.Append(" info.AddSignalEventDelegate(SignalName.") + source.Append(" info.AddSignalEventDelegate(SignalName.@") .Append(signalName) .Append(", this.backing_") .Append(signalName) @@ -218,12 +218,12 @@ namespace Godot.SourceGenerators { string propertyName = property.PropertySymbol.Name; - source.Append(" if (info.TryGetProperty(PropertyName.") + source.Append(" if (info.TryGetProperty(PropertyName.@") .Append(propertyName) .Append(", out var _value_") .Append(propertyName) .Append("))\n") - .Append(" this.") + .Append(" this.@") .Append(propertyName) .Append(" = ") .AppendVariantToManagedExpr(string.Concat("_value_", propertyName), @@ -237,12 +237,12 @@ namespace Godot.SourceGenerators { string fieldName = field.FieldSymbol.Name; - source.Append(" if (info.TryGetProperty(PropertyName.") + source.Append(" if (info.TryGetProperty(PropertyName.@") .Append(fieldName) .Append(", out var _value_") .Append(fieldName) .Append("))\n") - .Append(" this.") + .Append(" this.@") .Append(fieldName) .Append(" = ") .AppendVariantToManagedExpr(string.Concat("_value_", fieldName), @@ -259,7 +259,7 @@ namespace Godot.SourceGenerators source.Append(" if (info.TryGetSignalEventDelegate<") .Append(signalDelegateQualifiedName) - .Append(">(SignalName.") + .Append(">(SignalName.@") .Append(signalName) .Append(", out var _value_") .Append(signalName) diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs index deac5f2bcf..54f2212339 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs @@ -212,7 +212,7 @@ namespace Godot.SourceGenerators .Append("' signal.\n") .Append(" /// </summary>\n"); - source.Append(" public new static readonly global::Godot.StringName "); + source.Append(" public new static readonly global::Godot.StringName @"); source.Append(signalName); source.Append(" = \""); source.Append(signalName); @@ -278,7 +278,7 @@ namespace Godot.SourceGenerators source.Append(" public event ") .Append(signalDelegate.DelegateSymbol.FullQualifiedNameIncludeGlobal()) - .Append(" ") + .Append(" @") .Append(signalName) .Append(" {\n") .Append(" add => backing_") @@ -353,7 +353,7 @@ namespace Godot.SourceGenerators private static void AppendMethodInfo(StringBuilder source, MethodInfo methodInfo) { - source.Append(" signals.Add(new(name: SignalName.") + source.Append(" signals.Add(new(name: SignalName.@") .Append(methodInfo.Name) .Append(", returnVal: "); @@ -475,7 +475,7 @@ namespace Godot.SourceGenerators ) { source.Append(" "); - source.Append("if (signal == SignalName."); + source.Append("if (signal == SignalName.@"); source.Append(signalName); source.Append(") {\n return true;\n }\n"); } @@ -488,7 +488,7 @@ namespace Godot.SourceGenerators string signalName = signal.Name; var invokeMethodData = signal.InvokeMethodData; - source.Append(" if (signal == SignalName."); + source.Append(" if (signal == SignalName.@"); source.Append(signalName); source.Append(" && args.Count == "); source.Append(invokeMethodData.ParamTypes.Length); diff --git a/modules/mono/icons/BuildCSharp.svg b/modules/mono/icons/BuildCSharp.svg index d4ba5bc293..430433dc38 100644 --- a/modules/mono/icons/BuildCSharp.svg +++ b/modules/mono/icons/BuildCSharp.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.256 4.85 1.7 2.945 2.598-1.5 4.5 7.794a1 1-30 0 0 2.598-1.5l-4.65-8.054 3.464-2-.25-.433s-1.25-2.165-3.848-.665l-3.464 2-.31.063z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="m2.256 4.85 1.7 2.945 2.598-1.5 4.5 7.794a1 1-30 0 0 2.598-1.5l-4.65-8.054 3.464-2-.25-.433s-1.25-2.165-3.848-.665l-3.464 2-.31.063z"/></svg>
\ No newline at end of file diff --git a/modules/mono/icons/CSharpScript.svg b/modules/mono/icons/CSharpScript.svg index 1e1ec96857..7f309fe5fa 100644 --- a/modules/mono/icons/CSharpScript.svg +++ b/modules/mono/icons/CSharpScript.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6 10a3 3 0 1 0 0 6h1v-2H6a1 1 0 0 1 0-2h1v-2zm1-9-.564 2.258a4.91 4.91 0 0 0-.69.28L3.758 2.343 2.344 3.758l1.195 1.994-.285.685L1 7v2h5.27a2 2 0 1 1 3.46 0H15V7l-2.258-.565a5.007 5.007 0 0 0-.28-.687l1.194-1.99-1.414-1.414-1.994 1.195a4.998 4.998 0 0 0-.686-.285L9 1zm4 9a2 2 0 1 0 0 4H9v2h2a2 2 0 1 0 0-4h2v-2z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M6 10a3 3 0 1 0 0 6h1v-2H6a1 1 0 0 1 0-2h1v-2zm1-9-.564 2.258a4.91 4.91 0 0 0-.69.28L3.758 2.343 2.344 3.758l1.195 1.994-.285.685L1 7v2h5.27a2 2 0 1 1 3.46 0H15V7l-2.258-.565a5.007 5.007 0 0 0-.28-.687l1.194-1.99-1.414-1.414-1.994 1.195a4.998 4.998 0 0 0-.686-.285L9 1zm4 9a2 2 0 1 0 0 4H9v2h2a2 2 0 1 0 0-4h2v-2z"/></svg>
\ No newline at end of file diff --git a/modules/multiplayer/multiplayer_spawner.cpp b/modules/multiplayer/multiplayer_spawner.cpp index 2408d7231b..682d20022f 100644 --- a/modules/multiplayer/multiplayer_spawner.cpp +++ b/modules/multiplayer/multiplayer_spawner.cpp @@ -99,7 +99,7 @@ void MultiplayerSpawner::add_spawnable_scene(const String &p_path) { SpawnableScene sc; sc.path = p_path; if (Engine::get_singleton()->is_editor_hint()) { - ERR_FAIL_COND(!FileAccess::exists(p_path)); + ERR_FAIL_COND(!ResourceLoader::exists(p_path)); } spawnable_scenes.push_back(sc); #ifdef TOOLS_ENABLED diff --git a/modules/multiplayer/multiplayer_synchronizer.cpp b/modules/multiplayer/multiplayer_synchronizer.cpp index ca3fa43207..852975b8eb 100644 --- a/modules/multiplayer/multiplayer_synchronizer.cpp +++ b/modules/multiplayer/multiplayer_synchronizer.cpp @@ -270,7 +270,7 @@ void MultiplayerSynchronizer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_path"), "set_root_path", "get_root_path"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "replication_interval", PROPERTY_HINT_RANGE, "0,5,0.001,suffix:s"), "set_replication_interval", "get_replication_interval"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "delta_interval", PROPERTY_HINT_RANGE, "0,5,0.001,suffix:s"), "set_delta_interval", "get_delta_interval"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "replication_config", PROPERTY_HINT_RESOURCE_TYPE, "SceneReplicationConfig", PROPERTY_USAGE_NO_EDITOR), "set_replication_config", "get_replication_config"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "replication_config", PROPERTY_HINT_RESOURCE_TYPE, "SceneReplicationConfig", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT), "set_replication_config", "get_replication_config"); ADD_PROPERTY(PropertyInfo(Variant::INT, "visibility_update_mode", PROPERTY_HINT_ENUM, "Idle,Physics,None"), "set_visibility_update_mode", "get_visibility_update_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "public_visibility"), "set_visibility_public", "is_visibility_public"); diff --git a/modules/navigation/2d/nav_mesh_generator_2d.cpp b/modules/navigation/2d/nav_mesh_generator_2d.cpp index ace361a08a..8c2fb42463 100644 --- a/modules/navigation/2d/nav_mesh_generator_2d.cpp +++ b/modules/navigation/2d/nav_mesh_generator_2d.cpp @@ -852,8 +852,15 @@ void NavMeshGenerator2D::generator_bake_from_source_geometry_data(Ref<Navigation } int outline_count = p_navigation_mesh->get_outline_count(); - const Vector<Vector<Vector2>> &traversable_outlines = p_source_geometry_data->_get_traversable_outlines(); - const Vector<Vector<Vector2>> &obstruction_outlines = p_source_geometry_data->_get_obstruction_outlines(); + + Vector<Vector<Vector2>> traversable_outlines; + Vector<Vector<Vector2>> obstruction_outlines; + Vector<NavigationMeshSourceGeometryData2D::ProjectedObstruction> projected_obstructions; + + p_source_geometry_data->get_data( + traversable_outlines, + obstruction_outlines, + projected_obstructions); if (outline_count == 0 && traversable_outlines.size() == 0) { return; @@ -898,8 +905,6 @@ void NavMeshGenerator2D::generator_bake_from_source_geometry_data(Ref<Navigation obstruction_polygon_paths.push_back(clip_path); } - const Vector<NavigationMeshSourceGeometryData2D::ProjectedObstruction> &projected_obstructions = p_source_geometry_data->_get_projected_obstructions(); - if (!projected_obstructions.is_empty()) { for (const NavigationMeshSourceGeometryData2D::ProjectedObstruction &projected_obstruction : projected_obstructions) { if (projected_obstruction.carve) { @@ -1005,8 +1010,7 @@ void NavMeshGenerator2D::generator_bake_from_source_geometry_data(Ref<Navigation } if (new_baked_outlines.size() == 0) { - p_navigation_mesh->set_vertices(Vector<Vector2>()); - p_navigation_mesh->clear_polygons(); + p_navigation_mesh->clear(); return; } @@ -1040,8 +1044,7 @@ void NavMeshGenerator2D::generator_bake_from_source_geometry_data(Ref<Navigation TPPLPartition tpart; if (tpart.ConvexPartition_HM(&tppl_in_polygon, &tppl_out_polygon) == 0) { //failed! ERR_PRINT("NavigationPolygon Convex partition failed. Unable to create a valid NavigationMesh from defined polygon outline paths."); - p_navigation_mesh->set_vertices(Vector<Vector2>()); - p_navigation_mesh->clear_polygons(); + p_navigation_mesh->clear(); return; } @@ -1066,11 +1069,7 @@ void NavMeshGenerator2D::generator_bake_from_source_geometry_data(Ref<Navigation new_polygons.push_back(new_polygon); } - p_navigation_mesh->set_vertices(new_vertices); - p_navigation_mesh->clear_polygons(); - for (int i = 0; i < new_polygons.size(); i++) { - p_navigation_mesh->add_polygon(new_polygons[i]); - } + p_navigation_mesh->set_data(new_vertices, new_polygons); } #endif // CLIPPER2_ENABLED diff --git a/modules/navigation/3d/godot_navigation_server_3d.cpp b/modules/navigation/3d/godot_navigation_server_3d.cpp index 6cbfd93088..430d527844 100644 --- a/modules/navigation/3d/godot_navigation_server_3d.cpp +++ b/modules/navigation/3d/godot_navigation_server_3d.cpp @@ -486,7 +486,7 @@ COMMAND_2(region_set_navigation_mesh, RID, p_region, Ref<NavigationMesh>, p_navi NavRegion *region = region_owner.get_or_null(p_region); ERR_FAIL_NULL(region); - region->set_mesh(p_navigation_mesh); + region->set_navigation_mesh(p_navigation_mesh); } #ifndef DISABLE_DEPRECATED diff --git a/modules/navigation/3d/nav_mesh_generator_3d.cpp b/modules/navigation/3d/nav_mesh_generator_3d.cpp index df0bdc9537..d17724baa0 100644 --- a/modules/navigation/3d/nav_mesh_generator_3d.cpp +++ b/modules/navigation/3d/nav_mesh_generator_3d.cpp @@ -672,10 +672,16 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation return; } - const Vector<float> &vertices = p_source_geometry_data->get_vertices(); - const Vector<int> &indices = p_source_geometry_data->get_indices(); + Vector<float> source_geometry_vertices; + Vector<int> source_geometry_indices; + Vector<NavigationMeshSourceGeometryData3D::ProjectedObstruction> projected_obstructions; - if (vertices.size() < 3 || indices.size() < 3) { + p_source_geometry_data->get_data( + source_geometry_vertices, + source_geometry_indices, + projected_obstructions); + + if (source_geometry_vertices.size() < 3 || source_geometry_indices.size() < 3) { return; } @@ -691,10 +697,10 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation bake_state = "Setting up Configuration..."; // step #1 - const float *verts = vertices.ptr(); - const int nverts = vertices.size() / 3; - const int *tris = indices.ptr(); - const int ntris = indices.size() / 3; + const float *verts = source_geometry_vertices.ptr(); + const int nverts = source_geometry_vertices.size() / 3; + const int *tris = source_geometry_indices.ptr(); + const int ntris = source_geometry_indices.size() / 3; float bmin[3], bmax[3]; rcCalcBounds(verts, nverts, bmin, bmax); @@ -818,8 +824,6 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation rcFreeHeightField(hf); hf = nullptr; - const Vector<NavigationMeshSourceGeometryData3D::ProjectedObstruction> &projected_obstructions = p_source_geometry_data->_get_projected_obstructions(); - // Add obstacles to the source geometry. Those will be affected by e.g. agent_radius. if (!projected_obstructions.is_empty()) { for (const NavigationMeshSourceGeometryData3D::ProjectedObstruction &projected_obstruction : projected_obstructions) { @@ -894,6 +898,7 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation bake_state = "Converting to native navigation mesh..."; // step #10 Vector<Vector3> nav_vertices; + Vector<Vector<int>> nav_polygons; HashMap<Vector3, int> recast_vertex_to_native_index; LocalVector<int> recast_index_to_native_index; @@ -912,8 +917,6 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation recast_index_to_native_index[i] = *existing_index_ptr; } } - p_navigation_mesh->set_vertices(nav_vertices); - p_navigation_mesh->clear_polygons(); for (int i = 0; i < detail_mesh->nmeshes; i++) { const unsigned int *detail_mesh_m = &detail_mesh->meshes[i * 4]; @@ -933,10 +936,12 @@ void NavMeshGenerator3D::generator_bake_from_source_geometry_data(Ref<Navigation nav_indices.write[1] = recast_index_to_native_index[index2]; nav_indices.write[2] = recast_index_to_native_index[index3]; - p_navigation_mesh->add_polygon(nav_indices); + nav_polygons.push_back(nav_indices); } } + p_navigation_mesh->set_data(nav_vertices, nav_polygons); + bake_state = "Cleanup..."; // step #11 rcFreePolyMesh(poly_mesh); diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp index f0184a155b..f917c988ea 100644 --- a/modules/navigation/nav_map.cpp +++ b/modules/navigation/nav_map.cpp @@ -644,6 +644,26 @@ Vector3 NavMap::get_closest_point_to_segment(const Vector3 &p_from, const Vector } } } + // Finally, check for a case when shortest distance is between some point located on a face's edge and some point located on a line segment. + if (!use_collision) { + for (size_t point_id = 0; point_id < p.points.size(); point_id += 1) { + Vector3 a, b; + + Geometry3D::get_closest_points_between_segments( + p_from, + p_to, + p.points[point_id].pos, + p.points[(point_id + 1) % p.points.size()].pos, + a, + b); + + const real_t d = a.distance_to(b); + if (d < closest_point_d) { + closest_point_d = d; + closest_point = b; + } + } + } } return closest_point; @@ -1127,13 +1147,6 @@ void NavMap::sync() { new_polygon.points.push_back({ closest_end_point, get_point_key(closest_end_point) }); new_polygon.points.push_back({ closest_end_point, get_point_key(closest_end_point) }); - Vector3 center; - for (int p = 0; p < 4; ++p) { - center += new_polygon.points[p].pos; - } - new_polygon.center = center / real_t(new_polygon.points.size()); - new_polygon.clockwise = true; - // Setup connections to go forward in the link. { gd::Edge::Connection entry_connection; diff --git a/modules/navigation/nav_region.cpp b/modules/navigation/nav_region.cpp index 9cb235d79f..f30855d697 100644 --- a/modules/navigation/nav_region.cpp +++ b/modules/navigation/nav_region.cpp @@ -74,10 +74,34 @@ void NavRegion::set_transform(Transform3D p_transform) { } transform = p_transform; polygons_dirty = true; + +#ifdef DEBUG_ENABLED + if (map && Math::rad_to_deg(map->get_up().angle_to(transform.basis.get_column(1))) >= 90.0f) { + ERR_PRINT_ONCE("Attempted to update a navigation region transform rotated 90 degrees or more away from the current navigation map UP orientation."); + } +#endif // DEBUG_ENABLED } -void NavRegion::set_mesh(Ref<NavigationMesh> p_mesh) { - mesh = p_mesh; +void NavRegion::set_navigation_mesh(Ref<NavigationMesh> p_navigation_mesh) { +#ifdef DEBUG_ENABLED + if (map && p_navigation_mesh.is_valid() && !Math::is_equal_approx(double(map->get_cell_size()), double(p_navigation_mesh->get_cell_size()))) { + ERR_PRINT_ONCE(vformat("Attempted to update a navigation region with a navigation mesh that uses a `cell_size` of %s while assigned to a navigation map set to a `cell_size` of %s. The cell size for navigation maps can be changed by using the NavigationServer map_set_cell_size() function. The cell size for default navigation maps can also be changed in the ProjectSettings.", double(p_navigation_mesh->get_cell_size()), double(map->get_cell_size()))); + } + + if (map && p_navigation_mesh.is_valid() && !Math::is_equal_approx(double(map->get_cell_height()), double(p_navigation_mesh->get_cell_height()))) { + ERR_PRINT_ONCE(vformat("Attempted to update a navigation region with a navigation mesh that uses a `cell_height` of %s while assigned to a navigation map set to a `cell_height` of %s. The cell height for navigation maps can be changed by using the NavigationServer map_set_cell_height() function. The cell height for default navigation maps can also be changed in the ProjectSettings.", double(p_navigation_mesh->get_cell_height()), double(map->get_cell_height()))); + } +#endif // DEBUG_ENABLED + + RWLockWrite write_lock(navmesh_rwlock); + + pending_navmesh_vertices.clear(); + pending_navmesh_polygons.clear(); + + if (p_navigation_mesh.is_valid()) { + p_navigation_mesh->get_data(pending_navmesh_vertices, pending_navmesh_polygons); + } + polygons_dirty = true; } @@ -202,33 +226,20 @@ void NavRegion::update_polygons() { return; } - if (mesh.is_null()) { - return; - } - -#ifdef DEBUG_ENABLED - if (!Math::is_equal_approx(double(map->get_cell_size()), double(mesh->get_cell_size()))) { - ERR_PRINT_ONCE(vformat("Navigation map synchronization error. Attempted to update a navigation region with a navigation mesh that uses a `cell_size` of %s while assigned to a navigation map set to a `cell_size` of %s. The cell size for navigation maps can be changed by using the NavigationServer map_set_cell_size() function. The cell size for default navigation maps can also be changed in the ProjectSettings.", double(mesh->get_cell_size()), double(map->get_cell_size()))); - } - - if (!Math::is_equal_approx(double(map->get_cell_height()), double(mesh->get_cell_height()))) { - ERR_PRINT_ONCE(vformat("Navigation map synchronization error. Attempted to update a navigation region with a navigation mesh that uses a `cell_height` of %s while assigned to a navigation map set to a `cell_height` of %s. The cell height for navigation maps can be changed by using the NavigationServer map_set_cell_height() function. The cell height for default navigation maps can also be changed in the ProjectSettings.", double(mesh->get_cell_height()), double(map->get_cell_height()))); - } + RWLockRead read_lock(navmesh_rwlock); - if (map && Math::rad_to_deg(map->get_up().angle_to(transform.basis.get_column(1))) >= 90.0f) { - ERR_PRINT_ONCE("Navigation map synchronization error. Attempted to update a navigation region transform rotated 90 degrees or more away from the current navigation map UP orientation."); + if (pending_navmesh_vertices.is_empty() || pending_navmesh_polygons.is_empty()) { + return; } -#endif // DEBUG_ENABLED - Vector<Vector3> vertices = mesh->get_vertices(); - int len = vertices.size(); + int len = pending_navmesh_vertices.size(); if (len == 0) { return; } - const Vector3 *vertices_r = vertices.ptr(); + const Vector3 *vertices_r = pending_navmesh_vertices.ptr(); - polygons.resize(mesh->get_polygon_count()); + polygons.resize(pending_navmesh_polygons.size()); real_t _new_region_surface_area = 0.0; @@ -238,7 +249,7 @@ void NavRegion::update_polygons() { polygon.owner = this; polygon.surface_area = 0.0; - Vector<int> navigation_mesh_polygon = mesh->get_polygon(navigation_mesh_polygon_index); + Vector<int> navigation_mesh_polygon = pending_navmesh_polygons[navigation_mesh_polygon_index]; navigation_mesh_polygon_index += 1; int navigation_mesh_polygon_size = navigation_mesh_polygon.size(); @@ -266,9 +277,6 @@ void NavRegion::update_polygons() { polygon.surface_area = _new_polygon_surface_area; _new_region_surface_area += _new_polygon_surface_area; - Vector3 polygon_center; - real_t sum(0); - for (int j(0); j < navigation_mesh_polygon_size; j++) { int idx = indices[j]; if (idx < 0 || idx >= len) { @@ -279,25 +287,11 @@ void NavRegion::update_polygons() { Vector3 point_position = transform.xform(vertices_r[idx]); polygon.points[j].pos = point_position; polygon.points[j].key = map->get_point_key(point_position); - - polygon_center += point_position; // Composing the center of the polygon - - if (j >= 2) { - Vector3 epa = transform.xform(vertices_r[indices[j - 2]]); - Vector3 epb = transform.xform(vertices_r[indices[j - 1]]); - - sum += map->get_up().dot((epb - epa).cross(point_position - epa)); - } } if (!valid) { ERR_BREAK_MSG(!valid, "The navigation mesh set in this region is not valid!"); } - - polygon.clockwise = sum > 0; - if (!navigation_mesh_polygon.is_empty()) { - polygon.center = polygon_center / real_t(navigation_mesh_polygon.size()); - } } surface_area = _new_region_surface_area; diff --git a/modules/navigation/nav_region.h b/modules/navigation/nav_region.h index a9cfc53c7e..ebc082bd2f 100644 --- a/modules/navigation/nav_region.h +++ b/modules/navigation/nav_region.h @@ -34,12 +34,12 @@ #include "nav_base.h" #include "nav_utils.h" +#include "core/os/rw_lock.h" #include "scene/resources/navigation_mesh.h" class NavRegion : public NavBase { NavMap *map = nullptr; Transform3D transform; - Ref<NavigationMesh> mesh; Vector<gd::Edge::Connection> connections; bool enabled = true; @@ -52,6 +52,10 @@ class NavRegion : public NavBase { real_t surface_area = 0.0; + RWLock navmesh_rwlock; + Vector<Vector3> pending_navmesh_vertices; + Vector<Vector<int>> pending_navmesh_polygons; + public: NavRegion() { type = NavigationUtilities::PathSegmentType::PATH_SEGMENT_TYPE_REGION; @@ -79,10 +83,7 @@ public: return transform; } - void set_mesh(Ref<NavigationMesh> p_mesh); - const Ref<NavigationMesh> get_mesh() const { - return mesh; - } + void set_navigation_mesh(Ref<NavigationMesh> p_navigation_mesh); Vector<gd::Edge::Connection> &get_connections() { return connections; diff --git a/modules/navigation/nav_utils.h b/modules/navigation/nav_utils.h index 175d08ca6d..c3939e9979 100644 --- a/modules/navigation/nav_utils.h +++ b/modules/navigation/nav_utils.h @@ -104,15 +104,9 @@ struct Polygon { /// The points of this `Polygon` LocalVector<Point> points; - /// Are the points clockwise? - bool clockwise; - /// The edges of this `Polygon` LocalVector<Edge> edges; - /// The center of this `Polygon` - Vector3 center; - real_t surface_area = 0.0; }; diff --git a/modules/noise/icons/NoiseTexture2D.svg b/modules/noise/icons/NoiseTexture2D.svg index 0c22cfdcc6..94d550d141 100644 --- a/modules/noise/icons/NoiseTexture2D.svg +++ b/modules/noise/icons/NoiseTexture2D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm3 1v2h2V4zm2 2v2h2v2h2V4h-2v2zm0 2H6V6H4v4h4z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm1 2h10v8H3zm3 1v2h2V4zm2 2v2h2v2h2V4h-2v2zm0 2H6V6H4v4h4z"/></svg>
\ No newline at end of file diff --git a/modules/noise/icons/NoiseTexture3D.svg b/modules/noise/icons/NoiseTexture3D.svg index 92da633dce..178bac2dd3 100644 --- a/modules/noise/icons/NoiseTexture3D.svg +++ b/modules/noise/icons/NoiseTexture3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13zM3 11h4l1.25-1.25V9H9l1.25-1.25v-2h-2L7 7v.75h-.75v-2h-2L3 7z" fill="#e0e0e0"/><path d="M3 7h2l1.25-1.25h-2zm2 2h2V7.75h-.75zm2-2h2l1.25-1.25H8z" fill="#000" fill-opacity=".4"/><path d="M5 7v2l1.25-1.25v-2zm2 2v2l1.25-1.25V9zm2 0V7l1.25-1.25v2z" fill="#000" fill-opacity=".2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M1 14a1 1 0 0 0 1 1h9.5a1 1 0 0 0 .707-.293l2.5-2.5A1 1 0 0 0 15 11.5V2a1 1 0 0 0-1-1H4.5a1 1 0 0 0-.707.293l-2.5 2.5A1 1 0 0 0 1 4.5zm1.25-9H11v7H2.25zm10 6.25v-6.5L14 3v6.5zm-1-7.5H3L4.75 2H13zM3 11h4l1.25-1.25V9H9l1.25-1.25v-2h-2L7 7v.75h-.75v-2h-2L3 7z"/><path fill-opacity=".4" d="M3 7h2l1.25-1.25h-2zm2 2h2V7.75h-.75zm2-2h2l1.25-1.25H8z"/><path fill-opacity=".2" d="M5 7v2l1.25-1.25v-2zm2 2v2l1.25-1.25V9zm2 0V7l1.25-1.25v2z"/></svg>
\ No newline at end of file diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp index 541e369925..04edde8300 100644 --- a/modules/openxr/openxr_api.cpp +++ b/modules/openxr/openxr_api.cpp @@ -902,6 +902,47 @@ bool OpenXRAPI::setup_play_space() { new_reference_space = XR_REFERENCE_SPACE_TYPE_LOCAL; will_emulate_local_floor = true; + + if (local_floor_emulation.local_space == XR_NULL_HANDLE) { + XrReferenceSpaceCreateInfo create_info = { + XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type + nullptr, // next + XR_REFERENCE_SPACE_TYPE_LOCAL, // referenceSpaceType + identityPose, // poseInReferenceSpace + }; + + XrResult result = xrCreateReferenceSpace(session, &create_info, &local_floor_emulation.local_space); + if (XR_FAILED(result)) { + print_line("OpenXR: Failed to create LOCAL space in order to emulate LOCAL_FLOOR [", get_error_string(result), "]"); + will_emulate_local_floor = false; + } + } + + if (local_floor_emulation.stage_space == XR_NULL_HANDLE) { + XrReferenceSpaceCreateInfo create_info = { + XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type + nullptr, // next + XR_REFERENCE_SPACE_TYPE_STAGE, // referenceSpaceType + identityPose, // poseInReferenceSpace + }; + + XrResult result = xrCreateReferenceSpace(session, &create_info, &local_floor_emulation.stage_space); + if (XR_FAILED(result)) { + print_line("OpenXR: Failed to create STAGE space in order to emulate LOCAL_FLOOR [", get_error_string(result), "]"); + will_emulate_local_floor = false; + } + } + + if (!will_emulate_local_floor) { + if (local_floor_emulation.local_space != XR_NULL_HANDLE) { + xrDestroySpace(local_floor_emulation.local_space); + local_floor_emulation.local_space = XR_NULL_HANDLE; + } + if (local_floor_emulation.stage_space != XR_NULL_HANDLE) { + xrDestroySpace(local_floor_emulation.stage_space); + local_floor_emulation.stage_space = XR_NULL_HANDLE; + } + } } else { // Fallback on LOCAL, which all OpenXR runtimes are required to support. print_verbose(String("OpenXR: ") + OpenXRUtil::get_reference_space_name(requested_reference_space) + String(" isn't supported, defaulting to LOCAL space.")); @@ -931,16 +972,11 @@ bool OpenXRAPI::setup_play_space() { play_space = new_play_space; reference_space = new_reference_space; - emulating_local_floor = will_emulate_local_floor; - if (emulating_local_floor) { - // We'll use the STAGE space to get the floor height, but we can't do that until - // after xrWaitFrame(), so just set this flag for now. - // Render state will be updated then. - should_reset_emulated_floor_height = true; - } else { - // Update render state so this play space is used rendering the upcoming frame. - set_render_play_space(play_space); - } + local_floor_emulation.enabled = will_emulate_local_floor; + local_floor_emulation.should_reset_floor_height = will_emulate_local_floor; + + // Update render state so this play space is used rendering the upcoming frame. + set_render_play_space(play_space); return true; } @@ -975,63 +1011,39 @@ bool OpenXRAPI::setup_view_space() { } bool OpenXRAPI::reset_emulated_floor_height() { - ERR_FAIL_COND_V(!emulating_local_floor, false); - - // This is based on the example code in the OpenXR spec which shows how to - // emulate LOCAL_FLOOR if it's not supported. - // See: https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_local_floor + ERR_FAIL_COND_V(!local_floor_emulation.enabled, false); + ERR_FAIL_COND_V(local_floor_emulation.local_space == XR_NULL_HANDLE, false); + ERR_FAIL_COND_V(local_floor_emulation.stage_space == XR_NULL_HANDLE, false); XrResult result; - XrPosef identityPose = { - { 0.0, 0.0, 0.0, 1.0 }, - { 0.0, 0.0, 0.0 } - }; - - XrSpace local_space = XR_NULL_HANDLE; - XrSpace stage_space = XR_NULL_HANDLE; - - XrReferenceSpaceCreateInfo create_info = { - XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type - nullptr, // next - XR_REFERENCE_SPACE_TYPE_LOCAL, // referenceSpaceType - identityPose, // poseInReferenceSpace - }; - - result = xrCreateReferenceSpace(session, &create_info, &local_space); - if (XR_FAILED(result)) { - print_line("OpenXR: Failed to create LOCAL space in order to emulate LOCAL_FLOOR [", get_error_string(result), "]"); - return false; - } - - create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_STAGE; - result = xrCreateReferenceSpace(session, &create_info, &stage_space); - if (XR_FAILED(result)) { - print_line("OpenXR: Failed to create STAGE space in order to emulate LOCAL_FLOOR [", get_error_string(result), "]"); - xrDestroySpace(local_space); - return false; - } - XrSpaceLocation stage_location = { XR_TYPE_SPACE_LOCATION, // type nullptr, // next 0, // locationFlags - identityPose, // pose + { { 0.0, 0.0, 0.0, 1.0 }, { 0.0, 0.0, 0.0 } }, // pose }; - result = xrLocateSpace(stage_space, local_space, get_predicted_display_time(), &stage_location); - - xrDestroySpace(local_space); - xrDestroySpace(stage_space); + result = xrLocateSpace(local_floor_emulation.stage_space, local_floor_emulation.local_space, get_predicted_display_time(), &stage_location); if (XR_FAILED(result)) { print_line("OpenXR: Failed to locate STAGE space in LOCAL space, in order to emulate LOCAL_FLOOR [", get_error_string(result), "]"); return false; } + XrPosef pose = { + { 0.0, 0.0, 0.0, 1.0 }, + { 0.0, stage_location.pose.position.y, 0.0 } + }; + + XrReferenceSpaceCreateInfo create_info = { + XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type + nullptr, // next + XR_REFERENCE_SPACE_TYPE_LOCAL, // referenceSpaceType + pose, // poseInReferenceSpace + }; + XrSpace new_play_space; - create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL; - create_info.poseInReferenceSpace.position.y = stage_location.pose.position.y; result = xrCreateReferenceSpace(session, &create_info, &new_play_space); if (XR_FAILED(result)) { print_line("OpenXR: Failed to recreate emulated LOCAL_FLOOR play space with latest floor estimate [", get_error_string(result), "]"); @@ -1275,6 +1287,16 @@ void OpenXRAPI::destroy_session() { xrDestroySpace(view_space); view_space = XR_NULL_HANDLE; } + if (local_floor_emulation.local_space != XR_NULL_HANDLE) { + xrDestroySpace(local_floor_emulation.local_space); + local_floor_emulation.local_space = XR_NULL_HANDLE; + } + if (local_floor_emulation.stage_space != XR_NULL_HANDLE) { + xrDestroySpace(local_floor_emulation.stage_space); + local_floor_emulation.stage_space = XR_NULL_HANDLE; + } + local_floor_emulation.enabled = false; + local_floor_emulation.should_reset_floor_height = false; if (supported_reference_spaces != nullptr) { // free previous results @@ -1953,8 +1975,8 @@ bool OpenXRAPI::poll_events() { XrEventDataReferenceSpaceChangePending *event = (XrEventDataReferenceSpaceChangePending *)&runtimeEvent; print_verbose(String("OpenXR EVENT: reference space type ") + OpenXRUtil::get_reference_space_name(event->referenceSpaceType) + " change pending!"); - if (emulating_local_floor) { - should_reset_emulated_floor_height = true; + if (local_floor_emulation.enabled) { + local_floor_emulation.should_reset_floor_height = true; } if (event->poseValid && xr_interface) { xr_interface->on_pose_recentered(); @@ -2097,16 +2119,18 @@ bool OpenXRAPI::process() { set_render_display_info(frame_state.predictedDisplayTime, frame_state.shouldRender); + // This is before setup_play_space() to ensure that it happens on the frame after + // the play space has been created. + if (unlikely(local_floor_emulation.should_reset_floor_height && !play_space_is_dirty)) { + reset_emulated_floor_height(); + local_floor_emulation.should_reset_floor_height = false; + } + if (unlikely(play_space_is_dirty)) { setup_play_space(); play_space_is_dirty = false; } - if (unlikely(should_reset_emulated_floor_height)) { - reset_emulated_floor_height(); - should_reset_emulated_floor_height = false; - } - for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) { wrapper->on_process(); } diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h index f9d2e60148..748ef3af94 100644 --- a/modules/openxr/openxr_api.h +++ b/modules/openxr/openxr_api.h @@ -165,8 +165,16 @@ private: XrSpace view_space = XR_NULL_HANDLE; XRPose::TrackingConfidence head_pose_confidence = XRPose::XR_TRACKING_CONFIDENCE_NONE; - bool emulating_local_floor = false; - bool should_reset_emulated_floor_height = false; + // When LOCAL_FLOOR isn't supported, we use an approach based on the example code in the + // OpenXR spec in order to emulate it. + // See: https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_local_floor + struct LocalFloorEmulation { + bool enabled = false; + XrSpace local_space = XR_NULL_HANDLE; + XrSpace stage_space = XR_NULL_HANDLE; + bool should_reset_floor_height = false; + } local_floor_emulation; + bool reset_emulated_floor_height(); bool load_layer_properties(); diff --git a/modules/raycast/config.py b/modules/raycast/config.py index 0fd35af528..2fa0058f88 100644 --- a/modules/raycast/config.py +++ b/modules/raycast/config.py @@ -1,6 +1,6 @@ def can_build(env, platform): # Supported architectures and platforms depend on the Embree library. - if env["arch"] == "arm64" and platform == "windows": + if env["arch"] == "arm64" and platform == "windows" and env.msvc: return False if env["arch"] in ["x86_64", "arm64", "wasm32"]: return True diff --git a/modules/regex/icons/RegEx.svg b/modules/regex/icons/RegEx.svg index 4df26f41c0..ba232f6f0a 100644 --- a/modules/regex/icons/RegEx.svg +++ b/modules/regex/icons/RegEx.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 14h3v-3H2zM6.561 2.855a21 21 0 0 1 2.82 1.185A21 21 0 0 1 9.137 1h1.77a21 21 0 0 1-.28 3.027 21 21 0 0 1 2.88-1.171l.562 1.733a21 21 0 0 1-3.04.684 21 21 0 0 1 2.1 2.307l-1.465 1.037a21 21 0 0 1-1.672-2.624 21 21 0 0 1-1.587 2.624L6.965 7.58a21 21 0 0 1 2.026-2.308A21 21 0 0 1 6 4.59z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 14h3v-3H2zM6.561 2.855a21 21 0 0 1 2.82 1.185A21 21 0 0 1 9.137 1h1.77a21 21 0 0 1-.28 3.027 21 21 0 0 1 2.88-1.171l.562 1.733a21 21 0 0 1-3.04.684 21 21 0 0 1 2.1 2.307l-1.465 1.037a21 21 0 0 1-1.672-2.624 21 21 0 0 1-1.587 2.624L6.965 7.58a21 21 0 0 1 2.026-2.308A21 21 0 0 1 6 4.59z"/></svg>
\ No newline at end of file diff --git a/modules/regex/icons/RegExMatch.svg b/modules/regex/icons/RegExMatch.svg index 889cf6cc8a..626ff36691 100644 --- a/modules/regex/icons/RegExMatch.svg +++ b/modules/regex/icons/RegExMatch.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 13h2v-2H5zm2.5-8a14 14 0 0 1 1.88.79 14 14 0 0 1-.163-2.027h1.18a14 14 0 0 1-.186 2.018 14 14 0 0 1 1.92-.78l.374 1.155a14 14 0 0 1-2.026.456 14 14 0 0 1 1.4 1.538l-.977.691a14 14 0 0 1-1.115-1.75 14 14 0 0 1-1.058 1.75l-.96-.691A14 14 0 0 1 9.12 6.61a14 14 0 0 1-1.993-.454zM1.67 2C0 5 0 11 1.67 14h2C2 11 2 5 3.67 2zm10.66 0c1.67 3 1.67 9 0 12h2c1.67-3 1.67-9 0-12z" fill="#e0e0e0"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M5 13h2v-2H5zm2.5-8a14 14 0 0 1 1.88.79 14 14 0 0 1-.163-2.027h1.18a14 14 0 0 1-.186 2.018 14 14 0 0 1 1.92-.78l.374 1.155a14 14 0 0 1-2.026.456 14 14 0 0 1 1.4 1.538l-.977.691a14 14 0 0 1-1.115-1.75 14 14 0 0 1-1.058 1.75l-.96-.691A14 14 0 0 1 9.12 6.61a14 14 0 0 1-1.993-.454zM1.67 2C0 5 0 11 1.67 14h2C2 11 2 5 3.67 2zm10.66 0c1.67 3 1.67 9 0 12h2c1.67-3 1.67-9 0-12z"/></svg>
\ No newline at end of file diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 33ba2da761..499ddb703b 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -5248,7 +5248,7 @@ void TextServerAdvanced::_shaped_text_overrun_trim_to_width(const RID &p_shaped_ if ((trim_pos >= 0 && sd->width > p_width) || enforce_ellipsis) { if (add_ellipsis && (ellipsis_pos > 0 || enforce_ellipsis)) { - // Insert an additional space when cutting word bound for esthetics. + // Insert an additional space when cutting word bound for aesthetics. if (cut_per_word && (ellipsis_pos > 0)) { Glyph gl; gl.count = 1; @@ -7048,10 +7048,10 @@ PackedInt32Array TextServerAdvanced::_string_get_word_breaks(const String &p_str HashSet<int> breaks; UErrorCode err = U_ZERO_ERROR; - UBreakIterator *bi = ubrk_open(UBRK_LINE, lang.ascii().get_data(), (const UChar *)utf16.get_data(), utf16.length(), &err); + UBreakIterator *bi = ubrk_open(UBRK_WORD, lang.ascii().get_data(), (const UChar *)utf16.get_data(), utf16.length(), &err); if (U_SUCCESS(err)) { while (ubrk_next(bi) != UBRK_DONE) { - int pos = _convert_pos(p_string, utf16, ubrk_current(bi)) - 1; + int pos = _convert_pos(p_string, utf16, ubrk_current(bi)); if (pos != p_string.length() - 1) { breaks.insert(pos); } @@ -7061,79 +7061,111 @@ PackedInt32Array TextServerAdvanced::_string_get_word_breaks(const String &p_str PackedInt32Array ret; - int line_start = 0; - int line_end = 0; // End of last word on current line. - int word_start = 0; // -1 if no word encountered. Leading spaces are part of a word. - int word_length = 0; + if (p_chars_per_line > 0) { + int line_start = 0; + int last_break = -1; + int line_length = 0; - for (int i = 0; i < p_string.length(); i++) { - const char32_t c = p_string[i]; + for (int i = 0; i < p_string.length(); i++) { + const char32_t c = p_string[i]; - if (is_linebreak(c)) { - // Force newline. - ret.push_back(line_start); - ret.push_back(i); - line_start = i + 1; - line_end = line_start; - word_start = line_start; - word_length = 0; - } else if (c == 0xfffc) { - continue; - } else if ((u_ispunct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || is_whitespace(c)) { - // A whitespace ends current word. - if (word_length > 0) { - line_end = i - 1; - word_start = -1; - word_length = 0; - } - } else if (breaks.has(i)) { - // End current word, no space. - if (word_length > 0) { - line_end = i; - word_start = i + 1; - word_length = 0; - } - if (p_chars_per_line <= 0) { - ret.push_back(line_start); - ret.push_back(line_end + 1); - line_start = word_start; - line_end = line_start; - } - } else { - if (word_start == -1) { - word_start = i; - if (p_chars_per_line <= 0) { + bool is_lb = is_linebreak(c); + bool is_ws = is_whitespace(c); + bool is_p = (u_ispunct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || c == 0xfffc; + + if (is_lb) { + if (line_length > 0) { ret.push_back(line_start); - ret.push_back(line_end + 1); - line_start = word_start; - line_end = line_start; + ret.push_back(i); } + line_start = i; + line_length = 0; + last_break = -1; + continue; + } else if (breaks.has(i) || is_ws || is_p) { + last_break = i; } - word_length += 1; - if (p_chars_per_line > 0) { - if (word_length > p_chars_per_line) { - // Word too long: wrap before current character. + if (line_length == p_chars_per_line) { + if (last_break != -1) { + int last_break_w_spaces = last_break; + while (last_break > line_start && is_whitespace(p_string[last_break - 1])) { + last_break--; + } + if (line_start != last_break) { + ret.push_back(line_start); + ret.push_back(last_break); + } + while (last_break_w_spaces < p_string.length() && is_whitespace(p_string[last_break_w_spaces])) { + last_break_w_spaces++; + } + line_start = last_break_w_spaces; + if (last_break_w_spaces < i) { + line_length = i - last_break_w_spaces; + } else { + i = last_break_w_spaces; + line_length = 0; + } + } else { ret.push_back(line_start); ret.push_back(i); line_start = i; - line_end = i; + line_length = 0; + } + last_break = -1; + } + line_length++; + } + if (line_length > 0) { + ret.push_back(line_start); + ret.push_back(p_string.length()); + } + } else { + int word_start = 0; // -1 if no word encountered. Leading spaces are part of a word. + int word_length = 0; + + for (int i = 0; i < p_string.length(); i++) { + const char32_t c = p_string[i]; + + bool is_lb = is_linebreak(c); + bool is_ws = is_whitespace(c); + bool is_p = (u_ispunct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || c == 0xfffc; + + if (word_start == -1) { + if (!is_lb && !is_ws && !is_p) { word_start = i; - word_length = 1; - } else if (i - line_start + 1 > p_chars_per_line) { - // Line too long: wrap after the last word. - ret.push_back(line_start); - ret.push_back(line_end + 1); - line_start = word_start; - line_end = line_start; } + continue; + } + + if (is_lb) { + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(i); + } + word_start = -1; + word_length = 0; + } else if (breaks.has(i) || is_ws || is_p) { + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(i); + } + if (is_ws || is_p) { + word_start = -1; + } else { + word_start = i; + } + word_length = 0; } + + word_length++; + } + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(p_string.length()); } } - if (line_start < p_string.length()) { - ret.push_back(line_start); - ret.push_back(p_string.length()); - } + return ret; } diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index 697c3366c5..b45c004011 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -4061,7 +4061,7 @@ void TextServerFallback::_shaped_text_overrun_trim_to_width(const RID &p_shaped_ if ((trim_pos >= 0 && sd->width > p_width) || enforce_ellipsis) { if (add_ellipsis && (ellipsis_pos > 0 || enforce_ellipsis)) { - // Insert an additional space when cutting word bound for esthetics. + // Insert an additional space when cutting word bound for aesthetics. if (cut_per_word && (ellipsis_pos > 0)) { Glyph gl; gl.count = 1; @@ -4492,65 +4492,105 @@ String TextServerFallback::_string_to_title(const String &p_string, const String PackedInt32Array TextServerFallback::_string_get_word_breaks(const String &p_string, const String &p_language, int64_t p_chars_per_line) const { PackedInt32Array ret; - int line_start = 0; - int line_end = 0; // End of last word on current line. - int word_start = 0; // -1 if no word encountered. Leading spaces are part of a word. - int word_length = 0; + if (p_chars_per_line > 0) { + int line_start = 0; + int last_break = -1; + int line_length = 0; - for (int i = 0; i < p_string.length(); i++) { - const char32_t c = p_string[i]; + for (int i = 0; i < p_string.length(); i++) { + const char32_t c = p_string[i]; - if (is_linebreak(c)) { - // Force newline. - ret.push_back(line_start); - ret.push_back(i); - line_start = i + 1; - line_end = line_start; - word_start = line_start; - word_length = 0; - } else if (c == 0xfffc) { - continue; - } else if ((is_punct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || is_whitespace(c)) { - // A whitespace ends current word. - if (word_length > 0) { - line_end = i - 1; - word_start = -1; - word_length = 0; - } - } else { - if (word_start == -1) { - word_start = i; - if (p_chars_per_line <= 0) { + bool is_lb = is_linebreak(c); + bool is_ws = is_whitespace(c); + bool is_p = (is_punct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || c == 0xfffc; + + if (is_lb) { + if (line_length > 0) { ret.push_back(line_start); - ret.push_back(line_end + 1); - line_start = word_start; - line_end = line_start; + ret.push_back(i); } + line_start = i; + line_length = 0; + last_break = -1; + continue; + } else if (is_ws || is_p) { + last_break = i; } - word_length += 1; - if (p_chars_per_line > 0) { - if (word_length > p_chars_per_line) { - // Word too long: wrap before current character. + if (line_length == p_chars_per_line) { + if (last_break != -1) { + int last_break_w_spaces = last_break; + while (last_break > line_start && is_whitespace(p_string[last_break - 1])) { + last_break--; + } + if (line_start != last_break) { + ret.push_back(line_start); + ret.push_back(last_break); + } + while (last_break_w_spaces < p_string.length() && is_whitespace(p_string[last_break_w_spaces])) { + last_break_w_spaces++; + } + line_start = last_break_w_spaces; + if (last_break_w_spaces < i) { + line_length = i - last_break_w_spaces; + } else { + i = last_break_w_spaces; + line_length = 0; + } + } else { ret.push_back(line_start); ret.push_back(i); line_start = i; - line_end = i; + line_length = 0; + } + last_break = -1; + } + line_length++; + } + if (line_length > 0) { + ret.push_back(line_start); + ret.push_back(p_string.length()); + } + } else { + int word_start = 0; // -1 if no word encountered. Leading spaces are part of a word. + int word_length = 0; + + for (int i = 0; i < p_string.length(); i++) { + const char32_t c = p_string[i]; + + bool is_lb = is_linebreak(c); + bool is_ws = is_whitespace(c); + bool is_p = (is_punct(c) && c != 0x005F) || is_underscore(c) || c == '\t' || c == 0xfffc; + + if (word_start == -1) { + if (!is_lb && !is_ws && !is_p) { word_start = i; - word_length = 1; - } else if (i - line_start + 1 > p_chars_per_line) { - // Line too long: wrap after the last word. - ret.push_back(line_start); - ret.push_back(line_end + 1); - line_start = word_start; - line_end = line_start; } + continue; } + + if (is_lb) { + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(i); + } + word_start = -1; + word_length = 0; + } else if (is_ws || is_p) { + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(i); + } + word_start = -1; + word_length = 0; + } + + word_length++; + } + if (word_start != -1 && word_length > 0) { + ret.push_back(word_start); + ret.push_back(p_string.length()); } - } - if (line_start < p_string.length()) { - ret.push_back(line_start); - ret.push_back(p_string.length()); } return ret; } diff --git a/modules/webxr/doc_classes/WebXRInterface.xml b/modules/webxr/doc_classes/WebXRInterface.xml index 9fd4511d2b..bd7192520a 100644 --- a/modules/webxr/doc_classes/WebXRInterface.xml +++ b/modules/webxr/doc_classes/WebXRInterface.xml @@ -54,9 +54,10 @@ # supported. webxr_interface.requested_reference_space_types = 'bounded-floor, local-floor, local' # In order to use 'local-floor' or 'bounded-floor' we must also - # mark the features as required or optional. + # mark the features as required or optional. By including 'hand-tracking' + # as an optional feature, it will be enabled if supported. webxr_interface.required_features = 'local-floor' - webxr_interface.optional_features = 'bounded-floor' + webxr_interface.optional_features = 'bounded-floor, hand-tracking' # This will return false if we're unable to even request the session, # however, it can still fail asynchronously later in the process, so we @@ -73,7 +74,10 @@ # This will be the reference space type you ultimately got, out of the # types that you requested above. This is useful if you want the game to # work a little differently in 'bounded-floor' versus 'local-floor'. - print ("Reference space type: " + webxr_interface.reference_space_type) + print("Reference space type: ", webxr_interface.reference_space_type) + # This will be the list of features that were successfully enabled + # (except on browsers that don't support this property). + print("Enabled features: ", webxr_interface.enabled_features) func _webxr_session_ended(): $Button.visible = true @@ -155,13 +159,14 @@ <members> <member name="enabled_features" type="String" setter="" getter="get_enabled_features"> A comma-separated list of features that were successfully enabled by [method XRInterface.initialize] when setting up the WebXR session. - This may include features requested by setting [member required_features] and [member optional_features]. + This may include features requested by setting [member required_features] and [member optional_features], and will only be available after [signal session_started] has been emitted. + [b]Note:[/b] This may not be support by all web browsers, in which case it will be an empty string. </member> <member name="optional_features" type="String" setter="set_optional_features" getter="get_optional_features"> A comma-seperated list of optional features used by [method XRInterface.initialize] when setting up the WebXR session. If a user's browser or device doesn't support one of the given features, initialization will continue, but you won't be able to use the requested feature. This doesn't have any effect on the interface when already initialized. - Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to use a particular reference space type, it must be listed in either [member required_features] or [member optional_features]. + Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url], or include other features like [code]"hand-tracking"[/code] to enable hand tracking. </member> <member name="reference_space_type" type="String" setter="" getter="get_reference_space_type"> The reference space type (from the list of requested types set in the [member requested_reference_space_types] property), that was ultimately used by [method XRInterface.initialize] when setting up the WebXR session. @@ -177,7 +182,7 @@ A comma-seperated list of required features used by [method XRInterface.initialize] when setting up the WebXR session. If a user's browser or device doesn't support one of the given features, initialization will fail and [signal session_failed] will be emitted. This doesn't have any effect on the interface when already initialized. - Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url]. If you want to use a particular reference space type, it must be listed in either [member required_features] or [member optional_features]. + Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpaceType]WebXR's XRReferenceSpaceType[/url], or include other features like [code]"hand-tracking"[/code] to enable hand tracking. </member> <member name="session_mode" type="String" setter="set_session_mode" getter="get_session_mode"> The session mode used by [method XRInterface.initialize] when setting up the WebXR session. diff --git a/modules/webxr/godot_webxr.h b/modules/webxr/godot_webxr.h index caa7f217af..1b3e3b6a41 100644 --- a/modules/webxr/godot_webxr.h +++ b/modules/webxr/godot_webxr.h @@ -45,7 +45,7 @@ enum WebXRInputEvent { }; typedef void (*GodotWebXRSupportedCallback)(char *p_session_mode, int p_supported); -typedef void (*GodotWebXRStartedCallback)(char *p_reference_space_type, char *p_enabled_features); +typedef void (*GodotWebXRStartedCallback)(char *p_reference_space_type, char *p_enabled_features, char *p_environment_blend_mode); typedef void (*GodotWebXREndedCallback)(); typedef void (*GodotWebXRFailedCallback)(char *p_message); typedef void (*GodotWebXRInputEventCallback)(int p_event_type, int p_input_source_id); diff --git a/modules/webxr/native/library_godot_webxr.js b/modules/webxr/native/library_godot_webxr.js index 031530a047..155409f931 100644 --- a/modules/webxr/native/library_godot_webxr.js +++ b/modules/webxr/native/library_godot_webxr.js @@ -320,10 +320,14 @@ const GodotWebXR = { // next reference space. window.setTimeout(function () { const reference_space_c_str = GodotRuntime.allocString(reference_space_type); - const enabled_features_c_str = GodotRuntime.allocString(Array.from(session.enabledFeatures).join(',')); - onstarted(reference_space_c_str, enabled_features_c_str); + const enabled_features = 'enabledFeatures' in session ? Array.from(session.enabledFeatures) : []; + const enabled_features_c_str = GodotRuntime.allocString(enabled_features.join(',')); + const environment_blend_mode = 'environmentBlendMode' in session ? session.environmentBlendMode : ''; + const environment_blend_mode_c_str = GodotRuntime.allocString(environment_blend_mode); + onstarted(reference_space_c_str, enabled_features_c_str, environment_blend_mode_c_str); GodotRuntime.free(reference_space_c_str); GodotRuntime.free(enabled_features_c_str); + GodotRuntime.free(environment_blend_mode_c_str); }, 0); } diff --git a/modules/webxr/native/webxr.externs.js b/modules/webxr/native/webxr.externs.js index 35ad33fa93..18125d7869 100644 --- a/modules/webxr/native/webxr.externs.js +++ b/modules/webxr/native/webxr.externs.js @@ -78,6 +78,16 @@ XRSession.prototype.frameRate; XRSession.prototype.supportedFrameRates; /** + * @type {Array<string>} + */ +XRSession.prototype.enabledFeatures; + +/** + * @type {string} + */ +XRSession.prototype.environmentBlendMode; + +/** * @type {?function (Event)} */ XRSession.prototype.onend; diff --git a/modules/webxr/webxr_interface_js.cpp b/modules/webxr/webxr_interface_js.cpp index 916566fc1b..78a9db9b19 100644 --- a/modules/webxr/webxr_interface_js.cpp +++ b/modules/webxr/webxr_interface_js.cpp @@ -58,7 +58,7 @@ void _emwebxr_on_session_supported(char *p_session_mode, int p_supported) { interface->emit_signal(SNAME("session_supported"), session_mode, p_supported ? true : false); } -void _emwebxr_on_session_started(char *p_reference_space_type, char *p_enabled_features) { +void _emwebxr_on_session_started(char *p_reference_space_type, char *p_enabled_features, char *p_environment_blend_mode) { XRServer *xr_server = XRServer::get_singleton(); ERR_FAIL_NULL(xr_server); @@ -68,6 +68,7 @@ void _emwebxr_on_session_started(char *p_reference_space_type, char *p_enabled_f String reference_space_type = String(p_reference_space_type); interface->_set_reference_space_type(reference_space_type); interface->_set_enabled_features(p_enabled_features); + interface->_set_environment_blend_mode(p_environment_blend_mode); interface->emit_signal(SNAME("session_started")); } @@ -230,6 +231,44 @@ Array WebXRInterfaceJS::get_available_display_refresh_rates() const { return ret; } +Array WebXRInterfaceJS::get_supported_environment_blend_modes() { + Array blend_modes; + // The blend mode can't be changed, so return the current blend mode as the only supported one. + blend_modes.push_back(environment_blend_mode); + return blend_modes; +} + +XRInterface::EnvironmentBlendMode WebXRInterfaceJS::get_environment_blend_mode() const { + return environment_blend_mode; +} + +bool WebXRInterfaceJS::set_environment_blend_mode(EnvironmentBlendMode p_new_environment_blend_mode) { + if (environment_blend_mode == p_new_environment_blend_mode) { + // Environment blend mode can't be changed, but we'll consider it a success to set it + // to what it already is. + return true; + } + return false; +} + +void WebXRInterfaceJS::_set_environment_blend_mode(String p_blend_mode_string) { + if (p_blend_mode_string == "opaque") { + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_OPAQUE; + } else if (p_blend_mode_string == "additive") { + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_ADDITIVE; + } else if (p_blend_mode_string == "alpha-blend") { + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_ALPHA_BLEND; + } else { + // Not all browsers can give us this information, so as a fallback, + // we'll make some guesses about the blend mode. + if (session_mode == "immersive-ar") { + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_ALPHA_BLEND; + } else { + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_OPAQUE; + } + } +} + StringName WebXRInterfaceJS::get_name() const { return "WebXR"; }; @@ -336,6 +375,7 @@ void WebXRInterfaceJS::uninitialize() { texture_cache.clear(); reference_space_type.clear(); enabled_features.clear(); + environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_OPAQUE; initialized = false; }; }; @@ -740,12 +780,20 @@ void WebXRInterfaceJS::_update_input_source(int p_input_source_id) { // WebXR doesn't have a palm joint, so we calculate it by finding the middle of the middle finger metacarpal bone. { - // 10 is the WebXR middle finger metacarpal joint, and 12 is the offset to the transform origin. - const float *start_pos = hand_joints + (10 * 16) + 12; - // 11 is the WebXR middle finger phalanx proximal joint, and 12 is the offset to the transform origin. - const float *end_pos = hand_joints + (11 * 16) + 12; - Transform3D palm_transform; - palm_transform.origin = (Vector3(start_pos[0], start_pos[1], start_pos[2]) + Vector3(end_pos[0], end_pos[1], end_pos[2])) / 2.0; + // Start by getting the middle finger metacarpal joint. + // Note: 10 is the WebXR middle finger metacarpal joint. + Transform3D palm_transform = _js_matrix_to_transform(hand_joints + (10 * 16)); + palm_transform.basis *= bone_adjustment; + + // Get the middle finger phalanx position. + // Note: 11 is the WebXR middle finger phalanx proximal joint and 12 is the origin offset. + const float *phalanx_pos = hand_joints + (11 * 16) + 12; + Vector3 phalanx(phalanx_pos[0], phalanx_pos[1], phalanx_pos[2]); + + // Offset the palm half-way towards the phalanx joint. + palm_transform.origin = (palm_transform.origin + phalanx) / 2.0; + + // Set the palm joint and the pose. hand_tracker->set_hand_joint_transform(XRHandTracker::HAND_JOINT_PALM, palm_transform); hand_tracker->set_pose("default", palm_transform, Vector3(), Vector3()); } diff --git a/modules/webxr/webxr_interface_js.h b/modules/webxr/webxr_interface_js.h index afce28d410..d02c8d2677 100644 --- a/modules/webxr/webxr_interface_js.h +++ b/modules/webxr/webxr_interface_js.h @@ -60,6 +60,8 @@ private: String reference_space_type; String enabled_features; + XRInterface::EnvironmentBlendMode environment_blend_mode = XRInterface::XR_ENV_BLEND_MODE_OPAQUE; + Size2 render_targetsize; RBMap<unsigned int, RID> texture_cache; struct Touch { @@ -113,6 +115,10 @@ public: virtual void set_display_refresh_rate(float p_refresh_rate) override; virtual Array get_available_display_refresh_rates() const override; + virtual Array get_supported_environment_blend_modes() override; + virtual XRInterface::EnvironmentBlendMode get_environment_blend_mode() const override; + virtual bool set_environment_blend_mode(EnvironmentBlendMode p_new_environment_blend_mode) override; + virtual StringName get_name() const override; virtual uint32_t get_capabilities() const override; @@ -136,8 +142,10 @@ public: void _on_input_event(int p_event_type, int p_input_source_id); + // Internal setters used by callbacks from Emscripten. inline void _set_reference_space_type(String p_reference_space_type) { reference_space_type = p_reference_space_type; } inline void _set_enabled_features(String p_enabled_features) { enabled_features = p_enabled_features; } + void _set_environment_blend_mode(String p_blend_mode_string); WebXRInterfaceJS(); ~WebXRInterfaceJS(); diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp index 288c37be29..06b304dcde 100644 --- a/platform/android/display_server_android.cpp +++ b/platform/android/display_server_android.cpp @@ -607,6 +607,7 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver)); memdelete(rendering_context); rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; return; } @@ -627,6 +628,7 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis ERR_PRINT(vformat("Failed to create %s window.", rendering_driver)); memdelete(rendering_context); rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; return; } @@ -635,7 +637,13 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode); rendering_device = memnew(RenderingDevice); - rendering_device->initialize(rendering_context, MAIN_WINDOW_ID); + if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) { + rendering_device = nullptr; + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } rendering_device->screen_create(MAIN_WINDOW_ID); RendererCompositorRD::make_current(); diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp index ad00659257..479158c91f 100644 --- a/platform/android/export/export_plugin.cpp +++ b/platform/android/export/export_plugin.cpp @@ -1920,7 +1920,7 @@ bool EditorExportPlatformAndroid::get_export_option_visibility(const EditorExpor } if (p_option == "custom_template/debug" || p_option == "custom_template/release") { // The APK templates are ignored if Gradle build is enabled. - return advanced_options_enabled && !bool(p_preset->get("gradle_build/use_gradle_build")); + return !bool(p_preset->get("gradle_build/use_gradle_build")); } // Hide .NET embedding option (always enabled). diff --git a/platform/android/export/logo.svg b/platform/android/export/logo.svg index f154e55d11..208a89e10e 100644 --- a/platform/android/export/logo.svg +++ b/platform/android/export/logo.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M22.904 20.192a1.25 1.25 0 1 1 1.25-1.25 1.25 1.25 0 0 1-1.25 1.25m-13.808 0a1.25 1.25 0 1 1 1.25-1.25 1.25 1.25 0 0 1-1.25 1.25m14.256-7.525 2.496-4.323a.52.52 0 1 0-.899-.52l-2.528 4.378a15.69 15.69 0 0 0-12.842 0L7.051 7.823a.52.52 0 1 0-.9.521l2.497 4.323C4.361 15 1.43 19.34 1 24.467h30c-.43-5.128-3.361-9.468-7.648-11.8" fill="#56d881"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#56d881" d="M22.904 20.192a1.25 1.25 0 1 1 1.25-1.25 1.25 1.25 0 0 1-1.25 1.25m-13.808 0a1.25 1.25 0 1 1 1.25-1.25 1.25 1.25 0 0 1-1.25 1.25m14.256-7.525 2.496-4.323a.52.52 0 1 0-.899-.52l-2.528 4.378a15.69 15.69 0 0 0-12.842 0L7.051 7.823a.52.52 0 1 0-.9.521l2.497 4.323C4.361 15 1.43 19.34 1 24.467h30c-.43-5.128-3.361-9.468-7.648-11.8"/></svg>
\ No newline at end of file diff --git a/platform/android/export/run_icon.svg b/platform/android/export/run_icon.svg index 24d930fece..4e56391dfe 100644 --- a/platform/android/export/run_icon.svg +++ b/platform/android/export/run_icon.svg @@ -1 +1 @@ -<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M11.187 9.936a.577.577 0 1 1 .578-.578.577.577 0 0 1-.578.578m-6.374 0a.577.577 0 1 1 .577-.578.577.577 0 0 1-.577.578m6.581-3.475 1.153-1.996a.24.24 0 1 0-.415-.24l-1.167 2.021a7.244 7.244 0 0 0-5.93 0L3.868 4.225a.24.24 0 1 0-.415.24l1.153 1.996a6.806 6.806 0 0 0-3.532 5.448h13.852a6.807 6.807 0 0 0-3.532-5.448" fill="#56d881" style="fill:#e0e0e0;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="M11.187 9.936a.577.577 0 1 1 .578-.578.577.577 0 0 1-.578.578m-6.374 0a.577.577 0 1 1 .577-.578.577.577 0 0 1-.577.578m6.581-3.475 1.153-1.996a.24.24 0 1 0-.415-.24l-1.167 2.021a7.244 7.244 0 0 0-5.93 0L3.868 4.225a.24.24 0 1 0-.415.24l1.153 1.996a6.806 6.806 0 0 0-3.532 5.448h13.852a6.807 6.807 0 0 0-3.532-5.448"/></svg>
\ No newline at end of file diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml index 4abc6548bf..0cc929d226 100644 --- a/platform/android/java/app/AndroidManifest.xml +++ b/platform/android/java/app/AndroidManifest.xml @@ -24,6 +24,10 @@ android:hasFragileUserData="false" android:requestLegacyExternalStorage="false" tools:ignore="GoogleAppIndexingWarning" > + <profileable + android:shell="true" + android:enabled="true" + tools:targetApi="29" /> <!-- Records the version of the Godot editor used for building --> <meta-data diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle index 01759a1b2f..eb9ad9de05 100644 --- a/platform/android/java/app/config.gradle +++ b/platform/android/java/app/config.gradle @@ -7,7 +7,7 @@ ext.versions = [ targetSdk : 34, buildTools : '34.0.0', kotlinVersion : '1.9.20', - fragmentVersion : '1.6.2', + fragmentVersion : '1.7.1', nexusPublishVersion: '1.3.0', javaVersion : JavaVersion.VERSION_17, // Also update 'platform/android/detect.py#get_ndk_version()' when this is updated. diff --git a/platform/android/java/editor/build.gradle b/platform/android/java/editor/build.gradle index 55fe2a22fe..37f68d295a 100644 --- a/platform/android/java/editor/build.gradle +++ b/platform/android/java/editor/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation "androidx.fragment:fragment:$versions.fragmentVersion" implementation project(":lib") - implementation "androidx.window:window:1.2.0" + implementation "androidx.window:window:1.3.0" implementation "androidx.core:core-splashscreen:$versions.splashscreenVersion" implementation "androidx.constraintlayout:constraintlayout:2.1.4" } diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt index 5515347bd6..dad397de61 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt @@ -117,6 +117,10 @@ open class GodotEditor : GodotActivity() { val longPressEnabled = enableLongPressGestures() val panScaleEnabled = enablePanAndScaleGestures() + val useInputBuffering = useInputBuffering() + val useAccumulatedInput = useAccumulatedInput() + GodotLib.updateInputDispatchSettings(useAccumulatedInput, useInputBuffering) + checkForProjectPermissionsToEnable() runOnUiThread { @@ -124,6 +128,7 @@ open class GodotEditor : GodotActivity() { godotFragment?.godot?.renderView?.inputHandler?.apply { enableLongPress(longPressEnabled) enablePanningAndScalingGestures(panScaleEnabled) + enableInputDispatchToRenderThread(!useInputBuffering && !useAccumulatedInput) } } } @@ -275,6 +280,13 @@ open class GodotEditor : GodotActivity() { java.lang.Boolean.parseBoolean(GodotLib.getEditorSetting("interface/touchscreen/enable_pan_and_scale_gestures")) /** + * Use input buffering for the Godot Android editor. + */ + protected open fun useInputBuffering() = java.lang.Boolean.parseBoolean(GodotLib.getEditorSetting("interface/editor/android/use_input_buffering")) + + protected open fun useAccumulatedInput() = java.lang.Boolean.parseBoolean(GodotLib.getEditorSetting("interface/editor/android/use_accumulated_input")) + + /** * Whether we should launch the new godot instance in an adjacent window * @see https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT */ diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt index 8e4e089211..f50b5577c3 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt @@ -30,6 +30,8 @@ package org.godotengine.editor +import org.godotengine.godot.GodotLib + /** * Drives the 'run project' window of the Godot Editor. */ @@ -39,9 +41,13 @@ class GodotGame : GodotEditor() { override fun overrideOrientationRequest() = false - override fun enableLongPressGestures() = false + override fun enableLongPressGestures() = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_long_press_as_right_click")) + + override fun enablePanAndScaleGestures() = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_pan_and_scale_gestures")) + + override fun useInputBuffering() = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/buffering/android/use_input_buffering")) - override fun enablePanAndScaleGestures() = false + override fun useAccumulatedInput() = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/buffering/android/use_accumulated_input")) override fun checkForProjectPermissionsToEnable() { // Nothing to do.. by the time we get here, the project permissions will have already diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.kt b/platform/android/java/lib/src/org/godotengine/godot/Godot.kt index 290be727ab..c188a97ca5 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.kt @@ -84,17 +84,20 @@ class Godot(private val context: Context) : SensorEventListener { private companion object { private val TAG = Godot::class.java.simpleName - } - private val windowManager: WindowManager by lazy { - requireActivity().getSystemService(Context.WINDOW_SERVICE) as WindowManager + // Supported build flavors + const val EDITOR_FLAVOR = "editor" + const val TEMPLATE_FLAVOR = "template" } + + private val windowManager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + private val mSensorManager: SensorManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager + private val mClipboard: ClipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + private val vibratorService: Vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + private val pluginRegistry: GodotPluginRegistry by lazy { GodotPluginRegistry.getPluginRegistry() } - private val mSensorManager: SensorManager by lazy { - requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager - } private val mAccelerometer: Sensor? by lazy { mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) } @@ -107,9 +110,6 @@ class Godot(private val context: Context) : SensorEventListener { private val mGyroscope: Sensor? by lazy { mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) } - private val mClipboard: ClipboardManager by lazy { - requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - } private val uiChangeListener = View.OnSystemUiVisibilityChangeListener { visibility: Int -> if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) { @@ -192,6 +192,8 @@ class Godot(private val context: Context) : SensorEventListener { return } + Log.v(TAG, "OnCreate: $primaryHost") + darkMode = context.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES beginBenchmarkMeasure("Startup", "Godot::onCreate") @@ -200,6 +202,8 @@ class Godot(private val context: Context) : SensorEventListener { val activity = requireActivity() val window = activity.window window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON) + + Log.v(TAG, "Initializing Godot plugin registry") GodotPluginRegistry.initializePluginRegistry(this, primaryHost.getHostPlugins(this)) if (io == null) { io = GodotIO(activity) @@ -323,13 +327,17 @@ class Godot(private val context: Context) : SensorEventListener { return false } - if (expansionPackPath.isNotEmpty()) { - commandLine.add("--main-pack") - commandLine.add(expansionPackPath) - } - val activity = requireActivity() - if (!nativeLayerInitializeCompleted) { - nativeLayerInitializeCompleted = GodotLib.initialize( + Log.v(TAG, "OnInitNativeLayer: $host") + + beginBenchmarkMeasure("Startup", "Godot::onInitNativeLayer") + try { + if (expansionPackPath.isNotEmpty()) { + commandLine.add("--main-pack") + commandLine.add(expansionPackPath) + } + val activity = requireActivity() + if (!nativeLayerInitializeCompleted) { + nativeLayerInitializeCompleted = GodotLib.initialize( activity, this, activity.assets, @@ -338,15 +346,20 @@ class Godot(private val context: Context) : SensorEventListener { directoryAccessHandler, fileAccessHandler, useApkExpansion, - ) - } + ) + Log.v(TAG, "Godot native layer initialization completed: $nativeLayerInitializeCompleted") + } - if (nativeLayerInitializeCompleted && !nativeLayerSetupCompleted) { - nativeLayerSetupCompleted = GodotLib.setup(commandLine.toTypedArray(), tts) - if (!nativeLayerSetupCompleted) { - Log.e(TAG, "Unable to setup the Godot engine! Aborting...") - alert(R.string.error_engine_setup_message, R.string.text_error_title, this::forceQuit) + if (nativeLayerInitializeCompleted && !nativeLayerSetupCompleted) { + nativeLayerSetupCompleted = GodotLib.setup(commandLine.toTypedArray(), tts) + if (!nativeLayerSetupCompleted) { + throw IllegalStateException("Unable to setup the Godot engine! Aborting...") + } else { + Log.v(TAG, "Godot native layer setup completed") + } } + } finally { + endBenchmarkMeasure("Startup", "Godot::onInitNativeLayer") } return isNativeInitialized() } @@ -370,6 +383,9 @@ class Godot(private val context: Context) : SensorEventListener { throw IllegalStateException("onInitNativeLayer() must be invoked successfully prior to initializing the render view") } + Log.v(TAG, "OnInitRenderView: $host") + + beginBenchmarkMeasure("Startup", "Godot::onInitRenderView") try { val activity: Activity = host.activity containerLayout = providedContainerLayout @@ -392,8 +408,7 @@ class Godot(private val context: Context) : SensorEventListener { containerLayout?.addView(editText) renderView = if (usesVulkan()) { if (!meetsVulkanRequirements(activity.packageManager)) { - alert(R.string.error_missing_vulkan_requirements_message, R.string.text_error_title, this::forceQuit) - return null + throw IllegalStateException(activity.getString(R.string.error_missing_vulkan_requirements_message)) } GodotVulkanRenderView(host, this) } else { @@ -482,11 +497,14 @@ class Godot(private val context: Context) : SensorEventListener { containerLayout?.removeAllViews() containerLayout = null } + + endBenchmarkMeasure("Startup", "Godot::onInitRenderView") } return containerLayout } fun onStart(host: GodotHost) { + Log.v(TAG, "OnStart: $host") if (host != primaryHost) { return } @@ -495,6 +513,7 @@ class Godot(private val context: Context) : SensorEventListener { } fun onResume(host: GodotHost) { + Log.v(TAG, "OnResume: $host") if (host != primaryHost) { return } @@ -527,6 +546,7 @@ class Godot(private val context: Context) : SensorEventListener { } fun onPause(host: GodotHost) { + Log.v(TAG, "OnPause: $host") if (host != primaryHost) { return } @@ -539,6 +559,7 @@ class Godot(private val context: Context) : SensorEventListener { } fun onStop(host: GodotHost) { + Log.v(TAG, "OnStop: $host") if (host != primaryHost) { return } @@ -547,6 +568,7 @@ class Godot(private val context: Context) : SensorEventListener { } fun onDestroy(primaryHost: GodotHost) { + Log.v(TAG, "OnDestroy: $primaryHost") if (this.primaryHost != primaryHost) { return } @@ -604,18 +626,29 @@ class Godot(private val context: Context) : SensorEventListener { * Invoked on the render thread when the Godot setup is complete. */ private fun onGodotSetupCompleted() { - Log.d(TAG, "OnGodotSetupCompleted") - - // These properties are defined after Godot setup completion, so we retrieve them here. - val longPressEnabled = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_long_press_as_right_click")) - val panScaleEnabled = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_pan_and_scale_gestures")) - val rotaryInputAxis = java.lang.Integer.parseInt(GodotLib.getGlobal("input_devices/pointing/android/rotary_input_scroll_axis")) - - runOnUiThread { - renderView?.inputHandler?.apply { - enableLongPress(longPressEnabled) - enablePanningAndScalingGestures(panScaleEnabled) - setRotaryInputAxis(rotaryInputAxis) + Log.v(TAG, "OnGodotSetupCompleted") + + if (!isEditorBuild()) { + // These properties are defined after Godot setup completion, so we retrieve them here. + val longPressEnabled = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_long_press_as_right_click")) + val panScaleEnabled = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_pan_and_scale_gestures")) + val rotaryInputAxisValue = GodotLib.getGlobal("input_devices/pointing/android/rotary_input_scroll_axis") + + val useInputBuffering = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/buffering/android/use_input_buffering")) + val useAccumulatedInput = java.lang.Boolean.parseBoolean(GodotLib.getGlobal("input_devices/buffering/android/use_accumulated_input")) + GodotLib.updateInputDispatchSettings(useAccumulatedInput, useInputBuffering) + + runOnUiThread { + renderView?.inputHandler?.apply { + enableLongPress(longPressEnabled) + enablePanningAndScalingGestures(panScaleEnabled) + enableInputDispatchToRenderThread(!useInputBuffering && !useAccumulatedInput) + try { + setRotaryInputAxis(Integer.parseInt(rotaryInputAxisValue)) + } catch (e: NumberFormatException) { + Log.w(TAG, e) + } + } } } @@ -629,7 +662,7 @@ class Godot(private val context: Context) : SensorEventListener { * Invoked on the render thread when the Godot main loop has started. */ private fun onGodotMainLoopStarted() { - Log.d(TAG, "OnGodotMainLoopStarted") + Log.v(TAG, "OnGodotMainLoopStarted") for (plugin in pluginRegistry.allPlugins) { plugin.onGodotMainLoopStarted() @@ -646,12 +679,7 @@ class Godot(private val context: Context) : SensorEventListener { decorView.setOnSystemUiVisibilityChangeListener(uiChangeListener) } - @Keep - private fun alert(message: String, title: String) { - alert(message, title, null) - } - - private fun alert( + fun alert( @StringRes messageResId: Int, @StringRes titleResId: Int, okCallback: Runnable? @@ -660,7 +688,9 @@ class Godot(private val context: Context) : SensorEventListener { alert(res.getString(messageResId), res.getString(titleResId), okCallback) } - private fun alert(message: String, title: String, okCallback: Runnable?) { + @JvmOverloads + @Keep + fun alert(message: String, title: String, okCallback: Runnable? = null) { val activity: Activity = getActivity() ?: return runOnUiThread { val builder = AlertDialog.Builder(activity) @@ -759,6 +789,11 @@ class Godot(private val context: Context) : SensorEventListener { return mClipboard.hasPrimaryClip() } + /** + * @return true if this is an editor build, false if this is a template build + */ + fun isEditorBuild() = BuildConfig.FLAVOR == EDITOR_FLAVOR + fun getClipboard(): String { val clipData = mClipboard.primaryClip ?: return "" val text = clipData.getItemAt(0).text ?: return "" @@ -770,7 +805,7 @@ class Godot(private val context: Context) : SensorEventListener { mClipboard.setPrimaryClip(clip) } - private fun forceQuit() { + fun forceQuit() { forceQuit(0) } @@ -881,7 +916,6 @@ class Godot(private val context: Context) : SensorEventListener { @Keep private fun vibrate(durationMs: Int, amplitude: Int) { if (durationMs > 0 && requestPermission("VIBRATE")) { - val vibratorService = getActivity()?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? ?: return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (amplitude <= -1) { vibratorService.vibrate( diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java b/platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java index a323045e1b..1612ddd0b3 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotFragment.java @@ -42,6 +42,7 @@ import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.os.Messenger; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -203,6 +204,12 @@ public class GodotFragment extends Fragment implements IDownloaderClient, GodotH if (godotContainerLayout == null) { throw new IllegalStateException("Unable to initialize engine render view"); } + } catch (IllegalStateException e) { + Log.e(TAG, "Engine initialization failed", e); + final String errorMessage = TextUtils.isEmpty(e.getMessage()) + ? getString(R.string.error_engine_setup_message) + : e.getMessage(); + godot.alert(errorMessage, getString(R.string.text_error_title), godot::forceQuit); } catch (IllegalArgumentException ignored) { final Activity activity = getActivity(); Intent notifierIntent = new Intent(activity, activity.getClass()); diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java index 4b51bd778d..219631284a 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java @@ -121,7 +121,7 @@ public class GodotIO { activity.startActivity(intent); return 0; - } catch (ActivityNotFoundException e) { + } catch (Exception e) { Log.e(TAG, "Unable to open uri " + uriString, e); return 1; } diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java index d0c3d4a687..37e889daf7 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java @@ -240,4 +240,11 @@ public class GodotLib { * @see GodotRenderer#onActivityPaused() */ public static native void onRendererPaused(); + + /** + * Invoked on the GL thread to update the input dispatch settings + * @param useAccumulatedInput True to use accumulated input, false otherwise + * @param useInputBuffering True to use input buffering, false otherwise + */ + public static native void updateInputDispatchSettings(boolean useAccumulatedInput, boolean useInputBuffering); } diff --git a/platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java b/platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java index c316812404..c9421a3257 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/gl/GLSurfaceView.java @@ -1704,15 +1704,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mHasSurface = true; mFinishedCreatingEglSurface = false; sGLThreadManager.notifyAll(); - while (mWaitingForSurface - && !mFinishedCreatingEglSurface - && !mExited) { - try { - sGLThreadManager.wait(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } } } @@ -1723,13 +1714,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback } mHasSurface = false; sGLThreadManager.notifyAll(); - while((!mWaitingForSurface) && (!mExited)) { - try { - sGLThreadManager.wait(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } } } @@ -1740,16 +1724,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback } mRequestPaused = true; sGLThreadManager.notifyAll(); - while ((! mExited) && (! mPaused)) { - if (LOG_PAUSE_RESUME) { - Log.i("Main thread", "onPause waiting for mPaused."); - } - try { - sGLThreadManager.wait(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } } } @@ -1762,16 +1736,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mRequestRender = true; mRenderComplete = false; sGLThreadManager.notifyAll(); - while ((! mExited) && mPaused && (!mRenderComplete)) { - if (LOG_PAUSE_RESUME) { - Log.i("Main thread", "onResume waiting for !mPaused."); - } - try { - sGLThreadManager.wait(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } } } @@ -1793,19 +1757,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback } sGLThreadManager.notifyAll(); - - // Wait for thread to react to resize and render a frame - while (! mExited && !mPaused && !mRenderComplete - && ableToDraw()) { - if (LOG_SURFACE) { - Log.i("Main thread", "onWindowResize waiting for render complete from tid=" + getId()); - } - try { - sGLThreadManager.wait(); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } - } } } diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt index 49b34a5229..4cd3bd8db9 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.kt @@ -44,7 +44,7 @@ import org.godotengine.godot.GodotLib * @See https://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener * @See https://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener */ -internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureListener { +internal class GodotGestureHandler(private val inputHandler: GodotInputHandler) : SimpleOnGestureListener(), OnScaleGestureListener { companion object { private val TAG = GodotGestureHandler::class.java.simpleName @@ -65,13 +65,13 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi private var lastDragY: Float = 0.0f override fun onDown(event: MotionEvent): Boolean { - GodotInputHandler.handleMotionEvent(event, MotionEvent.ACTION_DOWN, nextDownIsDoubleTap) + inputHandler.handleMotionEvent(event, MotionEvent.ACTION_DOWN, nextDownIsDoubleTap) nextDownIsDoubleTap = false return true } override fun onSingleTapUp(event: MotionEvent): Boolean { - GodotInputHandler.handleMotionEvent(event) + inputHandler.handleMotionEvent(event) return true } @@ -85,10 +85,10 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi } // Cancel the previous down event - GodotInputHandler.handleMotionEvent(event, MotionEvent.ACTION_CANCEL) + inputHandler.handleMotionEvent(event, MotionEvent.ACTION_CANCEL) // Turn a context click into a single tap right mouse button click. - GodotInputHandler.handleMouseEvent( + inputHandler.handleMouseEvent( event, MotionEvent.ACTION_DOWN, MotionEvent.BUTTON_SECONDARY, @@ -104,7 +104,7 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi if (!hasCapture) { // Dispatch a mouse relative ACTION_UP event to signal the end of the capture - GodotInputHandler.handleMouseEvent(MotionEvent.ACTION_UP, true) + inputHandler.handleMouseEvent(MotionEvent.ACTION_UP, true) } pointerCaptureInProgress = hasCapture } @@ -131,9 +131,9 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi if (contextClickInProgress || GodotInputHandler.isMouseEvent(event)) { // This may be an ACTION_BUTTON_RELEASE event which we don't handle, // so we convert it to an ACTION_UP event. - GodotInputHandler.handleMouseEvent(event, MotionEvent.ACTION_UP) + inputHandler.handleMouseEvent(event, MotionEvent.ACTION_UP) } else { - GodotInputHandler.handleTouchEvent(event) + inputHandler.handleTouchEvent(event) } pointerCaptureInProgress = false dragInProgress = false @@ -148,7 +148,7 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi private fun onActionMove(event: MotionEvent): Boolean { if (contextClickInProgress) { - GodotInputHandler.handleMouseEvent(event, event.actionMasked, MotionEvent.BUTTON_SECONDARY, false) + inputHandler.handleMouseEvent(event, event.actionMasked, MotionEvent.BUTTON_SECONDARY, false) return true } else if (!scaleInProgress) { // The 'onScroll' event is triggered with a long delay. @@ -158,7 +158,7 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi if (lastDragX != event.getX(0) || lastDragY != event.getY(0)) { lastDragX = event.getX(0) lastDragY = event.getY(0) - GodotInputHandler.handleMotionEvent(event) + inputHandler.handleMotionEvent(event) return true } } @@ -168,9 +168,9 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi override fun onDoubleTapEvent(event: MotionEvent): Boolean { if (event.actionMasked == MotionEvent.ACTION_UP) { nextDownIsDoubleTap = false - GodotInputHandler.handleMotionEvent(event) + inputHandler.handleMotionEvent(event) } else if (event.actionMasked == MotionEvent.ACTION_MOVE && !panningAndScalingEnabled) { - GodotInputHandler.handleMotionEvent(event) + inputHandler.handleMotionEvent(event) } return true @@ -191,7 +191,7 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi if (dragInProgress || lastDragX != 0.0f || lastDragY != 0.0f) { if (originEvent != null) { // Cancel the drag - GodotInputHandler.handleMotionEvent(originEvent, MotionEvent.ACTION_CANCEL) + inputHandler.handleMotionEvent(originEvent, MotionEvent.ACTION_CANCEL) } dragInProgress = false lastDragX = 0.0f @@ -202,12 +202,12 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi val x = terminusEvent.x val y = terminusEvent.y if (terminusEvent.pointerCount >= 2 && panningAndScalingEnabled && !pointerCaptureInProgress && !dragInProgress) { - GodotLib.pan(x, y, distanceX / 5f, distanceY / 5f) + inputHandler.handlePanEvent(x, y, distanceX / 5f, distanceY / 5f) } else if (!scaleInProgress) { dragInProgress = true lastDragX = terminusEvent.getX(0) lastDragY = terminusEvent.getY(0) - GodotInputHandler.handleMotionEvent(terminusEvent) + inputHandler.handleMotionEvent(terminusEvent) } return true } @@ -218,11 +218,7 @@ internal class GodotGestureHandler : SimpleOnGestureListener(), OnScaleGestureLi } if (detector.scaleFactor >= 0.8f && detector.scaleFactor != 1f && detector.scaleFactor <= 1.2f) { - GodotLib.magnify( - detector.focusX, - detector.focusY, - detector.scaleFactor - ) + inputHandler.handleMagnifyEvent(detector.focusX, detector.focusY, detector.scaleFactor) } return true } diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java index 83e76e49c9..889618914d 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java @@ -75,7 +75,9 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { */ private int lastSeenToolType = MotionEvent.TOOL_TYPE_UNKNOWN; - private static int rotaryInputAxis = ROTARY_INPUT_VERTICAL_AXIS; + private int rotaryInputAxis = ROTARY_INPUT_VERTICAL_AXIS; + + private boolean dispatchInputToRenderThread = false; public GodotInputHandler(GodotRenderView godotView) { final Context context = godotView.getView().getContext(); @@ -83,7 +85,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { mInputManager = (InputManager)context.getSystemService(Context.INPUT_SERVICE); mInputManager.registerInputDeviceListener(this, null); - this.godotGestureHandler = new GodotGestureHandler(); + this.godotGestureHandler = new GodotGestureHandler(this); this.gestureDetector = new GestureDetector(context, godotGestureHandler); this.gestureDetector.setIsLongpressEnabled(false); this.scaleGestureDetector = new ScaleGestureDetector(context, godotGestureHandler); @@ -109,6 +111,22 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { } /** + * Specifies whether input should be dispatch on the UI thread or on the Render thread. + * @param enable true to dispatch input on the Render thread, false to dispatch input on the UI thread + */ + public void enableInputDispatchToRenderThread(boolean enable) { + this.dispatchInputToRenderThread = enable; + } + + /** + * @return true if input must be dispatched from the render thread. If false, input is + * dispatched from the UI thread. + */ + private boolean shouldDispatchInputToRenderThread() { + return dispatchInputToRenderThread; + } + + /** * On Wear OS devices, sets which axis of the mouse wheel rotary input is mapped to. This is 1 (vertical axis) by default. */ public void setRotaryInputAxis(int axis) { @@ -151,14 +169,14 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { if (mJoystickIds.indexOfKey(deviceId) >= 0) { final int button = getGodotButton(keyCode); final int godotJoyId = mJoystickIds.get(deviceId); - GodotLib.joybutton(godotJoyId, button, false); + handleJoystickButtonEvent(godotJoyId, button, false); } } else { // getKeyCode(): The physical key that was pressed. final int physical_keycode = event.getKeyCode(); final int unicode = event.getUnicodeChar(); final int key_label = event.getDisplayLabel(); - GodotLib.key(physical_keycode, unicode, key_label, false, event.getRepeatCount() > 0); + handleKeyEvent(physical_keycode, unicode, key_label, false, event.getRepeatCount() > 0); }; return true; @@ -187,13 +205,13 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { if (mJoystickIds.indexOfKey(deviceId) >= 0) { final int button = getGodotButton(keyCode); final int godotJoyId = mJoystickIds.get(deviceId); - GodotLib.joybutton(godotJoyId, button, true); + handleJoystickButtonEvent(godotJoyId, button, true); } } else { final int physical_keycode = event.getKeyCode(); final int unicode = event.getUnicodeChar(); final int key_label = event.getDisplayLabel(); - GodotLib.key(physical_keycode, unicode, key_label, true, event.getRepeatCount() > 0); + handleKeyEvent(physical_keycode, unicode, key_label, true, event.getRepeatCount() > 0); } return true; @@ -248,7 +266,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { if (joystick.axesValues.indexOfKey(axis) < 0 || (float)joystick.axesValues.get(axis) != value) { // save value to prevent repeats joystick.axesValues.put(axis, value); - GodotLib.joyaxis(godotJoyId, i, value); + handleJoystickAxisEvent(godotJoyId, i, value); } } @@ -258,7 +276,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { if (joystick.hatX != hatX || joystick.hatY != hatY) { joystick.hatX = hatX; joystick.hatY = hatY; - GodotLib.joyhat(godotJoyId, hatX, hatY); + handleJoystickHatEvent(godotJoyId, hatX, hatY); } } return true; @@ -284,10 +302,12 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { int[] deviceIds = mInputManager.getInputDeviceIds(); for (int deviceId : deviceIds) { InputDevice device = mInputManager.getInputDevice(deviceId); - if (DEBUG) { - Log.v(TAG, String.format("init() deviceId:%d, Name:%s\n", deviceId, device.getName())); + if (device != null) { + if (DEBUG) { + Log.v(TAG, String.format("init() deviceId:%d, Name:%s\n", deviceId, device.getName())); + } + onInputDeviceAdded(deviceId); } - onInputDeviceAdded(deviceId); } } @@ -364,7 +384,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { } mJoysticksDevices.put(deviceId, joystick); - GodotLib.joyconnectionchanged(id, true, joystick.name); + handleJoystickConnectionChangedEvent(id, true, joystick.name); } @Override @@ -378,7 +398,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { final int godotJoyId = mJoystickIds.get(deviceId); mJoystickIds.delete(deviceId); mJoysticksDevices.delete(deviceId); - GodotLib.joyconnectionchanged(godotJoyId, false, ""); + handleJoystickConnectionChangedEvent(godotJoyId, false, ""); } @Override @@ -482,15 +502,15 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { } } - static boolean handleMotionEvent(final MotionEvent event) { + boolean handleMotionEvent(final MotionEvent event) { return handleMotionEvent(event, event.getActionMasked()); } - static boolean handleMotionEvent(final MotionEvent event, int eventActionOverride) { + boolean handleMotionEvent(final MotionEvent event, int eventActionOverride) { return handleMotionEvent(event, eventActionOverride, false); } - static boolean handleMotionEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { + boolean handleMotionEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { if (isMouseEvent(event)) { return handleMouseEvent(event, eventActionOverride, doubleTap); } @@ -523,19 +543,19 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { return (float)Math.cos(orientation) * tiltMult; } - static boolean handleMouseEvent(final MotionEvent event) { + boolean handleMouseEvent(final MotionEvent event) { return handleMouseEvent(event, event.getActionMasked()); } - static boolean handleMouseEvent(final MotionEvent event, int eventActionOverride) { + boolean handleMouseEvent(final MotionEvent event, int eventActionOverride) { return handleMouseEvent(event, eventActionOverride, false); } - static boolean handleMouseEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { + boolean handleMouseEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { return handleMouseEvent(event, eventActionOverride, event.getButtonState(), doubleTap); } - static boolean handleMouseEvent(final MotionEvent event, int eventActionOverride, int buttonMaskOverride, boolean doubleTap) { + boolean handleMouseEvent(final MotionEvent event, int eventActionOverride, int buttonMaskOverride, boolean doubleTap) { final float x = event.getX(); final float y = event.getY(); @@ -564,11 +584,11 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { return handleMouseEvent(eventActionOverride, buttonMaskOverride, x, y, horizontalFactor, verticalFactor, doubleTap, sourceMouseRelative, pressure, getEventTiltX(event), getEventTiltY(event)); } - static boolean handleMouseEvent(int eventAction, boolean sourceMouseRelative) { + boolean handleMouseEvent(int eventAction, boolean sourceMouseRelative) { return handleMouseEvent(eventAction, 0, 0f, 0f, 0f, 0f, false, sourceMouseRelative, 1f, 0f, 0f); } - static boolean handleMouseEvent(int eventAction, int buttonsMask, float x, float y, float deltaX, float deltaY, boolean doubleClick, boolean sourceMouseRelative, float pressure, float tiltX, float tiltY) { + boolean handleMouseEvent(int eventAction, int buttonsMask, float x, float y, float deltaX, float deltaY, boolean doubleClick, boolean sourceMouseRelative, float pressure, float tiltX, float tiltY) { // Fix the buttonsMask switch (eventAction) { case MotionEvent.ACTION_CANCEL: @@ -584,6 +604,7 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { break; } + final int updatedButtonsMask = buttonsMask; // We don't handle ACTION_BUTTON_PRESS and ACTION_BUTTON_RELEASE events as they typically // follow ACTION_DOWN and ACTION_UP events. As such, handling them would result in duplicate // stream of events to the engine. @@ -596,22 +617,26 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { case MotionEvent.ACTION_HOVER_MOVE: case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_SCROLL: { - GodotLib.dispatchMouseEvent(eventAction, buttonsMask, x, y, deltaX, deltaY, doubleClick, sourceMouseRelative, pressure, tiltX, tiltY); + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.dispatchMouseEvent(eventAction, updatedButtonsMask, x, y, deltaX, deltaY, doubleClick, sourceMouseRelative, pressure, tiltX, tiltY)); + } else { + GodotLib.dispatchMouseEvent(eventAction, updatedButtonsMask, x, y, deltaX, deltaY, doubleClick, sourceMouseRelative, pressure, tiltX, tiltY); + } return true; } } return false; } - static boolean handleTouchEvent(final MotionEvent event) { + boolean handleTouchEvent(final MotionEvent event) { return handleTouchEvent(event, event.getActionMasked()); } - static boolean handleTouchEvent(final MotionEvent event, int eventActionOverride) { + boolean handleTouchEvent(final MotionEvent event, int eventActionOverride) { return handleTouchEvent(event, eventActionOverride, false); } - static boolean handleTouchEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { + boolean handleTouchEvent(final MotionEvent event, int eventActionOverride, boolean doubleTap) { final int pointerCount = event.getPointerCount(); if (pointerCount == 0) { return true; @@ -636,10 +661,70 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_POINTER_UP: case MotionEvent.ACTION_POINTER_DOWN: { - GodotLib.dispatchTouchEvent(eventActionOverride, actionPointerId, pointerCount, positions, doubleTap); + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.dispatchTouchEvent(eventActionOverride, actionPointerId, pointerCount, positions, doubleTap)); + } else { + GodotLib.dispatchTouchEvent(eventActionOverride, actionPointerId, pointerCount, positions, doubleTap); + } return true; } } return false; } + + void handleMagnifyEvent(float x, float y, float factor) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.magnify(x, y, factor)); + } else { + GodotLib.magnify(x, y, factor); + } + } + + void handlePanEvent(float x, float y, float deltaX, float deltaY) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.pan(x, y, deltaX, deltaY)); + } else { + GodotLib.pan(x, y, deltaX, deltaY); + } + } + + private void handleJoystickButtonEvent(int device, int button, boolean pressed) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.joybutton(device, button, pressed)); + } else { + GodotLib.joybutton(device, button, pressed); + } + } + + private void handleJoystickAxisEvent(int device, int axis, float value) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.joyaxis(device, axis, value)); + } else { + GodotLib.joyaxis(device, axis, value); + } + } + + private void handleJoystickHatEvent(int device, int hatX, int hatY) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.joyhat(device, hatX, hatY)); + } else { + GodotLib.joyhat(device, hatX, hatY); + } + } + + private void handleJoystickConnectionChangedEvent(int device, boolean connected, String name) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.joyconnectionchanged(device, connected, name)); + } else { + GodotLib.joyconnectionchanged(device, connected, name); + } + } + + void handleKeyEvent(int physicalKeycode, int unicode, int keyLabel, boolean pressed, boolean echo) { + if (shouldDispatchInputToRenderThread()) { + mRenderView.queueOnRenderThread(() -> GodotLib.key(physicalKeycode, unicode, keyLabel, pressed, echo)); + } else { + GodotLib.key(physicalKeycode, unicode, keyLabel, pressed, echo); + } + } } diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java index 06b565c30f..e545669970 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -93,8 +93,8 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene @Override public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) { for (int i = 0; i < count; ++i) { - GodotLib.key(KeyEvent.KEYCODE_DEL, 0, 0, true, false); - GodotLib.key(KeyEvent.KEYCODE_DEL, 0, 0, false, false); + mRenderView.getInputHandler().handleKeyEvent(KeyEvent.KEYCODE_DEL, 0, 0, true, false); + mRenderView.getInputHandler().handleKeyEvent(KeyEvent.KEYCODE_DEL, 0, 0, false, false); if (mHasSelection) { mHasSelection = false; @@ -115,8 +115,8 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene // Return keys are handled through action events continue; } - GodotLib.key(0, character, 0, true, false); - GodotLib.key(0, character, 0, false, false); + mRenderView.getInputHandler().handleKeyEvent(0, character, 0, true, false); + mRenderView.getInputHandler().handleKeyEvent(0, character, 0, false, false); } } @@ -127,18 +127,16 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene if (characters != null) { for (int i = 0; i < characters.length(); i++) { final int character = characters.codePointAt(i); - GodotLib.key(0, character, 0, true, false); - GodotLib.key(0, character, 0, false, false); + mRenderView.getInputHandler().handleKeyEvent(0, character, 0, true, false); + mRenderView.getInputHandler().handleKeyEvent(0, character, 0, false, false); } } } if (pActionID == EditorInfo.IME_ACTION_DONE) { // Enter key has been pressed - mRenderView.queueOnRenderThread(() -> { - GodotLib.key(KeyEvent.KEYCODE_ENTER, 0, 0, true, false); - GodotLib.key(KeyEvent.KEYCODE_ENTER, 0, 0, false, false); - }); + mRenderView.getInputHandler().handleKeyEvent(KeyEvent.KEYCODE_ENTER, 0, 0, true, false); + mRenderView.getInputHandler().handleKeyEvent(KeyEvent.KEYCODE_ENTER, 0, 0, false, false); mRenderView.getView().requestFocus(); return true; } diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt b/platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt index 69748c0a8d..d39f2309b8 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/BenchmarkUtils.kt @@ -81,7 +81,8 @@ fun beginBenchmarkMeasure(scope: String, label: String) { * * * Note: Only enabled on 'editorDev' build variant. */ -fun endBenchmarkMeasure(scope: String, label: String) { +@JvmOverloads +fun endBenchmarkMeasure(scope: String, label: String, dumpBenchmark: Boolean = false) { if (BuildConfig.FLAVOR != "editor" || BuildConfig.BUILD_TYPE != "dev") { return } @@ -93,6 +94,10 @@ fun endBenchmarkMeasure(scope: String, label: String) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { Trace.endAsyncSection("[$scope] $label", 0) } + + if (dumpBenchmark) { + dumpBenchmark() + } } /** @@ -102,11 +107,11 @@ fun endBenchmarkMeasure(scope: String, label: String) { * * Note: Only enabled on 'editorDev' build variant. */ @JvmOverloads -fun dumpBenchmark(fileAccessHandler: FileAccessHandler?, filepath: String? = benchmarkFile) { +fun dumpBenchmark(fileAccessHandler: FileAccessHandler? = null, filepath: String? = benchmarkFile) { if (BuildConfig.FLAVOR != "editor" || BuildConfig.BUILD_TYPE != "dev") { return } - if (!useBenchmark) { + if (!useBenchmark || benchmarkTracker.isEmpty()) { return } diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index 40068745d6..87d4281c5a 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -67,6 +67,13 @@ static AndroidInputHandler *input_handler = nullptr; static GodotJavaWrapper *godot_java = nullptr; static GodotIOJavaWrapper *godot_io_java = nullptr; +enum StartupStep { + STEP_TERMINATED = -1, + STEP_SETUP, + STEP_SHOW_LOGO, + STEP_STARTED +}; + static SafeNumeric<int> step; // Shared between UI and render threads static Size2 new_size; @@ -76,7 +83,7 @@ static Vector3 magnetometer; static Vector3 gyroscope; static void _terminate(JNIEnv *env, bool p_restart = false) { - step.set(-1); // Ensure no further steps are attempted and no further events are sent + step.set(STEP_TERMINATED); // Ensure no further steps are attempted and no further events are sent // lets cleanup // Unregister android plugins @@ -203,7 +210,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, j os_android->set_display_size(Size2i(p_width, p_height)); // No need to reset the surface during startup - if (step.get() > 0) { + if (step.get() > STEP_SETUP) { if (p_surface) { ANativeWindow *native_window = ANativeWindow_fromSurface(env, p_surface); os_android->set_native_window(native_window); @@ -216,7 +223,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, j JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jclass clazz, jobject p_surface) { if (os_android) { - if (step.get() == 0) { + if (step.get() == STEP_SETUP) { // During startup if (p_surface) { ANativeWindow *native_window = ANativeWindow_fromSurface(env, p_surface); @@ -230,7 +237,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *en } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jclass clazz) { - if (step.get() == 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -244,20 +251,26 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_ttsCallback(JNIEnv *e } JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jclass clazz) { - if (step.get() == -1) { + if (step.get() == STEP_TERMINATED) { return true; } - if (step.get() == 0) { + if (step.get() == STEP_SETUP) { // Since Godot is initialized on the UI thread, main_thread_id was set to that thread's id, // but for Godot purposes, the main thread is the one running the game loop - Main::setup2(); + Main::setup2(false); // The logo is shown in the next frame otherwise we run into rendering issues input_handler = new AndroidInputHandler(); step.increment(); return true; } - if (step.get() == 1) { + if (step.get() == STEP_SHOW_LOGO) { + Main::setup_boot_logo(); + step.increment(); + return true; + } + + if (step.get() == STEP_STARTED) { if (Main::start() != EXIT_SUCCESS) { return true; // should exit instead and print the error } @@ -283,7 +296,7 @@ JNIEXPORT jboolean JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_dispatchMouseEvent(JNIEnv *env, jclass clazz, jint p_event_type, jint p_button_mask, jfloat p_x, jfloat p_y, jfloat p_delta_x, jfloat p_delta_y, jboolean p_double_click, jboolean p_source_mouse_relative, jfloat p_pressure, jfloat p_tilt_x, jfloat p_tilt_y) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -292,7 +305,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_dispatchMouseEvent(JN // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_dispatchTouchEvent(JNIEnv *env, jclass clazz, jint ev, jint pointer, jint pointer_count, jfloatArray position, jboolean p_double_tap) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -313,7 +326,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_dispatchTouchEvent(JN // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnify(JNIEnv *env, jclass clazz, jfloat p_x, jfloat p_y, jfloat p_factor) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } input_handler->process_magnify(Point2(p_x, p_y), p_factor); @@ -321,7 +334,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnify(JNIEnv *env, // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_pan(JNIEnv *env, jclass clazz, jfloat p_x, jfloat p_y, jfloat p_delta_x, jfloat p_delta_y) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } input_handler->process_pan(Point2(p_x, p_y), Vector2(p_delta_x, p_delta_y)); @@ -329,7 +342,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_pan(JNIEnv *env, jcla // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jclass clazz, jint p_device, jint p_button, jboolean p_pressed) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -344,7 +357,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jclass clazz, jint p_device, jint p_axis, jfloat p_value) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -359,7 +372,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, jclass clazz, jint p_device, jint p_hat_x, jint p_hat_y) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -396,7 +409,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged( // Called on the UI thread JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jclass clazz, jint p_physical_keycode, jint p_unicode, jint p_key_label, jboolean p_pressed, jboolean p_echo) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } input_handler->process_key_event(p_physical_keycode, p_unicode, p_key_label, p_pressed, p_echo); @@ -419,7 +432,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv *env } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, jclass clazz) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -427,7 +440,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, jclass clazz) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -516,7 +529,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_requestPermissionResu } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNIEnv *env, jclass clazz) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -528,7 +541,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNI } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIEnv *env, jclass clazz) { - if (step.get() <= 0) { + if (step.get() <= STEP_SETUP) { return; } @@ -536,4 +549,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIE os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PAUSED); } } + +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_updateInputDispatchSettings(JNIEnv *env, jclass clazz, jboolean p_use_accumulated_input, jboolean p_use_input_buffering) { + if (Input::get_singleton()) { + Input::get_singleton()->set_use_accumulated_input(p_use_accumulated_input); + Input::get_singleton()->set_use_input_buffering(p_use_input_buffering); + } +} } diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h index f32ffc291a..852c475e7e 100644 --- a/platform/android/java_godot_lib_jni.h +++ b/platform/android/java_godot_lib_jni.h @@ -69,6 +69,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_requestPermissionResu JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onNightModeChanged(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIEnv *env, jclass clazz); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_updateInputDispatchSettings(JNIEnv *env, jclass clazz, jboolean p_use_accumulated_input, jboolean p_use_input_buffering); } #endif // JAVA_GODOT_LIB_JNI_H diff --git a/platform/ios/display_server_ios.mm b/platform/ios/display_server_ios.mm index a454dd5ba0..802fbefc0d 100644 --- a/platform/ios/display_server_ios.mm +++ b/platform/ios/display_server_ios.mm @@ -91,6 +91,7 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode ERR_PRINT(vformat("Failed to initialize %s context", rendering_driver)); memdelete(rendering_context); rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; return; } @@ -107,7 +108,13 @@ DisplayServerIOS::DisplayServerIOS(const String &p_rendering_driver, WindowMode rendering_context->window_set_vsync_mode(MAIN_WINDOW_ID, p_vsync_mode); rendering_device = memnew(RenderingDevice); - rendering_device->initialize(rendering_context, MAIN_WINDOW_ID); + if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) { + rendering_device = nullptr; + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } rendering_device->screen_create(MAIN_WINDOW_ID); RendererCompositorRD::make_current(); diff --git a/platform/ios/doc_classes/EditorExportPlatformIOS.xml b/platform/ios/doc_classes/EditorExportPlatformIOS.xml index 20c1647843..87994ef22b 100644 --- a/platform/ios/doc_classes/EditorExportPlatformIOS.xml +++ b/platform/ios/doc_classes/EditorExportPlatformIOS.xml @@ -41,6 +41,9 @@ <member name="application/export_project_only" type="bool" setter="" getter=""> If [code]true[/code], exports iOS project files without building an XCArchive or [code].ipa[/code] file. If [code]false[/code], exports iOS project files and builds an XCArchive and [code].ipa[/code] file at the same time. When combining Godot with Fastlane or other build pipelines, you may want to set this to [code]true[/code]. </member> + <member name="application/generate_simulator_library_if_missing" type="bool" setter="" getter=""> + If [code]true[/code], and ARM64 simulator library is missing from the export template, it is automatically generated from ARM64 device library. + </member> <member name="application/icon_interpolation" type="int" setter="" getter=""> Interpolation method used to resize application icon. </member> diff --git a/platform/ios/export/export_plugin.cpp b/platform/ios/export/export_plugin.cpp index 2194804b3b..490f73a36d 100644 --- a/platform/ios/export/export_plugin.cpp +++ b/platform/ios/export/export_plugin.cpp @@ -40,6 +40,8 @@ #include "editor/editor_paths.h" #include "editor/editor_string_names.h" #include "editor/export/editor_export.h" +#include "editor/export/lipo.h" +#include "editor/export/macho.h" #include "editor/import/resource_importer_texture_settings.h" #include "editor/plugins/script_editor_plugin.h" #include "editor/themes/editor_scale.h" @@ -248,7 +250,7 @@ bool EditorExportPlatformIOS::get_export_option_visibility(const EditorExportPre } bool advanced_options_enabled = p_preset->are_advanced_options_enabled(); - if (p_option.begins_with("privacy")) { + if (p_option.begins_with("privacy") || p_option == "application/generate_simulator_library_if_missing") { return advanced_options_enabled; } @@ -288,6 +290,7 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "application/export_project_only"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "application/delete_old_export_files_unconditionally"), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "application/generate_simulator_library_if_missing"), true)); Vector<PluginConfigIOS> found_plugins = get_plugins(); for (int i = 0; i < found_plugins.size(); i++) { @@ -1150,6 +1153,167 @@ struct ExportLibsData { String dest_dir; }; +bool EditorExportPlatformIOS::_archive_has_arm64(const String &p_path, uint32_t *r_cputype, uint32_t *r_cpusubtype) const { + bool has_arm64_image = false; + if (FileAccess::exists(p_path)) { + if (LipO::is_lipo(p_path)) { + // LipO. + Ref<LipO> lipo; + lipo.instantiate(); + if (lipo->open_file(p_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + if (lipo->get_arch_cputype(i) == 0x100000c && lipo->get_arch_cpusubtype(i) == 0) { + has_arm64_image = true; + break; + } + } + } + lipo->close(); + } else { + // Single architecture archive. + Ref<FileAccess> sim_f = FileAccess::open(p_path, FileAccess::READ); + if (sim_f.is_valid()) { + char magic[9] = {}; + sim_f->get_buffer((uint8_t *)&magic[0], 8); + if (String(magic) == String("!<arch>\n")) { + while (!sim_f->eof_reached()) { + // Read file metadata. + char name_short[17] = {}; + char size_short[11] = {}; + sim_f->get_buffer((uint8_t *)&name_short[0], 16); + sim_f->seek(sim_f->get_position() + 12 + 6 + 6 + 8); // Skip modification time, owner ID, group ID, file mode. + sim_f->get_buffer((uint8_t *)&size_short[0], 10); + sim_f->seek(sim_f->get_position() + 2); // Skip end marker. + + int64_t file_size = String(size_short).to_int(); + int64_t next_off = sim_f->get_position() + file_size; + + String name = String(name_short); // Skip extended name. + if (name.is_empty() || file_size == 0) { + break; + } + if (name.begins_with("#1/")) { + int64_t name_len = String(name_short).replace("#1/", "").to_int(); + sim_f->seek(sim_f->get_position() + name_len); + } + + // Read file content. + uint32_t obj_magic = sim_f->get_32(); + + bool swap = (obj_magic == 0xcffaedfe || obj_magic == 0xcefaedfe); + if (obj_magic == 0xcefaedfe || obj_magic == 0xfeedface || obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + uint32_t cputype = sim_f->get_32(); + uint32_t cpusubtype = sim_f->get_32(); + if (swap) { + cputype = BSWAP32(cputype); + cpusubtype = BSWAP32(cpusubtype); + } + if (r_cputype) { + *r_cputype = cputype; + } + if (r_cpusubtype) { + *r_cpusubtype = cpusubtype; + } + if (cputype == 0x100000c && cpusubtype == 0) { + has_arm64_image = true; + } + break; + } + sim_f->seek(next_off); + } + } + sim_f->close(); + } + } + } + return has_arm64_image; +} + +int EditorExportPlatformIOS::_archive_convert_to_simulator(const String &p_path) const { + int commands_patched = 0; + Ref<FileAccess> sim_f = FileAccess::open(p_path, FileAccess::READ_WRITE); + if (sim_f.is_valid()) { + char magic[9] = {}; + sim_f->get_buffer((uint8_t *)&magic[0], 8); + if (String(magic) == String("!<arch>\n")) { + while (!sim_f->eof_reached()) { + // Read file metadata. + char name_short[17] = {}; + char size_short[11] = {}; + sim_f->get_buffer((uint8_t *)&name_short[0], 16); + sim_f->seek(sim_f->get_position() + 12 + 6 + 6 + 8); // Skip modification time, owner ID, group ID, file mode. + sim_f->get_buffer((uint8_t *)&size_short[0], 10); + sim_f->seek(sim_f->get_position() + 2); // Skip end marker. + + int64_t file_size = String(size_short).to_int(); + int64_t next_off = sim_f->get_position() + file_size; + + String name = String(name_short); // Skip extended name. + if (name.is_empty() || file_size == 0) { + break; + } + if (name.begins_with("#1/")) { + int64_t name_len = String(name_short).replace("#1/", "").to_int(); + sim_f->seek(sim_f->get_position() + name_len); + } + + // Read file content. + uint32_t obj_magic = sim_f->get_32(); + + bool swap = (obj_magic == 0xcffaedfe || obj_magic == 0xcefaedfe); + if (obj_magic == 0xcefaedfe || obj_magic == 0xfeedface || obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + uint32_t cputype = sim_f->get_32(); + uint32_t cpusubtype = sim_f->get_32(); + uint32_t filetype = sim_f->get_32(); + uint32_t ncmds = sim_f->get_32(); + sim_f->get_32(); // Commands total size. + sim_f->get_32(); // Commands flags. + if (obj_magic == 0xcffaedfe || obj_magic == 0xfeedfacf) { + sim_f->get_32(); // Reserved, 64-bit only. + } + if (swap) { + ncmds = BSWAP32(ncmds); + cputype = BSWAP32(cputype); + cpusubtype = BSWAP32(cpusubtype); + filetype = BSWAP32(filetype); + } + if (cputype == 0x100000C && cpusubtype == 0 && filetype == 1) { + // ARM64, object file. + for (uint32_t i = 0; i < ncmds; i++) { + int64_t cmdofs = sim_f->get_position(); + uint32_t cmdid = sim_f->get_32(); + uint32_t cmdsize = sim_f->get_32(); + if (swap) { + cmdid = BSWAP32(cmdid); + cmdsize = BSWAP32(cmdsize); + } + if (cmdid == MachO::LoadCommandID::LC_BUILD_VERSION) { + int64_t platform = sim_f->get_32(); + if (swap) { + platform = BSWAP32(platform); + } + if (platform == MachO::PlatformID::PLATFORM_IOS) { + sim_f->seek(cmdofs + 4 + 4); + uint32_t new_id = MachO::PlatformID::PLATFORM_IOSSIMULATOR; + if (swap) { + new_id = BSWAP32(new_id); + } + sim_f->store_32(new_id); + commands_patched++; + } + } + sim_f->seek(cmdofs + cmdsize); + } + } + } + sim_f->seek(next_off); + } + } + sim_f->close(); + } + return commands_patched; +} + void EditorExportPlatformIOS::_check_xcframework_content(const String &p_path, int &r_total_libs, int &r_static_libs, int &r_dylibs, int &r_frameworks) const { Ref<PList> plist; plist.instantiate(); @@ -2146,7 +2310,7 @@ Error EditorExportPlatformIOS::_export_project_helper(const Ref<EditorExportPres ret = unzGoToNextFile(src_pkg_zip); } - /* we're done with our source zip */ + // We're done with our source zip. unzClose(src_pkg_zip); if (!found_library) { @@ -2154,6 +2318,80 @@ Error EditorExportPlatformIOS::_export_project_helper(const Ref<EditorExportPres return ERR_FILE_NOT_FOUND; } + // Check and generate missing ARM64 simulator library. + if (p_preset->get("application/generate_simulator_library_if_missing").operator bool()) { + String sim_lib_path = dest_dir + String(binary_name + ".xcframework").path_join("ios-arm64_x86_64-simulator").path_join("libgodot.a"); + String dev_lib_path = dest_dir + String(binary_name + ".xcframework").path_join("ios-arm64").path_join("libgodot.a"); + String tmp_lib_path = EditorPaths::get_singleton()->get_cache_dir().path_join(binary_name + "_lipo_"); + uint32_t cputype = 0; + uint32_t cpusubtype = 0; + if (!_archive_has_arm64(sim_lib_path, &cputype, &cpusubtype) && _archive_has_arm64(dev_lib_path) && FileAccess::exists(dev_lib_path)) { + add_message(EXPORT_MESSAGE_INFO, TTR("Export"), TTR("ARM64 simulator library, generating from device library.")); + + Vector<String> tmp_lib_files; + Vector<Vector2i> tmp_lib_cputypes; + // Extract/copy simulator lib. + if (FileAccess::exists(sim_lib_path)) { + if (LipO::is_lipo(sim_lib_path)) { + Ref<LipO> lipo; + lipo.instantiate(); + if (lipo->open_file(sim_lib_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + lipo->extract_arch(i, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(lipo->get_arch_cputype(i), lipo->get_arch_cpusubtype(i))); + } + } + } else { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + tmp_app_path->copy(sim_lib_path, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(cputype, cpusubtype)); + } + } + // Copy device lib. + if (LipO::is_lipo(dev_lib_path)) { + Ref<LipO> lipo; + lipo.instantiate(); + if (lipo->open_file(dev_lib_path)) { + for (int i = 0; i < lipo->get_arch_count(); i++) { + if (lipo->get_arch_cputype(i) == 0x100000c && lipo->get_arch_cpusubtype(i) == 0) { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + lipo->extract_arch(i, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(0x100000c, 0)); // ARM64. + break; + } + } + } + } else { + const String &f_name = tmp_lib_path + itos(tmp_lib_files.size()); + tmp_app_path->copy(dev_lib_path, f_name); + tmp_lib_files.push_back(f_name); + tmp_lib_cputypes.push_back(Vector2i(0x100000c, 0)); // ARM64. + } + + // Patch device lib. + int patch_count = _archive_convert_to_simulator(tmp_lib_path + itos(tmp_lib_files.size() - 1)); + if (patch_count == 0) { + add_message(EXPORT_MESSAGE_WARNING, TTR("Export"), TTR("Unable to generate ARM64 simulator library.")); + } else { + // Repack. + Ref<LipO> lipo; + lipo.instantiate(); + lipo->create_file(sim_lib_path, tmp_lib_files, tmp_lib_cputypes); + } + + // Cleanup. + for (const String &E : tmp_lib_files) { + tmp_app_path->remove(E); + } + } + } + + // Generate translations files. + Dictionary appnames = GLOBAL_GET("application/config/name_localized"); Dictionary camera_usage_descriptions = p_preset->get("privacy/camera_usage_description_localized"); Dictionary microphone_usage_descriptions = p_preset->get("privacy/microphone_usage_description_localized"); diff --git a/platform/ios/export/export_plugin.h b/platform/ios/export/export_plugin.h index 197f27da76..1964906c27 100644 --- a/platform/ios/export/export_plugin.h +++ b/platform/ios/export/export_plugin.h @@ -135,6 +135,8 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Vector<ExportArchitecture> _get_supported_architectures() const; Vector<String> _get_preset_architectures(const Ref<EditorExportPreset> &p_preset) const; + bool _archive_has_arm64(const String &p_path, uint32_t *r_cputype = nullptr, uint32_t *r_cpusubtype = nullptr) const; + int _archive_convert_to_simulator(const String &p_path) const; void _check_xcframework_content(const String &p_path, int &r_total_libs, int &r_static_libs, int &r_dylibs, int &r_frameworks) const; Error _convert_to_framework(const String &p_source, const String &p_destination, const String &p_id) const; diff --git a/platform/ios/export/logo.svg b/platform/ios/export/logo.svg index 47a72bcf49..5897f9f60f 100644 --- a/platform/ios/export/logo.svg +++ b/platform/ios/export/logo.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M1 23.27h2.504V12.61H1zm1.247-12.057c.784 0 1.398-.603 1.398-1.358 0-.764-.614-1.367-1.398-1.367-.774 0-1.388.603-1.388 1.367 0 .755.614 1.358 1.388 1.358zm9.594-2.695c-4.233 0-6.888 2.886-6.888 7.502s2.654 7.492 6.888 7.492c4.224 0 6.88-2.876 6.88-7.492s-2.656-7.502-6.88-7.502zm0 2.212c2.585 0 4.234 2.052 4.234 5.29 0 3.228-1.649 5.28-4.234 5.28-2.594 0-4.233-2.052-4.233-5.28 0-3.238 1.639-5.29 4.233-5.29zm7.936 8.458c.11 2.675 2.303 4.324 5.641 4.324 3.51 0 5.723-1.73 5.723-4.485 0-2.162-1.247-3.379-4.194-4.053l-1.67-.382c-1.78-.422-2.513-.985-2.513-1.95 0-1.208 1.106-2.012 2.745-2.012 1.66 0 2.796.814 2.916 2.172H30.9c-.06-2.554-2.172-4.284-5.37-4.284-3.158 0-5.4 1.74-5.4 4.314 0 2.072 1.267 3.36 3.942 3.973l1.88.442c1.83.433 2.575 1.036 2.575 2.082 0 1.207-1.217 2.072-2.967 2.072-1.77 0-3.107-.875-3.268-2.213h-2.514z" fill="#bfbfbf"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#bfbfbf" d="M1 23.27h2.504V12.61H1zm1.247-12.057c.784 0 1.398-.603 1.398-1.358 0-.764-.614-1.367-1.398-1.367-.774 0-1.388.603-1.388 1.367 0 .755.614 1.358 1.388 1.358zm9.594-2.695c-4.233 0-6.888 2.886-6.888 7.502s2.654 7.492 6.888 7.492c4.224 0 6.88-2.876 6.88-7.492s-2.656-7.502-6.88-7.502zm0 2.212c2.585 0 4.234 2.052 4.234 5.29 0 3.228-1.649 5.28-4.234 5.28-2.594 0-4.233-2.052-4.233-5.28 0-3.238 1.639-5.29 4.233-5.29zm7.936 8.458c.11 2.675 2.303 4.324 5.641 4.324 3.51 0 5.723-1.73 5.723-4.485 0-2.162-1.247-3.379-4.194-4.053l-1.67-.382c-1.78-.422-2.513-.985-2.513-1.95 0-1.208 1.106-2.012 2.745-2.012 1.66 0 2.796.814 2.916 2.172H30.9c-.06-2.554-2.172-4.284-5.37-4.284-3.158 0-5.4 1.74-5.4 4.314 0 2.072 1.267 3.36 3.942 3.973l1.88.442c1.83.433 2.575 1.036 2.575 2.082 0 1.207-1.217 2.072-2.967 2.072-1.77 0-3.107-.875-3.268-2.213h-2.514z"/></svg>
\ No newline at end of file diff --git a/platform/ios/export/run_icon.svg b/platform/ios/export/run_icon.svg index 859c58409e..9a9460bf49 100644 --- a/platform/ios/export/run_icon.svg +++ b/platform/ios/export/run_icon.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#bfbfbf" d="M.462 11.653H1.72V6.296H.462Zm.627-6.059a.687.687 0 0 0 .702-.682.688.688 0 0 0-.702-.687.687.687 0 0 0-.698.687c0 .38.309.682.698.682zM5.91 4.24c-2.127 0-3.461 1.45-3.461 3.77 0 2.32 1.333 3.765 3.461 3.765 2.123 0 3.457-1.445 3.457-3.765 0-2.32-1.334-3.77-3.457-3.77zm0 1.112c1.299 0 2.128 1.03 2.128 2.658 0 1.622-.829 2.653-2.128 2.653-1.304 0-2.127-1.03-2.127-2.653 0-1.627.823-2.658 2.127-2.658zm3.988 4.25c.055 1.344 1.157 2.173 2.835 2.173 1.764 0 2.876-.87 2.876-2.254 0-1.086-.627-1.698-2.108-2.037l-.839-.192c-.895-.212-1.263-.495-1.263-.98 0-.607.556-1.01 1.38-1.01.834 0 1.405.408 1.465 1.09h1.244c-.03-1.283-1.092-2.152-2.699-2.152-1.587 0-2.714.874-2.714 2.168 0 1.041.637 1.688 1.981 1.997l.945.222c.92.217 1.294.52 1.294 1.046 0 .606-.611 1.041-1.49 1.041-.89 0-1.562-.44-1.643-1.112H9.899Z" style="stroke-width:.502532;fill:#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="M.462 11.653H1.72V6.296H.462Zm.627-6.059a.687.687 0 0 0 .702-.682.688.688 0 0 0-.702-.687.687.687 0 0 0-.698.687c0 .38.309.682.698.682zM5.91 4.24c-2.127 0-3.461 1.45-3.461 3.77 0 2.32 1.333 3.765 3.461 3.765 2.123 0 3.457-1.445 3.457-3.765 0-2.32-1.334-3.77-3.457-3.77zm0 1.112c1.299 0 2.128 1.03 2.128 2.658 0 1.622-.829 2.653-2.128 2.653-1.304 0-2.127-1.03-2.127-2.653 0-1.627.823-2.658 2.127-2.658zm3.988 4.25c.055 1.344 1.157 2.173 2.835 2.173 1.764 0 2.876-.87 2.876-2.254 0-1.086-.627-1.698-2.108-2.037l-.839-.192c-.895-.212-1.263-.495-1.263-.98 0-.607.556-1.01 1.38-1.01.834 0 1.405.408 1.465 1.09h1.244c-.03-1.283-1.092-2.152-2.699-2.152-1.587 0-2.714.874-2.714 2.168 0 1.041.637 1.688 1.981 1.997l.945.222c.92.217 1.294.52 1.294 1.046 0 .606-.611 1.041-1.49 1.041-.89 0-1.562-.44-1.643-1.112H9.899Z"/></svg>
\ No newline at end of file diff --git a/platform/linuxbsd/export/logo.svg b/platform/linuxbsd/export/logo.svg index e5f9f03e0c..c0d2ba1f21 100644 --- a/platform/linuxbsd/export/logo.svg +++ b/platform/linuxbsd/export/logo.svg @@ -1 +1 @@ -<svg height="32" width="32"><path d="M13 31h6s3 0 6-6c2.864-5.727-6-17-6-17h-6S3.775 18.55 7 25c3 6 6 6 6 6z" fill="#fff"/><path d="M15.876 28.636c-.05.322-.116.637-.204.941-.142.496-.35.993-.659 1.416.32.02.649.023.985.007a9.1 9.1 0 0 0 .985-.007c-.309-.423-.516-.92-.659-1.416a7.666 7.666 0 0 1-.203-.94l-.123.003c-.04 0-.081-.003-.122-.004z" fill="#333"/><path d="M21.693 21.916c-.629.01-.934.633-1.497.7-.694.08-1.128-.722-2.11-.123-.98.6-1.826 7.473.45 8.409 2.274.935 6.506-4.545 6.23-5.662-.275-1.116-1.146-.853-1.582-1.399-.436-.545.003-1.41-.995-1.82a1.246 1.246 0 0 0-.496-.105zm-11.461 0a1.315 1.315 0 0 0-.421.105c-.998.41-.56 1.275-.995 1.82-.436.546-1.31.283-1.586 1.4-.275 1.116 3.956 6.596 6.232 5.66 2.275-.935 1.429-7.808.448-8.408-.981-.6-1.415.204-2.11.122-.584-.068-.888-.739-1.568-.7z" fill="#f4bb37"/><path d="M15.998.99c-2.934 0-4.657 1.79-4.982 4.204-.324 2.414.198 2.856-.614 5.328-.813 2.472-4.456 6.71-4.37 10.62.026 1.217.166 2.27.41 3.192.3-.496.743-.846 1.066-.995.253-.117.375-.173.432-.194.008-.062.04-.205.098-.485.08-.386.387-.99.91-1.386-.005-.12-.01-.239-.013-.363-.06-3.033 3.073-6.318 3.65-8.236.577-1.917.326-2.114.421-2.59.096-.477.463-1.032.992-1.475a.23.23 0 0 1 .15-.06c.482-.005.965 1.75 1.898 1.752.933 0 1.419-2.141 1.956-1.692.529.443.896.998.992 1.474.095.477-.156.674.42 2.591.578 1.918 3.708 5.203 3.648 8.236-.003.123-.008.24-.014.36.526.396.834 1.002.914 1.389.058.28.09.423.098.485.057.021.18.08.432.197.323.15.764.499 1.063.995.244-.922.387-1.976.414-3.195.085-3.91-3.562-8.148-4.374-10.62-.813-2.472-.287-2.914-.611-5.328C20.659 2.78 18.933.99 15.998.99z" fill="#333"/></svg> +<svg width="32" height="32"><path fill="#fff" d="M13 31h6s3 0 6-6c2.864-5.727-6-17-6-17h-6S3.775 18.55 7 25c3 6 6 6 6 6z"/><path fill="#333" d="M15.876 28.636c-.05.322-.116.637-.204.941-.142.496-.35.993-.659 1.416.32.02.649.023.985.007a9.1 9.1 0 0 0 .985-.007c-.309-.423-.516-.92-.659-1.416a7.666 7.666 0 0 1-.203-.94l-.123.003c-.04 0-.081-.003-.122-.004z"/><path fill="#f4bb37" d="M21.693 21.916c-.629.01-.934.633-1.497.7-.694.08-1.128-.722-2.11-.123-.98.6-1.826 7.473.45 8.409 2.274.935 6.506-4.545 6.23-5.662-.275-1.116-1.146-.853-1.582-1.399-.436-.545.003-1.41-.995-1.82a1.246 1.246 0 0 0-.496-.105zm-11.461 0a1.315 1.315 0 0 0-.421.105c-.998.41-.56 1.275-.995 1.82-.436.546-1.31.283-1.586 1.4-.275 1.116 3.956 6.596 6.232 5.66 2.275-.935 1.429-7.808.448-8.408-.981-.6-1.415.204-2.11.122-.584-.068-.888-.739-1.568-.7z"/><path fill="#333" d="M15.998.99c-2.934 0-4.657 1.79-4.982 4.204-.324 2.414.198 2.856-.614 5.328-.813 2.472-4.456 6.71-4.37 10.62.026 1.217.166 2.27.41 3.192.3-.496.743-.846 1.066-.995.253-.117.375-.173.432-.194.008-.062.04-.205.098-.485.08-.386.387-.99.91-1.386-.005-.12-.01-.239-.013-.363-.06-3.033 3.073-6.318 3.65-8.236.577-1.917.326-2.114.421-2.59.096-.477.463-1.032.992-1.475a.23.23 0 0 1 .15-.06c.482-.005.965 1.75 1.898 1.752.933 0 1.419-2.141 1.956-1.692.529.443.896.998.992 1.474.095.477-.156.674.42 2.591.578 1.918 3.708 5.203 3.648 8.236-.003.123-.008.24-.014.36.526.396.834 1.002.914 1.389.058.28.09.423.098.485.057.021.18.08.432.197.323.15.764.499 1.063.995.244-.922.387-1.976.414-3.195.085-3.91-3.562-8.148-4.374-10.62-.813-2.472-.287-2.914-.611-5.328C20.659 2.78 18.933.99 15.998.99z"/></svg>
\ No newline at end of file diff --git a/platform/linuxbsd/export/run_icon.svg b/platform/linuxbsd/export/run_icon.svg index ad58bcd5c7..c7a2d6b0be 100644 --- a/platform/linuxbsd/export/run_icon.svg +++ b/platform/linuxbsd/export/run_icon.svg @@ -1 +1 @@ -<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M7.941 13.966a3.62 3.62 0 0 1-.096.444 2.129 2.129 0 0 1-.31.668c.15.01.305.01.464.003.16.008.314.007.465-.003a2.129 2.129 0 0 1-.31-.668 3.62 3.62 0 0 1-.097-.444zM8 .914c-1.386 0-2.2.845-2.353 1.985-.153 1.14.094 1.348-.29 2.515s-2.103 3.168-2.063 5.013c.012.575.078 1.072.194 1.507a1.25 1.25 0 0 1 .503-.47 4.37 4.37 0 0 1 .204-.09c.004-.03.019-.098.046-.23.038-.182.183-.467.43-.654a4.773 4.773 0 0 1-.006-.172c-.029-1.431 1.45-2.982 1.723-3.888.272-.905.154-.998.199-1.223.045-.225.218-.487.468-.696.253-.211.483.798.945.799.462 0 .692-1.01.945-.799.25.21.423.471.468.696.045.225-.073.318.199 1.223.272.906 1.75 2.457 1.722 3.888a4.773 4.773 0 0 0-.007.17 1.2 1.2 0 0 1 .432.656c.027.132.042.2.046.23.027.01.085.037.204.092.153.07.36.236.502.47.115-.435.183-.933.195-1.509.04-1.845-1.681-3.846-2.065-5.013-.383-1.167-.135-1.376-.288-2.515C10.2 1.759 9.385.914 7.999.914z" fill="#333" style="fill:#e0e0e0;fill-opacity:1"/><path d="M10.688 10.793c-.297.005-.441.299-.707.33-.328.038-.533-.34-.996-.058-.463.283-.862 3.528.212 3.97 1.074.442 3.072-2.146 2.942-2.673-.13-.527-.542-.403-.747-.66-.206-.258 0-.666-.47-.86a.588.588 0 0 0-.234-.05zm-5.411 0a.62.62 0 0 0-.199.05c-.47.193-.264.601-.47.859-.205.257-.618.133-.748.66s1.867 3.115 2.942 2.673c1.074-.442.674-3.687.211-3.97-.463-.283-.668.096-.995.058-.277-.032-.42-.349-.741-.33z" fill="#f4bb37" style="fill:#e0e0e0;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="M7.941 13.966a3.62 3.62 0 0 1-.096.444 2.129 2.129 0 0 1-.31.668c.15.01.305.01.464.003.16.008.314.007.465-.003a2.129 2.129 0 0 1-.31-.668 3.62 3.62 0 0 1-.097-.444zM8 .914c-1.386 0-2.2.845-2.353 1.985-.153 1.14.094 1.348-.29 2.515s-2.103 3.168-2.063 5.013c.012.575.078 1.072.194 1.507a1.25 1.25 0 0 1 .503-.47 4.37 4.37 0 0 1 .204-.09c.004-.03.019-.098.046-.23.038-.182.183-.467.43-.654a4.773 4.773 0 0 1-.006-.172c-.029-1.431 1.45-2.982 1.723-3.888.272-.905.154-.998.199-1.223.045-.225.218-.487.468-.696.253-.211.483.798.945.799.462 0 .692-1.01.945-.799.25.21.423.471.468.696.045.225-.073.318.199 1.223.272.906 1.75 2.457 1.722 3.888a4.773 4.773 0 0 0-.007.17 1.2 1.2 0 0 1 .432.656c.027.132.042.2.046.23.027.01.085.037.204.092.153.07.36.236.502.47.115-.435.183-.933.195-1.509.04-1.845-1.681-3.846-2.065-5.013-.383-1.167-.135-1.376-.288-2.515C10.2 1.759 9.385.914 7.999.914z"/><path fill="#e0e0e0" d="M10.688 10.793c-.297.005-.441.299-.707.33-.328.038-.533-.34-.996-.058-.463.283-.862 3.528.212 3.97 1.074.442 3.072-2.146 2.942-2.673-.13-.527-.542-.403-.747-.66-.206-.258 0-.666-.47-.86a.588.588 0 0 0-.234-.05zm-5.411 0a.62.62 0 0 0-.199.05c-.47.193-.264.601-.47.859-.205.257-.618.133-.748.66s1.867 3.115 2.942 2.673c1.074-.442.674-3.687.211-3.97-.463-.283-.668.096-.995.058-.277-.032-.42-.349-.741-.33z"/></svg>
\ No newline at end of file diff --git a/platform/linuxbsd/tts_linux.cpp b/platform/linuxbsd/tts_linux.cpp index 46291bb4da..6c1f49f046 100644 --- a/platform/linuxbsd/tts_linux.cpp +++ b/platform/linuxbsd/tts_linux.cpp @@ -149,12 +149,18 @@ void TTS_Linux::_speech_event(int p_msg_id, int p_type) { } PackedInt32Array breaks = TS->string_get_word_breaks(message.text, language); + int prev_end = -1; for (int i = 0; i < breaks.size(); i += 2) { const int start = breaks[i]; const int end = breaks[i + 1]; - text += message.text.substr(start, end - start + 1); + if (prev_end != -1 && prev_end != start) { + text += message.text.substr(prev_end, start - prev_end); + } + text += message.text.substr(start, end - start); text += "<mark name=\"" + String::num_int64(end, 10) + "\"/>"; + prev_end = end; } + spd_set_synthesis_voice(synth, message.voice.utf8().get_data()); spd_set_volume(synth, message.volume * 2 - 100); spd_set_voice_pitch(synth, (message.pitch - 1) * 100); diff --git a/platform/linuxbsd/wayland/display_server_wayland.cpp b/platform/linuxbsd/wayland/display_server_wayland.cpp index 3fad8c2987..adc9beed66 100644 --- a/platform/linuxbsd/wayland/display_server_wayland.cpp +++ b/platform/linuxbsd/wayland/display_server_wayland.cpp @@ -1111,6 +1111,28 @@ Key DisplayServerWayland::keyboard_get_keycode_from_physical(Key p_keycode) cons return key; } +void DisplayServerWayland::try_suspend() { + // Due to various reasons, we manually handle display synchronization by + // waiting for a frame event (request to draw) or, if available, the actual + // window's suspend status. When a window is suspended, we can avoid drawing + // altogether, either because the compositor told us that we don't need to or + // because the pace of the frame events became unreliable. + if (emulate_vsync) { + bool frame = wayland_thread.wait_frame_suspend_ms(1000); + if (!frame) { + suspended = true; + } + } else { + if (wayland_thread.is_suspended()) { + suspended = true; + } + } + + if (suspended) { + DEBUG_LOG_WAYLAND("Window suspended."); + } +} + void DisplayServerWayland::process_events() { wayland_thread.mutex.lock(); @@ -1193,30 +1215,32 @@ void DisplayServerWayland::process_events() { wayland_thread.keyboard_echo_keys(); if (!suspended) { - if (emulate_vsync) { - // Due to various reasons, we manually handle display synchronization by - // waiting for a frame event (request to draw) or, if available, the actual - // window's suspend status. When a window is suspended, we can avoid drawing - // altogether, either because the compositor told us that we don't need to or - // because the pace of the frame events became unreliable. - bool frame = wayland_thread.wait_frame_suspend_ms(1000); - if (!frame) { - suspended = true; + // Due to the way legacy suspension works, we have to treat low processor + // usage mode very differently than the regular one. + if (OS::get_singleton()->is_in_low_processor_usage_mode()) { + // NOTE: We must avoid committing a surface if we expect a new frame, as we + // might otherwise commit some inconsistent data (e.g. buffer scale). Note + // that if a new frame is expected it's going to be committed by the renderer + // soon anyways. + if (!RenderingServer::get_singleton()->has_changed()) { + // We _can't_ commit in a different thread (such as in the frame callback + // itself) because we would risk to step on the renderer's feet, which would + // cause subtle but severe issues, such as crashes on setups with explicit + // sync. This isn't normally a problem, as the renderer commits at every + // frame (which is what we need for atomic surface updates anyways), but in + // low processor usage mode that expectation is broken. When it's on, our + // frame rate stops being constant. This also reflects in the frame + // information we use for legacy suspension. In order to avoid issues, let's + // manually commit all surfaces, so that we can get fresh frame data. + wayland_thread.commit_surfaces(); + try_suspend(); } } else { - if (wayland_thread.is_suspended()) { - suspended = true; - } - } - - if (suspended) { - DEBUG_LOG_WAYLAND("Window suspended."); - } - } else { - if (wayland_thread.get_reset_frame()) { - // At last, a sign of life! We're no longer suspended. - suspended = false; + try_suspend(); } + } else if (wayland_thread.get_reset_frame()) { + // At last, a sign of life! We're no longer suspended. + suspended = false; } #ifdef DBUS_ENABLED @@ -1445,7 +1469,14 @@ DisplayServerWayland::DisplayServerWayland(const String &p_rendering_driver, Win #ifdef RD_ENABLED if (rendering_context) { rendering_device = memnew(RenderingDevice); - rendering_device->initialize(rendering_context, MAIN_WINDOW_ID); + if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) { + memdelete(rendering_device); + rendering_device = nullptr; + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } rendering_device->screen_create(MAIN_WINDOW_ID); RendererCompositorRD::make_current(); diff --git a/platform/linuxbsd/wayland/display_server_wayland.h b/platform/linuxbsd/wayland/display_server_wayland.h index f02640a12e..e611533664 100644 --- a/platform/linuxbsd/wayland/display_server_wayland.h +++ b/platform/linuxbsd/wayland/display_server_wayland.h @@ -154,6 +154,8 @@ class DisplayServerWayland : public DisplayServer { virtual void _show_window(); + void try_suspend(); + public: virtual bool has_feature(Feature p_feature) const override; diff --git a/platform/linuxbsd/wayland/wayland_thread.cpp b/platform/linuxbsd/wayland/wayland_thread.cpp index 63a8db07df..7bdc75db29 100644 --- a/platform/linuxbsd/wayland/wayland_thread.cpp +++ b/platform/linuxbsd/wayland/wayland_thread.cpp @@ -968,7 +968,6 @@ void WaylandThread::_frame_wl_callback_on_done(void *data, struct wl_callback *w ws->frame_callback = wl_surface_frame(ws->wl_surface), wl_callback_add_listener(ws->frame_callback, &frame_wl_callback_listener, ws); - wl_surface_commit(ws->wl_surface); if (ws->wl_surface && ws->buffer_scale_changed) { // NOTE: We're only now setting the buffer scale as the idea is to get this @@ -980,11 +979,6 @@ void WaylandThread::_frame_wl_callback_on_done(void *data, struct wl_callback *w // rendering if needed. wl_surface_set_buffer_scale(ws->wl_surface, window_state_get_preferred_buffer_scale(ws)); } - - // NOTE: Remember to set here also other buffer-dependent states (e.g. opaque - // region) if used, to be as close as possible to an atomic surface update. - // Ideally we'd only have one surface commit, but it's not really doable given - // the current state of things. } void WaylandThread::_wl_surface_on_leave(void *data, struct wl_surface *wl_surface, struct wl_output *wl_output) { @@ -2055,9 +2049,14 @@ void WaylandThread::_wp_relative_pointer_on_relative_motion(void *data, struct z PointerData &pd = ss->pointer_data_buffer; + WindowState *ws = wl_surface_get_window_state(ss->pointed_surface); + ERR_FAIL_NULL(ws); + pd.relative_motion.x = wl_fixed_to_double(dx); pd.relative_motion.y = wl_fixed_to_double(dy); + pd.relative_motion *= window_state_get_scale_factor(ws); + pd.relative_motion_time = uptime_lo; } @@ -3241,10 +3240,6 @@ void WaylandThread::window_create(DisplayServer::WindowID p_window_id, int p_wid ws.frame_callback = wl_surface_frame(ws.wl_surface); wl_callback_add_listener(ws.frame_callback, &frame_wl_callback_listener, &ws); - // NOTE: This commit is only called once to start the whole frame callback - // "loop". - wl_surface_commit(ws.wl_surface); - if (registry.xdg_exporter) { ws.xdg_exported = zxdg_exporter_v1_export(registry.xdg_exporter, ws.wl_surface); zxdg_exported_v1_add_listener(ws.xdg_exported, &xdg_exported_listener, &ws); @@ -4120,6 +4115,10 @@ void WaylandThread::primary_set_text(const String &p_text) { wl_display_roundtrip(wl_display); } +void WaylandThread::commit_surfaces() { + wl_surface_commit(main_window.wl_surface); +} + void WaylandThread::set_frame() { frame = true; } diff --git a/platform/linuxbsd/wayland/wayland_thread.h b/platform/linuxbsd/wayland/wayland_thread.h index 75d03181e2..775ca71346 100644 --- a/platform/linuxbsd/wayland/wayland_thread.h +++ b/platform/linuxbsd/wayland/wayland_thread.h @@ -992,6 +992,8 @@ public: void primary_set_text(const String &p_text); + void commit_surfaces(); + void set_frame(); bool get_reset_frame(); bool wait_frame_suspend_ms(int p_timeout); diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index a605e664ce..edf3a40ccb 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -3040,7 +3040,7 @@ void DisplayServerX11::window_set_ime_active(const bool p_active, WindowID p_win XWindowAttributes xwa; XSync(x11_display, False); XGetWindowAttributes(x11_display, wd.x11_xim_window, &xwa); - if (xwa.map_state == IsViewable && _window_focus_check()) { + if (xwa.map_state == IsViewable) { _set_input_focus(wd.x11_xim_window, RevertToParent); } XSetICFocus(wd.xic); @@ -6262,7 +6262,14 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode #if defined(RD_ENABLED) if (rendering_context) { rendering_device = memnew(RenderingDevice); - rendering_device->initialize(rendering_context, MAIN_WINDOW_ID); + if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) { + memdelete(rendering_device); + rendering_device = nullptr; + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } rendering_device->screen_create(MAIN_WINDOW_ID); RendererCompositorRD::make_current(); diff --git a/platform/macos/SCsub b/platform/macos/SCsub index eb8524826f..c965e875c1 100644 --- a/platform/macos/SCsub +++ b/platform/macos/SCsub @@ -37,7 +37,7 @@ def generate_bundle(target, source, env): shutil.copy(target_bin, app_dir + "/Contents/MacOS/Godot") version = get_build_version(False) short_version = get_build_version(True) - with open(Dir("#misc/dist/macos").abspath + "/editor_info_plist.template", "rt") as fin: + with open(Dir("#misc/dist/macos").abspath + "/editor_info_plist.template", "rt", encoding="utf-8") as fin: with open(app_dir + "/Contents/Info.plist", "wt", encoding="utf-8", newline="\n") as fout: for line in fin: line = line.replace("$version", version) diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index a1a91345ac..da45391995 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -568,23 +568,7 @@ void DisplayServerMacOS::menu_callback(id p_sender) { } GodotMenuItem *value = [p_sender representedObject]; - if (value) { - if (value->max_states > 0) { - value->state++; - if (value->state >= value->max_states) { - value->state = 0; - } - } - - if (value->checkable_type == CHECKABLE_TYPE_CHECK_BOX) { - if ([p_sender state] == NSControlStateValueOff) { - [p_sender setState:NSControlStateValueOn]; - } else { - [p_sender setState:NSControlStateValueOff]; - } - } - if (value->callback.is_valid()) { MenuCall mc; mc.tag = value->meta; diff --git a/platform/macos/export/export_plugin.cpp b/platform/macos/export/export_plugin.cpp index 32278ba4a1..73e2f2d45b 100644 --- a/platform/macos/export/export_plugin.cpp +++ b/platform/macos/export/export_plugin.cpp @@ -30,10 +30,7 @@ #include "export_plugin.h" -#include "codesign.h" -#include "lipo.h" #include "logo_svg.gen.h" -#include "macho.h" #include "run_icon_svg.gen.h" #include "core/io/image_loader.h" @@ -43,6 +40,9 @@ #include "editor/editor_node.h" #include "editor/editor_paths.h" #include "editor/editor_string_names.h" +#include "editor/export/codesign.h" +#include "editor/export/lipo.h" +#include "editor/export/macho.h" #include "editor/import/resource_importer_texture_settings.h" #include "editor/themes/editor_scale.h" #include "scene/resources/image_texture.h" diff --git a/platform/macos/export/logo.svg b/platform/macos/export/logo.svg index 759583d76b..ec1b6ca5f6 100644 --- a/platform/macos/export/logo.svg +++ b/platform/macos/export/logo.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 25.6 25.6" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M.948 19.474V6.126c0-2.767 2.42-5.178 5.178-5.178h6.904s-2.992 7.506-2.992 13.233c0 .346.337.69.69.69h2.877c0 6.648.906 8.436 1.266 9.781H6.126c-2.75 0-5.178-2.407-5.178-5.178z" fill="#1c9ef8"/><path d="M7.162 8.312v1.496" fill="none" stroke="#323232" stroke-linecap="round" stroke-width="1.036"/><path d="M10.729 14.871c-.352 0-.69-.344-.69-.69C10.038 8.414 13.03.948 13.03.948h6.444c2.77 0 5.178 2.416 5.178 5.178v13.348c0 2.754-2.407 5.178-5.178 5.178h-4.603c-.357-1.333-1.266-2.887-1.266-9.78z" fill="#e1e6ed"/><g fill="none" stroke="#323232" stroke-linecap="round"><path d="M17.575 8.255V9.75" stroke-width="1.036"/><path d="M5.55 16.943c1.037 1.794 3.907 2.876 6.79 2.876 2.877 0 5.745-1.068 6.789-2.876" stroke-width=".69"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 25.6 25.6"><path fill="#1c9ef8" d="M.948 19.474V6.126c0-2.767 2.42-5.178 5.178-5.178h6.904s-2.992 7.506-2.992 13.233c0 .346.337.69.69.69h2.877c0 6.648.906 8.436 1.266 9.781H6.126c-2.75 0-5.178-2.407-5.178-5.178z"/><path fill="none" stroke="#323232" stroke-linecap="round" stroke-width="1.036" d="M7.162 8.312v1.496"/><path fill="#e1e6ed" d="M10.729 14.871c-.352 0-.69-.344-.69-.69C10.038 8.414 13.03.948 13.03.948h6.444c2.77 0 5.178 2.416 5.178 5.178v13.348c0 2.754-2.407 5.178-5.178 5.178h-4.603c-.357-1.333-1.266-2.887-1.266-9.78z"/><g fill="none" stroke="#323232" stroke-linecap="round"><path stroke-width="1.036" d="M17.575 8.255V9.75"/><path stroke-width=".69" d="M5.55 16.943c1.037 1.794 3.907 2.876 6.79 2.876 2.877 0 5.745-1.068 6.789-2.876"/></g></svg>
\ No newline at end of file diff --git a/platform/macos/export/run_icon.svg b/platform/macos/export/run_icon.svg index 647270ce22..24d10ef4b2 100644 --- a/platform/macos/export/run_icon.svg +++ b/platform/macos/export/run_icon.svg @@ -1 +1 @@ -<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path fill="#e0e0e0" d="M4.418 1.055a3.364 3.364 0 0 0-3.364 3.364v7.164a3.364 3.364 0 0 0 3.364 3.364h7.164a3.364 3.364 0 0 0 3.364-3.364V4.418a3.364 3.364 0 0 0-3.364-3.364H7.729Zm3.875 1.164h3.291a2.2 2.2 0 0 1 2.2 2.2v7.164a2.2 2.2 0 0 1-2.2 2.2h-2.15a8.884 8.884 0 0 1-.358-1.598c-.135.02-.487.082-.693.117a7.345 7.345 0 0 1-1.254 0 7.114 7.114 0 0 1-.926-.139 6.057 6.057 0 0 1-.867-.271 3.843 3.843 0 0 1-.988-.566 3.214 3.214 0 0 1-.397-.378 2.8 2.8 0 0 1-.318-.441.56.56 0 0 1 .968-.56c.083.138.188.26.312.362.096.082.2.158.307.224.12.075.243.142.371.201.285.139.583.247.89.319a5.35 5.35 0 0 0 1.282.158c.065 0 .129-.005.184-.006.056 0 .102-.005.148-.008l.096-.006c.114-.009.228-.02.31-.032.083-.013.11-.021.143-.028.099-.022.204-.058.327-.089a28.438 28.438 0 0 1-.06-1.929V8.53H6.887c.048-1.963.746-4.357 1.181-5.677.1-.293.184-.527.225-.633ZM5.531 6.394a.56.56 0 0 1-1.118 0v-.9a.56.56 0 0 1 1.118 0Zm3.432 4.646.02.306c.02.264.049.527.082.788l.011.05c1.154-.235 2.281-.773 2.806-1.68a.56.56 0 1 0-.968-.56c-.261.454-1.082.873-1.951 1.097zM10 6.364a.56.56 0 0 0 1.118 0v-.9a.56.56 0 0 0-1.118 0z"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="M4.418 1.055a3.364 3.364 0 0 0-3.364 3.364v7.164a3.364 3.364 0 0 0 3.364 3.364h7.164a3.364 3.364 0 0 0 3.364-3.364V4.418a3.364 3.364 0 0 0-3.364-3.364H7.729Zm3.875 1.164h3.291a2.2 2.2 0 0 1 2.2 2.2v7.164a2.2 2.2 0 0 1-2.2 2.2h-2.15a8.884 8.884 0 0 1-.358-1.598c-.135.02-.487.082-.693.117a7.345 7.345 0 0 1-1.254 0 7.114 7.114 0 0 1-.926-.139 6.057 6.057 0 0 1-.867-.271 3.843 3.843 0 0 1-.988-.566 3.214 3.214 0 0 1-.397-.378 2.8 2.8 0 0 1-.318-.441.56.56 0 0 1 .968-.56c.083.138.188.26.312.362.096.082.2.158.307.224.12.075.243.142.371.201.285.139.583.247.89.319a5.35 5.35 0 0 0 1.282.158c.065 0 .129-.005.184-.006.056 0 .102-.005.148-.008l.096-.006c.114-.009.228-.02.31-.032.083-.013.11-.021.143-.028.099-.022.204-.058.327-.089a28.438 28.438 0 0 1-.06-1.929V8.53H6.887c.048-1.963.746-4.357 1.181-5.677.1-.293.184-.527.225-.633ZM5.531 6.394a.56.56 0 0 1-1.118 0v-.9a.56.56 0 0 1 1.118 0Zm3.432 4.646.02.306c.02.264.049.527.082.788l.011.05c1.154-.235 2.281-.773 2.806-1.68a.56.56 0 1 0-.968-.56c-.261.454-1.082.873-1.951 1.097zM10 6.364a.56.56 0 0 0 1.118 0v-.9a.56.56 0 0 0-1.118 0z"/></svg>
\ No newline at end of file diff --git a/platform/macos/godot_main_macos.mm b/platform/macos/godot_main_macos.mm index 942c351ac0..eebaed0eaf 100644 --- a/platform/macos/godot_main_macos.mm +++ b/platform/macos/godot_main_macos.mm @@ -41,8 +41,8 @@ int main(int argc, char **argv) { #if defined(VULKAN_ENABLED) - // MoltenVK - enable full component swizzling support. - setenv("MVK_CONFIG_FULL_IMAGE_VIEW_SWIZZLE", "1", 1); + setenv("MVK_CONFIG_FULL_IMAGE_VIEW_SWIZZLE", "1", 1); // MoltenVK - enable full component swizzling support. + setenv("MVK_CONFIG_SWAPCHAIN_MIN_MAG_FILTER_USE_NEAREST", "0", 1); // MoltenVK - use linear surface scaling. TODO: remove when full DPI scaling is implemented. #endif #if defined(SANITIZERS_ENABLED) diff --git a/platform/macos/godot_menu_item.h b/platform/macos/godot_menu_item.h index b6e2d41c08..e1af317259 100644 --- a/platform/macos/godot_menu_item.h +++ b/platform/macos/godot_menu_item.h @@ -52,6 +52,7 @@ enum GlobalMenuCheckType { Callable hover_callback; Variant meta; GlobalMenuCheckType checkable_type; + bool checked; int max_states; int state; Ref<Image> img; diff --git a/platform/macos/godot_menu_item.mm b/platform/macos/godot_menu_item.mm index 30dac9be9b..479542113a 100644 --- a/platform/macos/godot_menu_item.mm +++ b/platform/macos/godot_menu_item.mm @@ -31,4 +31,18 @@ #include "godot_menu_item.h" @implementation GodotMenuItem + +- (id)init { + self = [super init]; + + self->callback = Callable(); + self->key_callback = Callable(); + self->checkable_type = GlobalMenuCheckType::CHECKABLE_TYPE_NONE; + self->checked = false; + self->max_states = 0; + self->state = 0; + + return self; +} + @end diff --git a/platform/macos/native_menu_macos.mm b/platform/macos/native_menu_macos.mm index 1ae1137ca0..802d58dc26 100644 --- a/platform/macos/native_menu_macos.mm +++ b/platform/macos/native_menu_macos.mm @@ -373,12 +373,7 @@ int NativeMenuMacOS::add_submenu_item(const RID &p_rid, const String &p_label, c menu_item = [md->menu insertItemWithTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()] action:nil keyEquivalent:@"" atIndex:p_index]; GodotMenuItem *obj = [[GodotMenuItem alloc] init]; - obj->callback = Callable(); - obj->key_callback = Callable(); obj->meta = p_tag; - obj->checkable_type = CHECKABLE_TYPE_NONE; - obj->max_states = 0; - obj->state = 0; [menu_item setRepresentedObject:obj]; [md_sub->menu setTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()]]; @@ -417,9 +412,6 @@ int NativeMenuMacOS::add_item(const RID &p_rid, const String &p_label, const Cal obj->callback = p_callback; obj->key_callback = p_key_callback; obj->meta = p_tag; - obj->checkable_type = CHECKABLE_TYPE_NONE; - obj->max_states = 0; - obj->state = 0; [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; [menu_item setRepresentedObject:obj]; } @@ -438,8 +430,6 @@ int NativeMenuMacOS::add_check_item(const RID &p_rid, const String &p_label, con obj->key_callback = p_key_callback; obj->meta = p_tag; obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; - obj->max_states = 0; - obj->state = 0; [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; [menu_item setRepresentedObject:obj]; } @@ -457,9 +447,6 @@ int NativeMenuMacOS::add_icon_item(const RID &p_rid, const Ref<Texture2D> &p_ico obj->callback = p_callback; obj->key_callback = p_key_callback; obj->meta = p_tag; - obj->checkable_type = CHECKABLE_TYPE_NONE; - obj->max_states = 0; - obj->state = 0; DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { obj->img = p_icon->get_image(); @@ -489,8 +476,6 @@ int NativeMenuMacOS::add_icon_check_item(const RID &p_rid, const Ref<Texture2D> obj->key_callback = p_key_callback; obj->meta = p_tag; obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; - obj->max_states = 0; - obj->state = 0; DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { obj->img = p_icon->get_image(); @@ -520,8 +505,6 @@ int NativeMenuMacOS::add_radio_check_item(const RID &p_rid, const String &p_labe obj->key_callback = p_key_callback; obj->meta = p_tag; obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; - obj->max_states = 0; - obj->state = 0; [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; [menu_item setRepresentedObject:obj]; } @@ -540,8 +523,6 @@ int NativeMenuMacOS::add_icon_radio_check_item(const RID &p_rid, const Ref<Textu obj->key_callback = p_key_callback; obj->meta = p_tag; obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; - obj->max_states = 0; - obj->state = 0; DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { obj->img = p_icon->get_image(); @@ -570,7 +551,6 @@ int NativeMenuMacOS::add_multistate_item(const RID &p_rid, const String &p_label obj->callback = p_callback; obj->key_callback = p_key_callback; obj->meta = p_tag; - obj->checkable_type = CHECKABLE_TYPE_NONE; obj->max_states = p_max_states; obj->state = p_default_state; [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; @@ -640,7 +620,10 @@ bool NativeMenuMacOS::is_item_checked(const RID &p_rid, int p_idx) const { ERR_FAIL_COND_V(p_idx >= item_start + item_count, false); const NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; if (menu_item) { - return ([menu_item state] == NSControlStateValueOn); + const GodotMenuItem *obj = [menu_item representedObject]; + if (obj) { + return obj->checked; + } } return false; } @@ -958,10 +941,14 @@ void NativeMenuMacOS::set_item_checked(const RID &p_rid, int p_idx, bool p_check ERR_FAIL_COND(p_idx >= item_start + item_count); NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; if (menu_item) { - if (p_checked) { - [menu_item setState:NSControlStateValueOn]; - } else { - [menu_item setState:NSControlStateValueOff]; + GodotMenuItem *obj = [menu_item representedObject]; + if (obj) { + obj->checked = p_checked; + if (p_checked) { + [menu_item setState:NSControlStateValueOn]; + } else { + [menu_item setState:NSControlStateValueOff]; + } } } } diff --git a/platform/web/SCsub b/platform/web/SCsub index 3d36a888d6..e81f2ec516 100644 --- a/platform/web/SCsub +++ b/platform/web/SCsub @@ -71,8 +71,6 @@ if env["dlink_enabled"]: sys_env.Append(LINKFLAGS=["-s", "MAIN_MODULE=1"]) sys_env.Append(LINKFLAGS=["-s", "EXPORT_ALL=1"]) sys_env.Append(LINKFLAGS=["-s", "WARN_ON_UNDEFINED_SYMBOLS=0"]) - # Force exporting the standard library (printf, malloc, etc.) - sys_env["ENV"]["EMCC_FORCE_STDLIBS"] = "libc,libc++,libc++abi" sys_env["CCFLAGS"].remove("-fvisibility=hidden") sys_env["LINKFLAGS"].remove("-fvisibility=hidden") diff --git a/platform/web/audio_driver_web.cpp b/platform/web/audio_driver_web.cpp index dd986e650c..b24c6cb1fd 100644 --- a/platform/web/audio_driver_web.cpp +++ b/platform/web/audio_driver_web.cpp @@ -33,6 +33,8 @@ #include "godot_audio.h" #include "core/config/project_settings.h" +#include "core/object/object.h" +#include "scene/main/node.h" #include "servers/audio/audio_stream.h" #include <emscripten.h> @@ -51,6 +53,33 @@ void AudioDriverWeb::_latency_update_callback(float p_latency) { AudioDriverWeb::audio_context.output_latency = p_latency; } +void AudioDriverWeb::_sample_playback_finished_callback(const char *p_playback_object_id) { + const ObjectID playback_id = ObjectID(String::to_int(p_playback_object_id)); + + Object *playback_object = ObjectDB::get_instance(playback_id); + if (playback_object == nullptr) { + return; + } + Ref<AudioSamplePlayback> playback = Object::cast_to<AudioSamplePlayback>(playback_object); + if (playback.is_null()) { + return; + } + + Object *player_object = ObjectDB::get_instance(playback->player_id); + if (player_object == nullptr) { + return; + } + Node *player = Object::cast_to<Node>(player_object); + if (player == nullptr) { + return; + } + + const StringName finished = SNAME("finished"); + if (player->has_signal(finished)) { + player->emit_signal(finished); + } +} + void AudioDriverWeb::_audio_driver_process(int p_from, int p_samples) { int32_t *stream_buffer = reinterpret_cast<int32_t *>(output_rb); const int max_samples = memarr_len(output_rb); @@ -132,6 +161,9 @@ Error AudioDriverWeb::init() { if (!input_rb) { return ERR_OUT_OF_MEMORY; } + + godot_audio_sample_set_finished_callback(&_sample_playback_finished_callback); + return OK; } diff --git a/platform/web/audio_driver_web.h b/platform/web/audio_driver_web.h index 298ad90fae..46c5ce4de1 100644 --- a/platform/web/audio_driver_web.h +++ b/platform/web/audio_driver_web.h @@ -58,6 +58,7 @@ private: WASM_EXPORT static void _state_change_callback(int p_state); WASM_EXPORT static void _latency_update_callback(float p_latency); + WASM_EXPORT static void _sample_playback_finished_callback(const char *p_playback_object_id); static AudioDriverWeb *singleton; diff --git a/platform/web/detect.py b/platform/web/detect.py index 1b15ff8e2e..79485ea28a 100644 --- a/platform/web/detect.py +++ b/platform/web/detect.py @@ -78,6 +78,7 @@ def get_flags(): # -Os reduces file size by around 5 MiB over -O3. -Oz only saves about # 100 KiB over -Os, which does not justify the negative impact on # run-time performance. + # Note that this overrides the "auto" behavior for target/dev_build. "optimize": "size", } @@ -207,11 +208,10 @@ def configure(env: "SConsEnvironment"): env.Append(LINKFLAGS=["-sMAX_WEBGL_VERSION=2"]) # Allow use to take control of swapping WebGL buffers. env.Append(LINKFLAGS=["-sOFFSCREEN_FRAMEBUFFER=1"]) - # Breaking change since emscripten 3.1.51 - # https://github.com/emscripten-core/emscripten/blob/main/ChangeLog.md#3151---121323 + # Disables the use of *glGetProcAddress() which is inefficient. + # See https://emscripten.org/docs/tools_reference/settings_reference.html#gl-enable-get-proc-address if cc_semver >= (3, 1, 51): - # Enables the use of *glGetProcAddress() - env.Append(LINKFLAGS=["-sGL_ENABLE_GET_PROC_ADDRESS=1"]) + env.Append(LINKFLAGS=["-sGL_ENABLE_GET_PROC_ADDRESS=0"]) if env["javascript_eval"]: env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"]) diff --git a/platform/web/export/export_plugin.cpp b/platform/web/export/export_plugin.cpp index 8941c26ec0..d83e465e8e 100644 --- a/platform/web/export/export_plugin.cpp +++ b/platform/web/export/export_plugin.cpp @@ -334,10 +334,14 @@ void EditorExportPlatformWeb::get_preset_features(const Ref<EditorExportPreset> if (p_preset->get("vram_texture_compression/for_desktop")) { r_features->push_back("s3tc"); } - if (p_preset->get("vram_texture_compression/for_mobile")) { r_features->push_back("etc2"); } + if (p_preset->get("variant/thread_support").operator bool()) { + r_features->push_back("threads"); + } else { + r_features->push_back("nothreads"); + } r_features->push_back("wasm32"); } @@ -345,7 +349,7 @@ void EditorExportPlatformWeb::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/debug", PROPERTY_HINT_GLOBAL_FILE, "*.zip"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_template/release", PROPERTY_HINT_GLOBAL_FILE, "*.zip"), "")); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "variant/extensions_support"), false)); // Export type. + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "variant/extensions_support"), false)); // GDExtension support. r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "variant/thread_support"), false)); // Thread support (i.e. run with or without COEP/COOP headers). r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "vram_texture_compression/for_desktop"), true)); // S3TC r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "vram_texture_compression/for_mobile"), false)); // ETC or ETC2, depending on renderer @@ -585,35 +589,50 @@ bool EditorExportPlatformWeb::poll_export() { } } - int prev = menu_options; - menu_options = preset.is_valid(); - HTTPServerState prev_server_state = server_state; - server_state = HTTP_SERVER_STATE_OFF; - if (server->is_listening()) { - if (preset.is_null() || menu_options == 0) { - server->stop(); - } else { - server_state = HTTP_SERVER_STATE_ON; - menu_options += 1; + RemoteDebugState prev_remote_debug_state = remote_debug_state; + remote_debug_state = REMOTE_DEBUG_STATE_UNAVAILABLE; + + if (preset.is_valid()) { + const bool debug = true; + // Throwaway variables to pass to `can_export`. + String err; + bool missing_templates; + + if (can_export(preset, err, missing_templates, debug)) { + if (server->is_listening()) { + remote_debug_state = REMOTE_DEBUG_STATE_SERVING; + } else { + remote_debug_state = REMOTE_DEBUG_STATE_AVAILABLE; + } } } - return server_state != prev_server_state || menu_options != prev; + if (remote_debug_state != REMOTE_DEBUG_STATE_SERVING && server->is_listening()) { + server->stop(); + } + + return remote_debug_state != prev_remote_debug_state; } Ref<ImageTexture> EditorExportPlatformWeb::get_option_icon(int p_index) const { Ref<ImageTexture> play_icon = EditorExportPlatform::get_option_icon(p_index); - switch (server_state) { - case HTTP_SERVER_STATE_OFF: { + switch (remote_debug_state) { + case REMOTE_DEBUG_STATE_UNAVAILABLE: { + return nullptr; + } break; + + case REMOTE_DEBUG_STATE_AVAILABLE: { switch (p_index) { case 0: case 1: return play_icon; + default: + ERR_FAIL_V(nullptr); } } break; - case HTTP_SERVER_STATE_ON: { + case REMOTE_DEBUG_STATE_SERVING: { switch (p_index) { case 0: return play_icon; @@ -621,18 +640,31 @@ Ref<ImageTexture> EditorExportPlatformWeb::get_option_icon(int p_index) const { return restart_icon; case 2: return stop_icon; + default: + ERR_FAIL_V(nullptr); } } break; } - ERR_FAIL_V_MSG(nullptr, vformat(R"(EditorExportPlatformWeb option icon index "%s" is invalid.)", p_index)); + return nullptr; } int EditorExportPlatformWeb::get_options_count() const { - if (server_state == HTTP_SERVER_STATE_ON) { - return 3; + switch (remote_debug_state) { + case REMOTE_DEBUG_STATE_UNAVAILABLE: { + return 0; + } break; + + case REMOTE_DEBUG_STATE_AVAILABLE: { + return 2; + } break; + + case REMOTE_DEBUG_STATE_SERVING: { + return 3; + } break; } - return 2; + + return 0; } String EditorExportPlatformWeb::get_option_label(int p_index) const { @@ -641,17 +673,22 @@ String EditorExportPlatformWeb::get_option_label(int p_index) const { String reexport_project = TTR("Re-export Project"); String stop_http_server = TTR("Stop HTTP Server"); - switch (server_state) { - case HTTP_SERVER_STATE_OFF: { + switch (remote_debug_state) { + case REMOTE_DEBUG_STATE_UNAVAILABLE: + return ""; + + case REMOTE_DEBUG_STATE_AVAILABLE: { switch (p_index) { case 0: return run_in_browser; case 1: return start_http_server; + default: + ERR_FAIL_V(""); } } break; - case HTTP_SERVER_STATE_ON: { + case REMOTE_DEBUG_STATE_SERVING: { switch (p_index) { case 0: return run_in_browser; @@ -659,11 +696,13 @@ String EditorExportPlatformWeb::get_option_label(int p_index) const { return reexport_project; case 2: return stop_http_server; + default: + ERR_FAIL_V(""); } } break; } - ERR_FAIL_V_MSG("", vformat(R"(EditorExportPlatformWeb option label index "%s" is invalid.)", p_index)); + return ""; } String EditorExportPlatformWeb::get_option_tooltip(int p_index) const { @@ -672,17 +711,22 @@ String EditorExportPlatformWeb::get_option_tooltip(int p_index) const { String reexport_project = TTR("Export project again to account for updates."); String stop_http_server = TTR("Stop the HTTP server."); - switch (server_state) { - case HTTP_SERVER_STATE_OFF: { + switch (remote_debug_state) { + case REMOTE_DEBUG_STATE_UNAVAILABLE: + return ""; + + case REMOTE_DEBUG_STATE_AVAILABLE: { switch (p_index) { case 0: return run_in_browser; case 1: return start_http_server; + default: + ERR_FAIL_V(""); } } break; - case HTTP_SERVER_STATE_ON: { + case REMOTE_DEBUG_STATE_SERVING: { switch (p_index) { case 0: return run_in_browser; @@ -690,11 +734,13 @@ String EditorExportPlatformWeb::get_option_tooltip(int p_index) const { return reexport_project; case 2: return stop_http_server; + default: + ERR_FAIL_V(""); } } break; } - ERR_FAIL_V_MSG("", vformat(R"(EditorExportPlatformWeb option tooltip index "%s" is invalid.)", p_index)); + return ""; } Error EditorExportPlatformWeb::run(const Ref<EditorExportPreset> &p_preset, int p_option, int p_debug_flags) { @@ -703,8 +749,12 @@ Error EditorExportPlatformWeb::run(const Ref<EditorExportPreset> &p_preset, int const String bind_host = EDITOR_GET("export/web/http_host"); const bool use_tls = EDITOR_GET("export/web/use_tls"); - switch (server_state) { - case HTTP_SERVER_STATE_OFF: { + switch (remote_debug_state) { + case REMOTE_DEBUG_STATE_UNAVAILABLE: { + return FAILED; + } break; + + case REMOTE_DEBUG_STATE_AVAILABLE: { switch (p_option) { // Run in Browser. case 0: { @@ -727,10 +777,14 @@ Error EditorExportPlatformWeb::run(const Ref<EditorExportPreset> &p_preset, int } return _start_server(bind_host, bind_port, use_tls); } break; + + default: { + ERR_FAIL_V_MSG(FAILED, vformat(R"(Invalid option "%s" for the current state.)", p_option)); + } } } break; - case HTTP_SERVER_STATE_ON: { + case REMOTE_DEBUG_STATE_SERVING: { switch (p_option) { // Run in Browser. case 0: { @@ -750,11 +804,15 @@ Error EditorExportPlatformWeb::run(const Ref<EditorExportPreset> &p_preset, int case 2: { return _stop_server(); } break; + + default: { + ERR_FAIL_V_MSG(FAILED, vformat(R"(Invalid option "%s" for the current state.)", p_option)); + } } } break; } - ERR_FAIL_V_MSG(ERR_INVALID_PARAMETER, vformat(R"(Trying to run EditorExportPlatformWeb, but option "%s" isn't known.)", p_option)); + return FAILED; } Error EditorExportPlatformWeb::_export_project(const Ref<EditorExportPreset> &p_preset, int p_debug_flags) { diff --git a/platform/web/export/export_plugin.h b/platform/web/export/export_plugin.h index d3d2083a23..2f67d8107f 100644 --- a/platform/web/export/export_plugin.h +++ b/platform/web/export/export_plugin.h @@ -46,19 +46,19 @@ class EditorExportPlatformWeb : public EditorExportPlatform { GDCLASS(EditorExportPlatformWeb, EditorExportPlatform); - enum HTTPServerState { - HTTP_SERVER_STATE_OFF, - HTTP_SERVER_STATE_ON, + enum RemoteDebugState { + REMOTE_DEBUG_STATE_UNAVAILABLE, + REMOTE_DEBUG_STATE_AVAILABLE, + REMOTE_DEBUG_STATE_SERVING, }; Ref<ImageTexture> logo; Ref<ImageTexture> run_icon; Ref<ImageTexture> stop_icon; Ref<ImageTexture> restart_icon; - HTTPServerState server_state = HTTP_SERVER_STATE_OFF; + RemoteDebugState remote_debug_state = REMOTE_DEBUG_STATE_UNAVAILABLE; Ref<EditorHTTPServer> server; - int menu_options = 0; String _get_template_name(bool p_extension, bool p_thread_support, bool p_debug) const { String name = "web"; diff --git a/platform/web/export/logo.svg b/platform/web/export/logo.svg index 567b6f3c77..8d874a143b 100644 --- a/platform/web/export/logo.svg +++ b/platform/web/export/logo.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="M7 5h18v21H7z" fill="#fff"/><path d="M3.143 1 5.48 27.504 15.967 31l10.553-3.496L28.857 1zM23.78 9.565H11.473l.275 3.308h11.759l-.911 9.937-6.556 1.808v.02h-.073l-6.61-1.828-.402-5.076h3.195l.234 2.552 3.583.97 3.595-.97.402-4.165H8.788L7.93 6.37h16.145z" fill="#eb6428"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#fff" d="M7 5h18v21H7z"/><path fill="#eb6428" d="M3.143 1 5.48 27.504 15.967 31l10.553-3.496L28.857 1zM23.78 9.565H11.473l.275 3.308h11.759l-.911 9.937-6.556 1.808v.02h-.073l-6.61-1.828-.402-5.076h3.195l.234 2.552 3.583.97 3.595-.97.402-4.165H8.788L7.93 6.37h16.145z"/></svg>
\ No newline at end of file diff --git a/platform/web/export/run_icon.svg b/platform/web/export/run_icon.svg index fa95e64e79..395db8e597 100644 --- a/platform/web/export/run_icon.svg +++ b/platform/web/export/run_icon.svg @@ -1 +1 @@ -<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m2 1 1.09 12.357 4.9 1.63 4.9-1.63L13.98 1zm9.622 3.994h-5.74l.129 1.541h5.482l-.424 4.634-3.057.843v.01h-.033l-3.082-.853-.187-2.367h1.489l.11 1.19 1.67.452 1.676-.453.187-1.942h-5.21l-.4-4.546h7.527z" fill="#eb6428" style="fill:#e0e0e0;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="m2 1 1.09 12.357 4.9 1.63 4.9-1.63L13.98 1zm9.622 3.994h-5.74l.129 1.541h5.482l-.424 4.634-3.057.843v.01h-.033l-3.082-.853-.187-2.367h1.489l.11 1.19 1.67.452 1.676-.453.187-1.942h-5.21l-.4-4.546h7.527z"/></svg>
\ No newline at end of file diff --git a/platform/web/godot_audio.h b/platform/web/godot_audio.h index 8bebbcf7de..dd5bec00cf 100644 --- a/platform/web/godot_audio.h +++ b/platform/web/godot_audio.h @@ -57,6 +57,7 @@ extern void godot_audio_sample_set_pause(const char *p_playback_object_id, bool extern int godot_audio_sample_is_active(const char *p_playback_object_id); extern void godot_audio_sample_update_pitch_scale(const char *p_playback_object_id, float p_pitch_scale); extern void godot_audio_sample_set_volumes_linear(const char *p_playback_object_id, int *p_buses_buf, int p_buses_size, float *p_volumes_buf, int p_volumes_size); +extern void godot_audio_sample_set_finished_callback(void (*p_callback)(const char *)); extern void godot_audio_sample_bus_set_count(int p_count); extern void godot_audio_sample_bus_remove(int p_index); diff --git a/platform/web/js/libs/library_godot_audio.js b/platform/web/js/libs/library_godot_audio.js index d7baece781..0b16b07261 100644 --- a/platform/web/js/libs/library_godot_audio.js +++ b/platform/web/js/libs/library_godot_audio.js @@ -142,7 +142,7 @@ class Sample { * @returns {void} */ clear() { - this.audioBuffer = null; + this.setAudioBuffer(null); GodotAudio.Sample.delete(this.id); } @@ -423,37 +423,31 @@ class SampleNode { this.streamObjectId = params.streamObjectId; /** @type {number} */ this.offset = options.offset ?? 0; - /** @type {LoopMode} */ + /** @type {number} */ this.startTime = options.startTime ?? 0; + /** @type {boolean} */ + this.isPaused = false; /** @type {number} */ this.pauseTime = 0; /** @type {number} */ this._playbackRate = 44100; /** @type {LoopMode} */ - this._loopMode = 'disabled'; + this.loopMode = options.loopMode ?? this.getSample().loopMode ?? 'disabled'; /** @type {number} */ this._pitchScale = 1; + /** @type {number} */ + this._sourceStartTime = 0; /** @type {Map<Bus, SampleNodeBus>} */ this._sampleNodeBuses = new Map(); - /** @type {AudioBufferSourceNode} */ + /** @type {AudioBufferSourceNode | null} */ this._source = GodotAudio.ctx.createBufferSource(); + /** @type {AudioBufferSourceNode["onended"]} */ + this._onended = null; this.setPlaybackRate(options.playbackRate ?? 44100); - this.setLoopMode(options.loopMode ?? this.getSample().loopMode ?? 'disabled'); this._source.buffer = this.getSample().getAudioBuffer(); - /** @type {SampleNode} */ - // eslint-disable-next-line consistent-this - const self = this; - this._source.addEventListener('ended', (_) => { - switch (self.getSample().loopMode) { - case 'disabled': - GodotAudio.SampleNode.stopSampleNode(self.id); - break; - default: - // do nothing - } - }); + this._addEndedListener(); const bus = GodotAudio.Bus.getBus(params.busIndex); const sampleNodeBus = this.getSampleNodeBus(bus); @@ -461,31 +455,6 @@ class SampleNode { } /** - * Gets the loop mode of the current instance. - * @returns {LoopMode} - */ - getLoopMode() { - return this._loopMode; - } - - /** - * Sets the loop mode of the current instance. - * @param {LoopMode} val Value to set. - * @returns {void} - */ - setLoopMode(val) { - this._loopMode = val; - switch (val) { - case 'forward': - case 'backward': - this._source.loop = true; - break; - default: - this._source.loop = false; - } - } - - /** * Gets the playback rate. * @returns {number} */ @@ -542,7 +511,8 @@ class SampleNode { * @returns {void} */ start() { - this._source.start(this.offset); + this._resetSourceStartTime(); + this._source.start(this.startTime, this.offset); } /** @@ -550,32 +520,31 @@ class SampleNode { * @returns {void} */ stop() { - this._source.stop(); this.clear(); } /** + * Restarts the `SampleNode`. + */ + restart() { + this.isPaused = false; + this.pauseTime = 0; + this._resetSourceStartTime(); + this._restart(); + } + + /** * Pauses the `SampleNode`. * @param {boolean} [enable=true] State of the pause. * @returns {void} */ pause(enable = true) { if (enable) { - this.pauseTime = (GodotAudio.ctx.currentTime - this.startTime) / this.playbackRate; - this._source.stop(); - return; - } - - if (this.pauseTime === 0) { + this._pause(); return; } - this._source.disconnect(); - this._source = GodotAudio.ctx.createBufferSource(); - - this._source.buffer = this.getSample().getAudioBuffer(); - this._source.connect(this._gain); - this._source.start(this.offset + this.pauseTime); + this._unpause(); } /** @@ -623,26 +592,120 @@ class SampleNode { * @returns {void} */ clear() { - this._source.stop(); - this._source.disconnect(); - this._source = null; + this.isPaused = false; + this.pauseTime = 0; + + if (this._source != null) { + this._source.removeEventListener('ended', this._onended); + this._onended = null; + this._source.stop(); + this._source.disconnect(); + this._source = null; + } for (const sampleNodeBus of this._sampleNodeBuses.values()) { sampleNodeBus.clear(); } this._sampleNodeBuses.clear(); - this._sampleNodeBuses = null; GodotAudio.SampleNode.delete(this.id); } /** + * Resets the source start time + * @returns {void} + */ + _resetSourceStartTime() { + this._sourceStartTime = GodotAudio.ctx.currentTime; + } + + /** * Syncs the `AudioNode` playback rate based on the `SampleNode` playback rate and pitch scale. * @returns {void} */ _syncPlaybackRate() { this._source.playbackRate.value = this.getPlaybackRate() * this.getPitchScale(); } + + /** + * Restarts the `SampleNode`. + * Honors `isPaused` and `pauseTime`. + * @returns {void} + */ + _restart() { + this._source.disconnect(); + this._source = GodotAudio.ctx.createBufferSource(); + this._source.buffer = this.getSample().getAudioBuffer(); + + // Make sure that we connect the new source to the sample node bus. + for (const sampleNodeBus of this._sampleNodeBuses.values()) { + this.connect(sampleNodeBus.getInputNode()); + } + + this._addEndedListener(); + const pauseTime = this.isPaused + ? this.pauseTime + : 0; + this._source.start(this.startTime, this.offset + pauseTime); + } + + /** + * Pauses the `SampleNode`. + * @returns {void} + */ + _pause() { + this.isPaused = true; + this.pauseTime = (GodotAudio.ctx.currentTime - this._sourceStartTime) / this.getPlaybackRate(); + this._source.stop(); + } + + /** + * Unpauses the `SampleNode`. + * @returns {void} + */ + _unpause() { + this._restart(); + this.isPaused = false; + this.pauseTime = 0; + } + + /** + * Adds an "ended" listener to the source node to repeat it if necessary. + * @returns {void} + */ + _addEndedListener() { + if (this._onended != null) { + this._source.removeEventListener('ended', this._onended); + } + + /** @type {SampleNode} */ + // eslint-disable-next-line consistent-this + const self = this; + this._onended = (_) => { + if (self.isPaused) { + return; + } + + switch (self.getSample().loopMode) { + case 'disabled': { + const id = this.id; + self.stop(); + if (GodotAudio.sampleFinishedCallback != null) { + const idCharPtr = GodotRuntime.allocString(id); + GodotAudio.sampleFinishedCallback(idCharPtr); + GodotRuntime.free(idCharPtr); + } + } break; + case 'forward': + case 'backward': + self.restart(); + break; + default: + // do nothing + } + }; + this._source.addEventListener('ended', this._onended); + } } /** @@ -719,8 +782,7 @@ class Bus { */ static move(fromIndex, toIndex) { const movedBus = GodotAudio.Bus.getBus(fromIndex); - let buses = GodotAudio.buses; - buses = buses.filter((_, i) => i !== fromIndex); + const buses = GodotAudio.buses.filter((_, i) => i !== fromIndex); // Inserts at index. buses.splice(toIndex - 1, 0, movedBus); GodotAudio.buses = buses; @@ -1034,6 +1096,12 @@ const _GodotAudio = { busSolo: null, Bus, + /** + * Callback to signal that a sample has finished. + * @type {(playbackObjectIdPtr: number) => void | null} + */ + sampleFinishedCallback: null, + /** @type {AudioContext} */ ctx: null, input: null, @@ -1311,7 +1379,7 @@ const _GodotAudio = { */ set_sample_bus_volume_db: function (busIndex, volumeDb) { const bus = GodotAudio.Bus.getBus(busIndex); - bus.volumeDb = volumeDb; + bus.setVolumeDb(volumeDb); }, /** @@ -1708,6 +1776,17 @@ const _GodotAudio = { godot_audio_sample_bus_set_mute: function (bus, enable) { GodotAudio.set_sample_bus_mute(bus, Boolean(enable)); }, + + godot_audio_sample_set_finished_callback__proxy: 'sync', + godot_audio_sample_set_finished_callback__sig: 'vi', + /** + * Sets the finished callback + * @param {Number} callbackPtr Finished callback pointer + * @returns {void} + */ + godot_audio_sample_set_finished_callback: function (callbackPtr) { + GodotAudio.sampleFinishedCallback = GodotRuntime.get_func(callbackPtr); + }, }; autoAddDeps(_GodotAudio, '$GodotAudio'); diff --git a/platform/web/js/libs/library_godot_input.js b/platform/web/js/libs/library_godot_input.js index 7ea89d553f..6e3b97023d 100644 --- a/platform/web/js/libs/library_godot_input.js +++ b/platform/web/js/libs/library_godot_input.js @@ -112,6 +112,7 @@ const GodotIME = { ime.style.top = '0px'; ime.style.width = '100%'; ime.style.height = '40px'; + ime.style.pointerEvents = 'none'; ime.style.display = 'none'; ime.contentEditable = 'true'; diff --git a/platform/web/js/libs/library_godot_javascript_singleton.js b/platform/web/js/libs/library_godot_javascript_singleton.js index b17fde1544..6bb69bca95 100644 --- a/platform/web/js/libs/library_godot_javascript_singleton.js +++ b/platform/web/js/libs/library_godot_javascript_singleton.js @@ -81,11 +81,16 @@ const GodotJSWrapper = { case 0: return null; case 1: - return !!GodotRuntime.getHeapValue(val, 'i64'); - case 2: - return GodotRuntime.getHeapValue(val, 'i64'); + return Boolean(GodotRuntime.getHeapValue(val, 'i64')); + case 2: { + // `heap_value` may be a bigint. + const heap_value = GodotRuntime.getHeapValue(val, 'i64'); + return heap_value >= Number.MIN_SAFE_INTEGER && heap_value <= Number.MAX_SAFE_INTEGER + ? Number(heap_value) + : heap_value; + } case 3: - return GodotRuntime.getHeapValue(val, 'double'); + return Number(GodotRuntime.getHeapValue(val, 'double')); case 4: return GodotRuntime.parseString(GodotRuntime.getHeapValue(val, '*')); case 24: // OBJECT @@ -110,6 +115,9 @@ const GodotJSWrapper = { } GodotRuntime.setHeapValue(p_exchange, p_val, 'double'); return 3; // FLOAT + } else if (type === 'bigint') { + GodotRuntime.setHeapValue(p_exchange, p_val, 'i64'); + return 2; // INT } else if (type === 'string') { const c_str = GodotRuntime.allocString(p_val); GodotRuntime.setHeapValue(p_exchange, c_str, '*'); diff --git a/platform/web/platform_gl.h b/platform/web/platform_gl.h index be6e1462a7..8aadab81de 100644 --- a/platform/web/platform_gl.h +++ b/platform/web/platform_gl.h @@ -35,6 +35,10 @@ #define GLES_API_ENABLED // Allow using GLES. #endif +// Make using *glGetProcAddress() an error on the web. +#define glGetProcAddress(n) static_assert(false, "Usage of glGetProcessAddress() on the web is a bug.") +#define eglGetProcAddress(n) static_assert(false, "Usage of eglGetProcessAddress() on the web is a bug.") + #include "platform/web/godot_webgl2.h" #endif // PLATFORM_GL_H diff --git a/platform/web/web_main.cpp b/platform/web/web_main.cpp index 04513f6d57..d0c3bd7c0e 100644 --- a/platform/web/web_main.cpp +++ b/platform/web/web_main.cpp @@ -35,6 +35,8 @@ #include "core/config/engine.h" #include "core/io/resource_loader.h" #include "main/main.h" +#include "scene/main/scene_tree.h" +#include "scene/main/window.h" // SceneTree only forward declares it. #include <emscripten/emscripten.h> #include <stdlib.h> @@ -130,7 +132,7 @@ extern EMSCRIPTEN_KEEPALIVE int godot_web_main(int argc, char *argv[]) { if (Engine::get_singleton()->is_project_manager_hint() && FileAccess::exists("/tmp/preload.zip")) { PackedStringArray ps; ps.push_back("/tmp/preload.zip"); - os->get_main_loop()->emit_signal(SNAME("files_dropped"), ps, -1); + SceneTree::get_singleton()->get_root()->emit_signal(SNAME("files_dropped"), ps); } #endif emscripten_set_main_loop(main_loop_callback, -1, false); diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 5092c6fadf..fee306a25c 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -142,8 +142,9 @@ def detect_build_env_arch(): if os.getenv("VCTOOLSINSTALLDIR"): host_path_index = os.getenv("PATH").upper().find(os.getenv("VCTOOLSINSTALLDIR").upper() + "BIN\\HOST") if host_path_index > -1: - first_path_arch = os.getenv("PATH").split(";")[0].rsplit("\\", 1)[-1].lower() - return msvc_target_aliases[first_path_arch] + first_path_arch = os.getenv("PATH")[host_path_index:].split(";")[0].rsplit("\\", 1)[-1].lower() + if first_path_arch in msvc_target_aliases.keys(): + return msvc_target_aliases[first_path_arch] msys_target_aliases = { "mingw32": "x86_32", @@ -393,7 +394,7 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): # Ensure we have a location to write captured output to, in case of false positives. capture_path = methods.base_folder_path + "platform/windows/msvc_capture.log" - with open(capture_path, "wt"): + with open(capture_path, "wt", encoding="utf-8"): pass old_spawn = env["SPAWN"] @@ -417,7 +418,7 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): ret = old_spawn(sh, escape, cmd, args, env) try: - with open(tmp_stdout_name, encoding="oem", errors="replace") as tmp_stdout: + with open(tmp_stdout_name, "r", encoding=sys.stdout.encoding, errors="replace") as tmp_stdout: lines = tmp_stdout.read().splitlines() os.remove(tmp_stdout_name) except OSError: @@ -436,7 +437,7 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): if not caught and (is_cl and re_cl_capture.match(line)) or (not is_cl and re_link_capture.match(line)): caught = True try: - with open(capture_path, "a") as log: + with open(capture_path, "a", encoding=sys.stdout.encoding) as log: log.write(line + "\n") except OSError: print_warning(f'Failed to log captured line: "{line}".') @@ -499,6 +500,14 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): if env["arch"] == "x86_64": env.AppendUnique(CPPDEFINES=["_WIN64"]) + # Sanitizers + prebuilt_lib_extra_suffix = "" + if env["use_asan"]: + env.extra_suffix += ".san" + prebuilt_lib_extra_suffix = ".san" + env.Append(CCFLAGS=["/fsanitize=address"]) + env.Append(LINKFLAGS=["/INFERASANLIBS"]) + ## Libs LIBS = [ @@ -566,7 +575,7 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): LIBS += ["WinPixEventRuntime"] env.Append(LIBPATH=[env["mesa_libs"] + "/bin"]) - LIBS += ["libNIR.windows." + env["arch"]] + LIBS += ["libNIR.windows." + env["arch"] + prebuilt_lib_extra_suffix] if env["opengl3"]: env.AppendUnique(CPPDEFINES=["GLES3_ENABLED"]) @@ -574,9 +583,9 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): env.AppendUnique(CPPDEFINES=["EGL_STATIC"]) env.Append(LIBPATH=[env["angle_libs"]]) LIBS += [ - "libANGLE.windows." + env["arch"], - "libEGL.windows." + env["arch"], - "libGLES.windows." + env["arch"], + "libANGLE.windows." + env["arch"] + prebuilt_lib_extra_suffix, + "libEGL.windows." + env["arch"] + prebuilt_lib_extra_suffix, + "libGLES.windows." + env["arch"] + prebuilt_lib_extra_suffix, ] LIBS += ["dxgi", "d3d9", "d3d11"] env.Prepend(CPPPATH=["#thirdparty/angle/include"]) @@ -612,12 +621,6 @@ def configure_msvc(env: "SConsEnvironment", vcvars_msvc_config): env.Prepend(CPPPATH=[p for p in str(os.getenv("INCLUDE")).split(";")]) env.Append(LIBPATH=[p for p in str(os.getenv("LIB")).split(";")]) - # Sanitizers - if env["use_asan"]: - env.extra_suffix += ".san" - env.Append(LINKFLAGS=["/INFERASANLIBS"]) - env.Append(CCFLAGS=["/fsanitize=address"]) - # Incremental linking fix env["BUILDERS"]["ProgramOriginal"] = env["BUILDERS"]["Program"] env["BUILDERS"]["Program"] = methods.precious_program @@ -678,6 +681,7 @@ def configure_mingw(env: "SConsEnvironment"): env["CXX"] = mingw_bin_prefix + "clang++" if try_cmd("as --version", env["mingw_prefix"], env["arch"]): env["AS"] = mingw_bin_prefix + "as" + env.Append(ASFLAGS=["-c"]) if try_cmd("ar --version", env["mingw_prefix"], env["arch"]): env["AR"] = mingw_bin_prefix + "ar" if try_cmd("ranlib --version", env["mingw_prefix"], env["arch"]): diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 838beddac2..c1b3540f68 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -38,6 +38,7 @@ #include "core/version.h" #include "drivers/png/png_driver_common.h" #include "main/main.h" +#include "scene/resources/texture.h" #if defined(VULKAN_ENABLED) #include "rendering_context_driver_vulkan_windows.h" @@ -3807,9 +3808,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA case WM_ACTIVATE: { // Activation can happen just after the window has been created, even before the callbacks are set. // Therefore, it's safer to defer the delivery of the event. - if (!windows[window_id].activate_timer_id) { - windows[window_id].activate_timer_id = SetTimer(windows[window_id].hWnd, 1, USER_TIMER_MINIMUM, (TIMERPROC) nullptr); - } + // It's important to set an nIDEvent different from the SetTimer for move_timer_id because + // if the same nIDEvent is passed, the timer is replaced and the same timer_id is returned. + windows[window_id].activate_timer_id = SetTimer(windows[window_id].hWnd, DisplayServerWindows::TIMER_ID_WINDOW_ACTIVATION, USER_TIMER_MINIMUM, (TIMERPROC) nullptr); windows[window_id].activate_state = GET_WM_ACTIVATE_STATE(wParam, lParam); return 0; } break; @@ -4727,7 +4728,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA case WM_ENTERSIZEMOVE: { Input::get_singleton()->release_pressed_events(); - windows[window_id].move_timer_id = SetTimer(windows[window_id].hWnd, 1, USER_TIMER_MINIMUM, (TIMERPROC) nullptr); + windows[window_id].move_timer_id = SetTimer(windows[window_id].hWnd, DisplayServerWindows::TIMER_ID_MOVE_REDRAW, USER_TIMER_MINIMUM, (TIMERPROC) nullptr); } break; case WM_EXITSIZEMOVE: { KillTimer(windows[window_id].hWnd, windows[window_id].move_timer_id); @@ -5873,7 +5874,14 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win #if defined(RD_ENABLED) if (rendering_context) { rendering_device = memnew(RenderingDevice); - rendering_device->initialize(rendering_context, MAIN_WINDOW_ID); + if (rendering_device->initialize(rendering_context, MAIN_WINDOW_ID) != OK) { + memdelete(rendering_device); + rendering_device = nullptr; + memdelete(rendering_context); + rendering_context = nullptr; + r_error = ERR_UNAVAILABLE; + return; + } rendering_device->screen_create(MAIN_WINDOW_ID); RendererCompositorRD::make_current(); diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 382f18c239..c2f4de7d81 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -332,6 +332,11 @@ class DisplayServerWindows : public DisplayServer { String tablet_driver; Vector<String> tablet_drivers; + enum TimerID { + TIMER_ID_MOVE_REDRAW = 1, + TIMER_ID_WINDOW_ACTIVATION = 2, + }; + enum { KEY_EVENT_BUFFER_SIZE = 512 }; diff --git a/platform/windows/export/logo.svg b/platform/windows/export/logo.svg index 77a0b20766..fd7d6bd3a2 100644 --- a/platform/windows/export/logo.svg +++ b/platform/windows/export/logo.svg @@ -1 +1 @@ -<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m1 5.132 12.295-1.694v11.879H1zm0 21.736 12.295 1.695V16.83H1zm13.647 1.875L31 31V16.83H14.647zm0-25.486v12.06H31V1z" fill="#00abed"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path fill="#00abed" d="m1 5.132 12.295-1.694v11.879H1zm0 21.736 12.295 1.695V16.83H1zm13.647 1.875L31 31V16.83H14.647zm0-25.486v12.06H31V1z"/></svg>
\ No newline at end of file diff --git a/platform/windows/export/run_icon.svg b/platform/windows/export/run_icon.svg index 6a18433ed2..5a21fc139e 100644 --- a/platform/windows/export/run_icon.svg +++ b/platform/windows/export/run_icon.svg @@ -1 +1 @@ -<svg height="16" width="16" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m1.095 2.997 5.66-.78v5.469h-5.66zm0 10.006 5.66.78v-5.4h-5.66zm6.282.863 7.528 1.04V8.381H7.377Zm0-11.732v5.552h7.528V1.095Z" fill="#00abed" style="fill:#e0e0e0;fill-opacity:1"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="16" height="16"><path fill="#e0e0e0" d="m1.095 2.997 5.66-.78v5.469h-5.66zm0 10.006 5.66.78v-5.4h-5.66zm6.282.863 7.528 1.04V8.381H7.377Zm0-11.732v5.552h7.528V1.095Z"/></svg>
\ No newline at end of file diff --git a/platform/windows/native_menu_windows.cpp b/platform/windows/native_menu_windows.cpp index d9dc28e9d9..fde55918e4 100644 --- a/platform/windows/native_menu_windows.cpp +++ b/platform/windows/native_menu_windows.cpp @@ -81,22 +81,6 @@ void NativeMenuWindows::_menu_activate(HMENU p_menu, int p_index) const { if (GetMenuItemInfoW(md->menu, p_index, true, &item)) { MenuItemData *item_data = (MenuItemData *)item.dwItemData; if (item_data) { - if (item_data->max_states > 0) { - item_data->state++; - if (item_data->state >= item_data->max_states) { - item_data->state = 0; - } - } - - if (item_data->checkable_type == CHECKABLE_TYPE_CHECK_BOX) { - if ((item.fState & MFS_CHECKED) == MFS_CHECKED) { - item.fState &= ~MFS_CHECKED; - } else { - item.fState |= MFS_CHECKED; - } - SetMenuItemInfoW(md->menu, p_index, true, &item); - } - if (item_data->callback.is_valid()) { Variant ret; Callable::CallError ce; @@ -619,9 +603,12 @@ bool NativeMenuWindows::is_item_checked(const RID &p_rid, int p_idx) const { MENUITEMINFOW item; ZeroMemory(&item, sizeof(item)); item.cbSize = sizeof(item); - item.fMask = MIIM_STATE; + item.fMask = MIIM_STATE | MIIM_DATA; if (GetMenuItemInfoW(md->menu, p_idx, true, &item)) { - return (item.fState & MFS_CHECKED) == MFS_CHECKED; + MenuItemData *item_data = (MenuItemData *)item.dwItemData; + if (item_data) { + return item_data->checked; + } } return false; } @@ -861,12 +848,16 @@ void NativeMenuWindows::set_item_checked(const RID &p_rid, int p_idx, bool p_che MENUITEMINFOW item; ZeroMemory(&item, sizeof(item)); item.cbSize = sizeof(item); - item.fMask = MIIM_STATE; + item.fMask = MIIM_STATE | MIIM_DATA; if (GetMenuItemInfoW(md->menu, p_idx, true, &item)) { - if (p_checked) { - item.fState |= MFS_CHECKED; - } else { - item.fState &= ~MFS_CHECKED; + MenuItemData *item_data = (MenuItemData *)item.dwItemData; + if (item_data) { + item_data->checked = p_checked; + if (p_checked) { + item.fState |= MFS_CHECKED; + } else { + item.fState &= ~MFS_CHECKED; + } } SetMenuItemInfoW(md->menu, p_idx, true, &item); } diff --git a/platform/windows/native_menu_windows.h b/platform/windows/native_menu_windows.h index 5c4aaa52c8..235a4b332a 100644 --- a/platform/windows/native_menu_windows.h +++ b/platform/windows/native_menu_windows.h @@ -51,6 +51,7 @@ class NativeMenuWindows : public NativeMenu { Callable callback; Variant meta; GlobalMenuCheckType checkable_type; + bool checked = false; int max_states = 0; int state = 0; Ref<Image> img; diff --git a/platform/windows/windows_utils.cpp b/platform/windows/windows_utils.cpp index 9b53252b07..9e0b9eed8a 100644 --- a/platform/windows/windows_utils.cpp +++ b/platform/windows/windows_utils.cpp @@ -220,7 +220,7 @@ Error WindowsUtils::copy_and_rename_pdb(const String &p_dll_path) { int original_path_size = pdb_info.path.utf8().length(); // Double-check file bounds. - ERR_FAIL_INDEX_V_MSG(pdb_info.address + original_path_size, file->get_length(), FAILED, vformat("Failed to write a new PDB path. Probably '%s' has been changed.", p_dll_path)); + ERR_FAIL_UNSIGNED_INDEX_V_MSG(pdb_info.address + original_path_size, file->get_length(), FAILED, vformat("Failed to write a new PDB path. Probably '%s' has been changed.", p_dll_path)); Vector<uint8_t> u8 = new_pdb_name.to_utf8_buffer(); file->seek(pdb_info.address); diff --git a/scene/2d/animated_sprite_2d.cpp b/scene/2d/animated_sprite_2d.cpp index 6d380aed3c..b3f735e044 100644 --- a/scene/2d/animated_sprite_2d.cpp +++ b/scene/2d/animated_sprite_2d.cpp @@ -267,7 +267,7 @@ void AnimatedSprite2D::_notification(int p_what) { } if (get_viewport() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { - ofs = ofs.round(); + ofs = (ofs + Point2(0.5, 0.5)).floor(); } Rect2 dst_rect(ofs, s); @@ -473,9 +473,10 @@ void AnimatedSprite2D::play(const StringName &p_name, float p_custom_scale, bool playing = true; custom_speed_scale = p_custom_scale; - int end_frame = MAX(0, frames->get_frame_count(animation) - 1); if (name != animation) { animation = name; + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); + if (p_from_end) { set_frame_and_progress(end_frame, 1.0); } else { @@ -483,7 +484,9 @@ void AnimatedSprite2D::play(const StringName &p_name, float p_custom_scale, bool } emit_signal(SceneStringName(animation_changed)); } else { + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); bool is_backward = signbit(speed_scale * custom_speed_scale); + if (p_from_end && is_backward && frame == 0 && frame_progress <= 0.0) { set_frame_and_progress(end_frame, 1.0); } else if (!p_from_end && !is_backward && frame == end_frame && frame_progress >= 1.0) { diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 514c5e7a8f..7020d162fe 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -302,6 +302,12 @@ void Camera2D::_notification(int p_what) { _interpolation_data.xform_prev = _interpolation_data.xform_curr; } break; + case NOTIFICATION_PAUSED: { + if (is_physics_interpolated_and_enabled()) { + _update_scroll(); + } + } break; + case NOTIFICATION_TRANSFORM_CHANGED: { if ((!position_smoothing_enabled && !is_physics_interpolated_and_enabled()) || _is_editing_in_editor()) { _update_scroll(); diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index 8754e35e88..be2da8b97a 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -108,7 +108,7 @@ protected: struct InterpolationData { Transform2D xform_curr; Transform2D xform_prev; - uint32_t last_update_physics_tick = 0; + uint32_t last_update_physics_tick = UINT32_MAX; // Ensure tick 0 is detected as a change. } _interpolation_data; void _ensure_update_interpolation_data(); diff --git a/scene/2d/navigation_agent_2d.cpp b/scene/2d/navigation_agent_2d.cpp index 9e3e6ea583..d0fae611d8 100644 --- a/scene/2d/navigation_agent_2d.cpp +++ b/scene/2d/navigation_agent_2d.cpp @@ -671,8 +671,6 @@ void NavigationAgent2D::_update_navigation() { return; } - update_frame_id = Engine::get_singleton()->get_physics_frames(); - Vector2 origin = agent_parent->get_global_position(); bool reload_path = false; @@ -767,7 +765,6 @@ void NavigationAgent2D::_request_repath() { target_reached = false; navigation_finished = false; last_waypoint_reached = false; - update_frame_id = 0; } bool NavigationAgent2D::_is_last_waypoint() const { diff --git a/scene/2d/navigation_agent_2d.h b/scene/2d/navigation_agent_2d.h index 0acfc82162..8741f578d0 100644 --- a/scene/2d/navigation_agent_2d.h +++ b/scene/2d/navigation_agent_2d.h @@ -91,8 +91,6 @@ class NavigationAgent2D : public Node { bool target_reached = false; bool navigation_finished = true; bool last_waypoint_reached = false; - // No initialized on purpose - uint32_t update_frame_id = 0; // Debug properties for exposed bindings bool debug_enabled = false; diff --git a/scene/2d/parallax_2d.cpp b/scene/2d/parallax_2d.cpp index aacab3213d..b3586a1da0 100644 --- a/scene/2d/parallax_2d.cpp +++ b/scene/2d/parallax_2d.cpp @@ -86,11 +86,10 @@ void Parallax2D::_update_scroll() { } Point2 scroll_ofs = screen_offset; - Size2 vps = get_viewport_rect().size; - if (Engine::get_singleton()->is_editor_hint()) { - vps = Size2(GLOBAL_GET("display/window/size/viewport_width"), GLOBAL_GET("display/window/size/viewport_height")); - } else { + if (!Engine::get_singleton()->is_editor_hint()) { + Size2 vps = get_viewport_rect().size; + if (limit_begin.x <= limit_end.x - vps.x) { scroll_ofs.x = CLAMP(scroll_ofs.x, limit_begin.x, limit_end.x - vps.x); } diff --git a/scene/2d/skeleton_2d.cpp b/scene/2d/skeleton_2d.cpp index fe21c7f21b..8aa50668eb 100644 --- a/scene/2d/skeleton_2d.cpp +++ b/scene/2d/skeleton_2d.cpp @@ -30,6 +30,8 @@ #include "skeleton_2d.h" +#include "core/math/transform_interpolator.h" + #ifdef TOOLS_ENABLED #include "editor/editor_data.h" #include "editor/editor_settings.h" @@ -634,6 +636,30 @@ Bone2D *Skeleton2D::get_bone(int p_idx) { return bones[p_idx].bone; } +void Skeleton2D::_update_process_mode() { + bool process = modification_stack.is_valid() && is_inside_tree(); + if (!process) { + // We might have another reason to process. + process = is_physics_interpolated_and_enabled() && is_visible_in_tree(); + } + + set_process_internal(process); + set_physics_process_internal(process); +} + +void Skeleton2D::_ensure_update_interpolation_data() { + uint64_t tick = Engine::get_singleton()->get_physics_frames(); + + if (_interpolation_data.last_update_physics_tick != tick) { + _interpolation_data.xform_prev = _interpolation_data.xform_curr; + _interpolation_data.last_update_physics_tick = tick; + } +} + +void Skeleton2D::_physics_interpolated_changed() { + _update_process_mode(); +} + void Skeleton2D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { @@ -646,17 +672,47 @@ void Skeleton2D::_notification(int p_what) { request_ready(); } break; + case NOTIFICATION_ENTER_TREE: { + _update_process_mode(); + + if (is_physics_interpolated_and_enabled()) { + _interpolation_data.xform_curr = get_global_transform(); + _interpolation_data.xform_prev = _interpolation_data.xform_curr; + } + } break; + case NOTIFICATION_TRANSFORM_CHANGED: { - RS::get_singleton()->skeleton_set_base_transform_2d(skeleton, get_global_transform()); + if (is_physics_interpolated_and_enabled()) { + _ensure_update_interpolation_data(); + if (Engine::get_singleton()->is_in_physics_frame()) { + _interpolation_data.xform_curr = get_global_transform(); + } + } else { + RS::get_singleton()->skeleton_set_base_transform_2d(skeleton, get_global_transform()); + } + } break; + + case NOTIFICATION_RESET_PHYSICS_INTERPOLATION: { + _interpolation_data.xform_curr = get_global_transform(); + _interpolation_data.xform_prev = _interpolation_data.xform_curr; } break; case NOTIFICATION_INTERNAL_PROCESS: { + if (is_physics_interpolated_and_enabled()) { + Transform2D res; + TransformInterpolator::interpolate_transform_2d(_interpolation_data.xform_prev, _interpolation_data.xform_curr, res, Engine::get_singleton()->get_physics_interpolation_fraction()); + RS::get_singleton()->skeleton_set_base_transform_2d(skeleton, res); + } if (modification_stack.is_valid()) { execute_modifications(get_process_delta_time(), SkeletonModificationStack2D::EXECUTION_MODE::execution_mode_process); } } break; case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { + if (is_physics_interpolated_and_enabled()) { + _ensure_update_interpolation_data(); + _interpolation_data.xform_curr = get_global_transform(); + } if (modification_stack.is_valid()) { execute_modifications(get_physics_process_delta_time(), SkeletonModificationStack2D::EXECUTION_MODE::execution_mode_physics_process); } @@ -666,6 +722,10 @@ void Skeleton2D::_notification(int p_what) { set_modification_stack(modification_stack); } break; + case NOTIFICATION_VISIBILITY_CHANGED: { + _update_process_mode(); + } break; + #ifdef TOOLS_ENABLED case NOTIFICATION_DRAW: { if (Engine::get_singleton()->is_editor_hint()) { @@ -698,22 +758,17 @@ void Skeleton2D::set_modification_stack(Ref<SkeletonModificationStack2D> p_stack if (modification_stack.is_valid()) { modification_stack->is_setup = false; modification_stack->set_skeleton(nullptr); - - set_process_internal(false); - set_physics_process_internal(false); } modification_stack = p_stack; if (modification_stack.is_valid() && is_inside_tree()) { modification_stack->set_skeleton(this); modification_stack->setup(); - set_process_internal(true); - set_physics_process_internal(true); - #ifdef TOOLS_ENABLED modification_stack->set_editor_gizmos_dirty(true); #endif // TOOLS_ENABLED } + _update_process_mode(); } Ref<SkeletonModificationStack2D> Skeleton2D::get_modification_stack() const { diff --git a/scene/2d/skeleton_2d.h b/scene/2d/skeleton_2d.h index ad6a47bf43..033bdff41d 100644 --- a/scene/2d/skeleton_2d.h +++ b/scene/2d/skeleton_2d.h @@ -137,7 +137,21 @@ class Skeleton2D : public Node2D { Ref<SkeletonModificationStack2D> modification_stack; + /////////////////////////////////////////////////////// + // INTERPOLATION + struct InterpolationData { + Transform2D xform_curr; + Transform2D xform_prev; + uint32_t last_update_physics_tick = UINT32_MAX; // Ensure tick 0 is detected as a change. + } _interpolation_data; + + void _update_process_mode(); + void _ensure_update_interpolation_data(); + protected: + virtual void _physics_interpolated_changed() override; + /////////////////////////////////////////////////////// + void _notification(int p_what); static void _bind_methods(); bool _set(const StringName &p_path, const Variant &p_value); diff --git a/scene/2d/sprite_2d.cpp b/scene/2d/sprite_2d.cpp index efb5029ac4..2b5c40f212 100644 --- a/scene/2d/sprite_2d.cpp +++ b/scene/2d/sprite_2d.cpp @@ -98,7 +98,7 @@ void Sprite2D::_get_rects(Rect2 &r_src_rect, Rect2 &r_dst_rect, bool &r_filter_c } if (get_viewport() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { - dest_offset = dest_offset.round(); + dest_offset = (dest_offset + Point2(0.5, 0.5)).floor(); } r_dst_rect = Rect2(dest_offset, frame_size); @@ -400,7 +400,7 @@ Rect2 Sprite2D::get_rect() const { } if (get_viewport() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { - ofs = ofs.round(); + ofs = (ofs + Point2(0.5, 0.5)).floor(); } if (s == Size2(0, 0)) { diff --git a/scene/2d/tile_map_layer.cpp b/scene/2d/tile_map_layer.cpp index b6d0a8d73a..437790bb99 100644 --- a/scene/2d/tile_map_layer.cpp +++ b/scene/2d/tile_map_layer.cpp @@ -1887,6 +1887,12 @@ void TileMapLayer::_update_self_texture_repeat(RS::CanvasItemTextureRepeat p_tex emit_signal(CoreStringName(changed)); } +#ifdef TOOLS_ENABLED +bool TileMapLayer::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { + return tile_set.is_valid() && get_cell_source_id(local_to_map(p_point)) != TileSet::INVALID_SOURCE; +} +#endif + void TileMapLayer::set_as_tile_map_internal_node(int p_index) { // Compatibility with TileMap. ERR_FAIL_NULL(get_parent()); diff --git a/scene/2d/tile_map_layer.h b/scene/2d/tile_map_layer.h index b0aaaafe5d..c71f13d7be 100644 --- a/scene/2d/tile_map_layer.h +++ b/scene/2d/tile_map_layer.h @@ -393,6 +393,10 @@ protected: virtual void _update_self_texture_repeat(RS::CanvasItemTextureRepeat p_texture_repeat) override; public: +#ifdef TOOLS_ENABLED + virtual bool _edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const override; +#endif + // TileMap node. void set_as_tile_map_internal_node(int p_index); int get_index_in_tile_map() const { diff --git a/scene/3d/bone_attachment_3d.cpp b/scene/3d/bone_attachment_3d.cpp index 6aade24e4e..4889512037 100644 --- a/scene/3d/bone_attachment_3d.cpp +++ b/scene/3d/bone_attachment_3d.cpp @@ -239,9 +239,20 @@ int BoneAttachment3D::get_bone_idx() const { } void BoneAttachment3D::set_override_pose(bool p_override) { + if (override_pose == p_override) { + return; + } + override_pose = p_override; set_notify_transform(override_pose); set_process_internal(override_pose); + if (!override_pose && bone_idx >= 0) { + Skeleton3D *sk = _get_skeleton3d(); + if (sk) { + sk->reset_bone_pose(bone_idx); + } + } + notify_property_list_changed(); } diff --git a/scene/3d/navigation_agent_3d.cpp b/scene/3d/navigation_agent_3d.cpp index dff413f5d2..5bbb724e2f 100644 --- a/scene/3d/navigation_agent_3d.cpp +++ b/scene/3d/navigation_agent_3d.cpp @@ -737,8 +737,6 @@ void NavigationAgent3D::_update_navigation() { return; } - update_frame_id = Engine::get_singleton()->get_physics_frames(); - Vector3 origin = agent_parent->get_global_position(); bool reload_path = false; @@ -835,7 +833,6 @@ void NavigationAgent3D::_request_repath() { target_reached = false; navigation_finished = false; last_waypoint_reached = false; - update_frame_id = 0; } bool NavigationAgent3D::_is_last_waypoint() const { diff --git a/scene/3d/navigation_agent_3d.h b/scene/3d/navigation_agent_3d.h index ade6afd445..d5721a56c8 100644 --- a/scene/3d/navigation_agent_3d.h +++ b/scene/3d/navigation_agent_3d.h @@ -98,8 +98,6 @@ class NavigationAgent3D : public Node { bool target_reached = false; bool navigation_finished = true; bool last_waypoint_reached = false; - // No initialized on purpose - uint32_t update_frame_id = 0; // Debug properties for exposed bindings bool debug_enabled = false; diff --git a/scene/3d/occluder_instance_3d.h b/scene/3d/occluder_instance_3d.h index f607877e8f..91445710b3 100644 --- a/scene/3d/occluder_instance_3d.h +++ b/scene/3d/occluder_instance_3d.h @@ -161,7 +161,7 @@ public: }; class OccluderInstance3D : public VisualInstance3D { - GDCLASS(OccluderInstance3D, Node3D); + GDCLASS(OccluderInstance3D, VisualInstance3D); private: Ref<Occluder3D> occluder; diff --git a/scene/3d/physics/physical_bone_3d.cpp b/scene/3d/physics/physical_bone_3d.cpp index c290f16c0d..294690a89a 100644 --- a/scene/3d/physics/physical_bone_3d.cpp +++ b/scene/3d/physics/physical_bone_3d.cpp @@ -764,7 +764,7 @@ void PhysicalBone3D::_notification(int p_what) { case NOTIFICATION_EXIT_TREE: { PhysicalBoneSimulator3D *simulator = get_simulator(); if (simulator) { - if (-1 != bone_id) { + if (bone_id != -1) { simulator->unbind_physical_bone_from_bone(bone_id); bone_id = -1; } @@ -816,7 +816,7 @@ void PhysicalBone3D::_body_state_changed(PhysicsDirectBodyState3D *p_state) { PhysicalBoneSimulator3D *simulator = get_simulator(); Skeleton3D *skeleton = get_skeleton(); if (simulator && skeleton) { - if (-1 != bone_id) { + if (bone_id != -1) { simulator->set_bone_global_pose(bone_id, skeleton->get_global_transform().affine_inverse() * (global_transform * body_offset_inverse)); } } @@ -1293,7 +1293,7 @@ void PhysicalBone3D::update_bone_id() { const int new_bone_id = simulator->find_bone(bone_name); if (new_bone_id != bone_id) { - if (-1 != bone_id) { + if (bone_id != -1) { // Assert the unbind from old node simulator->unbind_physical_bone_from_bone(bone_id); } @@ -1313,7 +1313,7 @@ void PhysicalBone3D::update_offset() { Skeleton3D *skeleton = get_skeleton(); if (simulator && skeleton) { Transform3D bone_transform(skeleton->get_global_transform()); - if (-1 != bone_id) { + if (bone_id != -1) { bone_transform *= simulator->get_bone_global_pose(bone_id); } @@ -1328,7 +1328,7 @@ void PhysicalBone3D::update_offset() { } void PhysicalBone3D::_start_physics_simulation() { - if (_internal_simulate_physics || !simulator_id.is_valid()) { + if (_internal_simulate_physics || !simulator_id.is_valid() || bone_id == -1) { return; } reset_to_rest_position(); @@ -1344,7 +1344,7 @@ void PhysicalBone3D::_start_physics_simulation() { void PhysicalBone3D::_stop_physics_simulation() { PhysicalBoneSimulator3D *simulator = get_simulator(); if (simulator) { - if (simulator->is_simulating_physics()) { + if (simulator->is_active() && bone_id != -1) { set_body_mode(PhysicsServer3D::BODY_MODE_KINEMATIC); PhysicsServer3D::get_singleton()->body_set_collision_layer(get_rid(), get_collision_layer()); PhysicsServer3D::get_singleton()->body_set_collision_mask(get_rid(), get_collision_mask()); diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index 21e82adf47..b5263add48 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -308,6 +308,7 @@ void Skeleton3D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { _process_changed(); + _make_dirty(); _make_modifiers_dirty(); force_update_all_dirty_bones(); #ifndef DISABLE_DEPRECATED @@ -333,6 +334,13 @@ void Skeleton3D::_notification(int p_what) { _process_modifiers(); } + // Abort if pose is not changed. + if (!(update_flags & UPDATE_FLAG_POSE)) { + updating = false; + update_flags = UPDATE_FLAG_NONE; + return; + } + emit_signal(SceneStringName(skeleton_updated)); // Update skins. @@ -400,13 +408,13 @@ void Skeleton3D::_notification(int p_what) { } updating = false; - is_update_needed = false; + update_flags = UPDATE_FLAG_NONE; } break; case NOTIFICATION_INTERNAL_PROCESS: case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { _find_modifiers(); if (!modifiers.is_empty()) { - _update_deferred(); + _update_deferred(UPDATE_FLAG_MODIFIER); } } break; } @@ -436,7 +444,7 @@ void Skeleton3D::_process_changed() { void Skeleton3D::_make_modifiers_dirty() { modifiers_dirty = true; - _update_deferred(); + _update_deferred(UPDATE_FLAG_MODIFIER); } Transform3D Skeleton3D::get_bone_global_pose(int p_bone) const { @@ -745,10 +753,12 @@ void Skeleton3D::_make_dirty() { _update_deferred(); } -void Skeleton3D::_update_deferred() { - if (!is_update_needed && !updating && is_inside_tree()) { - is_update_needed = true; - notify_deferred_thread_group(NOTIFICATION_UPDATE_SKELETON); // It must never be called more than once in a single frame. +void Skeleton3D::_update_deferred(UpdateFlag p_update_flag) { + if (is_inside_tree()) { + if (update_flags == UPDATE_FLAG_NONE && !updating) { + notify_deferred_thread_group(NOTIFICATION_UPDATE_SKELETON); // It must never be called more than once in a single frame. + } + update_flags |= p_update_flag; } } @@ -1130,7 +1140,8 @@ void Skeleton3D::set_animate_physical_bones(bool p_enabled) { if (!sim) { return; } - sim->set_active(p_enabled); + animate_physical_bones = p_enabled; + sim->set_active(animate_physical_bones || sim->is_simulating_physics()); } bool Skeleton3D::get_animate_physical_bones() const { @@ -1138,7 +1149,7 @@ bool Skeleton3D::get_animate_physical_bones() const { if (!sim) { return false; } - return sim->is_active(); + return animate_physical_bones; } void Skeleton3D::physical_bones_stop_simulation() { @@ -1147,7 +1158,7 @@ void Skeleton3D::physical_bones_stop_simulation() { return; } sim->physical_bones_stop_simulation(); - sim->set_active(false); + sim->set_active(animate_physical_bones || sim->is_simulating_physics()); } void Skeleton3D::physical_bones_start_simulation_on(const TypedArray<StringName> &p_bones) { diff --git a/scene/3d/skeleton_3d.h b/scene/3d/skeleton_3d.h index b8e38242b9..2d70aafcad 100644 --- a/scene/3d/skeleton_3d.h +++ b/scene/3d/skeleton_3d.h @@ -67,6 +67,7 @@ class Skeleton3D : public Node3D { GDCLASS(Skeleton3D, Node3D); #ifndef DISABLE_DEPRECATED + bool animate_physical_bones = false; Node *simulator = nullptr; void setup_simulator(); #endif // _DISABLE_DEPRECATED @@ -80,8 +81,14 @@ public: private: friend class SkinReference; - void _update_deferred(); - bool is_update_needed = false; // Is updating reserved? + enum UpdateFlag { + UPDATE_FLAG_NONE = 1, + UPDATE_FLAG_MODIFIER = 2, + UPDATE_FLAG_POSE = 4, + }; + + void _update_deferred(UpdateFlag p_update_flag = UPDATE_FLAG_POSE); + uint8_t update_flags = UPDATE_FLAG_NONE; bool updating = false; // Is updating now? struct Bone { diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index ba3b32a031..8ac585719c 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -984,7 +984,7 @@ void Sprite3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "hframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_hframes", "get_hframes"); ADD_PROPERTY(PropertyInfo(Variant::INT, "vframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_vframes", "get_vframes"); ADD_PROPERTY(PropertyInfo(Variant::INT, "frame"), "set_frame", "get_frame"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "frame_coords", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_frame_coords", "get_frame_coords"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "frame_coords", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_frame_coords", "get_frame_coords"); ADD_GROUP("Region", "region_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "region_enabled"), "set_region_enabled", "is_region_enabled"); ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect", PROPERTY_HINT_NONE, "suffix:px"), "set_region_rect", "get_region_rect"); @@ -1334,9 +1334,10 @@ void AnimatedSprite3D::play(const StringName &p_name, float p_custom_scale, bool playing = true; custom_speed_scale = p_custom_scale; - int end_frame = MAX(0, frames->get_frame_count(animation) - 1); if (name != animation) { animation = name; + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); + if (p_from_end) { set_frame_and_progress(end_frame, 1.0); } else { @@ -1344,7 +1345,9 @@ void AnimatedSprite3D::play(const StringName &p_name, float p_custom_scale, bool } emit_signal(SceneStringName(animation_changed)); } else { + int end_frame = MAX(0, frames->get_frame_count(animation) - 1); bool is_backward = signbit(speed_scale * custom_speed_scale); + if (p_from_end && is_backward && frame == 0 && frame_progress <= 0.0) { set_frame_and_progress(end_frame, 1.0); } else if (!p_from_end && !is_backward && frame == end_frame && frame_progress >= 1.0) { diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index 1c4a5ff20e..e7626b3c2d 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -150,6 +150,7 @@ void AnimationMixer::_animation_set_cache_update() { ad.name = key; ad.last_update = animation_set_update_pass; animation_set.insert(ad.name, ad); + cache_valid = false; // No need to delete the cache, but it must be updated to add track caches. } else { AnimationData &ad = animation_set[key]; if (ad.last_update != animation_set_update_pass) { @@ -690,7 +691,9 @@ bool AnimationMixer::_update_caches() { track = track_value; - track_value->init_value = anim->track_get_key_value(i, 0); + bool is_value = track_src_type == Animation::TYPE_VALUE; + + track_value->init_value = is_value ? anim->track_get_key_value(i, 0) : (anim->track_get_key_value(i, 0).operator Array())[0]; track_value->init_value.zero(); track_value->is_init = false; @@ -702,7 +705,7 @@ bool AnimationMixer::_update_caches() { if (has_reset_anim) { int rt = reset_anim->find_track(path, track_src_type); if (rt >= 0) { - if (track_src_type == Animation::TYPE_VALUE) { + if (is_value) { if (reset_anim->track_get_key_count(rt) > 0) { track_value->init_value = reset_anim->track_get_key_value(rt, 0); } diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index f270f32193..508b2c49fa 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -95,9 +95,9 @@ private: } bool operator<(const BlendKey &bk) const { if (from == bk.from) { - return to < bk.to; + return StringName::AlphCompare()(to, bk.to); } else { - return from < bk.from; + return StringName::AlphCompare()(from, bk.from); } } }; diff --git a/scene/audio/audio_stream_player_internal.cpp b/scene/audio/audio_stream_player_internal.cpp index 853638e47f..6653e01f25 100644 --- a/scene/audio/audio_stream_player_internal.cpp +++ b/scene/audio/audio_stream_player_internal.cpp @@ -152,6 +152,7 @@ Ref<AudioStreamPlayback> AudioStreamPlayerInternal::play_basic() { Ref<AudioSamplePlayback> sample_playback; sample_playback.instantiate(); sample_playback->stream = stream; + sample_playback->player_id = node->get_instance_id(); stream_playback->set_sample_playback(sample_playback); } } else if (!stream->is_meta_stream()) { @@ -276,9 +277,6 @@ bool AudioStreamPlayerInternal::is_playing() const { if (AudioServer::get_singleton()->is_playback_active(playback)) { return true; } - if (AudioServer::get_singleton()->is_sample_playback_active(playback)) { - return true; - } } return false; } diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index 4e738216de..dd344121e1 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -530,7 +530,7 @@ Size2 Button::get_minimum_size_for_text_and_icon(const String &p_text, Ref<Textu } } - return _get_largest_stylebox_size() + minsize; + return (theme_cache.align_to_largest_stylebox ? _get_largest_stylebox_size() : _get_current_stylebox()->get_minimum_size()) + minsize; } void Button::_shape(Ref<TextParagraph> p_paragraph, String p_text) { diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 0bdb487300..c3c4b1d3fb 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -2331,18 +2331,19 @@ void CodeEdit::move_lines_up() { unfold_line(line); swap_lines(line - 1, line); } - } - - // Fix selection if it ended at column 0, since it wasn't moved. - for (int i = 0; i < get_caret_count(); i++) { - if (has_selection(i) && get_selection_to_column(i) == 0 && get_selection_to_line(i) != 0) { - if (is_caret_after_selection_origin(i)) { - set_caret_line(get_caret_line(i) - 1, false, true, -1, i); - } else { - set_selection_origin_line(get_selection_origin_line(i) - 1, true, -1, i); + // Fix selection if the last one ends at column 0, since it wasn't moved. + for (int i = 0; i < get_caret_count(); i++) { + if (has_selection(i) && get_selection_to_column(i) == 0 && get_selection_to_line(i) == line_range.y + 1) { + if (is_caret_after_selection_origin(i)) { + set_caret_line(get_caret_line(i) - 1, false, true, -1, i); + } else { + set_selection_origin_line(get_selection_origin_line(i) - 1, true, -1, i); + } + break; } } } + adjust_viewport_to_caret(); end_multicaret_edit(); end_complex_operation(); @@ -2352,30 +2353,41 @@ void CodeEdit::move_lines_down() { begin_complex_operation(); begin_multicaret_edit(); - Vector<Point2i> line_ranges = get_line_ranges_from_carets(); - - // Fix selection if it ended at column 0, since it won't be moved. - for (int i = 0; i < get_caret_count(); i++) { - if (has_selection(i) && get_selection_to_column(i) == 0 && get_selection_to_line(i) != get_line_count() - 1) { - if (is_caret_after_selection_origin(i)) { - set_caret_line(get_caret_line(i) + 1, false, true, -1, i); - } else { - set_selection_origin_line(get_selection_origin_line(i) + 1, true, -1, i); - } - } - } - // Move lines down by swapping each line with the one below it. + Vector<Point2i> line_ranges = get_line_ranges_from_carets(); + // Reverse in case line ranges are adjacent, if the first ends at column 0. + line_ranges.reverse(); for (Point2i line_range : line_ranges) { if (line_range.y == get_line_count() - 1) { continue; } + // Fix selection if the last one ends at column 0, since it won't be moved. + bool selection_to_line_at_end = false; + for (int i = 0; i < get_caret_count(); i++) { + if (has_selection(i) && get_selection_to_column(i) == 0 && get_selection_to_line(i) == line_range.y + 1) { + selection_to_line_at_end = get_selection_to_line(i) == get_line_count() - 1; + if (selection_to_line_at_end) { + break; + } + if (is_caret_after_selection_origin(i)) { + set_caret_line(get_caret_line(i) + 1, false, true, -1, i); + } else { + set_selection_origin_line(get_selection_origin_line(i) + 1, true, -1, i); + } + break; + } + } + if (selection_to_line_at_end) { + continue; + } + unfold_line(line_range.y + 1); for (int line = line_range.y; line >= line_range.x; line--) { unfold_line(line); swap_lines(line + 1, line); } } + adjust_viewport_to_caret(); end_multicaret_edit(); end_complex_operation(); diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 0682c11a9b..1d53edbfa6 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -1732,11 +1732,15 @@ void Control::_size_changed() { new_size_cache.height = minimum_size.height; } - bool pos_changed = new_pos_cache != data.pos_cache; - bool size_changed = new_size_cache != data.size_cache; + bool pos_changed = !new_pos_cache.is_equal_approx(data.pos_cache); + bool size_changed = !new_size_cache.is_equal_approx(data.size_cache); - data.pos_cache = new_pos_cache; - data.size_cache = new_size_cache; + if (pos_changed) { + data.pos_cache = new_pos_cache; + } + if (size_changed) { + data.size_cache = new_size_cache; + } if (is_inside_tree()) { if (pos_changed || size_changed) { @@ -1751,12 +1755,10 @@ void Control::_size_changed() { } if (pos_changed && !size_changed) { - _update_canvas_item_transform(); //move because it won't be updated - } - } else { - if (pos_changed) { - _notify_transform(); + _update_canvas_item_transform(); } + } else if (pos_changed) { + _notify_transform(); } } diff --git a/scene/gui/flow_container.cpp b/scene/gui/flow_container.cpp index ceffd9d103..f77d66fe98 100644 --- a/scene/gui/flow_container.cpp +++ b/scene/gui/flow_container.cpp @@ -57,7 +57,7 @@ void FlowContainer::_resort() { int line_height = 0; int line_length = 0; float line_stretch_ratio_total = 0; - int current_container_size = vertical ? get_rect().size.y : get_rect().size.x; + int current_container_size = vertical ? get_size().y : get_size().x; int children_in_current_line = 0; Control *last_child = nullptr; diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 33756dc1fd..55a2c607e3 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -546,6 +546,11 @@ void GraphEdit::_graph_node_slot_updated(int p_index, Node *p_node) { GraphNode *graph_node = Object::cast_to<GraphNode>(p_node); ERR_FAIL_NULL(graph_node); + // Update all adjacent connections during the next redraw. + for (const Ref<Connection> &conn : connection_map[graph_node->get_name()]) { + conn->_cache.dirty = true; + } + minimap->queue_redraw(); queue_redraw(); connections_layer->queue_redraw(); @@ -782,7 +787,9 @@ Rect2 GraphEdit::_compute_shrinked_frame_rect(const GraphFrame *p_frame) { return Rect2(p_frame->get_position_offset(), Size2()); } - min_point -= Size2(autoshrink_margin, autoshrink_margin); + const Size2 titlebar_size = p_frame->get_titlebar_size(); + + min_point -= Size2(autoshrink_margin, MAX(autoshrink_margin, titlebar_size.y)); max_point += Size2(autoshrink_margin, autoshrink_margin); return Rect2(min_point, max_point - min_point); diff --git a/scene/gui/graph_frame.cpp b/scene/gui/graph_frame.cpp index 8cd7dbbeb5..e85d007262 100644 --- a/scene/gui/graph_frame.cpp +++ b/scene/gui/graph_frame.cpp @@ -262,6 +262,10 @@ HBoxContainer *GraphFrame::get_titlebar_hbox() { return titlebar_hbox; } +Size2 GraphFrame::get_titlebar_size() const { + return titlebar_hbox->get_size() + theme_cache.titlebar->get_minimum_size(); +} + void GraphFrame::set_drag_margin(int p_margin) { drag_margin = p_margin; } diff --git a/scene/gui/graph_frame.h b/scene/gui/graph_frame.h index 21346586c8..2af09cf872 100644 --- a/scene/gui/graph_frame.h +++ b/scene/gui/graph_frame.h @@ -89,6 +89,7 @@ public: int get_autoshrink_margin() const; HBoxContainer *get_titlebar_hbox(); + Size2 get_titlebar_size() const; void set_drag_margin(int p_margin); int get_drag_margin() const; diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index a67bba786b..5f04acf643 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -279,7 +279,7 @@ Size2 GridContainer::get_minimum_size() const { int valid_controls_index = 0; for (int i = 0; i < get_child_count(); i++) { - Control *c = as_sortable_control(get_child(i)); + Control *c = as_sortable_control(get_child(i), SortableVisbilityMode::VISIBLE); if (!c) { continue; } diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 4f07fdb87b..7f795ea710 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -2314,6 +2314,16 @@ bool PopupMenu::is_prefer_native_menu() const { return prefer_native; } +bool PopupMenu::is_native_menu() const { +#ifdef TOOLS_ENABLED + if (is_part_of_edited_scene()) { + return false; + } +#endif + + return global_menu.is_valid(); +} + bool PopupMenu::activate_item_by_event(const Ref<InputEvent> &p_event, bool p_for_global_only) { ERR_FAIL_COND_V(p_event.is_null(), false); Key code = Key::NONE; @@ -2643,6 +2653,7 @@ void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("set_prefer_native_menu", "enabled"), &PopupMenu::set_prefer_native_menu); ClassDB::bind_method(D_METHOD("is_prefer_native_menu"), &PopupMenu::is_prefer_native_menu); + ClassDB::bind_method(D_METHOD("is_native_menu"), &PopupMenu::is_native_menu); ClassDB::bind_method(D_METHOD("add_item", "label", "id", "accel"), &PopupMenu::add_item, DEFVAL(-1), DEFVAL(0)); ClassDB::bind_method(D_METHOD("add_icon_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_item, DEFVAL(-1), DEFVAL(0)); diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h index c6eef03aca..5313dae404 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -330,6 +330,8 @@ public: void set_prefer_native_menu(bool p_enabled); bool is_prefer_native_menu() const; + bool is_native_menu() const; + void scroll_to_item(int p_idx); bool activate_item_by_event(const Ref<InputEvent> &p_event, bool p_for_global_only = false); diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 416a7fafb6..8ffa0f8c63 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -1249,7 +1249,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o } if (is_inside_tree() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { - fx_offset = fx_offset.round(); + fx_offset = (fx_offset + Point2(0.5, 0.5)).floor(); } Vector2 char_off = char_xform.get_origin(); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 9b7c6249e6..9cc59f1def 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -207,6 +207,8 @@ void TextEdit::Text::invalidate_cache(int p_line, int p_column, bool p_text_chan text.write[p_line].data_buf->set_direction((TextServer::Direction)direction); text.write[p_line].data_buf->set_break_flags(flags); text.write[p_line].data_buf->set_preserve_control(draw_control_chars); + text.write[p_line].data_buf->set_custom_punctuation(get_enabled_word_separators()); + if (p_ime_text.length() > 0) { if (p_text_changed) { text.write[p_line].data_buf->add_string(p_ime_text, font, font_size, language); @@ -275,6 +277,8 @@ void TextEdit::Text::invalidate_all_lines() { } text.write[i].data_buf->set_width(width); text.write[i].data_buf->set_break_flags(flags); + text.write[i].data_buf->set_custom_punctuation(get_enabled_word_separators()); + if (tab_size_dirty) { if (tab_size > 0) { Vector<float> tabs; @@ -439,6 +443,57 @@ void TextEdit::Text::move_gutters(int p_from_line, int p_to_line) { text.write[p_from_line].gutters.resize(gutter_count); } +void TextEdit::Text::set_use_default_word_separators(bool p_enabled) { + if (use_default_word_separators == p_enabled) { + return; + } + use_default_word_separators = p_enabled; + invalidate_all_lines(); +} + +void TextEdit::Text::set_use_custom_word_separators(bool p_enabled) { + if (use_custom_word_separators == p_enabled) { + return; + } + use_custom_word_separators = p_enabled; + invalidate_all_lines(); +} + +bool TextEdit::Text::is_default_word_separators_enabled() const { + return use_default_word_separators; +} + +bool TextEdit::Text::is_custom_word_separators_enabled() const { + return use_custom_word_separators; +} + +String TextEdit::Text::get_custom_word_separators() const { + return custom_word_separators; +} + +String TextEdit::Text::get_default_word_separators() const { + String concat_separators = "!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~"; + for (char32_t ch = 0x2000; ch <= 0x206F; ++ch) { // General punctuation block. + concat_separators += ch; + } + for (char32_t ch = 0x3000; ch <= 0x303F; ++ch) { // CJK punctuation block. + concat_separators += ch; + } + return concat_separators; +} + +// Get default and/or custom word separators depending on the option enabled. +String TextEdit::Text::get_enabled_word_separators() const { + String all_separators; + if (use_default_word_separators) { + all_separators += get_default_word_separators(); + } + if (use_custom_word_separators) { + all_separators += get_custom_word_separators(); + } + return all_separators; +} + /////////////////////////////////////////////////////////////////////////////// /// TEXT EDIT /// /////////////////////////////////////////////////////////////////////////////// @@ -1588,21 +1643,14 @@ void TextEdit::_notification(int p_what) { } break; case NOTIFICATION_DRAG_END: { - if (is_drag_successful()) { - if (selection_drag_attempt) { - // Dropped elsewhere. - if (is_editable() && !Input::get_singleton()->is_key_pressed(Key::CMD_OR_CTRL)) { - delete_selection(); - } else if (deselect_on_focus_loss_enabled) { - deselect(); - } - } - } - if (drag_caret_index >= 0) { - if (drag_caret_index < carets.size()) { - remove_caret(drag_caret_index); + remove_drag_caret(); + if (selection_drag_attempt && is_drag_successful()) { + // Dropped elsewhere. + if (is_editable() && !Input::get_singleton()->is_key_pressed(Key::CMD_OR_CTRL)) { + delete_selection(); + } else if (deselect_on_focus_loss_enabled) { + deselect(); } - drag_caret_index = -1; } selection_drag_attempt = false; drag_action = false; @@ -4551,6 +4599,15 @@ void TextEdit::remove_caret(int p_caret) { } } +void TextEdit::remove_drag_caret() { + if (drag_caret_index >= 0) { + if (drag_caret_index < carets.size()) { + remove_caret(drag_caret_index); + } + drag_caret_index = -1; + } +} + void TextEdit::remove_secondary_carets() { if (carets.size() == 1) { return; @@ -6277,6 +6334,44 @@ bool TextEdit::is_highlight_all_occurrences_enabled() const { return highlight_all_occurrences; } +void TextEdit::set_use_default_word_separators(bool p_enabled) { + text.set_use_default_word_separators(p_enabled); +} + +bool TextEdit::is_default_word_separators_enabled() const { + return text.is_default_word_separators_enabled(); +} + +// Set word separators. Combine default separators with custom separators if those options are enabled. +void TextEdit::set_custom_word_separators(const String &p_separators) { + text.set_custom_word_separators(p_separators); +} + +void TextEdit::Text::set_custom_word_separators(const String &p_separators) { + if (custom_word_separators == p_separators) { + return; + } + custom_word_separators = p_separators; + invalidate_all_lines(); +} + +bool TextEdit::is_custom_word_separators_enabled() const { + return text.is_custom_word_separators_enabled(); +} + +String TextEdit::get_custom_word_separators() const { + return text.get_custom_word_separators(); +} + +// Enable or disable custom word separators. +void TextEdit::set_use_custom_word_separators(bool p_enabled) { + text.set_use_custom_word_separators(p_enabled); +} + +String TextEdit::get_default_word_separators() const { + return text.get_default_word_separators(); +} + void TextEdit::set_draw_control_chars(bool p_enabled) { if (draw_control_chars != p_enabled) { draw_control_chars = p_enabled; @@ -6551,6 +6646,14 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_word_under_caret", "caret_index"), &TextEdit::get_word_under_caret, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("set_use_default_word_separators", "enabled"), &TextEdit::set_use_default_word_separators); + ClassDB::bind_method(D_METHOD("is_default_word_separators_enabled"), &TextEdit::is_default_word_separators_enabled); + + ClassDB::bind_method(D_METHOD("set_use_custom_word_separators", "enabled"), &TextEdit::set_use_custom_word_separators); + ClassDB::bind_method(D_METHOD("is_custom_word_separators_enabled"), &TextEdit::is_custom_word_separators_enabled); + ClassDB::bind_method(D_METHOD("set_custom_word_separators", "custom_word_separators"), &TextEdit::set_custom_word_separators); + ClassDB::bind_method(D_METHOD("get_custom_word_separators"), &TextEdit::get_custom_word_separators); + /* Selection. */ BIND_ENUM_CONSTANT(SELECTION_MODE_NONE); BIND_ENUM_CONSTANT(SELECTION_MODE_SHIFT); @@ -6774,6 +6877,10 @@ void TextEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_mid_grapheme"), "set_caret_mid_grapheme_enabled", "is_caret_mid_grapheme_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_multiple"), "set_multiple_carets_enabled", "is_multiple_carets_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_default_word_separators"), "set_use_default_word_separators", "is_default_word_separators_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_custom_word_separators"), "set_use_custom_word_separators", "is_custom_word_separators_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "custom_word_separators"), "set_custom_word_separators", "get_custom_word_separators"); + ADD_GROUP("Highlighting", ""); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "syntax_highlighter", PROPERTY_HINT_RESOURCE_TYPE, "SyntaxHighlighter", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_ALWAYS_DUPLICATE), "set_syntax_highlighter", "get_syntax_highlighter"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), "set_highlight_all_occurrences", "is_highlight_all_occurrences_enabled"); diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index efade39876..4d9d169c1c 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -174,6 +174,9 @@ private: TextServer::Direction direction = TextServer::DIRECTION_AUTO; BitField<TextServer::LineBreakFlag> brk_flags = TextServer::BREAK_MANDATORY; bool draw_control_chars = false; + String custom_word_separators; + bool use_default_word_separators = true; + bool use_custom_word_separators = false; int line_height = -1; int max_width = -1; @@ -201,6 +204,18 @@ private: int get_line_width(int p_line, int p_wrap_index = -1) const; int get_max_width() const; + void set_use_default_word_separators(bool p_enabled); + bool is_default_word_separators_enabled() const; + + void set_use_custom_word_separators(bool p_enabled); + bool is_custom_word_separators_enabled() const; + + void set_word_separators(const String &p_separators); + void set_custom_word_separators(const String &p_separators); + String get_enabled_word_separators() const; + String get_custom_word_separators() const; + String get_default_word_separators() const; + void set_width(float p_width); float get_width() const; void set_brk_flags(BitField<TextServer::LineBreakFlag> p_flags); @@ -866,6 +881,7 @@ public: int add_caret(int p_line, int p_column); void remove_caret(int p_caret); + void remove_drag_caret(); void remove_secondary_carets(); int get_caret_count() const; void add_caret_at_carets(bool p_below); @@ -1068,6 +1084,19 @@ public: Color get_font_color() const; + /* Behavior */ + + String get_default_word_separators() const; + + void set_use_default_word_separators(bool p_enabled); + bool is_default_word_separators_enabled() const; + + void set_custom_word_separators(const String &p_separators); + void set_use_custom_word_separators(bool p_enabled); + bool is_custom_word_separators_enabled() const; + + String get_custom_word_separators() const; + /* Deprecated. */ #ifndef DISABLE_DEPRECATED Vector<int> get_caret_index_edit_order(); diff --git a/scene/gui/texture_progress_bar.cpp b/scene/gui/texture_progress_bar.cpp index 3c3e6cd30c..4ad56d21d3 100644 --- a/scene/gui/texture_progress_bar.cpp +++ b/scene/gui/texture_progress_bar.cpp @@ -31,7 +31,6 @@ #include "texture_progress_bar.h" #include "core/config/engine.h" -#include "scene/resources/atlas_texture.h" void TextureProgressBar::set_under_texture(const Ref<Texture2D> &p_texture) { _set_texture(&under, p_texture); @@ -513,15 +512,6 @@ void TextureProgressBar::_notification(int p_what) { } pts.push_back(to); - Ref<AtlasTexture> atlas_progress = progress; - bool valid_atlas_progress = atlas_progress.is_valid() && atlas_progress->get_atlas().is_valid(); - Rect2 region_rect; - Size2 atlas_size; - if (valid_atlas_progress) { - region_rect = atlas_progress->get_region(); - atlas_size = atlas_progress->get_atlas()->get_size(); - } - Vector<Point2> uvs; Vector<Point2> points; for (const float &f : pts) { @@ -530,10 +520,6 @@ void TextureProgressBar::_notification(int p_what) { continue; } points.push_back(progress_offset + Point2(uv.x * s.x, uv.y * s.y)); - if (valid_atlas_progress) { - uv.x = Math::remap(uv.x, 0, 1, region_rect.position.x / atlas_size.x, (region_rect.position.x + region_rect.size.x) / atlas_size.x); - uv.y = Math::remap(uv.y, 0, 1, region_rect.position.y / atlas_size.y, (region_rect.position.y + region_rect.size.y) / atlas_size.y); - } uvs.push_back(uv); } @@ -541,10 +527,6 @@ void TextureProgressBar::_notification(int p_what) { if (points.size() >= 2) { Point2 center_point = get_relative_center(); points.push_back(progress_offset + s * center_point); - if (valid_atlas_progress) { - center_point.x = Math::remap(center_point.x, 0, 1, region_rect.position.x / atlas_size.x, (region_rect.position.x + region_rect.size.x) / atlas_size.x); - center_point.y = Math::remap(center_point.y, 0, 1, region_rect.position.y / atlas_size.y, (region_rect.position.y + region_rect.size.y) / atlas_size.y); - } uvs.push_back(center_point); Vector<Color> colors; diff --git a/scene/gui/texture_rect.cpp b/scene/gui/texture_rect.cpp index c52f463905..972a832985 100644 --- a/scene/gui/texture_rect.cpp +++ b/scene/gui/texture_rect.cpp @@ -30,7 +30,6 @@ #include "texture_rect.h" -#include "scene/resources/atlas_texture.h" #include "servers/rendering_server.h" void TextureRect::_notification(int p_what) { @@ -92,15 +91,6 @@ void TextureRect::_notification(int p_what) { } break; } - Ref<AtlasTexture> p_atlas = texture; - - if (p_atlas.is_valid() && !region.has_area()) { - Size2 scale_size(size.width / texture->get_width(), size.height / texture->get_height()); - - offset.width += hflip ? p_atlas->get_margin().get_position().width * scale_size.width * 2 : 0; - offset.height += vflip ? p_atlas->get_margin().get_position().height * scale_size.height * 2 : 0; - } - size.width *= hflip ? -1.0f : 1.0f; size.height *= vflip ? -1.0f : 1.0f; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index d8059dc170..b0dfdacad0 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -3354,15 +3354,16 @@ void Tree::_go_up() { prev = selected_item->get_prev_visible(); } + int col = MAX(selected_col, 0); + if (select_mode == SELECT_MULTI) { if (!prev) { return; } - select_single_item(prev, get_root(), selected_col); + select_single_item(prev, get_root(), col); queue_redraw(); } else { - int col = selected_col < 0 ? 0 : selected_col; while (prev && !prev->cells[col].selectable) { prev = prev->get_prev_visible(); } @@ -3386,16 +3387,16 @@ void Tree::_go_down() { next = selected_item->get_next_visible(); } + int col = MAX(selected_col, 0); + if (select_mode == SELECT_MULTI) { if (!next) { return; } - select_single_item(next, get_root(), selected_col); + select_single_item(next, get_root(), col); queue_redraw(); } else { - int col = selected_col < 0 ? 0 : selected_col; - while (next && !next->cells[col].selectable) { next = next->get_next_visible(); } @@ -4471,7 +4472,7 @@ TreeItem *Tree::get_last_item() const { while (last) { if (last->next) { last = last->next; - } else if (last->first_child) { + } else if (last->first_child && !last->collapsed) { last = last->first_child; } else { break; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index ae8e2a493d..0396f3ab4a 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -177,6 +177,12 @@ void Node::_notification(int p_notification) { } } break; + case NOTIFICATION_PAUSED: { + if (is_physics_interpolated_and_enabled() && is_inside_tree()) { + reset_physics_interpolation(); + } + } break; + case NOTIFICATION_PATH_RENAMED: { if (data.path_cache) { memdelete(data.path_cache); @@ -2907,9 +2913,8 @@ void Node::_duplicate_properties(const Node *p_root, const Node *p_original, Nod arr[i] = p_copy->get_node_or_null(p_original->get_path_to(property_node)); } } - value = arr; - p_copy->set(name, value); } + p_copy->set(name, arr); } else { p_copy->set(name, value); } diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 468d4e3c0f..1302e3c53e 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -309,7 +309,8 @@ void Viewport::_sub_window_update(Window *p_window) { int index = _sub_window_find(p_window); ERR_FAIL_COND(index == -1); - const SubWindow &sw = gui.sub_windows[index]; + SubWindow &sw = gui.sub_windows.write[index]; + sw.pending_window_update = false; Transform2D pos; pos.set_origin(p_window->get_position()); @@ -972,6 +973,14 @@ void Viewport::update_canvas_items() { return; } + if (is_embedding_subwindows()) { + for (Viewport::SubWindow w : gui.sub_windows) { + if (w.window && !w.pending_window_update) { + w.pending_window_update = true; + callable_mp(this, &Viewport::_sub_window_update).call_deferred(w.window); + } + } + } _update_canvas_items(this); } @@ -4251,8 +4260,7 @@ bool Viewport::_camera_3d_add(Camera3D *p_camera) { void Viewport::_camera_3d_remove(Camera3D *p_camera) { camera_3d_set.erase(p_camera); if (camera_3d == p_camera) { - camera_3d->notification(Camera3D::NOTIFICATION_LOST_CURRENT); - camera_3d = nullptr; + _camera_3d_set(nullptr); } } diff --git a/scene/main/viewport.h b/scene/main/viewport.h index df09755d4f..0d31c07e57 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -340,6 +340,7 @@ private: Window *window = nullptr; RID canvas_item; Rect2i parent_safe_rect; + bool pending_window_update = false; }; // VRS diff --git a/scene/property_utils.cpp b/scene/property_utils.cpp index db17f9d643..94a037bd9b 100644 --- a/scene/property_utils.cpp +++ b/scene/property_utils.cpp @@ -44,6 +44,7 @@ bool PropertyUtils::is_property_value_different(const Object *p_object, const Va // This must be done because, as some scenes save as text, there might be a tiny difference in floats due to numerical error. return !Math::is_equal_approx((float)p_a, (float)p_b); } else if (p_a.get_type() == Variant::NODE_PATH && p_b.get_type() == Variant::OBJECT) { + // With properties of type Node, left side is NodePath, while right side is Node. const Node *base_node = Object::cast_to<Node>(p_object); const Node *target_node = Object::cast_to<Node>(p_b); if (base_node && target_node) { @@ -51,6 +52,23 @@ bool PropertyUtils::is_property_value_different(const Object *p_object, const Va } } + if (p_a.get_type() == Variant::ARRAY && p_b.get_type() == Variant::ARRAY) { + const Node *base_node = Object::cast_to<Node>(p_object); + Array array1 = p_a; + Array array2 = p_b; + + if (base_node && !array1.is_empty() && array2.size() == array1.size() && array1[0].get_type() == Variant::NODE_PATH && array2[0].get_type() == Variant::OBJECT) { + // Like above, but NodePaths/Nodes are inside arrays. + for (int i = 0; i < array1.size(); i++) { + const Node *target_node = Object::cast_to<Node>(array2[i]); + if (!target_node || array1[i] != base_node->get_path_to(target_node)) { + return true; + } + } + return false; + } + } + // For our purposes, treating null object as NIL is the right thing to do const Variant &a = p_a.get_type() == Variant::OBJECT && (Object *)p_a == nullptr ? Variant() : p_a; const Variant &b = p_b.get_type() == Variant::OBJECT && (Object *)p_b == nullptr ? Variant() : p_b; diff --git a/scene/resources/2d/navigation_mesh_source_geometry_data_2d.cpp b/scene/resources/2d/navigation_mesh_source_geometry_data_2d.cpp index aee743ccf2..686560829b 100644 --- a/scene/resources/2d/navigation_mesh_source_geometry_data_2d.cpp +++ b/scene/resources/2d/navigation_mesh_source_geometry_data_2d.cpp @@ -33,37 +33,58 @@ #include "scene/resources/mesh.h" void NavigationMeshSourceGeometryData2D::clear() { + RWLockWrite write_lock(geometry_rwlock); traversable_outlines.clear(); obstruction_outlines.clear(); - clear_projected_obstructions(); + _projected_obstructions.clear(); } +bool NavigationMeshSourceGeometryData2D::has_data() { + RWLockRead read_lock(geometry_rwlock); + return traversable_outlines.size(); +}; + void NavigationMeshSourceGeometryData2D::clear_projected_obstructions() { RWLockWrite write_lock(geometry_rwlock); _projected_obstructions.clear(); } void NavigationMeshSourceGeometryData2D::_set_traversable_outlines(const Vector<Vector<Vector2>> &p_traversable_outlines) { + RWLockWrite write_lock(geometry_rwlock); traversable_outlines = p_traversable_outlines; } void NavigationMeshSourceGeometryData2D::_set_obstruction_outlines(const Vector<Vector<Vector2>> &p_obstruction_outlines) { + RWLockWrite write_lock(geometry_rwlock); obstruction_outlines = p_obstruction_outlines; } +const Vector<Vector<Vector2>> &NavigationMeshSourceGeometryData2D::_get_traversable_outlines() const { + RWLockRead read_lock(geometry_rwlock); + return traversable_outlines; +} + +const Vector<Vector<Vector2>> &NavigationMeshSourceGeometryData2D::_get_obstruction_outlines() const { + RWLockRead read_lock(geometry_rwlock); + return obstruction_outlines; +} + void NavigationMeshSourceGeometryData2D::_add_traversable_outline(const Vector<Vector2> &p_shape_outline) { if (p_shape_outline.size() > 1) { + RWLockWrite write_lock(geometry_rwlock); traversable_outlines.push_back(p_shape_outline); } } void NavigationMeshSourceGeometryData2D::_add_obstruction_outline(const Vector<Vector2> &p_shape_outline) { if (p_shape_outline.size() > 1) { + RWLockWrite write_lock(geometry_rwlock); obstruction_outlines.push_back(p_shape_outline); } } void NavigationMeshSourceGeometryData2D::set_traversable_outlines(const TypedArray<Vector<Vector2>> &p_traversable_outlines) { + RWLockWrite write_lock(geometry_rwlock); traversable_outlines.resize(p_traversable_outlines.size()); for (int i = 0; i < p_traversable_outlines.size(); i++) { traversable_outlines.write[i] = p_traversable_outlines[i]; @@ -71,6 +92,7 @@ void NavigationMeshSourceGeometryData2D::set_traversable_outlines(const TypedArr } TypedArray<Vector<Vector2>> NavigationMeshSourceGeometryData2D::get_traversable_outlines() const { + RWLockRead read_lock(geometry_rwlock); TypedArray<Vector<Vector2>> typed_array_traversable_outlines; typed_array_traversable_outlines.resize(traversable_outlines.size()); for (int i = 0; i < typed_array_traversable_outlines.size(); i++) { @@ -81,6 +103,7 @@ TypedArray<Vector<Vector2>> NavigationMeshSourceGeometryData2D::get_traversable_ } void NavigationMeshSourceGeometryData2D::set_obstruction_outlines(const TypedArray<Vector<Vector2>> &p_obstruction_outlines) { + RWLockWrite write_lock(geometry_rwlock); obstruction_outlines.resize(p_obstruction_outlines.size()); for (int i = 0; i < p_obstruction_outlines.size(); i++) { obstruction_outlines.write[i] = p_obstruction_outlines[i]; @@ -88,6 +111,7 @@ void NavigationMeshSourceGeometryData2D::set_obstruction_outlines(const TypedArr } TypedArray<Vector<Vector2>> NavigationMeshSourceGeometryData2D::get_obstruction_outlines() const { + RWLockRead read_lock(geometry_rwlock); TypedArray<Vector<Vector2>> typed_array_obstruction_outlines; typed_array_obstruction_outlines.resize(obstruction_outlines.size()); for (int i = 0; i < typed_array_obstruction_outlines.size(); i++) { @@ -117,6 +141,7 @@ void NavigationMeshSourceGeometryData2D::append_obstruction_outlines(const Typed void NavigationMeshSourceGeometryData2D::add_traversable_outline(const PackedVector2Array &p_shape_outline) { if (p_shape_outline.size() > 1) { + RWLockWrite write_lock(geometry_rwlock); Vector<Vector2> traversable_outline; traversable_outline.resize(p_shape_outline.size()); for (int i = 0; i < p_shape_outline.size(); i++) { @@ -128,6 +153,7 @@ void NavigationMeshSourceGeometryData2D::add_traversable_outline(const PackedVec void NavigationMeshSourceGeometryData2D::add_obstruction_outline(const PackedVector2Array &p_shape_outline) { if (p_shape_outline.size() > 1) { + RWLockWrite write_lock(geometry_rwlock); Vector<Vector2> obstruction_outline; obstruction_outline.resize(p_shape_outline.size()); for (int i = 0; i < p_shape_outline.size(); i++) { @@ -140,29 +166,16 @@ void NavigationMeshSourceGeometryData2D::add_obstruction_outline(const PackedVec void NavigationMeshSourceGeometryData2D::merge(const Ref<NavigationMeshSourceGeometryData2D> &p_other_geometry) { ERR_FAIL_NULL(p_other_geometry); - // No need to worry about `root_node_transform` here as the data is already xformed. - traversable_outlines.append_array(p_other_geometry->traversable_outlines); - obstruction_outlines.append_array(p_other_geometry->obstruction_outlines); - - if (p_other_geometry->_projected_obstructions.size() > 0) { - RWLockWrite write_lock(geometry_rwlock); - - for (const ProjectedObstruction &other_projected_obstruction : p_other_geometry->_projected_obstructions) { - ProjectedObstruction projected_obstruction; - projected_obstruction.vertices.resize(other_projected_obstruction.vertices.size()); + Vector<Vector<Vector2>> other_traversable_outlines; + Vector<Vector<Vector2>> other_obstruction_outlines; + Vector<ProjectedObstruction> other_projected_obstructions; - const float *other_obstruction_vertices_ptr = other_projected_obstruction.vertices.ptr(); - float *obstruction_vertices_ptrw = projected_obstruction.vertices.ptrw(); + p_other_geometry->get_data(other_traversable_outlines, other_obstruction_outlines, other_projected_obstructions); - for (int j = 0; j < other_projected_obstruction.vertices.size(); j++) { - obstruction_vertices_ptrw[j] = other_obstruction_vertices_ptr[j]; - } - - projected_obstruction.carve = other_projected_obstruction.carve; - - _projected_obstructions.push_back(projected_obstruction); - } - } + RWLockWrite write_lock(geometry_rwlock); + traversable_outlines.append_array(other_traversable_outlines); + obstruction_outlines.append_array(other_obstruction_outlines); + _projected_obstructions.append_array(other_projected_obstructions); } void NavigationMeshSourceGeometryData2D::add_projected_obstruction(const Vector<Vector2> &p_vertices, bool p_carve) { @@ -248,6 +261,20 @@ bool NavigationMeshSourceGeometryData2D::_get(const StringName &p_name, Variant return false; } +void NavigationMeshSourceGeometryData2D::set_data(const Vector<Vector<Vector2>> &p_traversable_outlines, const Vector<Vector<Vector2>> &p_obstruction_outlines, Vector<ProjectedObstruction> &p_projected_obstructions) { + RWLockWrite write_lock(geometry_rwlock); + traversable_outlines = p_traversable_outlines; + obstruction_outlines = p_obstruction_outlines; + _projected_obstructions = p_projected_obstructions; +} + +void NavigationMeshSourceGeometryData2D::get_data(Vector<Vector<Vector2>> &r_traversable_outlines, Vector<Vector<Vector2>> &r_obstruction_outlines, Vector<ProjectedObstruction> &r_projected_obstructions) { + RWLockRead read_lock(geometry_rwlock); + r_traversable_outlines = traversable_outlines; + r_obstruction_outlines = obstruction_outlines; + r_projected_obstructions = _projected_obstructions; +} + void NavigationMeshSourceGeometryData2D::_bind_methods() { ClassDB::bind_method(D_METHOD("clear"), &NavigationMeshSourceGeometryData2D::clear); ClassDB::bind_method(D_METHOD("has_data"), &NavigationMeshSourceGeometryData2D::has_data); diff --git a/scene/resources/2d/navigation_mesh_source_geometry_data_2d.h b/scene/resources/2d/navigation_mesh_source_geometry_data_2d.h index aaa02ab40e..01e97eee48 100644 --- a/scene/resources/2d/navigation_mesh_source_geometry_data_2d.h +++ b/scene/resources/2d/navigation_mesh_source_geometry_data_2d.h @@ -62,10 +62,10 @@ public: }; void _set_traversable_outlines(const Vector<Vector<Vector2>> &p_traversable_outlines); - const Vector<Vector<Vector2>> &_get_traversable_outlines() const { return traversable_outlines; } + const Vector<Vector<Vector2>> &_get_traversable_outlines() const; void _set_obstruction_outlines(const Vector<Vector<Vector2>> &p_obstruction_outlines); - const Vector<Vector<Vector2>> &_get_obstruction_outlines() const { return obstruction_outlines; } + const Vector<Vector<Vector2>> &_get_obstruction_outlines() const; void _add_traversable_outline(const Vector<Vector2> &p_shape_outline); void _add_obstruction_outline(const Vector<Vector2> &p_shape_outline); @@ -88,7 +88,7 @@ public: void add_traversable_outline(const PackedVector2Array &p_shape_outline); void add_obstruction_outline(const PackedVector2Array &p_shape_outline); - bool has_data() { return traversable_outlines.size(); }; + bool has_data(); void clear(); void clear_projected_obstructions(); @@ -100,6 +100,9 @@ public: void merge(const Ref<NavigationMeshSourceGeometryData2D> &p_other_geometry); + void set_data(const Vector<Vector<Vector2>> &p_traversable_outlines, const Vector<Vector<Vector2>> &p_obstruction_outlines, Vector<ProjectedObstruction> &p_projected_obstructions); + void get_data(Vector<Vector<Vector2>> &r_traversable_outlines, Vector<Vector<Vector2>> &r_obstruction_outlines, Vector<ProjectedObstruction> &r_projected_obstructions); + NavigationMeshSourceGeometryData2D() {} ~NavigationMeshSourceGeometryData2D() { clear(); } }; diff --git a/scene/resources/2d/navigation_polygon.cpp b/scene/resources/2d/navigation_polygon.cpp index 274b13a487..a845809bf2 100644 --- a/scene/resources/2d/navigation_polygon.cpp +++ b/scene/resources/2d/navigation_polygon.cpp @@ -38,6 +38,7 @@ #ifdef TOOLS_ENABLED Rect2 NavigationPolygon::_edit_get_rect() const { + RWLockRead read_lock(rwlock); if (rect_cache_dirty) { item_rect = Rect2(); bool first = true; @@ -65,6 +66,7 @@ Rect2 NavigationPolygon::_edit_get_rect() const { } bool NavigationPolygon::_edit_is_selected_on_click(const Point2 &p_point, double p_tolerance) const { + RWLockRead read_lock(rwlock); for (int i = 0; i < outlines.size(); i++) { const Vector<Vector2> &outline = outlines[i]; const int outline_size = outline.size(); @@ -80,6 +82,7 @@ bool NavigationPolygon::_edit_is_selected_on_click(const Point2 &p_point, double #endif void NavigationPolygon::set_vertices(const Vector<Vector2> &p_vertices) { + RWLockWrite write_lock(rwlock); { MutexLock lock(navigation_mesh_generation); navigation_mesh.unref(); @@ -89,10 +92,12 @@ void NavigationPolygon::set_vertices(const Vector<Vector2> &p_vertices) { } Vector<Vector2> NavigationPolygon::get_vertices() const { + RWLockRead read_lock(rwlock); return vertices; } void NavigationPolygon::_set_polygons(const TypedArray<Vector<int32_t>> &p_array) { + RWLockWrite write_lock(rwlock); { MutexLock lock(navigation_mesh_generation); navigation_mesh.unref(); @@ -104,6 +109,7 @@ void NavigationPolygon::_set_polygons(const TypedArray<Vector<int32_t>> &p_array } TypedArray<Vector<int32_t>> NavigationPolygon::_get_polygons() const { + RWLockRead read_lock(rwlock); TypedArray<Vector<int32_t>> ret; ret.resize(polygons.size()); for (int i = 0; i < ret.size(); i++) { @@ -114,6 +120,7 @@ TypedArray<Vector<int32_t>> NavigationPolygon::_get_polygons() const { } void NavigationPolygon::_set_outlines(const TypedArray<Vector<Vector2>> &p_array) { + RWLockWrite write_lock(rwlock); outlines.resize(p_array.size()); for (int i = 0; i < p_array.size(); i++) { outlines.write[i] = p_array[i]; @@ -122,6 +129,7 @@ void NavigationPolygon::_set_outlines(const TypedArray<Vector<Vector2>> &p_array } TypedArray<Vector<Vector2>> NavigationPolygon::_get_outlines() const { + RWLockRead read_lock(rwlock); TypedArray<Vector<Vector2>> ret; ret.resize(outlines.size()); for (int i = 0; i < ret.size(); i++) { @@ -132,6 +140,7 @@ TypedArray<Vector<Vector2>> NavigationPolygon::_get_outlines() const { } void NavigationPolygon::add_polygon(const Vector<int> &p_polygon) { + RWLockWrite write_lock(rwlock); Polygon polygon; polygon.indices = p_polygon; polygons.push_back(polygon); @@ -142,20 +151,24 @@ void NavigationPolygon::add_polygon(const Vector<int> &p_polygon) { } void NavigationPolygon::add_outline_at_index(const Vector<Vector2> &p_outline, int p_index) { + RWLockWrite write_lock(rwlock); outlines.insert(p_index, p_outline); rect_cache_dirty = true; } int NavigationPolygon::get_polygon_count() const { + RWLockRead read_lock(rwlock); return polygons.size(); } Vector<int> NavigationPolygon::get_polygon(int p_idx) { + RWLockRead read_lock(rwlock); ERR_FAIL_INDEX_V(p_idx, polygons.size(), Vector<int>()); return polygons[p_idx].indices; } void NavigationPolygon::clear_polygons() { + RWLockWrite write_lock(rwlock); polygons.clear(); { MutexLock lock(navigation_mesh_generation); @@ -164,6 +177,7 @@ void NavigationPolygon::clear_polygons() { } void NavigationPolygon::clear() { + RWLockWrite write_lock(rwlock); polygons.clear(); vertices.clear(); { @@ -172,12 +186,31 @@ void NavigationPolygon::clear() { } } +void NavigationPolygon::set_data(const Vector<Vector2> &p_vertices, const Vector<Vector<int>> &p_polygons) { + RWLockWrite write_lock(rwlock); + vertices = p_vertices; + polygons.resize(p_polygons.size()); + for (int i = 0; i < p_polygons.size(); i++) { + polygons.write[i].indices = p_polygons[i]; + } +} + +void NavigationPolygon::get_data(Vector<Vector2> &r_vertices, Vector<Vector<int>> &r_polygons) { + RWLockRead read_lock(rwlock); + r_vertices = vertices; + r_polygons.resize(polygons.size()); + for (int i = 0; i < polygons.size(); i++) { + r_polygons.write[i] = polygons[i].indices; + } +} + Ref<NavigationMesh> NavigationPolygon::get_navigation_mesh() { MutexLock lock(navigation_mesh_generation); if (navigation_mesh.is_null()) { navigation_mesh.instantiate(); Vector<Vector3> verts; + Vector<Vector<int>> polys; { verts.resize(get_vertices().size()); Vector3 *w = verts.ptrw(); @@ -188,11 +221,12 @@ Ref<NavigationMesh> NavigationPolygon::get_navigation_mesh() { w[i] = Vector3(r[i].x, 0.0, r[i].y); } } - navigation_mesh->set_vertices(verts); for (int i(0); i < get_polygon_count(); i++) { - navigation_mesh->add_polygon(get_polygon(i)); + polys.push_back(get_polygon(i)); } + + navigation_mesh->set_data(verts, polys); navigation_mesh->set_cell_size(cell_size); // Needed to not fail the cell size check on the server } @@ -200,38 +234,45 @@ Ref<NavigationMesh> NavigationPolygon::get_navigation_mesh() { } void NavigationPolygon::add_outline(const Vector<Vector2> &p_outline) { + RWLockWrite write_lock(rwlock); outlines.push_back(p_outline); rect_cache_dirty = true; } int NavigationPolygon::get_outline_count() const { + RWLockRead read_lock(rwlock); return outlines.size(); } void NavigationPolygon::set_outline(int p_idx, const Vector<Vector2> &p_outline) { + RWLockWrite write_lock(rwlock); ERR_FAIL_INDEX(p_idx, outlines.size()); outlines.write[p_idx] = p_outline; rect_cache_dirty = true; } void NavigationPolygon::remove_outline(int p_idx) { + RWLockWrite write_lock(rwlock); ERR_FAIL_INDEX(p_idx, outlines.size()); outlines.remove_at(p_idx); rect_cache_dirty = true; } Vector<Vector2> NavigationPolygon::get_outline(int p_idx) const { + RWLockRead read_lock(rwlock); ERR_FAIL_INDEX_V(p_idx, outlines.size(), Vector<Vector2>()); return outlines[p_idx]; } void NavigationPolygon::clear_outlines() { + RWLockWrite write_lock(rwlock); outlines.clear(); rect_cache_dirty = true; } #ifndef DISABLE_DEPRECATED void NavigationPolygon::make_polygons_from_outlines() { + RWLockWrite write_lock(rwlock); WARN_PRINT("Function make_polygons_from_outlines() is deprecated." "\nUse NavigationServer2D.parse_source_geometry_data() and NavigationServer2D.bake_from_source_geometry_data() instead."); diff --git a/scene/resources/2d/navigation_polygon.h b/scene/resources/2d/navigation_polygon.h index b9816f900c..4e99660b0e 100644 --- a/scene/resources/2d/navigation_polygon.h +++ b/scene/resources/2d/navigation_polygon.h @@ -36,6 +36,7 @@ class NavigationPolygon : public Resource { GDCLASS(NavigationPolygon, Resource); + RWLock rwlock; Vector<Vector2> vertices; struct Polygon { @@ -153,6 +154,9 @@ public: void clear(); + void set_data(const Vector<Vector2> &p_vertices, const Vector<Vector<int>> &p_polygons); + void get_data(Vector<Vector2> &r_vertices, Vector<Vector<int>> &r_polygons); + NavigationPolygon() {} ~NavigationPolygon() {} }; diff --git a/scene/resources/3d/navigation_mesh_source_geometry_data_3d.cpp b/scene/resources/3d/navigation_mesh_source_geometry_data_3d.cpp index 3f3f8b44fd..4c9f381aba 100644 --- a/scene/resources/3d/navigation_mesh_source_geometry_data_3d.cpp +++ b/scene/resources/3d/navigation_mesh_source_geometry_data_3d.cpp @@ -31,14 +31,26 @@ #include "navigation_mesh_source_geometry_data_3d.h" void NavigationMeshSourceGeometryData3D::set_vertices(const Vector<float> &p_vertices) { + RWLockWrite write_lock(geometry_rwlock); vertices = p_vertices; } +const Vector<float> &NavigationMeshSourceGeometryData3D::get_vertices() const { + RWLockRead read_lock(geometry_rwlock); + return vertices; +} + void NavigationMeshSourceGeometryData3D::set_indices(const Vector<int> &p_indices) { ERR_FAIL_COND(vertices.size() < p_indices.size()); + RWLockWrite write_lock(geometry_rwlock); indices = p_indices; } +const Vector<int> &NavigationMeshSourceGeometryData3D::get_indices() const { + RWLockRead read_lock(geometry_rwlock); + return indices; +} + void NavigationMeshSourceGeometryData3D::append_arrays(const Vector<float> &p_vertices, const Vector<int> &p_indices) { RWLockWrite write_lock(geometry_rwlock); @@ -53,10 +65,16 @@ void NavigationMeshSourceGeometryData3D::append_arrays(const Vector<float> &p_ve } } +bool NavigationMeshSourceGeometryData3D::has_data() { + RWLockRead read_lock(geometry_rwlock); + return vertices.size() && indices.size(); +}; + void NavigationMeshSourceGeometryData3D::clear() { + RWLockWrite write_lock(geometry_rwlock); vertices.clear(); indices.clear(); - clear_projected_obstructions(); + _projected_obstructions.clear(); } void NavigationMeshSourceGeometryData3D::clear_projected_obstructions() { @@ -187,40 +205,37 @@ void NavigationMeshSourceGeometryData3D::add_mesh(const Ref<Mesh> &p_mesh, const void NavigationMeshSourceGeometryData3D::add_mesh_array(const Array &p_mesh_array, const Transform3D &p_xform) { ERR_FAIL_COND(p_mesh_array.size() != Mesh::ARRAY_MAX); + RWLockWrite write_lock(geometry_rwlock); _add_mesh_array(p_mesh_array, root_node_transform * p_xform); } void NavigationMeshSourceGeometryData3D::add_faces(const PackedVector3Array &p_faces, const Transform3D &p_xform) { ERR_FAIL_COND(p_faces.size() % 3 != 0); + RWLockWrite write_lock(geometry_rwlock); _add_faces(p_faces, root_node_transform * p_xform); } void NavigationMeshSourceGeometryData3D::merge(const Ref<NavigationMeshSourceGeometryData3D> &p_other_geometry) { ERR_FAIL_NULL(p_other_geometry); - append_arrays(p_other_geometry->vertices, p_other_geometry->indices); - - if (p_other_geometry->_projected_obstructions.size() > 0) { - RWLockWrite write_lock(geometry_rwlock); - - for (const ProjectedObstruction &other_projected_obstruction : p_other_geometry->_projected_obstructions) { - ProjectedObstruction projected_obstruction; - projected_obstruction.vertices.resize(other_projected_obstruction.vertices.size()); + Vector<float> other_vertices; + Vector<int> other_indices; + Vector<ProjectedObstruction> other_projected_obstructions; - const float *other_obstruction_vertices_ptr = other_projected_obstruction.vertices.ptr(); - float *obstruction_vertices_ptrw = projected_obstruction.vertices.ptrw(); + p_other_geometry->get_data(other_vertices, other_indices, other_projected_obstructions); - for (int j = 0; j < other_projected_obstruction.vertices.size(); j++) { - obstruction_vertices_ptrw[j] = other_obstruction_vertices_ptr[j]; - } + RWLockWrite write_lock(geometry_rwlock); + const int64_t number_of_vertices_before_merge = vertices.size(); + const int64_t number_of_indices_before_merge = indices.size(); - projected_obstruction.elevation = other_projected_obstruction.elevation; - projected_obstruction.height = other_projected_obstruction.height; - projected_obstruction.carve = other_projected_obstruction.carve; + vertices.append_array(other_vertices); + indices.append_array(other_indices); - _projected_obstructions.push_back(projected_obstruction); - } + for (int64_t i = number_of_indices_before_merge; i < indices.size(); i++) { + indices.set(i, indices[i] + number_of_vertices_before_merge / 3); } + + _projected_obstructions.append_array(other_projected_obstructions); } void NavigationMeshSourceGeometryData3D::add_projected_obstruction(const Vector<Vector3> &p_vertices, float p_elevation, float p_height, bool p_carve) { @@ -316,6 +331,20 @@ bool NavigationMeshSourceGeometryData3D::_get(const StringName &p_name, Variant return false; } +void NavigationMeshSourceGeometryData3D::set_data(const Vector<float> &p_vertices, const Vector<int> &p_indices, Vector<ProjectedObstruction> &p_projected_obstructions) { + RWLockWrite write_lock(geometry_rwlock); + vertices = p_vertices; + indices = p_indices; + _projected_obstructions = p_projected_obstructions; +} + +void NavigationMeshSourceGeometryData3D::get_data(Vector<float> &r_vertices, Vector<int> &r_indices, Vector<ProjectedObstruction> &r_projected_obstructions) { + RWLockRead read_lock(geometry_rwlock); + r_vertices = vertices; + r_indices = indices; + r_projected_obstructions = _projected_obstructions; +} + void NavigationMeshSourceGeometryData3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_vertices", "vertices"), &NavigationMeshSourceGeometryData3D::set_vertices); ClassDB::bind_method(D_METHOD("get_vertices"), &NavigationMeshSourceGeometryData3D::get_vertices); diff --git a/scene/resources/3d/navigation_mesh_source_geometry_data_3d.h b/scene/resources/3d/navigation_mesh_source_geometry_data_3d.h index 6c1ca760ea..a8e613a51d 100644 --- a/scene/resources/3d/navigation_mesh_source_geometry_data_3d.h +++ b/scene/resources/3d/navigation_mesh_source_geometry_data_3d.h @@ -75,14 +75,14 @@ public: Transform3D root_node_transform; void set_vertices(const Vector<float> &p_vertices); - const Vector<float> &get_vertices() const { return vertices; } + const Vector<float> &get_vertices() const; void set_indices(const Vector<int> &p_indices); - const Vector<int> &get_indices() const { return indices; } + const Vector<int> &get_indices() const; void append_arrays(const Vector<float> &p_vertices, const Vector<int> &p_indices); - bool has_data() { return vertices.size() && indices.size(); }; + bool has_data(); void clear(); void clear_projected_obstructions(); @@ -98,6 +98,9 @@ public: void set_projected_obstructions(const Array &p_array); Array get_projected_obstructions() const; + void set_data(const Vector<float> &p_vertices, const Vector<int> &p_indices, Vector<ProjectedObstruction> &p_projected_obstructions); + void get_data(Vector<float> &r_vertices, Vector<int> &r_indices, Vector<ProjectedObstruction> &r_projected_obstructions); + NavigationMeshSourceGeometryData3D() {} ~NavigationMeshSourceGeometryData3D() { clear(); } }; diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 254bd38be7..c0ab636adc 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -3189,6 +3189,20 @@ StringName Animation::method_track_get_name(int p_track, int p_key_idx) const { return pm->methods[p_key_idx].method; } +Array Animation::make_default_bezier_key(float p_value) { + const double max_width = length / 2.0; + Array new_point; + new_point.resize(5); + + new_point[0] = p_value; + new_point[1] = MAX(-0.25, -max_width); + new_point[2] = 0; + new_point[3] = MIN(0.25, max_width); + new_point[4] = 0; + + return new_point; +} + int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle) { ERR_FAIL_INDEX_V(p_track, tracks.size(), -1); Track *t = tracks[p_track]; diff --git a/scene/resources/animation.h b/scene/resources/animation.h index e9bfc298a5..cb12b12c0e 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -455,6 +455,7 @@ public: void track_set_interpolation_type(int p_track, InterpolationType p_interp); InterpolationType track_get_interpolation_type(int p_track) const; + Array make_default_bezier_key(float p_value); int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle); void bezier_track_set_key_value(int p_track, int p_index, real_t p_value); void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, real_t p_balanced_value_time_ratio = 1.0); diff --git a/scene/resources/atlas_texture.cpp b/scene/resources/atlas_texture.cpp index ef2f1eb135..28e4186048 100644 --- a/scene/resources/atlas_texture.cpp +++ b/scene/resources/atlas_texture.cpp @@ -164,20 +164,13 @@ void AtlasTexture::draw_rect(RID p_canvas_item, const Rect2 &p_rect, bool p_tile return; } - Rect2 rc = region; + Rect2 src_rect = Rect2(0, 0, get_width(), get_height()); - if (rc.size.width == 0) { - rc.size.width = atlas->get_width(); - } - - if (rc.size.height == 0) { - rc.size.height = atlas->get_height(); + Rect2 dr; + Rect2 src_c; + if (get_rect_region(p_rect, src_rect, dr, src_c)) { + atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip); } - - Vector2 scale = p_rect.size / (region.size + margin.size); - Rect2 dr(p_rect.position + margin.position * scale, rc.size * scale); - - atlas->draw_rect_region(p_canvas_item, dr, rc, p_modulate, p_transpose, filter_clip); } void AtlasTexture::draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, bool p_clip_uv) const { @@ -188,9 +181,9 @@ void AtlasTexture::draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, cons Rect2 dr; Rect2 src_c; - get_rect_region(p_rect, p_src_rect, dr, src_c); - - atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip); + if (get_rect_region(p_rect, p_src_rect, dr, src_c)) { + atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip); + } } bool AtlasTexture::get_rect_region(const Rect2 &p_rect, const Rect2 &p_src_rect, Rect2 &r_rect, Rect2 &r_src_rect) const { diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index bc8e0b9015..37d9d57722 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -3213,7 +3213,6 @@ void SystemFont::_update_base_font() { } _invalidate_rids(); - notify_property_list_changed(); } void SystemFont::reset_state() { diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 65b97acabf..7d121c9d87 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -324,6 +324,21 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const { is_uniform_type_compatible = E->get().type == cached.get_type(); } +#ifndef DISABLE_DEPRECATED + // PackedFloat32Array -> PackedVector4Array conversion. + if (!is_uniform_type_compatible && E->get().type == Variant::PACKED_VECTOR4_ARRAY && cached.get_type() == Variant::PACKED_FLOAT32_ARRAY) { + PackedVector4Array varray; + PackedFloat32Array array = (PackedFloat32Array)cached; + + for (int i = 0; i + 3 < array.size(); i += 4) { + varray.push_back(Vector4(array[i], array[i + 1], array[i + 2], array[i + 3])); + } + + param_cache.insert(E->get().name, varray); + is_uniform_type_compatible = true; + } +#endif + if (is_uniform_type_compatible && E->get().type == Variant::OBJECT && cached.get_type() == Variant::OBJECT) { // Check if the Object class (hint string) changed, for example Texture2D sampler to Texture3D. // Allow inheritance, Texture2D type sampler should also accept CompressedTexture2D. @@ -1337,7 +1352,7 @@ void fragment() {)"; } // Heightmapping isn't supported at the same time as triplanar mapping. - if (!RenderingServer::get_singleton()->is_low_end() && features[FEATURE_HEIGHT_MAPPING] && !flags[FLAG_UV1_USE_TRIPLANAR]) { + if (features[FEATURE_HEIGHT_MAPPING] && !flags[FLAG_UV1_USE_TRIPLANAR]) { // Binormal is negative due to mikktspace. Flipping it "unflips" it. code += R"( { @@ -1637,21 +1652,20 @@ void fragment() {)"; // Use the slightly more expensive circular fade (distance to the object) instead of linear // (Z distance), so that the fade is always the same regardless of the camera angle. if ((distance_fade == DISTANCE_FADE_OBJECT_DITHER || distance_fade == DISTANCE_FADE_PIXEL_DITHER)) { - if (!RenderingServer::get_singleton()->is_low_end()) { - code += "\n {"; + code += "\n {"; - if (distance_fade == DISTANCE_FADE_OBJECT_DITHER) { - code += R"( + if (distance_fade == DISTANCE_FADE_OBJECT_DITHER) { + code += R"( // Distance Fade: Object Dither float fade_distance = length((VIEW_MATRIX * MODEL_MATRIX[3])); )"; - } else { - code += R"( + } else { + code += R"( // Distance Fade: Pixel Dither float fade_distance = length(VERTEX); )"; - } - code += R"( + } + code += R"( // Use interleaved gradient noise, which is fast but still looks good. const vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189); float fade = clamp(smoothstep(distance_fade_min, distance_fade_max, fade_distance), 0.0, 1.0); @@ -1661,7 +1675,6 @@ void fragment() {)"; } } )"; - } } else { code += R"( // Distance Fade: Pixel Alpha diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp index 7a7bab636b..2866ae7219 100644 --- a/scene/resources/navigation_mesh.cpp +++ b/scene/resources/navigation_mesh.cpp @@ -35,10 +35,11 @@ #endif // DEBUG_ENABLED void NavigationMesh::create_from_mesh(const Ref<Mesh> &p_mesh) { + RWLockWrite write_lock(rwlock); ERR_FAIL_COND(p_mesh.is_null()); vertices = Vector<Vector3>(); - clear_polygons(); + polygons.clear(); for (int i = 0; i < p_mesh->get_surface_count(); i++) { if (p_mesh->surface_get_primitive_type(i) != Mesh::PRIMITIVE_TRIANGLES) { @@ -61,13 +62,12 @@ void NavigationMesh::create_from_mesh(const Ref<Mesh> &p_mesh) { const int *r = iarr.ptr(); for (int j = 0; j < rlen; j += 3) { - Vector<int> vi; - vi.resize(3); - vi.write[0] = r[j + 0] + from; - vi.write[1] = r[j + 1] + from; - vi.write[2] = r[j + 2] + from; - - add_polygon(vi); + Polygon polygon; + polygon.indices.resize(3); + polygon.indices.write[0] = r[j + 0] + from; + polygon.indices.write[1] = r[j + 1] + from; + polygon.indices.write[2] = r[j + 2] + from; + polygons.push_back(polygon); } } } @@ -304,15 +304,18 @@ Vector3 NavigationMesh::get_filter_baking_aabb_offset() const { } void NavigationMesh::set_vertices(const Vector<Vector3> &p_vertices) { + RWLockWrite write_lock(rwlock); vertices = p_vertices; notify_property_list_changed(); } Vector<Vector3> NavigationMesh::get_vertices() const { + RWLockRead read_lock(rwlock); return vertices; } void NavigationMesh::_set_polygons(const Array &p_array) { + RWLockWrite write_lock(rwlock); polygons.resize(p_array.size()); for (int i = 0; i < p_array.size(); i++) { polygons.write[i].indices = p_array[i]; @@ -321,6 +324,7 @@ void NavigationMesh::_set_polygons(const Array &p_array) { } Array NavigationMesh::_get_polygons() const { + RWLockRead read_lock(rwlock); Array ret; ret.resize(polygons.size()); for (int i = 0; i < ret.size(); i++) { @@ -331,6 +335,7 @@ Array NavigationMesh::_get_polygons() const { } void NavigationMesh::add_polygon(const Vector<int> &p_polygon) { + RWLockWrite write_lock(rwlock); Polygon polygon; polygon.indices = p_polygon; polygons.push_back(polygon); @@ -338,23 +343,45 @@ void NavigationMesh::add_polygon(const Vector<int> &p_polygon) { } int NavigationMesh::get_polygon_count() const { + RWLockRead read_lock(rwlock); return polygons.size(); } Vector<int> NavigationMesh::get_polygon(int p_idx) { + RWLockRead read_lock(rwlock); ERR_FAIL_INDEX_V(p_idx, polygons.size(), Vector<int>()); return polygons[p_idx].indices; } void NavigationMesh::clear_polygons() { + RWLockWrite write_lock(rwlock); polygons.clear(); } void NavigationMesh::clear() { + RWLockWrite write_lock(rwlock); polygons.clear(); vertices.clear(); } +void NavigationMesh::set_data(const Vector<Vector3> &p_vertices, const Vector<Vector<int>> &p_polygons) { + RWLockWrite write_lock(rwlock); + vertices = p_vertices; + polygons.resize(p_polygons.size()); + for (int i = 0; i < p_polygons.size(); i++) { + polygons.write[i].indices = p_polygons[i]; + } +} + +void NavigationMesh::get_data(Vector<Vector3> &r_vertices, Vector<Vector<int>> &r_polygons) { + RWLockRead read_lock(rwlock); + r_vertices = vertices; + r_polygons.resize(polygons.size()); + for (int i = 0; i < polygons.size(); i++) { + r_polygons.write[i] = polygons[i].indices; + } +} + #ifdef DEBUG_ENABLED Ref<ArrayMesh> NavigationMesh::get_debug_mesh() { if (debug_mesh.is_valid()) { @@ -372,6 +399,8 @@ Ref<ArrayMesh> NavigationMesh::get_debug_mesh() { return debug_mesh; } + RWLockRead read_lock(rwlock); + int polygon_count = get_polygon_count(); if (polygon_count < 1) { diff --git a/scene/resources/navigation_mesh.h b/scene/resources/navigation_mesh.h index 136e1cf468..0ec2cc1bb1 100644 --- a/scene/resources/navigation_mesh.h +++ b/scene/resources/navigation_mesh.h @@ -31,10 +31,12 @@ #ifndef NAVIGATION_MESH_H #define NAVIGATION_MESH_H +#include "core/os/rw_lock.h" #include "scene/resources/mesh.h" class NavigationMesh : public Resource { GDCLASS(NavigationMesh, Resource); + RWLock rwlock; Vector<Vector3> vertices; struct Polygon { @@ -195,6 +197,9 @@ public: void clear(); + void set_data(const Vector<Vector3> &p_vertices, const Vector<Vector<int>> &p_polygons); + void get_data(Vector<Vector3> &r_vertices, Vector<Vector<int>> &r_polygons); + #ifdef DEBUG_ENABLED Ref<ArrayMesh> get_debug_mesh(); #endif // DEBUG_ENABLED diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index b1742bd5a3..900629f5f8 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -2124,6 +2124,56 @@ void PackedScene::recreate_state() { #endif } +#ifdef TOOLS_ENABLED +HashSet<StringName> PackedScene::get_scene_groups(const String &p_path) { + { + Ref<PackedScene> packed_scene = ResourceCache::get_ref(p_path); + if (packed_scene.is_valid()) { + return packed_scene->get_state()->get_all_groups(); + } + } + + if (p_path.get_extension() == "tscn") { + Ref<FileAccess> scene_file = FileAccess::open(p_path, FileAccess::READ); + ERR_FAIL_COND_V(scene_file.is_null(), HashSet<StringName>()); + + HashSet<StringName> ret; + while (!scene_file->eof_reached()) { + const String line = scene_file->get_line(); + if (!line.begins_with("[node")) { + continue; + } + + int i = line.find("groups=["); + if (i == -1) { + continue; + } + + int j = line.find_char(']', i); + while (i < j) { + i = line.find_char('"', i); + if (i == -1) { + break; + } + + int k = line.find_char('"', i + 1); + if (k == -1) { + break; + } + + ret.insert(line.substr(i + 1, k - i - 1)); + i = k + 1; + } + } + return ret; + } else { + Ref<PackedScene> packed_scene = ResourceLoader::load(p_path); + ERR_FAIL_COND_V(packed_scene.is_null(), HashSet<StringName>()); + return packed_scene->get_state()->get_all_groups(); + } +} +#endif + Ref<SceneState> PackedScene::get_state() const { return state; } diff --git a/scene/resources/packed_scene.h b/scene/resources/packed_scene.h index c46a4dd5fe..e26b9f7b90 100644 --- a/scene/resources/packed_scene.h +++ b/scene/resources/packed_scene.h @@ -270,6 +270,7 @@ public: state->set_last_modified_time(p_time); } + static HashSet<StringName> get_scene_groups(const String &p_path); #endif Ref<SceneState> get_state() const; diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp index 7c13e623c2..90102e44e4 100644 --- a/scene/resources/resource_format_text.cpp +++ b/scene/resources/resource_format_text.cpp @@ -191,8 +191,10 @@ Error ResourceLoaderText::_parse_ext_resource(VariantParser::Stream *p_stream, R } Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourceParser &parser) { - Ref<PackedScene> packed_scene; - packed_scene.instantiate(); + Ref<PackedScene> packed_scene = ResourceLoader::get_resource_ref_override(local_path); + if (packed_scene.is_null()) { + packed_scene.instantiate(); + } while (true) { if (next_tag.name == "node") { @@ -664,39 +666,42 @@ Error ResourceLoaderText::load() { return error; } - Ref<Resource> cache = ResourceCache::get_ref(local_path); - if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && cache.is_valid() && cache->get_class() == res_type) { - cache->reset_state(); - resource = cache; - } - MissingResource *missing_resource = nullptr; - if (!resource.is_valid()) { - Object *obj = ClassDB::instantiate(res_type); - if (!obj) { - if (ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) { - missing_resource = memnew(MissingResource); - missing_resource->set_original_class(res_type); - missing_resource->set_recording_properties(true); - obj = missing_resource; - } else { - error_text += "Can't create sub resource of type: " + res_type; + resource = ResourceLoader::get_resource_ref_override(local_path); + if (resource.is_null()) { + Ref<Resource> cache = ResourceCache::get_ref(local_path); + if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && cache.is_valid() && cache->get_class() == res_type) { + cache->reset_state(); + resource = cache; + } + + if (!resource.is_valid()) { + Object *obj = ClassDB::instantiate(res_type); + if (!obj) { + if (ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) { + missing_resource = memnew(MissingResource); + missing_resource->set_original_class(res_type); + missing_resource->set_recording_properties(true); + obj = missing_resource; + } else { + error_text += "Can't create sub resource of type: " + res_type; + _printerr(); + error = ERR_FILE_CORRUPT; + return error; + } + } + + Resource *r = Object::cast_to<Resource>(obj); + if (!r) { + error_text += "Can't create sub resource of type, because not a resource: " + res_type; _printerr(); error = ERR_FILE_CORRUPT; return error; } - } - Resource *r = Object::cast_to<Resource>(obj); - if (!r) { - error_text += "Can't create sub resource of type, because not a resource: " + res_type; - _printerr(); - error = ERR_FILE_CORRUPT; - return error; + resource = Ref<Resource>(r); } - - resource = Ref<Resource>(r); } Dictionary missing_resource_properties; diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index b83be8b6ef..3273bc3c00 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -1158,7 +1158,7 @@ void SurfaceTool::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, cons } void SurfaceTool::generate_tangents() { - ERR_FAIL_COND(!(format & Mesh::ARRAY_FORMAT_TEX_UV)); + ERR_FAIL_COND_MSG(!(format & Mesh::ARRAY_FORMAT_TEX_UV), "UVs are required to generate tangents."); ERR_FAIL_COND(!(format & Mesh::ARRAY_FORMAT_NORMAL)); SMikkTSpaceInterface mkif; diff --git a/scene/theme/icons/add.svg b/scene/theme/icons/add.svg index 818f8353ec..2dead5ea71 100644 --- a/scene/theme/icons/add.svg +++ b/scene/theme/icons/add.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/arrow_down.svg b/scene/theme/icons/arrow_down.svg index 4dfb4a1559..a3e9464748 100644 --- a/scene/theme/icons/arrow_down.svg +++ b/scene/theme/icons/arrow_down.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m5 7 3 3 3-3" fill="none" stroke="#b2b2b2" stroke-opacity=".45" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".45" stroke-width="2" d="m5 7 3 3 3-3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/arrow_left.svg b/scene/theme/icons/arrow_left.svg index 6fb49d505f..96a3f605be 100644 --- a/scene/theme/icons/arrow_left.svg +++ b/scene/theme/icons/arrow_left.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m9 11-3-3 3-3" fill="none" stroke="#b2b2b2" stroke-opacity=".45" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".45" stroke-width="2" d="m9 11-3-3 3-3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/arrow_right.svg b/scene/theme/icons/arrow_right.svg index 9af063d900..6fc0656522 100644 --- a/scene/theme/icons/arrow_right.svg +++ b/scene/theme/icons/arrow_right.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m6 11 3-3-3-3" fill="none" stroke="#b2b2b2" stroke-opacity=".45" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".45" stroke-width="2" d="m6 11 3-3-3-3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/bookmark.svg b/scene/theme/icons/bookmark.svg index 15a2e50a3a..c3919d38f8 100644 --- a/scene/theme/icons/bookmark.svg +++ b/scene/theme/icons/bookmark.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="#fefffe" fill-opacity=".85"><path d="M14.5 1.5h-13v13L8 9.25l6.5 5.25z"/><path d="M14.5 1.5h-13v13L8 9.25l6.5 5.25z" stroke="#fefffe" stroke-linejoin="round" stroke-opacity=".85"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#fefffe" fill-opacity=".85"><path d="M14.5 1.5h-13v13L8 9.25l6.5 5.25z"/><path stroke="#fefffe" stroke-linejoin="round" stroke-opacity=".85" d="M14.5 1.5h-13v13L8 9.25l6.5 5.25z"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/breakpoint.svg b/scene/theme/icons/breakpoint.svg index 475e83572c..075166f6a4 100644 --- a/scene/theme/icons/breakpoint.svg +++ b/scene/theme/icons/breakpoint.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#ff5d5d" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#ff5d5d" fill-opacity=".5"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/checked.svg b/scene/theme/icons/checked.svg index 49549e4fa4..1ab415e7a1 100644 --- a/scene/theme/icons/checked.svg +++ b/scene/theme/icons/checked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="14" rx="2.333" fill="#fff" fill-opacity=".75"/><path d="m11.5 3.75-5.6 5.6-1.7-1.7-1.5 1.5 3.2 3.2 7.1-7.1z" fill="#1a1a1a"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#fff" fill-opacity=".75" rx="2.333"/><path fill="#1a1a1a" d="m11.5 3.75-5.6 5.6-1.7-1.7-1.5 1.5 3.2 3.2 7.1-7.1z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/checked_disabled.svg b/scene/theme/icons/checked_disabled.svg index 3a3b20793e..8319e808fa 100644 --- a/scene/theme/icons/checked_disabled.svg +++ b/scene/theme/icons/checked_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="14" rx="2.333" fill="#fff" fill-opacity=".37"/><path d="m11.5 3.75-5.6 5.6-1.7-1.7-1.5 1.5 3.2 3.2 7.1-7.1z" fill="#1a1a1a" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#fff" fill-opacity=".37" rx="2.333"/><path fill="#1a1a1a" fill-opacity=".5" d="m11.5 3.75-5.6 5.6-1.7-1.7-1.5 1.5 3.2 3.2 7.1-7.1z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/close.svg b/scene/theme/icons/close.svg index 6618aa2e14..0123674231 100644 --- a/scene/theme/icons/close.svg +++ b/scene/theme/icons/close.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z" fill="#fff" fill-opacity=".75"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" fill-opacity=".75" d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/close_hl.svg b/scene/theme/icons/close_hl.svg index 3d74ba54c3..6654df80e8 100644 --- a/scene/theme/icons/close_hl.svg +++ b/scene/theme/icons/close_hl.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/color_picker_bar_arrow.svg b/scene/theme/icons/color_picker_bar_arrow.svg index cb00f648f5..5612ecaadc 100644 --- a/scene/theme/icons/color_picker_bar_arrow.svg +++ b/scene/theme/icons/color_picker_bar_arrow.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 20" xmlns="http://www.w3.org/2000/svg"><path d="m3.564 15.218h8.872l-4.436-4.436z" stroke-linejoin="round" fill="#b2b2b2" stroke="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 20"><path fill="#b2b2b2" stroke="#b2b2b2" stroke-linejoin="round" d="m3.564 15.218h8.872l-4.436-4.436z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/color_picker_cursor.svg b/scene/theme/icons/color_picker_cursor.svg index 8a7e56b559..2eaad3c128 100644 --- a/scene/theme/icons/color_picker_cursor.svg +++ b/scene/theme/icons/color_picker_cursor.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.5" fill="none" stroke="#fff"/><circle cx="8" cy="8" r="4.5" fill="none" stroke="#000"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.5" fill="none" stroke="#fff"/><circle cx="8" cy="8" r="4.5" fill="none" stroke="#000"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/color_picker_overbright.svg b/scene/theme/icons/color_picker_overbright.svg index 86ade4485d..7acdca1c47 100644 --- a/scene/theme/icons/color_picker_overbright.svg +++ b/scene/theme/icons/color_picker_overbright.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m.5.5v10l10-10z" fill="#fff" stroke="#000003"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" stroke="#000003" d="m.5.5v10l10-10z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/color_picker_pipette.svg b/scene/theme/icons/color_picker_pipette.svg index d167f58e6f..3dae08eac0 100644 --- a/scene/theme/icons/color_picker_pipette.svg +++ b/scene/theme/icons/color_picker_pipette.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M10 3a1 1 0 0 0-4 0v2H5v2h1v5c0 .712.36 1.372 1 1.73V15h2v-1.27c.618-.36 1-1 1-1.73V7h1V5h-1V3zM7 7h2v5a1 1 0 0 1-2 0z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M10 3a1 1 0 0 0-4 0v2H5v2h1v5c0 .712.36 1.372 1 1.73V15h2v-1.27c.618-.36 1-1 1-1.73V7h1V5h-1V3zM7 7h2v5a1 1 0 0 1-2 0z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/error_icon.svg b/scene/theme/icons/error_icon.svg index fcfa5d5da2..fef3d5f86e 100644 --- a/scene/theme/icons/error_icon.svg +++ b/scene/theme/icons/error_icon.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v8.586l1.293-1.293a1 1 0 0 1 1.414 0L7 10.587l2.293-2.293a1 1 0 0 1 1.414 0L13 10.586l1-1V6H9V1H2zm8 0v4h4zm-6 9.414-2 2V15h12v-2.586l-.293.293a1 1 0 0 1-1.414 0L10 10.414l-2.293 2.293a1 1 0 0 1-1.414 0L4 10.414z" fill="#ff5d5d"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#ff5d5d" d="M2 1v8.586l1.293-1.293a1 1 0 0 1 1.414 0L7 10.587l2.293-2.293a1 1 0 0 1 1.414 0L13 10.586l1-1V6H9V1H2zm8 0v4h4zm-6 9.414-2 2V15h12v-2.586l-.293.293a1 1 0 0 1-1.414 0L10 10.414l-2.293 2.293a1 1 0 0 1-1.414 0L4 10.414z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/file.svg b/scene/theme/icons/file.svg index 6687b53a74..e8890f3968 100644 --- a/scene/theme/icons/file.svg +++ b/scene/theme/icons/file.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v14h12V6H9V1zm8 0v4h4z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M2 1v14h12V6H9V1zm8 0v4h4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/folder.svg b/scene/theme/icons/folder.svg index bbb47d979d..64dc9ab98b 100644 --- a/scene/theme/icons/folder.svg +++ b/scene/theme/icons/folder.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V3a1 1 0 0 0-1-1z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V3a1 1 0 0 0-1-1z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/folder_create.svg b/scene/theme/icons/folder_create.svg index d11d0715a1..6c770d446b 100644 --- a/scene/theme/icons/folder_create.svg +++ b/scene/theme/icons/folder_create.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8v-1H8v-4h2V8h4v2h1V7a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V4a1 1 0 0 0-1-1Z" fill="#b2b2b2"/><path d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z" fill="#fefffe"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M2 3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h8v-1H8v-4h2V8h4v2h1V7a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V4a1 1 0 0 0-1-1Z"/><path fill="#fefffe" d="M13 13h2v-2h-2V9h-2v2H9v2h2v2h2z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/folder_up.svg b/scene/theme/icons/folder_up.svg index 54645c1c4b..7db5de871d 100644 --- a/scene/theme/icons/folder_up.svg +++ b/scene/theme/icons/folder_up.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 11V4m4 4L8 4 4 8" fill="none" stroke="#b2b2b2" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 11V4m4 4L8 4 4 8"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/graph_port.svg b/scene/theme/icons/graph_port.svg index 309a21b106..9d81bf1c5b 100644 --- a/scene/theme/icons/graph_port.svg +++ b/scene/theme/icons/graph_port.svg @@ -1 +1 @@ -<svg height="10" width="10" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" r="5" fill="#fff"/><circle cx="5" cy="5" r="3.667" fill="#b2b2b2" fill-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"><circle cx="5" cy="5" r="5" fill="#fff"/><circle cx="5" cy="5" r="3.667" fill="#b2b2b2" fill-opacity=".65"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/grid_layout.svg b/scene/theme/icons/grid_layout.svg index cd901cd7b1..6015cd9068 100644 --- a/scene/theme/icons/grid_layout.svg +++ b/scene/theme/icons/grid_layout.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke-width="1.3"><path d="M1.87 6.541h2.917v2.917H1.87zm4.666 0h2.917v2.917H6.536zm4.666 0h2.917v2.917h-2.917z" stroke="#fefffe" stroke-linejoin="round"/><path d="m5.432 1.112-1.95 1.95 1.95 1.95m-1.95-1.95h9.386m-2.137 8.05 1.95 1.95-1.95 1.95m-7.437-1.95h9.387" stroke-linecap="round" stroke="#e0e0e0" stroke-opacity=".65"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="none" stroke-width="1.3"><path stroke="#fefffe" stroke-linejoin="round" d="M1.87 6.541h2.917v2.917H1.87zm4.666 0h2.917v2.917H6.536zm4.666 0h2.917v2.917h-2.917z"/><path stroke="#e0e0e0" stroke-linecap="round" stroke-opacity=".65" d="m5.432 1.112-1.95 1.95 1.95 1.95m-1.95-1.95h9.386m-2.137 8.05 1.95 1.95-1.95 1.95m-7.437-1.95h9.387"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/grid_minimap.svg b/scene/theme/icons/grid_minimap.svg index 0c9fca73d2..a2d7c9c9bb 100644 --- a/scene/theme/icons/grid_minimap.svg +++ b/scene/theme/icons/grid_minimap.svg @@ -1 +1 @@ -<svg height="16" width="16" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14 2.199v2.615l-2.625 1.313V3.512zM2 6.264l2.625 1.312v2.551L2 8.814zm12 0v2.55l-2.625 1.313V7.576zM6 7.719h4v2.64H6zm-4 2.56 2.625 1.313v2.521L2 12.801zm12 0v2.522l-2.625 1.312v-2.521zm-8 1.455h4v2.641H6zm4-8.109v2.734H5.844s-.749.647-.875.641c-.131-.007-1.51-1.456-1.51-1.456L2 4.814V2.199l.117.06s-.064-.775.424-1.216L1.279.441A.626.626 0 0 0 .375 1v12c0 .237.134.453.346.559l4 2a.626.626 0 0 0 .279.066h6a.626.626 0 0 0 .279-.066l4-2a.625.625 0 0 0 .346-.559V1a.625.625 0 0 0-.904-.559l-3.869 1.934H7.888s.084.624-.218 1.25z" fill="#b2b2b2" fill-opacity=".65"/><path d="M5 6.25c-4-3.5-2-6 0-6s4 2.5 0 6z" fill="#fefffe"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" stroke-linejoin="round" stroke-miterlimit="2"><path fill="#b2b2b2" fill-opacity=".65" d="M14 2.199v2.615l-2.625 1.313V3.512zM2 6.264l2.625 1.312v2.551L2 8.814zm12 0v2.55l-2.625 1.313V7.576zM6 7.719h4v2.64H6zm-4 2.56 2.625 1.313v2.521L2 12.801zm12 0v2.522l-2.625 1.312v-2.521zm-8 1.455h4v2.641H6zm4-8.109v2.734H5.844s-.749.647-.875.641c-.131-.007-1.51-1.456-1.51-1.456L2 4.814V2.199l.117.06s-.064-.775.424-1.216L1.279.441A.626.626 0 0 0 .375 1v12c0 .237.134.453.346.559l4 2a.626.626 0 0 0 .279.066h6a.626.626 0 0 0 .279-.066l4-2a.625.625 0 0 0 .346-.559V1a.625.625 0 0 0-.904-.559l-3.869 1.934H7.888s.084.624-.218 1.25z"/><path fill="#fefffe" d="M5 6.25c-4-3.5-2-6 0-6s4 2.5 0 6z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/grid_snap.svg b/scene/theme/icons/grid_snap.svg index 82b0eae465..beb4ee7b2a 100644 --- a/scene/theme/icons/grid_snap.svg +++ b/scene/theme/icons/grid_snap.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M3 0v3H0v2h3v4H0v2h3v3h2V5h9V3h-3V0H9v3H5V0zm4 13v2h2v-2zm6 0v2h2v-2z" fill="#b2b2b2" fill-opacity=".65"/><path d="M7 11v2h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z" fill="#fefffe"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" fill-opacity=".65" d="M3 0v3H0v2h3v4H0v2h3v3h2V5h9V3h-3V0H9v3H5V0zm4 13v2h2v-2zm6 0v2h2v-2z"/><path fill="#fefffe" d="M7 11v2h2v-2a2 2 0 0 1 4 0v2h2v-2a4 4 0 0 0-8 0z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/grid_toggle.svg b/scene/theme/icons/grid_toggle.svg index b0721db518..c4683aade1 100644 --- a/scene/theme/icons/grid_toggle.svg +++ b/scene/theme/icons/grid_toggle.svg @@ -1 +1 @@ -<svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 0v3H0v2h3v4H0v2h3v3h2V5h9V3h-3V0H9v3H5V0z" fill="#b2b2b2" fill-opacity=".65"/><path d="M11 6.62c-1.747 0-3.957 1.344-4.752 3.936a.683.69 0 00-.004.394C7.012 13.665 9.292 14.9 11 14.9c1.708 0 3.988-1.235 4.756-3.95a.683.69 0 000-.382C15.004 7.955 12.746 6.62 11 6.62zM11 8a2.733 2.76 0 012.733 2.76A2.733 2.76 0 0111 13.52a2.733 2.76 0 01-2.733-2.76A2.733 2.76 0 0111 8zm0 1.38a1.367 1.38 0 00-1.367 1.38A1.367 1.38 0 0011 12.14a1.367 1.38 0 001.367-1.38A1.367 1.38 0 0011 9.38z" fill="#e0e0e0" /></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" fill-opacity=".65" d="M3 0v3H0v2h3v4H0v2h3v3h2V5h9V3h-3V0H9v3H5V0z"/><path fill="#e0e0e0" d="M11 6.62c-1.747 0-3.957 1.344-4.752 3.936a.683.69 0 00-.004.394C7.012 13.665 9.292 14.9 11 14.9c1.708 0 3.988-1.235 4.756-3.95a.683.69 0 000-.382C15.004 7.955 12.746 6.62 11 6.62zM11 8a2.733 2.76 0 012.733 2.76A2.733 2.76 0 0111 13.52a2.733 2.76 0 01-2.733-2.76A2.733 2.76 0 0111 8zm0 1.38a1.367 1.38 0 00-1.367 1.38A1.367 1.38 0 0011 12.14a1.367 1.38 0 001.367-1.38A1.367 1.38 0 0011 9.38z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/hslider_tick.svg b/scene/theme/icons/hslider_tick.svg index 7110748cbc..6697632ae2 100644 --- a/scene/theme/icons/hslider_tick.svg +++ b/scene/theme/icons/hslider_tick.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 4 16" width="4" xmlns="http://www.w3.org/2000/svg"><path d="M1 0h2v16H1z" fill="#fff" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="4" height="16"><path fill="#fff" fill-opacity=".25" d="M1 0h2v16H1z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/hsplitter.svg b/scene/theme/icons/hsplitter.svg index 89e2ef4172..d595522304 100644 --- a/scene/theme/icons/hsplitter.svg +++ b/scene/theme/icons/hsplitter.svg @@ -1 +1 @@ -<svg height="48" width="8" viewBox="0 0 8 48" xmlns="http://www.w3.org/2000/svg"><path d="M3.15 4v40h1.7V4z" fill="gray" fill-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="48"><path fill="gray" fill-opacity=".65" d="M3.15 4v40h1.7V4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/indeterminate.svg b/scene/theme/icons/indeterminate.svg index e6e8dec5ed..f8edca3e52 100644 --- a/scene/theme/icons/indeterminate.svg +++ b/scene/theme/icons/indeterminate.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="14" rx="2.333" fill="#fff" fill-opacity=".75"/><path d="m3 7h10v2h-10z" fill="#1a1a1a"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#fff" fill-opacity=".75" rx="2.333"/><path fill="#1a1a1a" d="m3 7h10v2h-10z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/indeterminate_disabled.svg b/scene/theme/icons/indeterminate_disabled.svg index f238f6f31c..7276625ead 100644 --- a/scene/theme/icons/indeterminate_disabled.svg +++ b/scene/theme/icons/indeterminate_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="14" rx="2.333" fill="#fff" fill-opacity=".37"/><path d="m3 7h10v2h-10z" fill="#1a1a1a" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#fff" fill-opacity=".37" rx="2.333"/><path fill="#1a1a1a" fill-opacity=".5" d="m3 7h10v2h-10z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/line_edit_clear.svg b/scene/theme/icons/line_edit_clear.svg index 6618aa2e14..0123674231 100644 --- a/scene/theme/icons/line_edit_clear.svg +++ b/scene/theme/icons/line_edit_clear.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z" fill="#fff" fill-opacity=".75"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#fff" fill-opacity=".75" d="m1 3 2-2 5 5 5-5 2 2-5 5 5 5-2 2-5-5-5 5-2-2 5-5z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/mini_checkerboard.svg b/scene/theme/icons/mini_checkerboard.svg index 40e6aa1dd0..2dd71a6add 100644 --- a/scene/theme/icons/mini_checkerboard.svg +++ b/scene/theme/icons/mini_checkerboard.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 0v8h8V0zm8 8v8h8V8z" fill="gray"/><path d="M8 0v8h8V0zm0 8H0v8h8z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="gray" d="M0 0v8h8V0zm8 8v8h8V8z"/><path fill="#fff" d="M8 0v8h8V0zm0 8H0v8h8z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/option_button_arrow.svg b/scene/theme/icons/option_button_arrow.svg index 6a551e7663..bdb27e0528 100644 --- a/scene/theme/icons/option_button_arrow.svg +++ b/scene/theme/icons/option_button_arrow.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m2 4 4 4 4-4" fill="none" stroke="#b2b2b2" stroke-opacity=".85" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".85" stroke-width="2" d="m2 4 4 4 4-4"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/picker_shape_circle.svg b/scene/theme/icons/picker_shape_circle.svg index 1f45259fc5..de104121c8 100644 --- a/scene/theme/icons/picker_shape_circle.svg +++ b/scene/theme/icons/picker_shape_circle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 2.5a5.5 5.5 0 0 0 0 11 5.5 5.5 0 0 0 0-11m6.5 0h2v11h-2z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eaeaea" d="M6.5 2.5a5.5 5.5 0 0 0 0 11 5.5 5.5 0 0 0 0-11m6.5 0h2v11h-2z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/picker_shape_rectangle.svg b/scene/theme/icons/picker_shape_rectangle.svg index 4eb335758a..642b9f789d 100644 --- a/scene/theme/icons/picker_shape_rectangle.svg +++ b/scene/theme/icons/picker_shape_rectangle.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M.5 2.5h11v11H.5zm12 0h2v11h-2z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#eaeaea" d="M.5 2.5h11v11H.5zm12 0h2v11h-2z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/picker_shape_rectangle_wheel.svg b/scene/theme/icons/picker_shape_rectangle_wheel.svg index 3b70538f1e..e46cc41402 100644 --- a/scene/theme/icons/picker_shape_rectangle_wheel.svg +++ b/scene/theme/icons/picker_shape_rectangle_wheel.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.25" fill="none" stroke-width="1.75" stroke="#eaeaea"/><path d="M4.9 4.9h6.2v6.2H4.9z" fill="#eaeaea"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.25" fill="none" stroke="#eaeaea" stroke-width="1.75"/><path fill="#eaeaea" d="M4.9 4.9h6.2v6.2H4.9z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/popup_menu_arrow_left.svg b/scene/theme/icons/popup_menu_arrow_left.svg index 642fecf3c7..c5c1b32da8 100644 --- a/scene/theme/icons/popup_menu_arrow_left.svg +++ b/scene/theme/icons/popup_menu_arrow_left.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m5.5 11-3-3 3-3" fill="none" stroke="#b2b2b2" stroke-opacity=".45" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".45" stroke-width="2" d="m5.5 11-3-3 3-3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/popup_menu_arrow_right.svg b/scene/theme/icons/popup_menu_arrow_right.svg index b295df0764..8741f3a387 100644 --- a/scene/theme/icons/popup_menu_arrow_right.svg +++ b/scene/theme/icons/popup_menu_arrow_right.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m2.5 11 3-3-3-3" fill="none" stroke="#b2b2b2" stroke-opacity=".45" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16"><path fill="none" stroke="#b2b2b2" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".45" stroke-width="2" d="m2.5 11 3-3-3-3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/radio_checked.svg b/scene/theme/icons/radio_checked.svg index 2d39431bff..85a3d0c456 100644 --- a/scene/theme/icons/radio_checked.svg +++ b/scene/theme/icons/radio_checked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="5.5" fill="#1a1a1a" stroke="#fff" stroke-opacity=".75" stroke-width="3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="5.5" fill="#1a1a1a" stroke="#fff" stroke-opacity=".75" stroke-width="3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/radio_checked_disabled.svg b/scene/theme/icons/radio_checked_disabled.svg index 9bcac0fd0f..30627c07cc 100644 --- a/scene/theme/icons/radio_checked_disabled.svg +++ b/scene/theme/icons/radio_checked_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#fff" fill-opacity=".37"/><circle cx="8" cy="8" r="4" fill="#1a1a1a" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#fff" fill-opacity=".37"/><circle cx="8" cy="8" r="4" fill="#1a1a1a" fill-opacity=".5"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/radio_unchecked.svg b/scene/theme/icons/radio_unchecked.svg index abcceabd40..f78b678c51 100644 --- a/scene/theme/icons/radio_unchecked.svg +++ b/scene/theme/icons/radio_unchecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#1a1a1a" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#1a1a1a" fill-opacity=".5"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/radio_unchecked_disabled.svg b/scene/theme/icons/radio_unchecked_disabled.svg index 5a1856b5b1..706aa68b84 100644 --- a/scene/theme/icons/radio_unchecked_disabled.svg +++ b/scene/theme/icons/radio_unchecked_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#1a1a1a" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#1a1a1a" fill-opacity=".25"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/region_folded.svg b/scene/theme/icons/region_folded.svg index 245371b5a1..99e20678c9 100644 --- a/scene/theme/icons/region_folded.svg +++ b/scene/theme/icons/region_folded.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M3 2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm2.75 7a1 1 0 0 1-1.414-1.414L5.922 6 4.336 4.414A1 1 0 0 1 5.75 3l2.293 2.293a1 1 0 0 1 0 1.414z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="#fff" d="M3 2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zm2.75 7a1 1 0 0 1-1.414-1.414L5.922 6 4.336 4.414A1 1 0 0 1 5.75 3l2.293 2.293a1 1 0 0 1 0 1.414z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/region_unfolded.svg b/scene/theme/icons/region_unfolded.svg index 744ea7197d..5186dd8afb 100644 --- a/scene/theme/icons/region_unfolded.svg +++ b/scene/theme/icons/region_unfolded.svg @@ -1 +1 @@ -<svg height="12" width="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="M10 3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1zM3 5.75a1 1 0 0 1 1.414-1.414L6 5.922l1.586-1.586A1 1 0 0 1 9 5.75L6.707 8.043a1 1 0 0 1-1.414 0z" fill="#fff"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path fill="#fff" d="M10 3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1zM3 5.75a1 1 0 0 1 1.414-1.414L6 5.922l1.586-1.586A1 1 0 0 1 9 5.75L6.707 8.043a1 1 0 0 1-1.414 0z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/reload.svg b/scene/theme/icons/reload.svg index 52f22a943d..7f4cef5d97 100644 --- a/scene/theme/icons/reload.svg +++ b/scene/theme/icons/reload.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M5 8a4 4 0 1 1 4 4v2a6 6 0 1 0-6-6H1l3 4 3-4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/resizer_nw.svg b/scene/theme/icons/resizer_nw.svg index c207147dd4..a8457b1426 100644 --- a/scene/theme/icons/resizer_nw.svg +++ b/scene/theme/icons/resizer_nw.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M4 11V4h7" fill="none" stroke="#fefffe" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke-opacity=".65"/><circle cx="7.5" cy="7.5" r="1.5" fill="#b2b2b2" fill-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fefffe" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".65" stroke-width="2" d="M4 11V4h7"/><circle cx="7.5" cy="7.5" r="1.5" fill="#b2b2b2" fill-opacity=".65"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/resizer_se.svg b/scene/theme/icons/resizer_se.svg index a0383ac4df..c3b8746314 100644 --- a/scene/theme/icons/resizer_se.svg +++ b/scene/theme/icons/resizer_se.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M11 4v7H4" fill="none" stroke="#fefffe" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke-opacity=".65"/><circle cx="7.5" cy="7.5" r="1.5" fill="#b2b2b2" fill-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fefffe" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".65" stroke-width="2" d="M11 4v7H4"/><circle cx="7.5" cy="7.5" r="1.5" fill="#b2b2b2" fill-opacity=".65"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/scroll_button_left.svg b/scene/theme/icons/scroll_button_left.svg index 1cf907e044..2a3c0e3a4a 100644 --- a/scene/theme/icons/scroll_button_left.svg +++ b/scene/theme/icons/scroll_button_left.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fefffe" fill-opacity=".75" r="6"/><path d="m9 5-3 3 3 3" fill="none" stroke="#1a1a1a" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="6" fill="#fefffe" fill-opacity=".75"/><path fill="none" stroke="#1a1a1a" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".65" stroke-width="2" d="m9 5-3 3 3 3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/scroll_button_left_hl.svg b/scene/theme/icons/scroll_button_left_hl.svg index 2ca045ca24..659bf6b4c4 100644 --- a/scene/theme/icons/scroll_button_left_hl.svg +++ b/scene/theme/icons/scroll_button_left_hl.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fefffe" r="6"/><path d="m9 5-3 3 3 3" fill="none" stroke="#1a1a1a" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="6" fill="#fefffe"/><path fill="none" stroke="#1a1a1a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5-3 3 3 3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/scroll_button_right.svg b/scene/theme/icons/scroll_button_right.svg index 0d17f95ec0..7736e1ef27 100644 --- a/scene/theme/icons/scroll_button_right.svg +++ b/scene/theme/icons/scroll_button_right.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fefffe" fill-opacity=".75" r="6"/><path d="m7 5 3 3-3 3" fill="none" stroke="#1a1a1a" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="6" fill="#fefffe" fill-opacity=".75"/><path fill="none" stroke="#1a1a1a" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".65" stroke-width="2" d="m7 5 3 3-3 3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/scroll_button_right_hl.svg b/scene/theme/icons/scroll_button_right_hl.svg index 1d29169c37..b29e918253 100644 --- a/scene/theme/icons/scroll_button_right_hl.svg +++ b/scene/theme/icons/scroll_button_right_hl.svg @@ -1 +1 @@ -<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#fefffe" r="6"/><path d="m7 5 3 3-3 3" fill="none" stroke="#1a1a1a" stroke-linejoin="round" stroke-linecap="round" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="6" fill="#fefffe"/><path fill="none" stroke="#1a1a1a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7 5 3 3-3 3"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/slider_grabber.svg b/scene/theme/icons/slider_grabber.svg index 420f5d779b..ef0a1fea8c 100644 --- a/scene/theme/icons/slider_grabber.svg +++ b/scene/theme/icons/slider_grabber.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#fefefe" fill-opacity=".75"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#fefefe" fill-opacity=".75"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/slider_grabber_disabled.svg b/scene/theme/icons/slider_grabber_disabled.svg index 74b1e2214d..48326fea9f 100644 --- a/scene/theme/icons/slider_grabber_disabled.svg +++ b/scene/theme/icons/slider_grabber_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#fefefe" fill-opacity=".37"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#fefefe" fill-opacity=".37"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/slider_grabber_hl.svg b/scene/theme/icons/slider_grabber_hl.svg index 126c75f5f7..046878c9b1 100644 --- a/scene/theme/icons/slider_grabber_hl.svg +++ b/scene/theme/icons/slider_grabber_hl.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="7" fill="#fefefe"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="7" fill="#fefefe"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/tabs_drop_mark.svg b/scene/theme/icons/tabs_drop_mark.svg index b1415bec45..104c65b8cb 100644 --- a/scene/theme/icons/tabs_drop_mark.svg +++ b/scene/theme/icons/tabs_drop_mark.svg @@ -1 +1 @@ -<svg height="32" viewBox="0 0 16 32" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1h6v30h-6z" fill="#d3d3d3"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="32"><path fill="#d3d3d3" d="m5 1h6v30h-6z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/tabs_menu.svg b/scene/theme/icons/tabs_menu.svg index f132bf8fa2..9a70151d39 100644 --- a/scene/theme/icons/tabs_menu.svg +++ b/scene/theme/icons/tabs_menu.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#b2b2b2" fill-opacity=".45"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" fill-opacity=".45" d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/tabs_menu_hl.svg b/scene/theme/icons/tabs_menu_hl.svg index fce133f2d9..e55c1ad99e 100644 --- a/scene/theme/icons/tabs_menu_hl.svg +++ b/scene/theme/icons/tabs_menu_hl.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#b2b2b2" fill-opacity=".65"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" fill-opacity=".65" d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/text_edit_ellipsis.svg b/scene/theme/icons/text_edit_ellipsis.svg index 320d740cee..a8e0a4e615 100644 --- a/scene/theme/icons/text_edit_ellipsis.svg +++ b/scene/theme/icons/text_edit_ellipsis.svg @@ -1 +1 @@ -<svg height="8" width="14" viewBox="0 0 14 8" xmlns="http://www.w3.org/2000/svg"><path d="M4 0a4 4 0 0 0 0 8h6a4 4 0 0 0 0-8zM3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z" fill="#fefffe" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="8"><path fill="#fefffe" fill-opacity=".25" d="M4 0a4 4 0 0 0 0 8h6a4 4 0 0 0 0-8zM3 3a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 0 1 0 2 1 1 0 0 1 0-2z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/text_edit_space.svg b/scene/theme/icons/text_edit_space.svg index 5c549918ed..9f6a04ac50 100644 --- a/scene/theme/icons/text_edit_space.svg +++ b/scene/theme/icons/text_edit_space.svg @@ -1 +1 @@ -<svg height="8" width="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="4" r="1.5" fill="#b2b2b2" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><circle cx="4" cy="4" r="1.5" fill="#b2b2b2" fill-opacity=".25"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/text_edit_tab.svg b/scene/theme/icons/text_edit_tab.svg index 3412e283f4..e4bdf90581 100644 --- a/scene/theme/icons/text_edit_tab.svg +++ b/scene/theme/icons/text_edit_tab.svg @@ -1 +1 @@ -<svg height="8" width="8" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"><path d="M6 0v8h2V0zM1 0a1 1 0 0 0-.693 1.705L2.6 3.998.307 6.291A1 1 0 0 0 1.72 7.705l3-3a1 1 0 0 0 0-1.414l-3-3A1 1 0 0 0 1 0z" fill="#b2b2b2" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"><path fill="#b2b2b2" fill-opacity=".25" d="M6 0v8h2V0zM1 0a1 1 0 0 0-.693 1.705L2.6 3.998.307 6.291A1 1 0 0 0 1.72 7.705l3-3a1 1 0 0 0 0-1.414l-3-3A1 1 0 0 0 1 0z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_off.svg b/scene/theme/icons/toggle_off.svg index aa2805d2cb..d58b6cdfe1 100644 --- a/scene/theme/icons/toggle_off.svg +++ b/scene/theme/icons/toggle_off.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".5"><rect fill="#1a1a1a" height="14" rx="7" width="30" x="1" y="1"/><circle cx="8" cy="8" fill="#fff" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><g fill-opacity=".5"><rect width="30" height="14" x="1" y="1" fill="#1a1a1a" rx="7"/><circle cx="8" cy="8" r="5" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_off_disabled.svg b/scene/theme/icons/toggle_off_disabled.svg index e82eab7b31..85b6aad0ea 100644 --- a/scene/theme/icons/toggle_off_disabled.svg +++ b/scene/theme/icons/toggle_off_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".25"><rect fill="#1a1a1a" height="14" rx="7" width="30" x="1" y="1"/><circle cx="8" cy="8" fill="#fff" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><g fill-opacity=".25"><rect width="30" height="14" x="1" y="1" fill="#1a1a1a" rx="7"/><circle cx="8" cy="8" r="5" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_off_disabled_mirrored.svg b/scene/theme/icons/toggle_off_disabled_mirrored.svg index 6a1ab0433d..f65cbe60ae 100644 --- a/scene/theme/icons/toggle_off_disabled_mirrored.svg +++ b/scene/theme/icons/toggle_off_disabled_mirrored.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".25"><rect fill="#1a1a1a" height="14" rx="7" width="30" x="1" y="1"/><circle cx="24" cy="8" fill="#fff" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><g fill-opacity=".25"><rect width="30" height="14" x="1" y="1" fill="#1a1a1a" rx="7"/><circle cx="24" cy="8" r="5" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_off_mirrored.svg b/scene/theme/icons/toggle_off_mirrored.svg index ec568b5c96..e24f24621c 100644 --- a/scene/theme/icons/toggle_off_mirrored.svg +++ b/scene/theme/icons/toggle_off_mirrored.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".5"><rect fill="#1a1a1a" height="14" rx="7" width="30" x="1" y="1"/><circle cx="24" cy="8" fill="#fff" r="5"/></g></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><g fill-opacity=".5"><rect width="30" height="14" x="1" y="1" fill="#1a1a1a" rx="7"/><circle cx="24" cy="8" r="5" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_on.svg b/scene/theme/icons/toggle_on.svg index 8306d73973..4db88f2dbb 100644 --- a/scene/theme/icons/toggle_on.svg +++ b/scene/theme/icons/toggle_on.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" fill-opacity=".75" height="14" rx="7" width="30" x="1" y="1"/><circle cx="24" cy="8" fill="#1a1a1a" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><rect width="30" height="14" x="1" y="1" fill="#fff" fill-opacity=".75" rx="7"/><circle cx="24" cy="8" r="5" fill="#1a1a1a"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_on_disabled.svg b/scene/theme/icons/toggle_on_disabled.svg index 09bd172f66..622906bb28 100644 --- a/scene/theme/icons/toggle_on_disabled.svg +++ b/scene/theme/icons/toggle_on_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" fill-opacity=".37" height="14" rx="7" width="30" x="1" y="1"/><circle cx="24" cy="8" fill="#1a1a1a" fill-opacity=".5" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><rect width="30" height="14" x="1" y="1" fill="#fff" fill-opacity=".37" rx="7"/><circle cx="24" cy="8" r="5" fill="#1a1a1a" fill-opacity=".5"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_on_disabled_mirrored.svg b/scene/theme/icons/toggle_on_disabled_mirrored.svg index 2f1e0de7a9..0d444de6c4 100644 --- a/scene/theme/icons/toggle_on_disabled_mirrored.svg +++ b/scene/theme/icons/toggle_on_disabled_mirrored.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" fill-opacity=".37" height="14" rx="7" width="30" x="1" y="1"/><circle cx="8" cy="8" fill="#1a1a1a" fill-opacity=".5" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><rect width="30" height="14" x="1" y="1" fill="#fff" fill-opacity=".37" rx="7"/><circle cx="8" cy="8" r="5" fill="#1a1a1a" fill-opacity=".5"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/toggle_on_mirrored.svg b/scene/theme/icons/toggle_on_mirrored.svg index 2236d1e23e..bfed6dd206 100644 --- a/scene/theme/icons/toggle_on_mirrored.svg +++ b/scene/theme/icons/toggle_on_mirrored.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 32 16" width="32" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" fill-opacity=".75" height="14" rx="7" width="30" x="1" y="1"/><circle cx="8" cy="8" fill="#1a1a1a" r="5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="16"><rect width="30" height="14" x="1" y="1" fill="#fff" fill-opacity=".75" rx="7"/><circle cx="8" cy="8" r="5" fill="#1a1a1a"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/unchecked.svg b/scene/theme/icons/unchecked.svg index 1a2afa4e3b..354df8e8c9 100644 --- a/scene/theme/icons/unchecked.svg +++ b/scene/theme/icons/unchecked.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" height="14" width="14" rx="2.333" fill="#1a1a1a" fill-opacity=".5"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#1a1a1a" fill-opacity=".5" rx="2.333"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/unchecked_disabled.svg b/scene/theme/icons/unchecked_disabled.svg index a319f790e9..4d352d744e 100644 --- a/scene/theme/icons/unchecked_disabled.svg +++ b/scene/theme/icons/unchecked_disabled.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" height="14" width="14" rx="2.333" fill="#1a1a1a" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><rect width="14" height="14" x="1" y="1" fill="#1a1a1a" fill-opacity=".25" rx="2.333"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/updown.svg b/scene/theme/icons/updown.svg index 2258f3b5d1..4a48eb39a5 100644 --- a/scene/theme/icons/updown.svg +++ b/scene/theme/icons/updown.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 6 4-3.5L12 6m0 4-4 3.5L4 10" fill="none" stroke="#fff" stroke-opacity=".75" stroke-width="2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="none" stroke="#fff" stroke-opacity=".75" stroke-width="2" d="m4 6 4-3.5L12 6m0 4-4 3.5L4 10"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/visibility_visible.svg b/scene/theme/icons/visibility_visible.svg index 33e8718941..cd82670536 100644 --- a/scene/theme/icons/visibility_visible.svg +++ b/scene/theme/icons/visibility_visible.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4z" fill="#b2b2b2"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#b2b2b2" d="M8 2C5.443 2 2.209 3.948 1.045 7.705a1 1 0 0 0 0 .55C2.163 12.211 5.5 14 8 14s5.836-1.789 6.961-5.725a1 1 0 0 0 0-.55C13.861 3.935 10.554 2 8 2zm0 2a4 4 0 0 1 0 8 4 4 0 0 1 0-8zm0 2a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/vslider_tick.svg b/scene/theme/icons/vslider_tick.svg index a96a8e48bb..d1c5aa4dd6 100644 --- a/scene/theme/icons/vslider_tick.svg +++ b/scene/theme/icons/vslider_tick.svg @@ -1 +1 @@ -<svg height="4" viewBox="0 0 16 4" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M0 3V1h16v2z" fill="#fff" fill-opacity=".25"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="4"><path fill="#fff" fill-opacity=".25" d="M0 3V1h16v2z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/vsplitter.svg b/scene/theme/icons/vsplitter.svg index 37b0aa470e..65326bea74 100644 --- a/scene/theme/icons/vsplitter.svg +++ b/scene/theme/icons/vsplitter.svg @@ -1 +1 @@ -<svg height="8" width="48" viewBox="0 0 48 8" xmlns="http://www.w3.org/2000/svg"><path d="M4 4h40" fill="none" stroke="gray" stroke-opacity=".65" stroke-width="1.7"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="48" height="8"><path fill="none" stroke="gray" stroke-opacity=".65" stroke-width="1.7" d="M4 4h40"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/zoom_less.svg b/scene/theme/icons/zoom_less.svg index 29bd1708ca..eea325db42 100644 --- a/scene/theme/icons/zoom_less.svg +++ b/scene/theme/icons/zoom_less.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#b2b2b2" fill-opacity=".65" r="8"/><circle cx="8" cy="8" fill="#fefffe" r="7"/><path d="M4 7h8v2H4z" fill="#010001"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill="#b2b2b2" fill-opacity=".65"/><circle cx="8" cy="8" r="7" fill="#fefffe"/><path fill="#010001" d="M4 7h8v2H4z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/zoom_more.svg b/scene/theme/icons/zoom_more.svg index 7a844b1418..441620e6e9 100644 --- a/scene/theme/icons/zoom_more.svg +++ b/scene/theme/icons/zoom_more.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#b2b2b2" fill-opacity=".65" r="8"/><circle cx="8" cy="8" fill="#fefffe" r="7"/><path d="M7 4h2v3h3v2H9v3H7V9H4V7h3z" fill="#010001"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill="#b2b2b2" fill-opacity=".65"/><circle cx="8" cy="8" r="7" fill="#fefffe"/><path fill="#010001" d="M7 4h2v3h3v2H9v3H7V9H4V7h3z"/></svg>
\ No newline at end of file diff --git a/scene/theme/icons/zoom_reset.svg b/scene/theme/icons/zoom_reset.svg index c12d9c3bf2..fd35fe3c74 100644 --- a/scene/theme/icons/zoom_reset.svg +++ b/scene/theme/icons/zoom_reset.svg @@ -1 +1 @@ -<svg height="16" width="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#b2b2b2" fill-opacity=".65" r="8"/><circle cx="8" cy="8" fill="#fefffe" r="7"/><path d="M8 4.166A1 1 0 0 1 9.526 5v7h-2V6.87l-1.445.962-1-1.6z" fill="#010001"/></svg> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><circle cx="8" cy="8" r="8" fill="#b2b2b2" fill-opacity=".65"/><circle cx="8" cy="8" r="7" fill="#fefffe"/><path fill="#010001" d="M8 4.166A1 1 0 0 1 9.526 5v7h-2V6.87l-1.445.962-1-1.6z"/></svg>
\ No newline at end of file diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h index 0ca4777d5c..9149109381 100644 --- a/servers/audio/audio_stream.h +++ b/servers/audio/audio_stream.h @@ -49,6 +49,7 @@ class AudioSamplePlayback : public RefCounted { public: Ref<AudioStream> stream; + ObjectID player_id; float offset = 0.0f; Vector<AudioFrame> volume_vector; StringName bus; diff --git a/servers/display_server_headless.h b/servers/display_server_headless.h index 51755ddfbd..60422c16cc 100644 --- a/servers/display_server_headless.h +++ b/servers/display_server_headless.h @@ -51,7 +51,18 @@ private: return memnew(DisplayServerHeadless()); } + static void _dispatch_input_events(const Ref<InputEvent> &p_event) { + static_cast<DisplayServerHeadless *>(get_singleton())->_dispatch_input_event(p_event); + } + + void _dispatch_input_event(const Ref<InputEvent> &p_event) { + if (input_event_callback.is_valid()) { + input_event_callback.call(p_event); + } + } + NativeMenu *native_menu = nullptr; + Callable input_event_callback; public: bool has_feature(Feature p_feature) const override { return false; } @@ -86,7 +97,11 @@ public: void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} - void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} + + void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override { + input_event_callback = p_callable; + } + void window_set_input_text_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} void window_set_drop_files_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override {} @@ -137,7 +152,9 @@ public: int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override { return 0; } - void process_events() override {} + void process_events() override { + Input::get_singleton()->flush_buffered_events(); + } void set_native_icon(const String &p_filename) override {} void set_icon(const Ref<Image> &p_icon) override {} @@ -153,6 +170,7 @@ public: void tts_stop() override {} void mouse_set_mode(MouseMode p_mode) override {} + Point2i mouse_get_position() const override { return Point2i(); } void clipboard_set(const String &p_text) override {} void clipboard_set_primary(const String &p_text) override {} @@ -178,7 +196,9 @@ public: DisplayServerHeadless() { native_menu = memnew(NativeMenu); + Input::get_singleton()->set_event_dispatch_function(_dispatch_input_events); } + ~DisplayServerHeadless() { if (native_menu) { memdelete(native_menu); diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp index e92050a323..c4286dcc0c 100644 --- a/servers/rendering/renderer_canvas_cull.cpp +++ b/servers/rendering/renderer_canvas_cull.cpp @@ -284,8 +284,8 @@ void RendererCanvasCull::_cull_canvas_item(Item *p_canvas_item, const Transform2 } if (snapping_2d_transforms_to_pixel) { - final_xform.columns[2] = final_xform.columns[2].round(); - parent_xform.columns[2] = parent_xform.columns[2].round(); + final_xform.columns[2] = (final_xform.columns[2] + Point2(0.5, 0.5)).floor(); + parent_xform.columns[2] = (parent_xform.columns[2] + Point2(0.5, 0.5)).floor(); } final_xform = parent_xform * final_xform; diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index aae32f0b3e..f97ed3d215 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -587,7 +587,7 @@ void RenderForwardClustered::_render_list_with_draw_list(RenderListParameters *p RD::get_singleton()->draw_list_end(); } -void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, bool p_flip_y, const Color &p_default_bg_color, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier, bool p_pancake_shadows, int p_index) { +void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, const Color &p_default_bg_color, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier, bool p_pancake_shadows, int p_index) { RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); Ref<RenderSceneBuffersRD> rd = p_render_data->render_buffers; @@ -603,7 +603,7 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat } } - p_render_data->scene_data->update_ubo(scene_state.uniform_buffers[p_index], get_debug_draw_mode(), env, reflection_probe_instance, p_render_data->camera_attributes, p_flip_y, p_pancake_shadows, p_screen_size, p_default_bg_color, _render_buffers_get_luminance_multiplier(), p_opaque_render_buffers, p_apply_alpha_multiplier); + p_render_data->scene_data->update_ubo(scene_state.uniform_buffers[p_index], get_debug_draw_mode(), env, reflection_probe_instance, p_render_data->camera_attributes, p_pancake_shadows, p_screen_size, p_default_bg_color, _render_buffers_get_luminance_multiplier(), p_opaque_render_buffers, p_apply_alpha_multiplier); // now do implementation UBO @@ -1732,7 +1732,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co _setup_lightmaps(p_render_data, *p_render_data->lightmaps, p_render_data->scene_data->cam_transform); _setup_voxelgis(*p_render_data->voxel_gi_instances); - _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false); + _setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, false); // May have changed due to the above (light buffer enlarged, as an example). _update_render_base_uniform_set(); @@ -1995,7 +1995,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co // Shadow pass can change the base uniform set samplers. _update_render_base_uniform_set(); - _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, true, using_motion_pass); + _setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, true, using_motion_pass); RID rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_OPAQUE, p_render_data, radiance_texture, samplers, true); @@ -2209,7 +2209,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_ALPHA, p_render_data, radiance_texture, samplers, true); - _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false); + _setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, false); { uint32_t transparent_color_pass_flags = (color_pass_flags | COLOR_PASS_FLAG_TRANSPARENT) & ~(COLOR_PASS_FLAG_SEPARATE_SPECULAR); @@ -2562,6 +2562,7 @@ void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const Page SceneState::ShadowPass shadow_pass; RenderSceneDataRD scene_data; + scene_data.flip_y = !p_flip_y; // Q: Why is this inverted? Do we assume flip in shadow logic? scene_data.cam_projection = p_projection; scene_data.cam_transform = p_transform; scene_data.view_projection[0] = p_projection; @@ -2581,7 +2582,7 @@ void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const Page render_data.instances = &p_instances; render_data.render_info = p_render_info; - _setup_environment(&render_data, true, p_viewport_size, !p_flip_y, Color(), false, false, p_use_pancake, shadow_pass_index); + _setup_environment(&render_data, true, p_viewport_size, Color(), false, false, p_use_pancake, shadow_pass_index); if (get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_DISABLE_LOD) { scene_data.screen_mesh_lod_threshold = 0.0; @@ -2654,6 +2655,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con RD::get_singleton()->draw_command_begin_label("Render Collider Heightfield"); RenderSceneDataRD scene_data; + scene_data.flip_y = true; scene_data.cam_projection = p_cam_projection; scene_data.cam_transform = p_cam_transform; scene_data.view_projection[0] = p_cam_projection; @@ -2673,7 +2675,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con _update_render_base_uniform_set(); - _setup_environment(&render_data, true, Vector2(1, 1), true, Color(), false, false, false); + _setup_environment(&render_data, true, Vector2(1, 1), Color(), false, false, false); PassMode pass_mode = PASS_MODE_SHADOW; @@ -2720,7 +2722,7 @@ void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform _update_render_base_uniform_set(); - _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); + _setup_environment(&render_data, true, Vector2(1, 1), Color()); PassMode pass_mode = PASS_MODE_DEPTH_MATERIAL; _fill_render_list(RENDER_LIST_SECONDARY, &render_data, pass_mode); @@ -2771,7 +2773,7 @@ void RenderForwardClustered::_render_uv2(const PagedArray<RenderGeometryInstance _update_render_base_uniform_set(); - _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); + _setup_environment(&render_data, true, Vector2(1, 1), Color()); PassMode pass_mode = PASS_MODE_DEPTH_MATERIAL; _fill_render_list(RENDER_LIST_SECONDARY, &render_data, pass_mode); @@ -2887,7 +2889,7 @@ void RenderForwardClustered::_render_sdfgi(Ref<RenderSceneBuffersRD> p_render_bu RendererRD::MaterialStorage::store_transform(to_bounds.affine_inverse() * scene_data.cam_transform, scene_state.ubo.sdf_to_bounds); scene_data.emissive_exposure_normalization = p_exposure_normalization; - _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); + _setup_environment(&render_data, true, Vector2(1, 1), Color()); RID rp_uniform_set = _setup_sdfgi_render_pass_uniform_set(p_albedo_texture, p_emission_texture, p_emission_aniso_texture, p_geom_facing_texture, RendererRD::MaterialStorage::get_singleton()->samplers_rd_get_default()); @@ -3585,22 +3587,31 @@ RID RenderForwardClustered::_render_buffers_get_velocity_texture(Ref<RenderScene } void RenderForwardClustered::environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) { + ERR_FAIL_NULL(ss_effects); + ERR_FAIL_COND(p_quality < RS::EnvironmentSSAOQuality::ENV_SSAO_QUALITY_VERY_LOW || p_quality > RS::EnvironmentSSAOQuality::ENV_SSAO_QUALITY_ULTRA); ss_effects->ssao_set_quality(p_quality, p_half_size, p_adaptive_target, p_blur_passes, p_fadeout_from, p_fadeout_to); } void RenderForwardClustered::environment_set_ssil_quality(RS::EnvironmentSSILQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to) { + ERR_FAIL_NULL(ss_effects); + ERR_FAIL_COND(p_quality < RS::EnvironmentSSILQuality::ENV_SSIL_QUALITY_VERY_LOW || p_quality > RS::EnvironmentSSILQuality::ENV_SSIL_QUALITY_ULTRA); ss_effects->ssil_set_quality(p_quality, p_half_size, p_adaptive_target, p_blur_passes, p_fadeout_from, p_fadeout_to); } void RenderForwardClustered::environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) { + ERR_FAIL_NULL(ss_effects); + ERR_FAIL_COND(p_quality < RS::EnvironmentSSRRoughnessQuality::ENV_SSR_ROUGHNESS_QUALITY_DISABLED || p_quality > RS::EnvironmentSSRRoughnessQuality::ENV_SSR_ROUGHNESS_QUALITY_HIGH); ss_effects->ssr_set_roughness_quality(p_quality); } void RenderForwardClustered::sub_surface_scattering_set_quality(RS::SubSurfaceScatteringQuality p_quality) { + ERR_FAIL_NULL(ss_effects); + ERR_FAIL_COND(p_quality < RS::SubSurfaceScatteringQuality::SUB_SURFACE_SCATTERING_QUALITY_DISABLED || p_quality > RS::SubSurfaceScatteringQuality::SUB_SURFACE_SCATTERING_QUALITY_HIGH); ss_effects->sss_set_quality(p_quality); } void RenderForwardClustered::sub_surface_scattering_set_scale(float p_scale, float p_depth_scale) { + ERR_FAIL_NULL(ss_effects); ss_effects->sss_set_scale(p_scale, p_depth_scale); } diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h index ae9e5e7c10..0aa4a0667e 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h @@ -361,7 +361,7 @@ class RenderForwardClustered : public RendererSceneRenderRD { static RenderForwardClustered *singleton; - void _setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, bool p_flip_y, const Color &p_default_bg_color, bool p_opaque_render_buffers = false, bool p_apply_alpha_multiplier = false, bool p_pancake_shadows = false, int p_index = 0); + void _setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, const Color &p_default_bg_color, bool p_opaque_render_buffers = false, bool p_apply_alpha_multiplier = false, bool p_pancake_shadows = false, int p_index = 0); void _setup_voxelgis(const PagedArray<RID> &p_voxelgis); void _setup_lightmaps(const RenderDataRD *p_render_data, const PagedArray<RID> &p_lightmaps, const Transform3D &p_cam_transform); diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp index 194a70dc22..0d83264bfb 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -804,7 +804,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color RD::get_singleton()->draw_command_begin_label("Render Setup"); _setup_lightmaps(p_render_data, *p_render_data->lightmaps, p_render_data->scene_data->cam_transform); - _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false); + _setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, false); // May have changed due to the above (light buffer enlarged, as an example). _update_render_base_uniform_set(); @@ -953,7 +953,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color // Shadow pass can change the base uniform set samplers. _update_render_base_uniform_set(); - _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, p_render_data->render_buffers.is_valid()); + _setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, p_render_data->render_buffers.is_valid()); if (merge_transparent_pass && using_subpass_post_process) { RENDER_TIMESTAMP("Render Opaque + Transparent + Tonemap"); @@ -1075,7 +1075,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_ALPHA, p_render_data, radiance_texture, samplers, true); // this may be needed if we re-introduced steps that change info, not sure which do so in the previous implementation - //_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false); + //_setup_environment(p_render_data, is_reflection_probe, screen_size, p_default_bg_color, false); RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->scene_data->lod_distance_multiplier, p_render_data->scene_data->screen_mesh_lod_threshold, p_render_data->scene_data->view_count); render_list_params.framebuffer_format = fb_format; @@ -1310,6 +1310,7 @@ void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedAr } RenderSceneDataRD scene_data; + scene_data.flip_y = !p_flip_y; // Q: Why is this inverted? Do we assume flip in shadow logic? scene_data.cam_projection = p_projection; scene_data.cam_transform = p_transform; scene_data.view_projection[0] = p_projection; @@ -1327,7 +1328,7 @@ void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedAr render_data.instances = &p_instances; render_data.render_info = p_render_info; - _setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index); + _setup_environment(&render_data, true, Vector2(1, 1), Color(), false, p_use_pancake, shadow_pass_index); if (get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_DISABLE_LOD) { scene_data.screen_mesh_lod_threshold = 0.0; @@ -1415,7 +1416,7 @@ void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, c render_data.scene_data = &scene_data; render_data.instances = &p_instances; - _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); + _setup_environment(&render_data, true, Vector2(1, 1), Color()); PassMode pass_mode = PASS_MODE_DEPTH_MATERIAL; _fill_render_list(RENDER_LIST_SECONDARY, &render_data, pass_mode); @@ -1460,7 +1461,7 @@ void RenderForwardMobile::_render_uv2(const PagedArray<RenderGeometryInstance *> render_data.scene_data = &scene_data; render_data.instances = &p_instances; - _setup_environment(&render_data, true, Vector2(1, 1), false, Color()); + _setup_environment(&render_data, true, Vector2(1, 1), Color()); PassMode pass_mode = PASS_MODE_DEPTH_MATERIAL; _fill_render_list(RENDER_LIST_SECONDARY, &render_data, pass_mode); @@ -1526,6 +1527,7 @@ void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const _update_render_base_uniform_set(); RenderSceneDataRD scene_data; + scene_data.flip_y = true; scene_data.cam_projection = p_cam_projection; scene_data.cam_transform = p_cam_transform; scene_data.view_projection[0] = p_cam_projection; @@ -1541,7 +1543,7 @@ void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const render_data.scene_data = &scene_data; render_data.instances = &p_instances; - _setup_environment(&render_data, true, Vector2(1, 1), true, Color(), false, false); + _setup_environment(&render_data, true, Vector2(1, 1), Color(), false, false); PassMode pass_mode = PASS_MODE_SHADOW; @@ -1974,7 +1976,7 @@ void RenderForwardMobile::_fill_render_list(RenderListType p_render_list, const } } -void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, bool p_flip_y, const Color &p_default_bg_color, bool p_opaque_render_buffers, bool p_pancake_shadows, int p_index) { +void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, const Color &p_default_bg_color, bool p_opaque_render_buffers, bool p_pancake_shadows, int p_index) { RID env = is_environment(p_render_data->environment) ? p_render_data->environment : RID(); RID reflection_probe_instance = p_render_data->reflection_probe.is_valid() ? RendererRD::LightStorage::get_singleton()->reflection_probe_instance_get_probe(p_render_data->reflection_probe) : RID(); @@ -1987,7 +1989,7 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, } } - p_render_data->scene_data->update_ubo(scene_state.uniform_buffers[p_index], get_debug_draw_mode(), env, reflection_probe_instance, p_render_data->camera_attributes, p_flip_y, p_pancake_shadows, p_screen_size, p_default_bg_color, _render_buffers_get_luminance_multiplier(), p_opaque_render_buffers, false); + p_render_data->scene_data->update_ubo(scene_state.uniform_buffers[p_index], get_debug_draw_mode(), env, reflection_probe_instance, p_render_data->camera_attributes, p_pancake_shadows, p_screen_size, p_default_bg_color, _render_buffers_get_luminance_multiplier(), p_opaque_render_buffers, false); } /// RENDERING /// diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h index aa1b8f34b2..b0fe552449 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h @@ -197,7 +197,7 @@ private: void _fill_instance_data(RenderListType p_render_list, uint32_t p_offset = 0, int32_t p_max_elements = -1, bool p_update_buffer = true); void _fill_render_list(RenderListType p_render_list, const RenderDataRD *p_render_data, PassMode p_pass_mode, bool p_append = false); - void _setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, bool p_flip_y, const Color &p_default_bg_color, bool p_opaque_render_buffers = false, bool p_pancake_shadows = false, int p_index = 0); + void _setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, const Color &p_default_bg_color, bool p_opaque_render_buffers = false, bool p_pancake_shadows = false, int p_index = 0); void _setup_lightmaps(const RenderDataRD *p_render_data, const PagedArray<RID> &p_lightmaps, const Transform3D &p_cam_transform); RID render_base_uniform_set; diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h index c7c5d34314..a78ced271a 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.h +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.h @@ -78,7 +78,6 @@ class RendererCanvasRenderRD : public RendererCanvasRender { FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR = (1 << 11), FLAGS_NINEPACH_DRAW_CENTER = (1 << 12), - FLAGS_USING_PARTICLES = (1 << 13), FLAGS_USE_SKELETON = (1 << 15), FLAGS_NINEPATCH_H_MODE_SHIFT = 16, diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index 1e4880e67a..0ebed49ee9 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -423,6 +423,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende Size2i target_size = rb->get_target_size(); bool can_use_effects = target_size.x >= 8 && target_size.y >= 8; // FIXME I think this should check internal size, we do all our post processing at this size... + can_use_effects &= _debug_draw_can_use_effects(debug_draw); bool can_use_storage = _render_buffers_can_be_storage(); bool use_fsr = fsr && can_use_effects && rb->get_scaling_3d_mode() == RS::VIEWPORT_SCALING_3D_MODE_FSR; @@ -699,7 +700,7 @@ void RendererSceneRenderRD::_post_process_subpass(RID p_source_texture, RID p_fr // FIXME: Our input it our internal_texture, shouldn't this be using internal_size ?? // Seeing we don't support FSR in our mobile renderer right now target_size = internal_size... Size2i target_size = rb->get_target_size(); - bool can_use_effects = target_size.x >= 8 && target_size.y >= 8; + bool can_use_effects = target_size.x >= 8 && target_size.y >= 8 && debug_draw == RS::VIEWPORT_DEBUG_DRAW_DISABLED; RD::DrawListID draw_list = RD::get_singleton()->draw_list_switch_to_next_pass(); @@ -764,6 +765,56 @@ void RendererSceneRenderRD::_disable_clear_request(const RenderDataRD *p_render_ texture_storage->render_target_disable_clear_request(p_render_data->render_buffers->get_render_target()); } +bool RendererSceneRenderRD::_debug_draw_can_use_effects(RS::ViewportDebugDraw p_debug_draw) { + bool can_use_effects = true; + switch (p_debug_draw) { + // No debug draw, use camera effects + case RS::VIEWPORT_DEBUG_DRAW_DISABLED: + can_use_effects = true; + break; + // Modes that completely override rendering to draw debug information should disable camera effects. + case RS::VIEWPORT_DEBUG_DRAW_UNSHADED: + case RS::VIEWPORT_DEBUG_DRAW_OVERDRAW: + case RS::VIEWPORT_DEBUG_DRAW_WIREFRAME: + case RS::VIEWPORT_DEBUG_DRAW_VOXEL_GI_ALBEDO: + case RS::VIEWPORT_DEBUG_DRAW_CLUSTER_OMNI_LIGHTS: + case RS::VIEWPORT_DEBUG_DRAW_CLUSTER_SPOT_LIGHTS: + case RS::VIEWPORT_DEBUG_DRAW_CLUSTER_DECALS: + case RS::VIEWPORT_DEBUG_DRAW_CLUSTER_REFLECTION_PROBES: + case RS::VIEWPORT_DEBUG_DRAW_INTERNAL_BUFFER: + can_use_effects = false; + break; + // Modes that draws information over part of the viewport needs camera effects because we see partially the normal draw mode. + case RS::VIEWPORT_DEBUG_DRAW_SHADOW_ATLAS: + case RS::VIEWPORT_DEBUG_DRAW_DIRECTIONAL_SHADOW_ATLAS: + case RS::VIEWPORT_DEBUG_DRAW_DECAL_ATLAS: + case RS::VIEWPORT_DEBUG_DRAW_MOTION_VECTORS: + // Modes that draws a buffer over viewport needs camera effects because if the buffer is not available it will be equivalent to normal draw mode. + case RS::VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER: + case RS::VIEWPORT_DEBUG_DRAW_SSAO: + case RS::VIEWPORT_DEBUG_DRAW_SSIL: + case RS::VIEWPORT_DEBUG_DRAW_SDFGI: + case RS::VIEWPORT_DEBUG_DRAW_GI_BUFFER: + case RS::VIEWPORT_DEBUG_DRAW_OCCLUDERS: + can_use_effects = true; + break; + // Other debug draw modes keep camera effects. + case RS::VIEWPORT_DEBUG_DRAW_LIGHTING: + case RS::VIEWPORT_DEBUG_DRAW_VOXEL_GI_LIGHTING: + case RS::VIEWPORT_DEBUG_DRAW_VOXEL_GI_EMISSION: + case RS::VIEWPORT_DEBUG_DRAW_SCENE_LUMINANCE: + case RS::VIEWPORT_DEBUG_DRAW_PSSM_SPLITS: + case RS::VIEWPORT_DEBUG_DRAW_SDFGI_PROBES: + case RS::VIEWPORT_DEBUG_DRAW_DISABLE_LOD: + can_use_effects = true; + break; + default: + break; + } + + return can_use_effects; +} + void RendererSceneRenderRD::_render_buffers_debug_draw(const RenderDataRD *p_render_data) { RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); @@ -1073,6 +1124,7 @@ void RendererSceneRenderRD::render_scene(const Ref<RenderSceneBuffers> &p_render scene_data.camera_visible_layers = p_camera_data->visible_layers; scene_data.taa_jitter = p_camera_data->taa_jitter; scene_data.main_cam_transform = p_camera_data->main_transform; + scene_data.flip_y = !p_reflection_probe.is_valid(); scene_data.view_count = p_camera_data->view_count; for (uint32_t v = 0; v < p_camera_data->view_count; v++) { diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h index 5c5f11aba6..a8e8e638cd 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h @@ -117,6 +117,7 @@ protected: RendererRD::GI gi; virtual void _update_shader_quality_settings() {} + static bool _debug_draw_can_use_effects(RS::ViewportDebugDraw p_debug_draw); private: RS::ViewportDebugDraw debug_draw = RS::VIEWPORT_DEBUG_DRAW_DISABLED; diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index dbff09c301..4426d9eb66 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -193,13 +193,6 @@ void main() { } } -#if !defined(USE_ATTRIBUTES) && !defined(USE_PRIMITIVE) - if (bool(draw_data.flags & FLAGS_USING_PARTICLES)) { - //scale by texture size - vertex /= draw_data.color_texture_pixel_size; - } -#endif - #ifdef USE_POINT_SIZE float point_size = 1.0; #endif diff --git a/servers/rendering/renderer_rd/shaders/canvas_uniforms_inc.glsl b/servers/rendering/renderer_rd/shaders/canvas_uniforms_inc.glsl index 7ac7cf9c07..8649f4710b 100644 --- a/servers/rendering/renderer_rd/shaders/canvas_uniforms_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas_uniforms_inc.glsl @@ -14,7 +14,6 @@ #define FLAGS_TRANSPOSE_RECT (1 << 10) #define FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR (1 << 11) #define FLAGS_NINEPACH_DRAW_CENTER (1 << 12) -#define FLAGS_USING_PARTICLES (1 << 13) #define FLAGS_NINEPATCH_H_MODE_SHIFT 16 #define FLAGS_NINEPATCH_V_MODE_SHIFT 18 diff --git a/servers/rendering/renderer_rd/shaders/particles.glsl b/servers/rendering/renderer_rd/shaders/particles.glsl index 60c49bacae..7c5291038f 100644 --- a/servers/rendering/renderer_rd/shaders/particles.glsl +++ b/servers/rendering/renderer_rd/shaders/particles.glsl @@ -292,6 +292,24 @@ void main() { PARTICLE.velocity = particles.data[src_idx].velocity; PARTICLE.flags = PARTICLE_FLAG_TRAILED | ((frame_history.data[0].frame & PARTICLE_FRAME_MASK) << PARTICLE_FRAME_SHIFT); //mark it as trailed, save in which frame it will start PARTICLE.xform = particles.data[src_idx].xform; +#ifdef USERDATA1_USED + PARTICLE.userdata1 = particles.data[src_idx].userdata1; +#endif +#ifdef USERDATA2_USED + PARTICLE.userdata2 = particles.data[src_idx].userdata2; +#endif +#ifdef USERDATA3_USED + PARTICLE.userdata3 = particles.data[src_idx].userdata3; +#endif +#ifdef USERDATA4_USED + PARTICLE.userdata4 = particles.data[src_idx].userdata4; +#endif +#ifdef USERDATA5_USED + PARTICLE.userdata5 = particles.data[src_idx].userdata5; +#endif +#ifdef USERDATA6_USED + PARTICLE.userdata6 = particles.data[src_idx].userdata6; +#endif } if (!bool(particles.data[src_idx].flags & PARTICLE_FLAG_ACTIVE)) { // Disable the entire trail if the parent is no longer active. diff --git a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp index d1c8c71b7f..13b00be1c4 100644 --- a/servers/rendering/renderer_rd/storage_rd/material_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/material_storage.cpp @@ -1165,8 +1165,8 @@ MaterialStorage::MaterialStorage() { global_shader_uniforms.buffer_values = memnew_arr(GlobalShaderUniforms::Value, global_shader_uniforms.buffer_size); memset(global_shader_uniforms.buffer_values, 0, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size); global_shader_uniforms.buffer_usage = memnew_arr(GlobalShaderUniforms::ValueUsage, global_shader_uniforms.buffer_size); - global_shader_uniforms.buffer_dirty_regions = memnew_arr(bool, global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); - memset(global_shader_uniforms.buffer_dirty_regions, 0, sizeof(bool) * global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); + global_shader_uniforms.buffer_dirty_regions = memnew_arr(bool, 1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE)); + memset(global_shader_uniforms.buffer_dirty_regions, 0, sizeof(bool) * (1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE))); global_shader_uniforms.buffer = RD::get_singleton()->storage_buffer_create(sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size); } @@ -1769,7 +1769,7 @@ void MaterialStorage::global_shader_parameters_instance_update(RID p_instance, i void MaterialStorage::_update_global_shader_uniforms() { MaterialStorage *material_storage = MaterialStorage::get_singleton(); if (global_shader_uniforms.buffer_dirty_region_count > 0) { - uint32_t total_regions = global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE; + uint32_t total_regions = 1 + (global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE); if (total_regions / global_shader_uniforms.buffer_dirty_region_count <= 4) { // 25% of regions dirty, just update all buffer RD::get_singleton()->buffer_update(global_shader_uniforms.buffer, 0, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size, global_shader_uniforms.buffer_values); diff --git a/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.cpp b/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.cpp index dc1e64ddcc..ba8aafda6d 100644 --- a/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.cpp +++ b/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.cpp @@ -42,7 +42,11 @@ Transform3D RenderSceneDataRD::get_cam_transform() const { } Projection RenderSceneDataRD::get_cam_projection() const { - return cam_projection; + Projection correction; + correction.set_depth_correction(flip_y); + correction.add_jitter_offset(taa_jitter); + + return correction * cam_projection; } uint32_t RenderSceneDataRD::get_view_count() const { @@ -58,14 +62,18 @@ Vector3 RenderSceneDataRD::get_view_eye_offset(uint32_t p_view) const { Projection RenderSceneDataRD::get_view_projection(uint32_t p_view) const { ERR_FAIL_UNSIGNED_INDEX_V(p_view, view_count, Projection()); - return view_projection[p_view]; + Projection correction; + correction.set_depth_correction(flip_y); + correction.add_jitter_offset(taa_jitter); + + return correction * view_projection[p_view]; } RID RenderSceneDataRD::create_uniform_buffer() { return RD::get_singleton()->uniform_buffer_create(sizeof(UBODATA)); } -void RenderSceneDataRD::update_ubo(RID p_uniform_buffer, RS::ViewportDebugDraw p_debug_mode, RID p_env, RID p_reflection_probe_instance, RID p_camera_attributes, bool p_flip_y, bool p_pancake_shadows, const Size2i &p_screen_size, const Color &p_default_bg_color, float p_luminance_multiplier, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier) { +void RenderSceneDataRD::update_ubo(RID p_uniform_buffer, RS::ViewportDebugDraw p_debug_mode, RID p_env, RID p_reflection_probe_instance, RID p_camera_attributes, bool p_pancake_shadows, const Size2i &p_screen_size, const Color &p_default_bg_color, float p_luminance_multiplier, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier) { RendererSceneRenderRD *render_scene_render = RendererSceneRenderRD::get_singleton(); UBODATA ubo_data; @@ -76,7 +84,7 @@ void RenderSceneDataRD::update_ubo(RID p_uniform_buffer, RS::ViewportDebugDraw p UBO &prev_ubo = ubo_data.prev_ubo; Projection correction; - correction.set_depth_correction(p_flip_y); + correction.set_depth_correction(flip_y); correction.add_jitter_offset(taa_jitter); Projection projection = correction * cam_projection; diff --git a/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.h b/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.h index f6785942ed..5579a97792 100644 --- a/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.h +++ b/servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.h @@ -50,6 +50,7 @@ public: Vector2 taa_jitter; uint32_t camera_visible_layers; bool cam_orthogonal = false; + bool flip_y = false; // For billboards to cast correct shadows. Transform3D main_cam_transform; @@ -90,7 +91,7 @@ public: virtual Projection get_view_projection(uint32_t p_view) const override; RID create_uniform_buffer(); - void update_ubo(RID p_uniform_buffer, RS::ViewportDebugDraw p_debug_mode, RID p_env, RID p_reflection_probe_instance, RID p_camera_attributes, bool p_flip_y, bool p_pancake_shadows, const Size2i &p_screen_size, const Color &p_default_bg_color, float p_luminance_multiplier, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier); + void update_ubo(RID p_uniform_buffer, RS::ViewportDebugDraw p_debug_mode, RID p_env, RID p_reflection_probe_instance, RID p_camera_attributes, bool p_pancake_shadows, const Size2i &p_screen_size, const Color &p_default_bg_color, float p_luminance_multiplier, bool p_opaque_render_buffers, bool p_apply_alpha_multiplier); virtual RID get_uniform_buffer() const override; private: diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp index 38f1fe57bd..801ad1b825 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -5380,7 +5380,7 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ frame = 0; frames.resize(frame_count); - max_timestamp_query_elements = 256; + max_timestamp_query_elements = GLOBAL_GET("debug/settings/profiler/max_timestamp_query_elements"); device = context->device_get(device_index); err = driver->initialize(device_index, frame_count); @@ -5507,7 +5507,7 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ for (uint32_t i = 0; i < frames.size(); i++) { // Staging was never used, create a block. err = _insert_staging_block(); - ERR_CONTINUE(err != OK); + ERR_FAIL_COND_V(err, FAILED); } draw_list = nullptr; @@ -5631,7 +5631,7 @@ void RenderingDevice::_free_rids(T &p_owner, const char *p_type) { void RenderingDevice::capture_timestamp(const String &p_name) { ERR_FAIL_COND_MSG(draw_list != nullptr && draw_list->state.draw_count > 0, "Capturing timestamps during draw list creation is not allowed. Offending timestamp was: " + p_name); ERR_FAIL_COND_MSG(compute_list != nullptr && compute_list->state.dispatch_count > 0, "Capturing timestamps during compute list creation is not allowed. Offending timestamp was: " + p_name); - ERR_FAIL_COND(frames[frame].timestamp_count >= max_timestamp_query_elements); + ERR_FAIL_COND_MSG(frames[frame].timestamp_count >= max_timestamp_query_elements, vformat("Tried capturing more timestamps than the configured maximum (%d). You can increase this limit in the project settings under 'Debug/Settings' called 'Max Timestamp Query Elements'.", max_timestamp_query_elements)); draw_graph.add_capture_timestamp(frames[frame].timestamp_pool, frames[frame].timestamp_count); diff --git a/servers/rendering/rendering_device_binds.cpp b/servers/rendering/rendering_device_binds.cpp index 3678b70254..986f01a52c 100644 --- a/servers/rendering/rendering_device_binds.cpp +++ b/servers/rendering/rendering_device_binds.cpp @@ -157,9 +157,6 @@ Error RDShaderFile::parse_versions_from_text(const String &p_text, const String } } - Ref<RDShaderFile> shader_file; - shader_file.instantiate(); - if (base_error.is_empty()) { if (stage_found[RD::SHADER_STAGE_COMPUTE] && stages_found > 1) { ERR_FAIL_V_MSG(ERR_PARSE_ERROR, "When writing compute shaders, [compute] mustbe the only stage present."); diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 9aa54d0bb7..f5e0b811a2 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -1238,6 +1238,7 @@ void ShaderLanguage::clear() { include_positions.push_back(FilePosition()); include_markers_handled.clear(); + calls_info.clear(); #ifdef DEBUG_ENABLED keyword_completion_context = CF_UNSPECIFIED; @@ -1445,8 +1446,12 @@ bool ShaderLanguage::_find_identifier(const BlockNode *p_block, bool p_allow_rea *r_struct_name = shader->constants[p_identifier].struct_name; } if (r_constant_value) { - if (shader->constants[p_identifier].initializer && shader->constants[p_identifier].initializer->values.size() == 1) { - *r_constant_value = shader->constants[p_identifier].initializer->values[0]; + if (shader->constants[p_identifier].initializer && shader->constants[p_identifier].initializer->type == Node::NODE_TYPE_CONSTANT) { + ConstantNode *cnode = static_cast<ConstantNode *>(shader->constants[p_identifier].initializer); + + if (cnode->values.size() == 1) { + *r_constant_value = cnode->values[0]; + } } } if (r_type) { @@ -1542,7 +1547,7 @@ bool ShaderLanguage::_validate_operator(OperatorNode *p_op, DataType *r_ret_type } DataType na = p_op->arguments[0]->get_datatype(); - valid = na > TYPE_BOOL && na < TYPE_MAT2; + valid = na > TYPE_BVEC4 && na < TYPE_MAT2; ret_type = na; } break; case OP_ADD: @@ -1562,7 +1567,7 @@ bool ShaderLanguage::_validate_operator(OperatorNode *p_op, DataType *r_ret_type } if (na == nb) { - valid = (na > TYPE_BOOL && na <= TYPE_MAT4); + valid = (na > TYPE_BVEC4 && na <= TYPE_MAT4); ret_type = na; } else if (na == TYPE_INT && nb == TYPE_IVEC2) { valid = true; @@ -1771,7 +1776,7 @@ bool ShaderLanguage::_validate_operator(OperatorNode *p_op, DataType *r_ret_type DataType nb = p_op->arguments[1]->get_datatype(); if (na == nb) { - valid = (na > TYPE_BOOL && na <= TYPE_MAT4); + valid = (na > TYPE_BVEC4 && na <= TYPE_MAT4); ret_type = na; } else if (na == TYPE_IVEC2 && nb == TYPE_INT) { valid = true; @@ -3085,6 +3090,19 @@ const ShaderLanguage::BuiltinFuncConstArgs ShaderLanguage::builtin_func_const_ar { nullptr, 0, 0, 0 } }; +const ShaderLanguage::BuiltinEntry ShaderLanguage::frag_only_func_defs[] = { + { "dFdx" }, + { "dFdxCoarse" }, + { "dFdxFine" }, + { "dFdy" }, + { "dFdyCoarse" }, + { "dFdyFine" }, + { "fwidth" }, + { "fwidthCoarse" }, + { "fwidthFine" }, + { nullptr } +}; + bool ShaderLanguage::is_const_suffix_lut_initialized = false; bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionInfo &p_function_info, OperatorNode *p_func, DataType *r_ret_type, StringName *r_ret_type_str, bool *r_is_custom_function) { @@ -3964,12 +3982,9 @@ Variant ShaderLanguage::constant_value_to_variant(const Vector<ShaderLanguage::C } value = Variant(array); } else { - PackedFloat32Array array; + PackedVector4Array array; for (int i = 0; i < array_size; i += 4) { - array.push_back(p_value[i].real); - array.push_back(p_value[i + 1].real); - array.push_back(p_value[i + 2].real); - array.push_back(p_value[i + 3].real); + array.push_back(Vector4(p_value[i].real, p_value[i + 1].real, p_value[i + 2].real, p_value[i + 3].real)); } value = Variant(array); } @@ -4201,7 +4216,7 @@ PropertyInfo ShaderLanguage::uniform_to_property_info(const ShaderNode::Uniform if (p_uniform.hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) { pi.type = Variant::PACKED_COLOR_ARRAY; } else { - pi.type = Variant::PACKED_FLOAT32_ARRAY; + pi.type = Variant::PACKED_VECTOR4_ARRAY; } } else { if (p_uniform.hint == ShaderLanguage::ShaderNode::Uniform::HINT_SOURCE_COLOR) { @@ -4610,6 +4625,58 @@ bool ShaderLanguage::_check_node_constness(const Node *p_node) const { return true; } +bool ShaderLanguage::_check_restricted_func(const StringName &p_name, const StringName &p_current_function) const { + int idx = 0; + + while (frag_only_func_defs[idx].name) { + if (StringName(frag_only_func_defs[idx].name) == p_name) { + if (is_supported_frag_only_funcs) { + if (p_current_function == "vertex" && stages->has(p_current_function)) { + return true; + } + } else { + return true; + } + break; + } + idx++; + } + + return false; +} + +bool ShaderLanguage::_validate_restricted_func(const StringName &p_name, const CallInfo *p_func_info, bool p_is_builtin_hint) { + const bool is_in_restricted_function = p_func_info->name == "vertex"; + + // No need to check up the hierarchy if it's a built-in. + if (!p_is_builtin_hint) { + for (const CallInfo *func_info : p_func_info->calls) { + if (is_in_restricted_function && func_info->name != p_name) { + // Skips check for non-called method. + continue; + } + + if (!_validate_restricted_func(p_name, func_info)) { + return false; + } + } + } + + if (!p_func_info->uses_restricted_functions.is_empty()) { + const Pair<StringName, TkPos> &first_element = p_func_info->uses_restricted_functions.get(0); + _set_tkpos(first_element.second); + + if (is_in_restricted_function) { + _set_error(vformat(RTR("'%s' cannot be used within the '%s' processor function."), first_element.first, "vertex")); + } else { + _set_error(vformat(RTR("'%s' cannot be used here, because '%s' is called by the '%s' processor function (which is not allowed)."), first_element.first, p_func_info->name, "vertex")); + } + return false; + } + + return true; +} + bool ShaderLanguage::_validate_assign(Node *p_node, const FunctionInfo &p_function_info, String *r_message) { if (p_node->type == Node::NODE_TYPE_OPERATOR) { OperatorNode *op = static_cast<OperatorNode *>(p_node); @@ -5266,6 +5333,36 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons const StringName &name = identifier; + if (name != current_function) { // Recursion is not allowed. + // Register call. + if (calls_info.has(name)) { + calls_info[current_function].calls.push_back(&calls_info[name]); + } + + int idx = 0; + bool is_builtin = false; + + while (frag_only_func_defs[idx].name) { + if (frag_only_func_defs[idx].name == name) { + // If a built-in function not found for the current shader type, then it shouldn't be parsed further. + if (!is_supported_frag_only_funcs) { + _set_error(vformat(RTR("Built-in function '%s' is not supported for the '%s' shader type."), name, shader_type_identifier)); + return nullptr; + } + // Register usage of the restricted function. + calls_info[current_function].uses_restricted_functions.push_back(Pair<StringName, TkPos>(name, _get_tkpos())); + is_builtin = true; + break; + } + idx++; + } + + // Recursively checks for the restricted function call. + if (is_supported_frag_only_funcs && current_function == "vertex" && stages->has(current_function) && !_validate_restricted_func(name, &calls_info[current_function], is_builtin)) { + return nullptr; + } + } + OperatorNode *func = alloc_node<OperatorNode>(); func->op = OP_CALL; VariableNode *funcname = alloc_node<VariableNode>(); @@ -8099,6 +8196,8 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f ShaderNode::Uniform::Scope uniform_scope = ShaderNode::Uniform::SCOPE_LOCAL; stages = &p_functions; + is_supported_frag_only_funcs = shader_type_identifier == "canvas_item" || shader_type_identifier == "spatial" || shader_type_identifier == "sky"; + const FunctionInfo &constants = p_functions.has("constants") ? p_functions["constants"] : FunctionInfo(); HashMap<String, String> defined_modes; @@ -9443,7 +9542,7 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f } } - constant.initializer = static_cast<ConstantNode *>(expr); + constant.initializer = expr; if (!_compare_datatypes(type, struct_name, 0, expr->get_datatype(), expr->get_datatype_name(), expr->get_array_size())) { return ERR_PARSE_ERROR; @@ -9541,6 +9640,11 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f shader->functions.insert(name, function); shader->vfunctions.push_back(function); + CallInfo call_info; + call_info.name = name; + + calls_info.insert(name, call_info); + func_node->name = name; func_node->return_type = type; func_node->return_struct_name = struct_name; @@ -10325,10 +10429,11 @@ Error ShaderLanguage::complete(const String &p_code, const ShaderCompileInfo &p_ } while (builtin_func_defs[idx].name) { - if (low_end && builtin_func_defs[idx].high_end) { + if ((low_end && builtin_func_defs[idx].high_end) || _check_restricted_func(builtin_func_defs[idx].name, skip_function)) { idx++; continue; } + matches.insert(String(builtin_func_defs[idx].name), ScriptLanguage::CODE_COMPLETION_KIND_FUNCTION); idx++; } @@ -10490,7 +10595,7 @@ Error ShaderLanguage::complete(const String &p_code, const ShaderCompileInfo &p_ } while (builtin_func_defs[idx].name) { - if (low_end && builtin_func_defs[idx].high_end) { + if ((low_end && builtin_func_defs[idx].high_end) || _check_restricted_func(builtin_func_defs[idx].name, block_function)) { idx++; continue; } @@ -10732,4 +10837,5 @@ ShaderLanguage::ShaderLanguage() { ShaderLanguage::~ShaderLanguage() { clear(); + global_func_set.clear(); } diff --git a/servers/rendering/shader_language.h b/servers/rendering/shader_language.h index 5615d7f457..edac819a1e 100644 --- a/servers/rendering/shader_language.h +++ b/servers/rendering/shader_language.h @@ -620,7 +620,7 @@ public: DataType type; StringName struct_name; DataPrecision precision; - ConstantNode *initializer = nullptr; + Node *initializer = nullptr; int array_size; }; @@ -913,6 +913,15 @@ private: Vector<FilePosition> include_positions; HashSet<String> include_markers_handled; + // Additional function information (eg. call hierarchy). No need to expose it to compiler. + struct CallInfo { + StringName name; + List<Pair<StringName, TkPos>> uses_restricted_functions; + List<CallInfo *> calls; + }; + + RBMap<StringName, CallInfo> calls_info; + #ifdef DEBUG_ENABLED struct Usage { int decl_line; @@ -1036,6 +1045,10 @@ private: bool _validate_assign(Node *p_node, const FunctionInfo &p_function_info, String *r_message = nullptr); bool _validate_operator(OperatorNode *p_op, DataType *r_ret_type = nullptr, int *r_ret_size = nullptr); + struct BuiltinEntry { + const char *name; + }; + struct BuiltinFuncDef { enum { MAX_ARGS = 5 }; const char *name; @@ -1078,11 +1091,13 @@ private: #endif // DEBUG_ENABLED const HashMap<StringName, FunctionInfo> *stages = nullptr; + bool is_supported_frag_only_funcs = false; bool _get_completable_identifier(BlockNode *p_block, CompletionType p_type, StringName &identifier); static const BuiltinFuncDef builtin_func_defs[]; static const BuiltinFuncOutArgs builtin_func_out_args[]; static const BuiltinFuncConstArgs builtin_func_const_args[]; + static const BuiltinEntry frag_only_func_defs[]; static bool is_const_suffix_lut_initialized; @@ -1097,6 +1112,9 @@ private: bool _validate_varying_assign(ShaderNode::Varying &p_varying, String *r_message); bool _check_node_constness(const Node *p_node) const; + bool _check_restricted_func(const StringName &p_name, const StringName &p_current_function) const; + bool _validate_restricted_func(const StringName &p_call_name, const CallInfo *p_func_info, bool p_is_builtin_hint = false); + Node *_parse_expression(BlockNode *p_block, const FunctionInfo &p_function_info); Error _parse_array_size(BlockNode *p_block, const FunctionInfo &p_function_info, bool p_forbid_unknown_size, Node **r_size_expression, int *r_array_size, bool *r_unknown_size); Node *_parse_array_constructor(BlockNode *p_block, const FunctionInfo &p_function_info); diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index dd3491f62c..70b585d683 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -347,6 +347,22 @@ void _get_tbn_from_axis_angle(const Vector3 &p_axis, float p_angle, Vector3 &r_n r_normal = tbn.rows[2]; } +AABB _compute_aabb_from_points(const Vector3 *p_data, int p_length) { + if (p_length == 0) { + return AABB(); + } + + Vector3 min = p_data[0]; + Vector3 max = p_data[0]; + + for (int i = 1; i < p_length; ++i) { + min = min.min(p_data[i]); + max = max.max(p_data[i]); + } + + return AABB(min, max - min); +} + Error RenderingServer::_surface_set_data(Array p_arrays, uint64_t p_format, uint32_t *p_offsets, uint32_t p_vertex_stride, uint32_t p_normal_stride, uint32_t p_attrib_stride, uint32_t p_skin_stride, Vector<uint8_t> &r_vertex_array, Vector<uint8_t> &r_attrib_array, Vector<uint8_t> &r_skin_array, int p_vertex_array_len, Vector<uint8_t> &r_index_array, int p_index_array_len, AABB &r_aabb, Vector<AABB> &r_bone_aabb, Vector4 &r_uv_scale) { uint8_t *vw = r_vertex_array.ptrw(); uint8_t *aw = r_attrib_array.ptrw(); @@ -440,18 +456,10 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint64_t p_format, uint const Vector3 *src = array.ptr(); - r_aabb = AABB(); + r_aabb = _compute_aabb_from_points(src, p_vertex_array_len); + r_aabb.size = r_aabb.size.max(SMALL_VEC3); if (p_format & ARRAY_FLAG_COMPRESS_ATTRIBUTES) { - // First we need to generate the AABB for the entire surface. - for (int i = 0; i < p_vertex_array_len; i++) { - if (i == 0) { - r_aabb = AABB(src[i], SMALL_VEC3); - } else { - r_aabb.expand_to(src[i]); - } - } - if (!(p_format & RS::ARRAY_FORMAT_NORMAL)) { // Early out if we are only setting vertex positions. for (int i = 0; i < p_vertex_array_len; i++) { @@ -592,12 +600,6 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint64_t p_format, uint float vector[3] = { (float)src[i].x, (float)src[i].y, (float)src[i].z }; memcpy(&vw[p_offsets[ai] + i * p_vertex_stride], vector, sizeof(float) * 3); - - if (i == 0) { - r_aabb = AABB(src[i], SMALL_VEC3); - } else { - r_aabb.expand_to(src[i]); - } } } } diff --git a/servers/server_wrap_mt_common.h b/servers/server_wrap_mt_common.h index 40867490ca..22cc7f353d 100644 --- a/servers/server_wrap_mt_common.h +++ b/servers/server_wrap_mt_common.h @@ -31,7 +31,7 @@ #ifndef SERVER_WRAP_MT_COMMON_H #define SERVER_WRAP_MT_COMMON_H -#ifdef DEBIG_ENABLED +#ifdef DEBUG_ENABLED #define MAIN_THREAD_SYNC_CHECK \ if (unlikely(Thread::is_main_thread() && Engine::get_singleton()->notify_frame_server_synced())) { \ MAIN_THREAD_SYNC_WARN \ diff --git a/servers/xr/xr_vrs.cpp b/servers/xr/xr_vrs.cpp index 9d1e2f2068..3e283a42f0 100644 --- a/servers/xr/xr_vrs.cpp +++ b/servers/xr/xr_vrs.cpp @@ -94,7 +94,14 @@ RID XRVRS::make_vrs_texture(const Size2 &p_target_size, const PackedVector2Array int32_t texel_width = RD::get_singleton()->limit_get(RD::LIMIT_VRS_TEXEL_WIDTH); int32_t texel_height = RD::get_singleton()->limit_get(RD::LIMIT_VRS_TEXEL_HEIGHT); + // Should return sensible data or graphics API does not support VRS. + ERR_FAIL_COND_V(texel_width < 1 || texel_height < 1, RID()); + Size2 vrs_size = Size2(0.5 + p_target_size.x / texel_width, 0.5 + p_target_size.y / texel_height).round(); + + // Make sure we have at least one pixel. + vrs_size = vrs_size.maxf(1.0); + float max_radius = 0.5 * MIN(vrs_size.x, vrs_size.y); // Maximum radius that fits inside of our image float min_radius = vrs_min_radius * max_radius / 100.0; // Minimum radius as a percentage of our size real_t outer_radius = MAX(1.0, (max_radius - min_radius) / vrs_strength); diff --git a/tests/core/math/test_vector2.h b/tests/core/math/test_vector2.h index fc3fd6a87d..7bd494ec80 100644 --- a/tests/core/math/test_vector2.h +++ b/tests/core/math/test_vector2.h @@ -353,7 +353,6 @@ TEST_CASE("[Vector2] Plane methods") { const Vector2 vector = Vector2(1.2, 3.4); const Vector2 vector_y = Vector2(0, 1); const Vector2 vector_normal = Vector2(0.95879811270838721622267, 0.2840883296913739899919); - const Vector2 vector_non_normal = Vector2(5.4, 1.6); const real_t p_d = 99.1; CHECK_MESSAGE( vector.bounce(vector_y) == Vector2(1.2, -3.4), @@ -383,6 +382,8 @@ TEST_CASE("[Vector2] Plane methods") { vector.slide(vector_normal).is_equal_approx(Vector2(-0.8292559899117276166456, 2.798738965952080706179)), "Vector2 slide with normal should return expected value."); // There's probably a better way to test these ones? +#ifdef MATH_CHECKS + const Vector2 vector_non_normal = Vector2(5.4, 1.6); ERR_PRINT_OFF; CHECK_MESSAGE( vector.bounce(vector_non_normal).is_equal_approx(Vector2()), @@ -394,6 +395,7 @@ TEST_CASE("[Vector2] Plane methods") { vector.slide(vector_non_normal).is_equal_approx(Vector2()), "Vector2 slide should return empty Vector2 with non-normalized input."); ERR_PRINT_ON; +#endif // MATH_CHECKS } TEST_CASE("[Vector2] Rounding methods") { diff --git a/tests/core/math/test_vector3.h b/tests/core/math/test_vector3.h index ca0aa02882..4cab753d6f 100644 --- a/tests/core/math/test_vector3.h +++ b/tests/core/math/test_vector3.h @@ -368,7 +368,6 @@ TEST_CASE("[Vector3] Plane methods") { const Vector3 vector = Vector3(1.2, 3.4, 5.6); const Vector3 vector_y = Vector3(0, 1, 0); const Vector3 vector_normal = Vector3(0.88763458893247992491, 0.26300284116517923701, 0.37806658417494515320); - const Vector3 vector_non_normal = Vector3(5.4, 1.6, 2.3); CHECK_MESSAGE( vector.bounce(vector_y) == Vector3(1.2, -3.4, 5.6), "Vector3 bounce on a plane with normal of the Y axis should."); @@ -394,6 +393,8 @@ TEST_CASE("[Vector3] Plane methods") { vector.slide(vector_normal).is_equal_approx(Vector3(-2.41848149148878681437, 2.32785733585517427722237, 4.0587949202918130235)), "Vector3 slide with normal should return expected value."); // There's probably a better way to test these ones? +#ifdef MATH_CHECKS + const Vector3 vector_non_normal = Vector3(5.4, 1.6, 2.3); ERR_PRINT_OFF; CHECK_MESSAGE( vector.bounce(vector_non_normal).is_equal_approx(Vector3()), @@ -405,6 +406,7 @@ TEST_CASE("[Vector3] Plane methods") { vector.slide(vector_non_normal).is_equal_approx(Vector3()), "Vector3 slide should return empty Vector3 with non-normalized input."); ERR_PRINT_ON; +#endif // MATH_CHECKS } TEST_CASE("[Vector3] Rounding methods") { diff --git a/tests/core/object/test_class_db.h b/tests/core/object/test_class_db.h index 381d759e5b..358bbc08a3 100644 --- a/tests/core/object/test_class_db.h +++ b/tests/core/object/test_class_db.h @@ -375,8 +375,10 @@ void validate_property(const Context &p_context, const ExposedClass &p_class, co } void validate_argument(const Context &p_context, const ExposedClass &p_class, const String &p_owner_name, const String &p_owner_type, const ArgumentData &p_arg) { +#ifdef DEBUG_METHODS_ENABLED TEST_COND((p_arg.name.is_empty() || p_arg.name.begins_with("_unnamed_arg")), vformat("Unnamed argument in position %d of %s '%s.%s'.", p_arg.position, p_owner_type, p_class.name, p_owner_name)); +#endif // DEBUG_METHODS_ENABLED const ExposedClass *arg_class = p_context.find_exposed_class(p_arg.type); if (arg_class) { diff --git a/tests/core/os/test_os.h b/tests/core/os/test_os.h index 6ee0ff82e7..1e2f5e222b 100644 --- a/tests/core/os/test_os.h +++ b/tests/core/os/test_os.h @@ -163,12 +163,14 @@ TEST_CASE("[OS] Processor count and memory information") { CHECK_MESSAGE( OS::get_singleton()->get_processor_count() >= 1, "The returned processor count should be greater than zero."); +#ifdef DEBUG_ENABLED CHECK_MESSAGE( OS::get_singleton()->get_static_memory_usage() >= 1, "The returned static memory usage should be greater than zero."); CHECK_MESSAGE( OS::get_singleton()->get_static_memory_peak_usage() >= 1, "The returned static memory peak usage should be greater than zero."); +#endif // DEBUG_ENABLED } TEST_CASE("[OS] Execute") { diff --git a/tests/core/variant/test_array.h b/tests/core/variant/test_array.h index c54854e4d7..787b8f39d9 100644 --- a/tests/core/variant/test_array.h +++ b/tests/core/variant/test_array.h @@ -597,6 +597,43 @@ TEST_CASE("[Array] Iteration and modification") { a4.clear(); } +TEST_CASE("[Array] Typed copying") { + TypedArray<int> a1; + a1.push_back(1); + + TypedArray<double> a2; + a2.push_back(1.0); + + Array a3 = a1; + TypedArray<int> a4 = a3; + + Array a5 = a2; + TypedArray<int> a6 = a5; + + a3[0] = 2; + a4[0] = 3; + + // Same typed TypedArray should be shared. + CHECK_EQ(a1[0], Variant(3)); + CHECK_EQ(a3[0], Variant(3)); + CHECK_EQ(a4[0], Variant(3)); + + a5[0] = 2.0; + a6[0] = 3.0; + + // Different typed TypedArray should not be shared. + CHECK_EQ(a2[0], Variant(2.0)); + CHECK_EQ(a5[0], Variant(2.0)); + CHECK_EQ(a6[0], Variant(3.0)); + + a1.clear(); + a2.clear(); + a3.clear(); + a4.clear(); + a5.clear(); + a6.clear(); +} + } // namespace TestArray #endif // TEST_ARRAY_H diff --git a/tests/display_server_mock.h b/tests/display_server_mock.h index e4946995a7..b44ff06b35 100644 --- a/tests/display_server_mock.h +++ b/tests/display_server_mock.h @@ -36,7 +36,7 @@ #include "servers/rendering/dummy/rasterizer_dummy.h" // Specialized DisplayServer for unittests based on DisplayServerHeadless, that -// additionally supports rudimentary InputEvent handling and mouse position. +// additionally supports things like mouse enter/exit events and clipboard. class DisplayServerMock : public DisplayServerHeadless { private: friend class DisplayServer; @@ -45,7 +45,6 @@ private: CursorShape cursor_shape = CursorShape::CURSOR_ARROW; bool window_over = false; Callable event_callback; - Callable input_event_callback; String clipboard_text; String primary_clipboard_text; @@ -62,16 +61,6 @@ private: return memnew(DisplayServerMock()); } - static void _dispatch_input_events(const Ref<InputEvent> &p_event) { - static_cast<DisplayServerMock *>(get_singleton())->_dispatch_input_event(p_event); - } - - void _dispatch_input_event(const Ref<InputEvent> &p_event) { - if (input_event_callback.is_valid()) { - input_event_callback.call(p_event); - } - } - void _set_mouse_position(const Point2i &p_position) { if (mouse_position == p_position) { return; @@ -153,18 +142,9 @@ public: event_callback = p_callable; } - virtual void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override { - input_event_callback = p_callable; - } - static void register_mock_driver() { register_create_function("mock", create_func, get_rendering_drivers_func); } - - DisplayServerMock() { - Input::get_singleton()->set_event_dispatch_function(_dispatch_input_events); - } - ~DisplayServerMock() {} }; #endif // DISPLAY_SERVER_MOCK_H diff --git a/tests/scene/test_code_edit.h b/tests/scene/test_code_edit.h index 317dbe9ab9..a166002cdd 100644 --- a/tests/scene/test_code_edit.h +++ b/tests/scene/test_code_edit.h @@ -4889,6 +4889,17 @@ TEST_CASE("[SceneTree][CodeEdit] text manipulation") { CHECK(code_edit->get_caret_line() == 0); CHECK(code_edit->get_caret_column() == 1); + // Does nothing at the first line when selection ends at column 0. + code_edit->set_text("test\nlines\nto\n\nmove\naround"); + code_edit->select(0, 0, 1, 0); + code_edit->move_lines_up(); + CHECK(code_edit->get_text() == "test\nlines\nto\n\nmove\naround"); + CHECK(code_edit->has_selection()); + CHECK(code_edit->get_selection_origin_line() == 0); + CHECK(code_edit->get_selection_origin_column() == 0); + CHECK(code_edit->get_caret_line() == 1); + CHECK(code_edit->get_caret_column() == 0); + // Works on empty line. code_edit->set_text("test\nlines\nto\n\nmove\naround"); code_edit->set_caret_line(3); @@ -4950,9 +4961,9 @@ TEST_CASE("[SceneTree][CodeEdit] text manipulation") { CHECK_FALSE(code_edit->has_selection(2)); CHECK(code_edit->get_caret_line(2) == 3); CHECK(code_edit->get_caret_column(2) == 4); + code_edit->remove_secondary_carets(); // Move multiple separate lines with multiple selections. - code_edit->remove_secondary_carets(); code_edit->set_text("test\nlines\nto\n\nmove\naround"); code_edit->select(2, 2, 1, 4); code_edit->add_caret(5, 0); @@ -4970,6 +4981,44 @@ TEST_CASE("[SceneTree][CodeEdit] text manipulation") { CHECK(code_edit->get_selection_origin_column(1) == 0); CHECK(code_edit->get_caret_line(1) == 4); CHECK(code_edit->get_caret_column(1) == 1); + code_edit->remove_secondary_carets(); + + // Move lines with adjacent selections that end at column 0. + code_edit->set_text("test\nlines\nto\n\nmove\naround"); + code_edit->select(1, 2, 2, 0); + code_edit->add_caret(2, 2); + code_edit->select(2, 2, 3, 0, 1); + code_edit->move_lines_up(); + CHECK(code_edit->get_text() == "lines\nto\ntest\n\nmove\naround"); + CHECK(code_edit->get_caret_count() == 2); + CHECK(code_edit->has_selection(0)); + CHECK(code_edit->get_selection_origin_line(0) == 0); + CHECK(code_edit->get_selection_origin_column(0) == 2); + CHECK(code_edit->get_caret_line(0) == 1); + CHECK(code_edit->get_caret_column(0) == 0); + CHECK(code_edit->has_selection(1)); + CHECK(code_edit->get_selection_origin_line(1) == 1); + CHECK(code_edit->get_selection_origin_column(1) == 2); + CHECK(code_edit->get_caret_line(1) == 2); + CHECK(code_edit->get_caret_column(1) == 0); + code_edit->remove_secondary_carets(); + code_edit->deselect(); + + code_edit->set_line_folding_enabled(true); + + // Move line up into a folded region unfolds it. + code_edit->set_text("test\n\tline1 test\n\t\tline 2\ntest2"); + code_edit->set_caret_line(3); + code_edit->set_caret_column(0); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + code_edit->move_lines_up(); + CHECK(code_edit->get_caret_count() == 1); + CHECK_FALSE(code_edit->has_selection(0)); + CHECK(code_edit->get_caret_line() == 2); + CHECK(code_edit->get_caret_column() == 0); + CHECK(code_edit->get_text() == "test\n\tline1 test\ntest2\n\t\tline 2"); + CHECK_FALSE(code_edit->is_line_folded(0)); } SUBCASE("[SceneTree][CodeEdit] move lines down") { @@ -5004,6 +5053,17 @@ TEST_CASE("[SceneTree][CodeEdit] text manipulation") { CHECK(code_edit->get_caret_line() == 5); CHECK(code_edit->get_caret_column() == 1); + // Does nothing at the last line when selection ends at column 0. + code_edit->set_text("test\nlines\nto\n\nmove\naround"); + code_edit->select(4, 0, 5, 0); + code_edit->move_lines_down(); + CHECK(code_edit->get_text() == "test\nlines\nto\n\nmove\naround"); + CHECK(code_edit->has_selection()); + CHECK(code_edit->get_selection_origin_line() == 4); + CHECK(code_edit->get_selection_origin_column() == 0); + CHECK(code_edit->get_caret_line() == 5); + CHECK(code_edit->get_caret_column() == 0); + // Works on empty line. code_edit->set_text("test\nlines\nto\n\nmove\naround"); code_edit->set_caret_line(3); @@ -5085,6 +5145,64 @@ TEST_CASE("[SceneTree][CodeEdit] text manipulation") { CHECK(code_edit->get_selection_origin_column(1) == 0); CHECK(code_edit->get_caret_line(1) == 5); CHECK(code_edit->get_caret_column(1) == 2); + + // Move lines with adjacent selections that end at column 0. + code_edit->set_text("test\nlines\nto\n\nmove\naround"); + code_edit->select(1, 2, 2, 0); + code_edit->add_caret(2, 2); + code_edit->select(2, 2, 3, 0, 1); + code_edit->move_lines_down(); + CHECK(code_edit->get_text() == "test\n\nlines\nto\nmove\naround"); + CHECK(code_edit->get_caret_count() == 2); + CHECK(code_edit->has_selection(0)); + CHECK(code_edit->get_selection_origin_line(0) == 2); + CHECK(code_edit->get_selection_origin_column(0) == 2); + CHECK(code_edit->get_caret_line(0) == 3); + CHECK(code_edit->get_caret_column(0) == 0); + CHECK(code_edit->has_selection(1)); + CHECK(code_edit->get_selection_origin_line(1) == 3); + CHECK(code_edit->get_selection_origin_column(1) == 2); + CHECK(code_edit->get_caret_line(1) == 4); + CHECK(code_edit->get_caret_column(1) == 0); + code_edit->remove_secondary_carets(); + + // Move lines with disconnected adjacent selections that end at column 0. + code_edit->set_text("test\nlines\nto\n\nmove\naround"); + code_edit->select(0, 2, 1, 0); + code_edit->add_caret(2, 2); + code_edit->select(2, 0, 3, 0, 1); + code_edit->move_lines_down(); + CHECK(code_edit->get_text() == "lines\ntest\n\nto\nmove\naround"); + CHECK(code_edit->get_caret_count() == 2); + CHECK(code_edit->has_selection(0)); + CHECK(code_edit->get_selection_origin_line(0) == 1); + CHECK(code_edit->get_selection_origin_column(0) == 2); + CHECK(code_edit->get_caret_line(0) == 2); + CHECK(code_edit->get_caret_column(0) == 0); + CHECK(code_edit->has_selection(1)); + CHECK(code_edit->get_selection_origin_line(1) == 3); + CHECK(code_edit->get_selection_origin_column(1) == 0); + CHECK(code_edit->get_caret_line(1) == 4); + CHECK(code_edit->get_caret_column(1) == 0); + code_edit->remove_secondary_carets(); + code_edit->deselect(); + + code_edit->set_line_folding_enabled(true); + + // Move line down into a folded region unfolds it. + code_edit->set_text("test\ntest2\n\tline1 test\n\t\tline 2\ntest2"); + code_edit->set_caret_line(0); + code_edit->set_caret_column(0); + code_edit->fold_line(1); + CHECK(code_edit->is_line_folded(1)); + code_edit->move_lines_down(); + CHECK(code_edit->get_caret_count() == 1); + CHECK_FALSE(code_edit->has_selection(0)); + CHECK(code_edit->get_caret_line() == 1); + CHECK(code_edit->get_caret_column() == 0); + CHECK(code_edit->get_text() == "test2\ntest\n\tline1 test\n\t\tline 2\ntest2"); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); } SUBCASE("[SceneTree][CodeEdit] delete lines") { diff --git a/tests/scene/test_instance_placeholder.h b/tests/scene/test_instance_placeholder.h index d915c5d961..17f2151d54 100644 --- a/tests/scene/test_instance_placeholder.h +++ b/tests/scene/test_instance_placeholder.h @@ -333,6 +333,7 @@ TEST_CASE("[SceneTree][InstancePlaceholder] Instantiate from placeholder with ov } } +#ifdef TOOLS_ENABLED TEST_CASE("[SceneTree][InstancePlaceholder] Instance a PackedScene containing an InstancePlaceholder with no overrides") { GDREGISTER_CLASS(_TestInstancePlaceholderNode); @@ -526,6 +527,7 @@ TEST_CASE("[SceneTree][InstancePlaceholder] Instance a PackedScene containing an DirAccess::remove_file_or_error(internal_path); DirAccess::remove_file_or_error(main_path); } +#endif // TOOLS_ENABLED } //namespace TestInstancePlaceholder diff --git a/tests/scene/test_node.h b/tests/scene/test_node.h index 93ef3fe728..e387c73f9f 100644 --- a/tests/scene/test_node.h +++ b/tests/scene/test_node.h @@ -68,6 +68,10 @@ protected: ClassDB::bind_method(D_METHOD("set_exported_node", "node"), &TestNode::set_exported_node); ClassDB::bind_method(D_METHOD("get_exported_node"), &TestNode::get_exported_node); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "exported_node", PROPERTY_HINT_NODE_TYPE, "Node"), "set_exported_node", "get_exported_node"); + + ClassDB::bind_method(D_METHOD("set_exported_nodes", "node"), &TestNode::set_exported_nodes); + ClassDB::bind_method(D_METHOD("get_exported_nodes"), &TestNode::get_exported_nodes); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "exported_nodes", PROPERTY_HINT_TYPE_STRING, "24/34:Node"), "set_exported_nodes", "get_exported_nodes"); } private: @@ -84,11 +88,15 @@ public: int physics_process_counter = 0; Node *exported_node = nullptr; + Array exported_nodes; List<Node *> *callback_list = nullptr; void set_exported_node(Node *p_node) { exported_node = p_node; } Node *get_exported_node() const { return exported_node; } + + void set_exported_nodes(const Array &p_nodes) { exported_nodes = p_nodes; } + Array get_exported_nodes() const { return exported_nodes; } }; TEST_CASE("[SceneTree][Node] Testing node operations with a very simple scene tree") { @@ -500,7 +508,16 @@ TEST_CASE("[SceneTree][Node]Exported node checks") { node->add_child(child); child->set_owner(node); + Node *child2 = memnew(Node); + child2->set_name("Child2"); + node->add_child(child2); + child2->set_owner(node); + + Array children; + children.append(child); + node->set("exported_node", child); + node->set("exported_nodes", children); SUBCASE("Property of duplicated node should point to duplicated child") { GDREGISTER_CLASS(TestNode); @@ -512,8 +529,8 @@ TEST_CASE("[SceneTree][Node]Exported node checks") { memdelete(dup); } - SUBCASE("Saving instance with exported node should not store the unchanged property") { - node->set_process_mode(Node::PROCESS_MODE_ALWAYS); +#ifdef TOOLS_ENABLED + SUBCASE("Saving instance with exported nodes should not store the unchanged property") { Ref<PackedScene> ps; ps.instantiate(); ps->pack(node); @@ -548,6 +565,46 @@ TEST_CASE("[SceneTree][Node]Exported node checks") { CHECK_FALSE(is_wrong); } + SUBCASE("Saving instance with exported nodes should store property if changed") { + Ref<PackedScene> ps; + ps.instantiate(); + ps->pack(node); + + String scene_path = TestUtils::get_temp_path("test_scene.tscn"); + ps->set_path(scene_path); + + Node *root = memnew(Node); + + Node *sub_child = ps->instantiate(PackedScene::GEN_EDIT_STATE_MAIN); + root->add_child(sub_child); + sub_child->set_owner(root); + + sub_child->set("exported_node", sub_child->get_child(1)); + + children = Array(); + children.append(sub_child->get_child(1)); + sub_child->set("exported_nodes", children); + + Ref<PackedScene> ps2; + ps2.instantiate(); + ps2->pack(root); + + scene_path = TestUtils::get_temp_path("new_test_scene2.tscn"); + ResourceSaver::save(ps2, scene_path); + memdelete(root); + + int stored_properties = 0; + Ref<FileAccess> fa = FileAccess::open(scene_path, FileAccess::READ); + while (!fa->eof_reached()) { + const String line = fa->get_line(); + if (line.begins_with("exported_node")) { + stored_properties++; + } + } + CHECK_EQ(stored_properties, 2); + } +#endif // TOOLS_ENABLED + memdelete(node); } diff --git a/thirdparty/README.md b/thirdparty/README.md index 93469f69bb..5bc76026c7 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -882,7 +882,7 @@ instead of `miniz.h` as an external dependency. ## thorvg - Upstream: https://github.com/thorvg/thorvg -- Version: 0.13.7 (d2c0428a99f7305c086caffe0c730add601ebd6e, 2024) +- Version: 0.14.1 (70b2f2dad158316dd08166d613b425248b36fd27, 2024) - License: MIT Files extracted from upstream source: diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h index b18d41e783..76579f9497 100644 --- a/thirdparty/embree/common/simd/arm/sse2neon.h +++ b/thirdparty/embree/common/simd/arm/sse2neon.h @@ -102,7 +102,9 @@ #include <stdint.h> #include <stdlib.h> -#if defined(_WIN32) +// -- GODOT start -- +#if defined(_WIN32) && !defined(__MINGW32__) +// -- GODOT end -- /* Definitions for _mm_{malloc,free} are provided by <malloc.h> * from both MinGW-w64 and MSVC. */ @@ -1888,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) #if !defined(SSE2NEON_ALLOC_DEFINED) FORCE_INLINE void _mm_free(void *addr) { +// -- GODOT start -- +#if defined(_WIN32) + _aligned_free(addr); +#else free(addr); +#endif +// -- GODOT end -- } #endif @@ -2080,8 +2088,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) return malloc(size); if (align == 2 || (sizeof(void *) == 8 && align == 4)) align = sizeof(void *); +// -- GODOT start -- +#if defined(_WIN32) + ptr = _aligned_malloc(size, align); + if (ptr) + return ptr; +#else if (!posix_memalign(&ptr, align, size)) return ptr; +#endif +// -- GODOT end -- return NULL; } #endif diff --git a/thirdparty/embree/patches/mingw-llvm-arm64.diff b/thirdparty/embree/patches/mingw-llvm-arm64.diff new file mode 100644 index 0000000000..c2ad4fb1dc --- /dev/null +++ b/thirdparty/embree/patches/mingw-llvm-arm64.diff @@ -0,0 +1,46 @@ +diff --git a/thirdparty/embree/common/simd/arm/sse2neon.h b/thirdparty/embree/common/simd/arm/sse2neon.h +index b18d41e783..c54d0b7951 100644 +--- a/thirdparty/embree/common/simd/arm/sse2neon.h ++++ b/thirdparty/embree/common/simd/arm/sse2neon.h +@@ -102,7 +102,9 @@ + #include <stdint.h> + #include <stdlib.h> + +-#if defined(_WIN32) ++// -- GODOT start -- ++#if defined(_WIN32) && !defined(__MINGW32__) ++// -- GODOT end -- + /* Definitions for _mm_{malloc,free} are provided by <malloc.h> + * from both MinGW-w64 and MSVC. + */ +@@ -2080,8 +2082,16 @@ FORCE_INLINE void *_mm_malloc(size_t size, size_t align) + return malloc(size); + if (align == 2 || (sizeof(void *) == 8 && align == 4)) + align = sizeof(void *); +- if (!posix_memalign(&ptr, align, size)) ++// -- GODOT start -- ++#if defined(_WIN32) ++ ptr = _aligned_malloc(size, align); ++ if (ptr) + return ptr; ++#else ++ if (!posix_memalign(&ptr, align, size)) ++ return ptr; ++#endif ++// -- GODOT end -- + return NULL; + } + #endif +@@ -1890,7 +1890,13 @@ FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) + #if !defined(SSE2NEON_ALLOC_DEFINED) + FORCE_INLINE void _mm_free(void *addr) + { ++// -- GODOT start -- ++#if defined(_WIN32) ++ _aligned_free(addr); ++#else + free(addr); ++#endif ++// -- GODOT end -- + } + #endif diff --git a/thirdparty/thorvg/AUTHORS b/thirdparty/thorvg/AUTHORS index da58481032..e00e91a696 100644 --- a/thirdparty/thorvg/AUTHORS +++ b/thirdparty/thorvg/AUTHORS @@ -1,10 +1,10 @@ -Hermet Park <hermet@lottiefiles.com>, <chuneon.park@samsung.com> +Hermet Park <hermet@lottiefiles.com> Prudhvi Raj Vasireddi <prudhvi.raj@samsung.com> Junsu Choi <jsuya.choi@samsung.com> Pranay Samanta <pranay.ks@samsung.com> Mateusz Palkowski <m.palkowski@samsung.com> Subhransu Mohanty <sub.mohanty@samsung.com> -Mira Grudzinska <veleveta@gmail.com>, <m.grudzinska@samsung.com> +Mira Grudzinska <mira@lottiefiles.com> Michal Szczecinski <m.szczecinsk@partner.samsung.com> Shinwoo Kim <cinoo.kim@samsung.com> Piotr Kalota <p.kalota@samsung.com> @@ -27,3 +27,7 @@ Jinny You <jinny@lottiefiles.com> Nattu Adnan <nattu@reallynattu.com> Gabor Kiss-Vamosi <kisvegabor@gmail.com> Lorcán Mc Donagh <lorcan@lmdsp.com> +Lucas Niu <hoiyu3twon9@gmail.com> +Francisco Ramírez <franchuti688@gmail.com> +Abdelrahman Ashraf <a.theashraf@gmail.com> +Neo Xu <neo.xu1990@gmail.com> diff --git a/thirdparty/thorvg/inc/config.h b/thirdparty/thorvg/inc/config.h index e2a61a9384..4be7e3936d 100644 --- a/thirdparty/thorvg/inc/config.h +++ b/thirdparty/thorvg/inc/config.h @@ -15,5 +15,5 @@ // For internal debugging: //#define THORVG_LOG_ENABLED -#define THORVG_VERSION_STRING "0.13.7" +#define THORVG_VERSION_STRING "0.14.1" #endif diff --git a/thirdparty/thorvg/inc/thorvg.h b/thirdparty/thorvg/inc/thorvg.h index 8285aa1c4c..20f1942a57 100644 --- a/thirdparty/thorvg/inc/thorvg.h +++ b/thirdparty/thorvg/inc/thorvg.h @@ -72,6 +72,10 @@ class Animation; /** * @brief Enumeration specifying the result from the APIs. + * + * All ThorVG APIs could potentially return one of the values in the list. + * Please note that some APIs may additionally specify the reasons that trigger their return values. + * */ enum class Result { @@ -157,7 +161,7 @@ enum class CompositeMethod AlphaMask, ///< Alpha Masking using the compositing target's pixels as an alpha value. InvAlphaMask, ///< Alpha Masking using the complement to the compositing target's pixels as an alpha value. LumaMask, ///< Alpha Masking using the grayscale (0.2125R + 0.7154G + 0.0721*B) of the compositing target's pixels. @since 0.9 - InvLumaMask, ///< Alpha Masking using the grayscale (0.2125R + 0.7154G + 0.0721*B) of the complement to the compositing target's pixels. + InvLumaMask, ///< Alpha Masking using the grayscale (0.2125R + 0.7154G + 0.0721*B) of the complement to the compositing target's pixels. @since 0.11 AddMask, ///< Combines the target and source objects pixels using target alpha. (T * TA) + (S * (255 - TA)) (Experimental API) SubtractMask, ///< Subtracts the source color from the target color while considering their respective target alpha. (T * TA) - (S * (255 - TA)) (Experimental API) IntersectMask, ///< Computes the result by taking the minimum value between the target alpha and the source alpha and multiplies it with the target color. (T * min(TA, SA)) (Experimental API) @@ -277,8 +281,6 @@ public: * The rotational axis passes through the point on the object with zero coordinates. * * @param[in] degree The value of the angle in degrees. - * - * @retval Result::Success when succeed, Result::FailedAllocation otherwise. */ Result rotate(float degree) noexcept; @@ -286,8 +288,6 @@ public: * @brief Sets the scale value of the object. * * @param[in] factor The value of the scaling factor. The default value is 1. - * - * @retval Result::Success when succeed, Result::FailedAllocation otherwise. */ Result scale(float factor) noexcept; @@ -299,8 +299,6 @@ public: * * @param[in] x The value of the horizontal shift. * @param[in] y The value of the vertical shift. - * - * @retval Result::Success when succeed, Result::FailedAllocation otherwise. */ Result translate(float x, float y) noexcept; @@ -310,8 +308,6 @@ public: * The augmented matrix of the transformation is expected to be given. * * @param[in] m The 3x3 augmented matrix. - * - * @retval Result::Success when succeed, Result::FailedAllocation otherwise. */ Result transform(const Matrix& m) noexcept; @@ -332,8 +328,6 @@ public: * * @param[in] o The opacity value in the range [0 ~ 255], where 0 is completely transparent and 255 is opaque. * - * @retval Result::Success when succeed. - * * @note Setting the opacity with this API may require multiple render pass for composition. It is recommended to avoid changing the opacity if possible. * @note ClipPath won't use the opacity value. (see: enum class CompositeMethod::ClipPath) */ @@ -344,8 +338,6 @@ public: * * @param[in] target The paint of the target object. * @param[in] method The method used to composite the source object with the target. - * - * @retval Result::Success when succeed, Result::InvalidArguments otherwise. */ Result composite(std::unique_ptr<Paint> target, CompositeMethod method) noexcept; @@ -358,24 +350,11 @@ public: * * @param[in] method The blending method to be set. * - * @retval Result::Success when the blending method is successfully set. - * * @note Experimental API */ Result blend(BlendMethod method) const noexcept; /** - * @brief Gets the bounding box of the paint object before any transformation. - * - * @param[out] x The x coordinate of the upper left corner of the object. - * @param[out] y The y coordinate of the upper left corner of the object. - * @param[out] w The width of the object. - * @param[out] h The height of the object. - * - * @return Result::Success when succeed, Result::InsufficientCondition otherwise. - * - * @note The bounding box doesn't indicate the final rendered region. It's the smallest rectangle that encloses the object. - * @see Paint::bounds(float* x, float* y, float* w, float* h, bool transformed); * @deprecated Use bounds(float* x, float* y, float* w, float* h, bool transformed) instead */ TVG_DEPRECATED Result bounds(float* x, float* y, float* w, float* h) const noexcept; @@ -391,8 +370,6 @@ public: * @param[out] h The height of the object. * @param[in] transformed If @c true, the paint's transformations are taken into account, otherwise they aren't. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. - * * @note The bounding box doesn't indicate the actual drawing region. It's the smallest rectangle that encloses the object. */ Result bounds(float* x, float* y, float* w, float* h, bool transformed) const noexcept; @@ -479,8 +456,6 @@ public: * * @param[in] colorStops An array of ColorStop data structure. * @param[in] cnt The count of the @p colorStops array equal to the colors number used in the gradient. - * - * @retval Result::Success when succeed. */ Result colorStops(const ColorStop* colorStops, uint32_t cnt) noexcept; @@ -488,8 +463,6 @@ public: * @brief Sets the FillSpread value, which specifies how to fill the area outside the gradient bounds. * * @param[in] s The FillSpread value. - * - * @retval Result::Success when succeed. */ Result spread(FillSpread s) noexcept; @@ -499,8 +472,6 @@ public: * The augmented matrix of the transformation is expected to be given. * * @param[in] m The 3x3 augmented matrix. - * - * @retval Result::Success when succeed, Result::FailedAllocation otherwise. */ Result transform(const Matrix& m) noexcept; @@ -567,16 +538,6 @@ public: Canvas(RenderMethod*); virtual ~Canvas(); - /** - * @brief Sets the size of the container, where all the paints pushed into the Canvas are stored. - * - * If the number of objects pushed into the Canvas is known in advance, calling the function - * prevents multiple memory reallocation, thus improving the performance. - * - * @param[in] n The number of objects for which the memory is to be reserved. - * - * @return Result::Success when succeed. - */ TVG_DEPRECATED Result reserve(uint32_t n) noexcept; /** @@ -599,9 +560,7 @@ public: * * @param[in] paint A Paint object to be drawn. * - * @retval Result::Success When succeed. * @retval Result::MemoryCorruption In case a @c nullptr is passed as the argument. - * @retval Result::InsufficientCondition An internal error. * * @note The rendering order of the paints is the same as the order as they were pushed into the canvas. Consider sorting the paints before pushing them if you intend to use layering. * @see Canvas::paints() @@ -618,7 +577,6 @@ public: * * @param[in] free If @c true, the memory occupied by paints is deallocated, otherwise it is not. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. * * @see Canvas::push() * @see Canvas::paints() @@ -633,8 +591,6 @@ public: * * @param[in] paint A pointer to the Paint object or @c nullptr. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. - * * @note The Update behavior can be asynchronous if the assigned thread number is greater than zero. */ virtual Result update(Paint* paint = nullptr) noexcept; @@ -642,8 +598,6 @@ public: /** * @brief Requests the canvas to draw the Paint objects. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. - * * @note Drawing can be asynchronous if the assigned thread number is greater than zero. To guarantee the drawing is done, call sync() afterwards. * @see Canvas::sync() */ @@ -660,8 +614,6 @@ public: * @param[in] w The width of the rectangle. * @param[in] h The height of the rectangle. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. - * * @see SwCanvas::target() * @see GlCanvas::target() * @see WgCanvas::target() @@ -679,7 +631,8 @@ public: * The Canvas rendering can be performed asynchronously. To make sure that rendering is finished, * the sync() must be called after the draw() regardless of threading. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. + * @retval Result::InsufficientCondition: The canvas is either already in sync condition or in a damaged condition (a draw is required before syncing). + * * @see Canvas::draw() */ virtual Result sync() noexcept; @@ -713,8 +666,6 @@ public: * @param[in] x2 The horizontal coordinate of the second point used to determine the gradient bounds. * @param[in] y2 The vertical coordinate of the second point used to determine the gradient bounds. * - * @retval Result::Success when succeed. - * * @note In case the first and the second points are equal, an object filled with such a gradient fill is not rendered. */ Result linear(float x1, float y1, float x2, float y2) noexcept; @@ -730,8 +681,6 @@ public: * @param[out] y1 The vertical coordinate of the first point used to determine the gradient bounds. * @param[out] x2 The horizontal coordinate of the second point used to determine the gradient bounds. * @param[out] y2 The vertical coordinate of the second point used to determine the gradient bounds. - * - * @retval Result::Success when succeed. */ Result linear(float* x1, float* y1, float* x2, float* y2) const noexcept; @@ -775,7 +724,7 @@ public: * @param[in] cy The vertical coordinate of the center of the bounding circle. * @param[in] radius The radius of the bounding circle. * - * @retval Result::Success when succeed, Result::InvalidArguments in case the @p radius value is zero or less. + * @retval Result::InvalidArguments in case the @p radius value is zero or less. */ Result radial(float cx, float cy, float radius) noexcept; @@ -788,7 +737,6 @@ public: * @param[out] cy The vertical coordinate of the center of the bounding circle. * @param[out] radius The radius of the bounding circle. * - * @retval Result::Success when succeed. */ Result radial(float* cx, float* cy, float* radius) const noexcept; @@ -834,8 +782,6 @@ public: * * The transformation matrix, the color, the fill and the stroke properties are retained. * - * @retval Result::Success when succeed. - * * @note The memory, where the path data is stored, is not deallocated at this stage for caching effect. */ Result reset() noexcept; @@ -847,8 +793,6 @@ public: * * @param[in] x The horizontal coordinate of the initial point of the sub-path. * @param[in] y The vertical coordinate of the initial point of the sub-path. - * - * @retval Result::Success when succeed. */ Result moveTo(float x, float y) noexcept; @@ -860,8 +804,6 @@ public: * @param[in] x The horizontal coordinate of the end-point of the line. * @param[in] y The vertical coordinate of the end-point of the line. * - * @retval Result::Success when succeed. - * * @note In case this is the first command in the path, it corresponds to the moveTo() call. */ Result lineTo(float x, float y) noexcept; @@ -879,8 +821,6 @@ public: * @param[in] x The horizontal coordinate of the end-point of the curve. * @param[in] y The vertical coordinate of the end-point of the curve. * - * @retval Result::Success when succeed. - * * @note In case this is the first command in the path, no data from the path are rendered. */ Result cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) noexcept; @@ -890,8 +830,6 @@ public: * * The value of the current point is set to the initial point of the closed sub-path. * - * @retval Result::Success when succeed. - * * @note In case the sub-path does not contain any points, this function has no effect. */ Result close() noexcept; @@ -916,8 +854,6 @@ public: * @param[in] rx The x-axis radius of the ellipse defining the rounded corners of the rectangle. * @param[in] ry The y-axis radius of the ellipse defining the rounded corners of the rectangle. * - * @retval Result::Success when succeed. - * * @note For @p rx and @p ry greater than or equal to the half of @p w and the half of @p h, respectively, the shape become an ellipse. */ Result appendRect(float x, float y, float w, float h, float rx = 0, float ry = 0) noexcept; @@ -936,7 +872,6 @@ public: * @param[in] rx The x-axis radius of the ellipse. * @param[in] ry The y-axis radius of the ellipse. * - * @retval Result::Success when succeed. */ Result appendCircle(float cx, float cy, float rx, float ry) noexcept; @@ -953,8 +888,6 @@ public: * @param[in] sweep The central angle of the arc given in degrees, measured counter-clockwise from @p startAngle. * @param[in] pie Specifies whether to draw radii from the arc's center to both of its end-point - drawn if @c true. * - * @retval Result::Success when succeed. - * * @note Setting @p sweep value greater than 360 degrees, is equivalent to calling appendCircle(cx, cy, radius, radius). */ Result appendArc(float cx, float cy, float radius, float startAngle, float sweep, bool pie) noexcept; @@ -971,8 +904,6 @@ public: * @param[in] pts The array of the two-dimensional points. * @param[in] ptsCnt The number of the points in the @p pts array. * - * @retval Result::Success when succeed, Result::InvalidArguments otherwise. - * * @note The interface is designed for optimal path setting if the caller has a completed path commands already. */ Result appendPath(const PathCommand* cmds, uint32_t cmdCnt, const Point* pts, uint32_t ptsCnt) noexcept; @@ -982,7 +913,6 @@ public: * * @param[in] width The width of the stroke. The default value is 0. * - * @retval Result::Success when succeed. */ Result stroke(float width) noexcept; @@ -994,7 +924,6 @@ public: * @param[in] b The blue color channel value in the range [0 ~ 255]. The default value is 0. * @param[in] a The alpha channel value in the range [0 ~ 255], where 0 is completely transparent and 255 is opaque. The default value is 0. * - * @retval Result::Success when succeed. */ Result stroke(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) noexcept; @@ -1003,8 +932,7 @@ public: * * @param[in] f The gradient fill. * - * @retval Result::Success When succeed. - * @retval Result::MemoryCorruption In case a @c nullptr is passed as the argument or an error with accessing it. + * @retval Result::MemoryCorruption In case a @c nullptr is passed as the argument. */ Result stroke(std::unique_ptr<Fill> f) noexcept; @@ -1014,8 +942,6 @@ public: * @param[in] dashPattern The array of consecutive pair values of the dash length and the gap length. * @param[in] cnt The length of the @p dashPattern array. * - * @retval Result::Success When succeed. - * @retval Result::FailedAllocation An internal error with a memory allocation for an object to be dashed. * @retval Result::InvalidArguments In case @p dashPattern is @c nullptr and @p cnt > 0, @p cnt is zero, any of the dash pattern values is zero or less. * * @note To reset the stroke dash pattern, pass @c nullptr to @p dashPattern and zero to @p cnt. @@ -1028,7 +954,6 @@ public: * * @param[in] cap The cap style value. The default value is @c StrokeCap::Square. * - * @retval Result::Success when succeed. */ Result stroke(StrokeCap cap) noexcept; @@ -1039,7 +964,6 @@ public: * * @param[in] join The join style value. The default value is @c StrokeJoin::Bevel. * - * @retval Result::Success when succeed. */ Result stroke(StrokeJoin join) noexcept; @@ -1048,7 +972,7 @@ public: * * @param[in] miterlimit The miterlimit imposes a limit on the extent of the stroke join, when the @c StrokeJoin::Miter join style is set. The default value is 4. * - * @retval Result::Success when succeed or Result::InvalidArgument for @p miterlimit values less than zero. + * @retval Result::InvalidArgument for @p miterlimit values less than zero. * * @since 0.11 */ @@ -1064,8 +988,6 @@ public: * @param[in] simultaneous Determines how to trim multiple paths within a single shape. If set to @c true (default), trimming is applied simultaneously to all paths; * Otherwise, all paths are treated as a single entity with a combined length equal to the sum of their individual lengths and are trimmed as such. * - * @retval Result::Success when succeed. - * * @note Experimental API */ Result strokeTrim(float begin, float end, bool simultaneous = true) noexcept; @@ -1080,8 +1002,6 @@ public: * @param[in] b The blue color channel value in the range [0 ~ 255]. The default value is 0. * @param[in] a The alpha channel value in the range [0 ~ 255], where 0 is completely transparent and 255 is opaque. The default value is 0. * - * @retval Result::Success when succeed. - * * @note Either a solid color or a gradient fill is applied, depending on what was set as last. * @note ClipPath won't use the fill values. (see: enum class CompositeMethod::ClipPath) */ @@ -1094,8 +1014,6 @@ public: * * @param[in] f The unique pointer to the gradient fill. * - * @retval Result::Success when succeed, Result::MemoryCorruption otherwise. - * * @note Either a solid color or a gradient fill is applied, depending on what was set as last. */ Result fill(std::unique_ptr<Fill> f) noexcept; @@ -1104,8 +1022,6 @@ public: * @brief Sets the fill rule for the Shape object. * * @param[in] r The fill rule value. The default value is @c FillRule::Winding. - * - * @retval Result::Success when succeed. */ Result fill(FillRule r) noexcept; @@ -1114,8 +1030,6 @@ public: * * @param[in] strokeFirst If @c true the stroke is rendered before the fill, otherwise the stroke is rendered as the second one (the default option). * - * @retval Result::Success when succeed. - * * @since 0.10 */ Result order(bool strokeFirst) noexcept; @@ -1179,7 +1093,6 @@ public: * @param[out] b The blue color channel value in the range [0 ~ 255]. * @param[out] a The alpha channel value in the range [0 ~ 255], where 0 is completely transparent and 255 is opaque. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. */ Result strokeColor(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a = nullptr) const noexcept; @@ -1228,7 +1141,7 @@ public: * @param[out] begin The starting point of the segment to display along the path. * @param[out] end Specifies the end of the segment to display along the path. * - * @retval @c true if trimming is applied simultaneously to all paths of the shape, @c false otherwise. + * @return @c true if trimming is applied simultaneously to all paths of the shape, @c false otherwise. * * @note Experimental API */ @@ -1277,10 +1190,8 @@ public: * * @param[in] path A path to the picture file. * - * @retval Result::Success When succeed. * @retval Result::InvalidArguments In case the @p path is invalid. * @retval Result::NonSupport When trying to load a file with an unknown extension. - * @retval Result::Unknown If an error occurs at a later stage. * * @note The Load behavior can be asynchronous if the assigned thread number is greater than zero. * @see Initializer::init() @@ -1288,41 +1199,26 @@ public: Result load(const std::string& path) noexcept; /** - * @brief Loads a picture data from a memory block of a given size. - * - * ThorVG efficiently caches the loaded data using the specified @p data address as a key - * when the @p copy has @c false. This means that loading the same data again will not result in duplicate operations - * for the sharable @p data. Instead, ThorVG will reuse the previously loaded picture data. - * - * @param[in] data A pointer to a memory location where the content of the picture file is stored. - * @param[in] size The size in bytes of the memory occupied by the @p data. - * @param[in] copy Decides whether the data should be copied into the engine local buffer. - * - * @retval Result::Success When succeed. - * @retval Result::InvalidArguments In case no data are provided or the @p size is zero or less. - * @retval Result::NonSupport When trying to load a file with an unknown extension. - * @retval Result::Unknown If an error occurs at a later stage. - * - * @warning: you have responsibility to release the @p data memory if the @p copy is true * @deprecated Use load(const char* data, uint32_t size, const std::string& mimeType, bool copy) instead. - * @see Result load(const char* data, uint32_t size, const std::string& mimeType, bool copy = false) noexcept */ TVG_DEPRECATED Result load(const char* data, uint32_t size, bool copy = false) noexcept; /** * @brief Loads a picture data from a memory block of a given size. * + * ThorVG efficiently caches the loaded data using the specified @p data address as a key + * when the @p copy has @c false. This means that loading the same data again will not result in duplicate operations + * for the sharable @p data. Instead, ThorVG will reuse the previously loaded picture data. + * * @param[in] data A pointer to a memory location where the content of the picture file is stored. * @param[in] size The size in bytes of the memory occupied by the @p data. * @param[in] mimeType Mimetype or extension of data such as "jpg", "jpeg", "lottie", "svg", "svg+xml", "png", etc. In case an empty string or an unknown type is provided, the loaders will be tried one by one. * @param[in] copy If @c true the data are copied into the engine local buffer, otherwise they are not. * - * @retval Result::Success When succeed. * @retval Result::InvalidArguments In case no data are provided or the @p size is zero or less. * @retval Result::NonSupport When trying to load a file with an unknown extension. - * @retval Result::Unknown If an error occurs at a later stage. * - * @warning: It's the user responsibility to release the @p data memory if the @p copy is @c true. + * @warning: It's the user responsibility to release the @p data memory. * * @note If you are unsure about the MIME type, you can provide an empty value like @c "", and thorvg will attempt to figure it out. * @since 0.5 @@ -1338,7 +1234,6 @@ public: * @param[in] w A new width of the image in pixels. * @param[in] h A new height of the image in pixels. * - * @retval Result::Success when succeed, Result::InsufficientCondition otherwise. */ Result size(float w, float h) noexcept; @@ -1348,7 +1243,6 @@ public: * @param[out] w The width of the image in pixels. * @param[out] h The height of the image in pixels. * - * @retval Result::Success when succeed. */ Result size(float* w, float* h) const noexcept; @@ -1359,16 +1253,12 @@ public: * when the @p copy has @c false. This means that loading the same data again will not result in duplicate operations * for the sharable @p data. Instead, ThorVG will reuse the previously loaded picture data. * - * @param[in] paint A Tvg_Paint pointer to the picture object. * @param[in] data A pointer to a memory location where the content of the picture raw data is stored. * @param[in] w The width of the image @p data in pixels. * @param[in] h The height of the image @p data in pixels. * @param[in] premultiplied If @c true, the given image data is alpha-premultiplied. * @param[in] copy If @c true the data are copied into the engine local buffer, otherwise they are not. * - * @retval Result::Success When succeed, Result::InsufficientCondition otherwise. - * @retval Result::FailedAllocation An internal error possibly with memory allocation. - * * @since 0.9 */ Result load(uint32_t* data, uint32_t w, uint32_t h, bool copy) noexcept; @@ -1387,9 +1277,6 @@ public: * @param[in] triangles An array of Polygons(triangles) that make up the mesh, or null to remove the mesh. * @param[in] triangleCnt The number of Polygons(triangles) provided, or 0 to remove the mesh. * - * @retval Result::Success When succeed. - * @retval Result::Unknown If fails - * * @note The Polygons are copied internally, so modifying them after calling Mesh::mesh has no affect. * @warning Please do not use it, this API is not official one. It could be modified in the next version. * @@ -1456,24 +1343,12 @@ public: * * @param[in] paint A Paint object to be drawn. * - * @retval Result::Success when succeed, Result::MemoryCorruption otherwise. - * * @note The rendering order of the paints is the same as the order as they were pushed. Consider sorting the paints before pushing them if you intend to use layering. * @see Scene::paints() * @see Scene::clear() */ Result push(std::unique_ptr<Paint> paint) noexcept; - /** - * @brief Sets the size of the container, where all the paints pushed into the Scene are stored. - * - * If the number of objects pushed into the scene is known in advance, calling the function - * prevents multiple memory reallocation, thus improving the performance. - * - * @param[in] size The number of objects for which the memory is to be reserved. - * - * @return Result::Success when succeed, Result::FailedAllocation otherwise. - */ TVG_DEPRECATED Result reserve(uint32_t size) noexcept; /** @@ -1496,8 +1371,6 @@ public: * * @param[in] free If @c true, the memory occupied by paints is deallocated, otherwise it is not. * - * @retval Result::Success when succeed - * * @warning If you don't free the paints they become dangled. They are supposed to be reused, otherwise you are responsible for their lives. Thus please use the @p free argument only when you know how it works, otherwise it's not recommended. * * @since 0.2 @@ -1547,7 +1420,6 @@ public: * @param[in] style The style of the font. It can be used to set the font to 'italic'. * If not specified, the default style is used. Only 'italic' style is supported currently. * - * @retval Result::Success when the font properties are set successfully. * @retval Result::InsufficientCondition when the specified @p name cannot be found. * * @note Experimental API @@ -1562,8 +1434,6 @@ public: * * @param[in] text The multi-byte text encoded with utf8 string to be rendered. * - * @retval Result::Success when succeed. - * * @note Experimental API */ Result text(const char* text) noexcept; @@ -1575,7 +1445,6 @@ public: * @param[in] g The green color channel value in the range [0 ~ 255]. The default value is 0. * @param[in] b The blue color channel value in the range [0 ~ 255]. The default value is 0. * - * @retval Result::Success when succeed. * @retval Result::InsufficientCondition when the font has not been set up prior to this operation. * * @see Text::font() @@ -1591,7 +1460,6 @@ public: * * @param[in] f The unique pointer to the gradient fill. * - * @retval Result::Success when succeed, Result::MemoryCorruption otherwise. * @retval Result::InsufficientCondition when the font has not been set up prior to this operation. * * @note Either a solid color or a gradient fill is applied, depending on what was set as last. @@ -1602,7 +1470,7 @@ public: Result fill(std::unique_ptr<Fill> f) noexcept; /** - * @brief Loads a scalable font data(ttf) from a file. + * @brief Loads a scalable font data (ttf) from a file. * * ThorVG efficiently caches the loaded data using the specified @p path as a key. * This means that loading the same file again will not result in duplicate operations; @@ -1610,10 +1478,8 @@ public: * * @param[in] path The path to the font file. * - * @retval Result::Success When succeed. * @retval Result::InvalidArguments In case the @p path is invalid. * @retval Result::NonSupport When trying to load a file with an unknown extension. - * @retval Result::Unknown If an error occurs at a later stage. * * @note Experimental API * @@ -1622,13 +1488,39 @@ public: static Result load(const std::string& path) noexcept; /** + * @brief Loads a scalable font data (ttf) from a memory block of a given size. + * + * ThorVG efficiently caches the loaded font data using the specified @p name as a key. + * This means that loading the same fonts again will not result in duplicate operations. + * Instead, ThorVG will reuse the previously loaded font data. + * + * @param[in] name The name under which the font will be stored and accessible (e.x. in a @p font() API). + * @param[in] data A pointer to a memory location where the content of the font data is stored. + * @param[in] size The size in bytes of the memory occupied by the @p data. + * @param[in] mimeType Mimetype or extension of font data. In case an empty string is provided the loader will be determined automatically. + * @param[in] copy If @c true the data are copied into the engine local buffer, otherwise they are not (default). + * + * @retval Result::InvalidArguments If no name is provided or if @p size is zero while @p data points to a valid memory location. + * @retval Result::NonSupport When trying to load a file with an unsupported extension. + * @retval Result::InsufficientCondition If attempting to unload the font data that has not been previously loaded. + * + * @warning: It's the user responsibility to release the @p data memory. + * + * @note To unload the font data loaded using this API, pass the proper @p name and @c nullptr as @p data. + * @note If you are unsure about the MIME type, you can provide an empty value like @c "", and thorvg will attempt to figure it out. + * @note Experimental API + * + * @see Text::font(const char* name, float size, const char* style) + */ + static Result load(const char* name, const char* data, uint32_t size, const std::string& mimeType = "ttf", bool copy = false) noexcept; + + /** * @brief Unloads the specified scalable font data (TTF) that was previously loaded. * * This function is used to release resources associated with a font file that has been loaded into memory. * * @param[in] path The file path of the loaded font. * - * @retval Result::Success Successfully unloads the font data. * @retval Result::InsufficientCondition Fails if the loader is not initialized. * * @note If the font data is currently in use, it will not be immediately unloaded. @@ -1703,14 +1595,14 @@ public: * @param[in] h The height of the raster image. * @param[in] cs The value specifying the way the 32-bits colors should be read/written. * - * @retval Result::Success When succeed. - * @retval Result::MemoryCorruption When casting in the internal function implementation failed. * @retval Result::InvalidArguments In case no valid pointer is provided or the width, or the height or the stride is zero. + * @retval Result::InsufficientCondition if the canvas is performing rendering. Please ensure the canvas is synced. * @retval Result::NonSupport In case the software engine is not supported. * * @warning Do not access @p buffer during Canvas::push() - Canvas::sync(). It should not be accessed while the engine is writing on it. * * @see Canvas::viewport() + * @see Canvas::sync() */ Result target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h, Colorspace cs) noexcept; @@ -1726,7 +1618,6 @@ public: * * @param[in] policy The method specifying the Memory Pool behavior. The default value is @c MempoolPolicy::Default. * - * @retval Result::Success When succeed. * @retval Result::InsufficientCondition If the canvas contains some paints already. * @retval Result::NonSupport In case the software engine is not supported. * @@ -1756,7 +1647,7 @@ public: * * @warning Please do not use it. This class is not fully supported yet. * - * @note Experimental API + * @since 0.14 */ class TVG_API GlCanvas final : public Canvas { @@ -1773,10 +1664,11 @@ public: * @param[in] w The width (in pixels) of the raster image. * @param[in] h The height (in pixels) of the raster image. * - * @warning This API is experimental and not officially supported. It may be modified or removed in future versions. - * @warning Drawing on the main surface is currently not permitted. If the identifier (@p id) is set to @c 0, the operation will be aborted. + * @retval Result::InsufficientCondition if the canvas is performing rendering. Please ensure the canvas is synced. + * @retval Result::NonSupport In case the gl engine is not supported. * * @see Canvas::viewport() + * @see Canvas::sync() * * @note Currently, this only allows the GL_RGBA8 color space format. * @note Experimental API @@ -1788,7 +1680,7 @@ public: * * @return A new GlCanvas object. * - * @note Experimental API + * @since 0.14 */ static std::unique_ptr<GlCanvas> gen() noexcept; @@ -1811,14 +1703,22 @@ public: ~WgCanvas(); /** - * @brief Sets the target window for the rasterization. + * @brief Sets the drawing target for the rasterization. * - * @warning Please do not use it, this API is not official one. It could be modified in the next version. + * @param[in] instance WGPUInstance, context for all other wgpu objects. + * @param[in] surface WGPUSurface, handle to a presentable surface. + * @param[in] w The width of the surface. + * @param[in] h The height of the surface. + * + * @retval Result::InsufficientCondition if the canvas is performing rendering. Please ensure the canvas is synced. + * @retval Result::NonSupport In case the wg engine is not supported. * * @note Experimental API + * * @see Canvas::viewport() + * @see Canvas::sync() */ - Result target(void* window, uint32_t w, uint32_t h) noexcept; + Result target(void* instance, void* surface, uint32_t w, uint32_t h) noexcept; /** * @brief Creates a new WgCanvas object. @@ -1852,11 +1752,7 @@ public: * @param[in] engine The engine types to initialize. This is relative to the Canvas types, in which it will be used. For multiple backends bitwise operation is allowed. * @param[in] threads The number of additional threads. Zero indicates only the main thread is to be used. * - * @retval Result::Success When succeed. - * @retval Result::FailedAllocation An internal error possibly with memory allocation. - * @retval Result::InvalidArguments If unknown engine type chosen. * @retval Result::NonSupport In case the engine type is not supported on the system. - * @retval Result::Unknown Others. * * @note The Initializer keeps track of the number of times it was called. Threads count is fixed at the first init() call. * @see Initializer::term() @@ -1868,11 +1764,8 @@ public: * * @param[in] engine The engine types to terminate. This is relative to the Canvas types, in which it will be used. For multiple backends bitwise operation is allowed * - * @retval Result::Success When succeed. * @retval Result::InsufficientCondition In case there is nothing to be terminated. - * @retval Result::InvalidArguments If unknown engine type chosen. * @retval Result::NonSupport In case the engine type is not supported on the system. - * @retval Result::Unknown Others. * * @note Initializer does own reference counting for multiple calls. * @see Initializer::init() @@ -1903,7 +1796,6 @@ public: * * @param[in] no The index of the animation frame to be displayed. The index should be less than the totalFrame(). * - * @retval Result::Success Successfully set the frame. * @retval Result::InsufficientCondition if the given @p no is the same as the current frame value. * @retval Result::NonSupport The current Picture data does not support animations. * @@ -1975,9 +1867,7 @@ public: * @param[in] begin segment start. * @param[in] end segment end. * - * @retval Result::Success When succeed. * @retval Result::InsufficientCondition In case the animation is not loaded. - * @retval Result::InvalidArguments When the given parameter is invalid. * @retval Result::NonSupport When it's not animatable. * * @note Range from 0.0~1.0 @@ -1993,9 +1883,7 @@ public: * @param[out] begin segment start. * @param[out] end segment end. * - * @retval Result::Success When succeed. * @retval Result::InsufficientCondition In case the animation is not loaded. - * @retval Result::InvalidArguments When the given parameter is invalid. * @retval Result::NonSupport When it's not animatable. * * @note Experimental API @@ -2056,10 +1944,8 @@ public: * @param[in] path A path to the file, in which the paint data is to be saved. * @param[in] compress If @c true then compress data if possible. * - * @retval Result::Success When succeed. * @retval Result::InsufficientCondition If currently saving other resources. * @retval Result::NonSupport When trying to save a file with an unknown extension or in an unsupported format. - * @retval Result::MemoryCorruption An internal error. * @retval Result::Unknown In case an empty paint is to be saved. * * @note Saving can be asynchronous if the assigned thread number is greater than zero. To guarantee the saving is done, call sync() afterwards. @@ -2079,10 +1965,8 @@ public: * @param[in] quality The encoded quality level. @c 0 is the minimum, @c 100 is the maximum value(recommended). * @param[in] fps The desired frames per second (FPS). For example, to encode data at 60 FPS, pass 60. Pass 0 to keep the original frame data. * - * @retval Result::Success if the export succeeds. * @retval Result::InsufficientCondition if there are ongoing resource-saving operations. * @retval Result::NonSupport if an attempt is made to save the file with an unknown extension or in an unsupported format. - * @retval Result::MemoryCorruption in case of an internal error. * @retval Result::Unknown if attempting to save an empty paint. * * @note A higher frames per second (FPS) would result in a larger file size. It is recommended to use the default value. @@ -2101,9 +1985,6 @@ public: * Thus, if you wish to have a benefit of it, you must call sync() after the save() in the proper delayed time. * Otherwise, you can call sync() immediately. * - * @retval Result::Success when succeed. - * @retval Result::InsufficientCondition otherwise. - * * @note The asynchronous tasking is dependent on the Saver module implementation. * @see Saver::save() * diff --git a/thirdparty/thorvg/patches/pr2338-float_t.patch b/thirdparty/thorvg/patches/pr2338-float_t.patch deleted file mode 100644 index 20b9050cbb..0000000000 --- a/thirdparty/thorvg/patches/pr2338-float_t.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp -index f59994aae6..b2ce38852c 100644 ---- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp -+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp -@@ -709,7 +709,7 @@ static bool _toColor(const char* str, uint8_t* r, uint8_t* g, uint8_t* b, char** - *ref = _idFromUrl((const char*)(str + 3)); - return true; - } else if (len >= 10 && (str[0] == 'h' || str[0] == 'H') && (str[1] == 's' || str[1] == 'S') && (str[2] == 'l' || str[2] == 'L') && str[3] == '(' && str[len - 1] == ')') { -- float_t th, ts, tb; -+ float th, ts, tb; - const char *content, *hue, *satuation, *brightness; - content = str + 4; - content = _skipSpace(content, nullptr); diff --git a/thirdparty/thorvg/src/common/tvgLock.h b/thirdparty/thorvg/src/common/tvgLock.h index 5dd3d5a624..d8bf7269f6 100644 --- a/thirdparty/thorvg/src/common/tvgLock.h +++ b/thirdparty/thorvg/src/common/tvgLock.h @@ -25,6 +25,8 @@ #ifdef THORVG_THREAD_SUPPORT +#define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR + #include <mutex> namespace tvg { diff --git a/thirdparty/thorvg/src/common/tvgMath.cpp b/thirdparty/thorvg/src/common/tvgMath.cpp index e6b5d47050..e99ec46681 100644 --- a/thirdparty/thorvg/src/common/tvgMath.cpp +++ b/thirdparty/thorvg/src/common/tvgMath.cpp @@ -111,3 +111,11 @@ void operator*=(Point& pt, const Matrix& m) pt.x = tx; pt.y = ty; } + + +Point operator*(const Point& pt, const Matrix& m) +{ + auto tx = pt.x * m.e11 + pt.y * m.e12 + m.e13; + auto ty = pt.x * m.e21 + pt.y * m.e22 + m.e23; + return {tx, ty}; +} diff --git a/thirdparty/thorvg/src/common/tvgMath.h b/thirdparty/thorvg/src/common/tvgMath.h index 0f877d919e..3555885c8e 100644 --- a/thirdparty/thorvg/src/common/tvgMath.h +++ b/thirdparty/thorvg/src/common/tvgMath.h @@ -152,9 +152,9 @@ static inline void operator*=(Matrix& lhs, const Matrix& rhs) } -static inline void mathLog(Matrix* m) +static inline void mathLog(const Matrix& m) { - TVGLOG("MATH", "Matrix: [%f %f %f] [%f %f %f] [%f %f %f]", m->e11, m->e12, m->e13, m->e21, m->e22, m->e23, m->e31, m->e32, m->e33); + TVGLOG("COMMON", "Matrix: [%f %f %f] [%f %f %f] [%f %f %f]", m.e11, m.e12, m.e13, m.e21, m.e22, m.e23, m.e31, m.e32, m.e33); } @@ -163,6 +163,7 @@ static inline void mathLog(Matrix* m) /************************************************************************/ void operator*=(Point& pt, const Matrix& m); +Point operator*(const Point& pt, const Matrix& m); static inline bool mathZero(const Point& p) @@ -231,6 +232,11 @@ static inline Point operator/(const Point& lhs, const float rhs) } +static inline void mathLog(const Point& pt) +{ + TVGLOG("COMMON", "Point: [%f %f]", pt.x, pt.y); +} + /************************************************************************/ /* Interpolation functions */ /************************************************************************/ diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp index b2ce38852c..ae784ccfd7 100644 --- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp +++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp @@ -175,14 +175,14 @@ static float _toFloat(const SvgParser* svgParse, const char* str, SvgParserLengt else if (strstr(str, "pc")) parsedValue *= PX_PER_PC; else if (strstr(str, "in")) parsedValue *= PX_PER_IN; else if (strstr(str, "%")) { - if (type == SvgParserLengthType::Vertical) parsedValue = (parsedValue / 100.0) * svgParse->global.h; - else if (type == SvgParserLengthType::Horizontal) parsedValue = (parsedValue / 100.0) * svgParse->global.w; - else //if other then it's radius + if (type == SvgParserLengthType::Vertical) parsedValue = (parsedValue / 100.0f) * svgParse->global.h; + else if (type == SvgParserLengthType::Horizontal) parsedValue = (parsedValue / 100.0f) * svgParse->global.w; + else //if other than it's radius { float max = svgParse->global.w; if (max < svgParse->global.h) max = svgParse->global.h; - parsedValue = (parsedValue / 100.0) * max; + parsedValue = (parsedValue / 100.0f) * max; } } //TODO: Implement 'em', 'ex' attributes @@ -580,7 +580,7 @@ static constexpr struct }; -static bool _hslToRgb(float hue, float satuation, float brightness, uint8_t* red, uint8_t* green, uint8_t* blue) +static bool _hslToRgb(float hue, float saturation, float brightness, uint8_t* red, uint8_t* green, uint8_t* blue) { if (!red || !green || !blue) return false; @@ -588,12 +588,12 @@ static bool _hslToRgb(float hue, float satuation, float brightness, uint8_t* red float _red = 0, _green = 0, _blue = 0; uint32_t i = 0; - if (mathZero(satuation)) _red = _green = _blue = brightness; + if (mathZero(saturation)) _red = _green = _blue = brightness; else { if (mathEqual(hue, 360.0)) hue = 0.0f; hue /= 60.0f; - v = (brightness <= 0.5f) ? (brightness * (1.0f + satuation)) : (brightness + satuation - (brightness * satuation)); + v = (brightness <= 0.5f) ? (brightness * (1.0f + saturation)) : (brightness + saturation - (brightness * saturation)); p = brightness + brightness - v; if (!mathZero(v)) sv = (v - p) / v; @@ -647,9 +647,9 @@ static bool _hslToRgb(float hue, float satuation, float brightness, uint8_t* red } } - *red = static_cast<uint8_t>(roundf(_red * 255.0f)); - *green = static_cast<uint8_t>(roundf(_green * 255.0f)); - *blue = static_cast<uint8_t>(roundf(_blue * 255.0f)); + *red = static_cast<uint8_t>(ceil(_red * 255.0f)); + *green = static_cast<uint8_t>(ceil(_green * 255.0f)); + *blue = static_cast<uint8_t>(ceil(_blue * 255.0f)); return true; } @@ -662,7 +662,7 @@ static bool _toColor(const char* str, uint8_t* r, uint8_t* g, uint8_t* b, char** unsigned char tr, tg, tb; if (len == 4 && str[0] == '#') { - //Case for "#456" should be interprete as "#445566" + //Case for "#456" should be interpreted as "#445566" if (isxdigit(str[1]) && isxdigit(str[2]) && isxdigit(str[3])) { char tmp[3] = { '\0', '\0', '\0' }; tmp[0] = str[1]; @@ -710,7 +710,7 @@ static bool _toColor(const char* str, uint8_t* r, uint8_t* g, uint8_t* b, char** return true; } else if (len >= 10 && (str[0] == 'h' || str[0] == 'H') && (str[1] == 's' || str[1] == 'S') && (str[2] == 'l' || str[2] == 'L') && str[3] == '(' && str[len - 1] == ')') { float th, ts, tb; - const char *content, *hue, *satuation, *brightness; + const char *content, *hue, *saturation, *brightness; content = str + 4; content = _skipSpace(content, nullptr); if (_parseNumber(&content, &hue, &th) && hue) { @@ -718,12 +718,12 @@ static bool _toColor(const char* str, uint8_t* r, uint8_t* g, uint8_t* b, char** hue = _skipSpace(hue, nullptr); hue = (char*)_skipComma(hue); hue = _skipSpace(hue, nullptr); - if (_parseNumber(&hue, &satuation, &ts) && satuation && *satuation == '%') { + if (_parseNumber(&hue, &saturation, &ts) && saturation && *saturation == '%') { ts /= 100.0f; - satuation = _skipSpace(satuation + 1, nullptr); - satuation = (char*)_skipComma(satuation); - satuation = _skipSpace(satuation, nullptr); - if (_parseNumber(&satuation, &brightness, &tb) && brightness && *brightness == '%') { + saturation = _skipSpace(saturation + 1, nullptr); + saturation = (char*)_skipComma(saturation); + saturation = _skipSpace(saturation, nullptr); + if (_parseNumber(&saturation, &brightness, &tb) && brightness && *brightness == '%') { tb /= 100.0f; brightness = _skipSpace(brightness + 1, nullptr); if (brightness && brightness[0] == ')' && brightness[1] == '\0') { @@ -2119,7 +2119,72 @@ static SvgNode* _createUseNode(SvgLoaderData* loader, SvgNode* parent, const cha } -//TODO: Implement 'text' primitive +static constexpr struct +{ + const char* tag; + SvgParserLengthType type; + int sz; + size_t offset; +} textTags[] = { + {"x", SvgParserLengthType::Horizontal, sizeof("x"), offsetof(SvgTextNode, x)}, + {"y", SvgParserLengthType::Vertical, sizeof("y"), offsetof(SvgTextNode, y)}, + {"font-size", SvgParserLengthType::Vertical, sizeof("font-size"), offsetof(SvgTextNode, fontSize)} +}; + + +static bool _attrParseTextNode(void* data, const char* key, const char* value) +{ + SvgLoaderData* loader = (SvgLoaderData*)data; + SvgNode* node = loader->svgParse->node; + SvgTextNode* text = &(node->node.text); + + unsigned char* array; + int sz = strlen(key); + + array = (unsigned char*)text; + for (unsigned int i = 0; i < sizeof(textTags) / sizeof(textTags[0]); i++) { + if (textTags[i].sz - 1 == sz && !strncmp(textTags[i].tag, key, sz)) { + *((float*)(array + textTags[i].offset)) = _toFloat(loader->svgParse, value, textTags[i].type); + return true; + } + } + + if (!strcmp(key, "font-family")) { + if (text->fontFamily && value) free(text->fontFamily); + text->fontFamily = strdup(value); + } else if (!strcmp(key, "style")) { + return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader); + } else if (!strcmp(key, "clip-path")) { + _handleClipPathAttr(loader, node, value); + } else if (!strcmp(key, "mask")) { + _handleMaskAttr(loader, node, value); + } else if (!strcmp(key, "id")) { + if (node->id && value) free(node->id); + node->id = _copyId(value); + } else if (!strcmp(key, "class")) { + _handleCssClassAttr(loader, node, value); + } else { + return _parseStyleAttr(loader, key, value, false); + } + return true; +} + + +static SvgNode* _createTextNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func) +{ + loader->svgParse->node = _createNode(parent, SvgNodeType::Text); + if (!loader->svgParse->node) return nullptr; + + //TODO: support the def font and size as used in a system? + loader->svgParse->node->node.text.fontSize = 10.0f; + loader->svgParse->node->node.text.fontFamily = nullptr; + + func(buf, bufLength, _attrParseTextNode, loader); + + return loader->svgParse->node; +} + + static constexpr struct { const char* tag; @@ -2134,7 +2199,8 @@ static constexpr struct {"rect", sizeof("rect"), _createRectNode}, {"polyline", sizeof("polyline"), _createPolylineNode}, {"line", sizeof("line"), _createLineNode}, - {"image", sizeof("image"), _createImageNode} + {"image", sizeof("image"), _createImageNode}, + {"text", sizeof("text"), _createTextNode} }; @@ -3122,6 +3188,20 @@ static void _copyAttr(SvgNode* to, const SvgNode* from) to->node.use.symbol = from->node.use.symbol; break; } + case SvgNodeType::Text: { + to->node.text.x = from->node.text.x; + to->node.text.y = from->node.text.y; + to->node.text.fontSize = from->node.text.fontSize; + if (from->node.text.text) { + if (to->node.text.text) free(to->node.text.text); + to->node.text.text = strdup(from->node.text.text); + } + if (from->node.text.fontFamily) { + if (to->node.text.fontFamily) free(to->node.text.fontFamily); + to->node.text.fontFamily = strdup(from->node.text.fontFamily); + } + break; + } default: { break; } @@ -3174,27 +3254,12 @@ static void _clonePostponedNodes(Array<SvgNodeIdPair>* cloneNodes, SvgNode* doc) } -static constexpr struct -{ - const char* tag; - size_t sz; -} popArray[] = { - {"g", sizeof("g")}, - {"svg", sizeof("svg")}, - {"defs", sizeof("defs")}, - {"mask", sizeof("mask")}, - {"clipPath", sizeof("clipPath")}, - {"style", sizeof("style")}, - {"symbol", sizeof("symbol")} -}; - - static void _svgLoaderParserXmlClose(SvgLoaderData* loader, const char* content) { content = _skipSpace(content, nullptr); - for (unsigned int i = 0; i < sizeof(popArray) / sizeof(popArray[0]); i++) { - if (!strncmp(content, popArray[i].tag, popArray[i].sz - 1)) { + for (unsigned int i = 0; i < sizeof(groupTags) / sizeof(groupTags[0]); i++) { + if (!strncmp(content, groupTags[i].tag, groupTags[i].sz - 1)) { loader->stack.pop(); break; } @@ -3259,7 +3324,7 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content, node = method(loader, nullptr, attrs, attrsLength, simpleXmlParseAttributes); loader->cssStyle = node; loader->doc->node.doc.style = node; - loader->style = true; + loader->openedTag = OpenedTagType::Style; } } else { node = method(loader, parent, attrs, attrsLength, simpleXmlParseAttributes); @@ -3275,9 +3340,12 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content, else parent = loader->doc; node = method(loader, parent, attrs, attrsLength, simpleXmlParseAttributes); if (node && !empty) { - auto defs = _createDefsNode(loader, nullptr, nullptr, 0, nullptr); - loader->stack.push(defs); - loader->currentGraphicsNode = node; + if (!strcmp(tagName, "text")) loader->openedTag = OpenedTagType::Text; + else { + auto defs = _createDefsNode(loader, nullptr, nullptr, 0, nullptr); + loader->stack.push(defs); + loader->currentGraphicsNode = node; + } } } else if ((gradientMethod = _findGradientFactory(tagName))) { SvgStyleGradient* gradient; @@ -3310,6 +3378,15 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content, } +static void _svgLoaderParserText(SvgLoaderData* loader, const char* content, unsigned int length) +{ + auto text = &loader->svgParse->node->node.text; + if (text->text) free(text->text); + text->text = strDuplicate(content, length); + loader->openedTag = OpenedTagType::Other; +} + + static void _svgLoaderParserXmlCssStyle(SvgLoaderData* loader, const char* content, unsigned int length) { char* tag; @@ -3342,7 +3419,7 @@ static void _svgLoaderParserXmlCssStyle(SvgLoaderData* loader, const char* conte free(tag); free(name); } - loader->style = false; + loader->openedTag = OpenedTagType::Other; } @@ -3365,7 +3442,8 @@ static bool _svgLoaderParser(void* data, SimpleXMLType type, const char* content } case SimpleXMLType::Data: case SimpleXMLType::CData: { - if (loader->style) _svgLoaderParserXmlCssStyle(loader, content, length); + if (loader->openedTag == OpenedTagType::Style) _svgLoaderParserXmlCssStyle(loader, content, length); + else if (loader->openedTag == OpenedTagType::Text) _svgLoaderParserText(loader, content, length); break; } case SimpleXMLType::DoctypeChild: { @@ -3587,6 +3665,11 @@ static void _freeNode(SvgNode* node) free(node->node.image.href); break; } + case SvgNodeType::Text: { + free(node->node.text.text); + free(node->node.text.fontFamily); + break; + } default: { break; } diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h index 283f56561b..5661c8ae82 100644 --- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h +++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h @@ -374,6 +374,14 @@ struct SvgCssStyleNode { }; +struct SvgTextNode +{ + char* text; + char* fontFamily; + float x, y; + float fontSize; +}; + struct SvgLinearGradient { float x1; @@ -518,6 +526,7 @@ struct SvgNode SvgClipNode clip; SvgCssStyleNode cssStyle; SvgSymbolNode symbol; + SvgTextNode text; } node; ~SvgNode(); }; @@ -545,11 +554,18 @@ struct SvgNodeIdPair char *id; }; +enum class OpenedTagType : uint8_t +{ + Other = 0, + Style, + Text +}; + struct SvgLoaderData { Array<SvgNode*> stack; SvgNode* doc = nullptr; - SvgNode* def = nullptr; + SvgNode* def = nullptr; //also used to store nested graphic nodes SvgNode* cssStyle = nullptr; Array<SvgStyleGradient*> gradients; SvgStyleGradient* latestGradient = nullptr; //For stops @@ -559,7 +575,7 @@ struct SvgLoaderData Array<char*> images; //embedded images int level = 0; bool result = false; - bool style = false; + OpenedTagType openedTag = OpenedTagType::Other; SvgNode* currentGraphicsNode = nullptr; }; diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp index 7e7efed3fc..b048695a23 100644 --- a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp +++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp @@ -67,6 +67,14 @@ static Box _boundingBox(const Shape* shape) } +static Box _boundingBox(const Text* text) +{ + float x, y, w, h; + text->bounds(&x, &y, &w, &h, false); + return {x, y, w, h}; +} + + static void _transformMultiply(const Matrix* mBBox, Matrix* gradTransf) { gradTransf->e13 = gradTransf->e13 * mBBox->e11 + mBBox->e13; @@ -79,7 +87,7 @@ static void _transformMultiply(const Matrix* mBBox, Matrix* gradTransf) } -static unique_ptr<LinearGradient> _applyLinearGradientProperty(SvgStyleGradient* g, const Shape* vg, const Box& vBox, int opacity) +static unique_ptr<LinearGradient> _applyLinearGradientProperty(SvgStyleGradient* g, const Box& vBox, int opacity) { Fill::ColorStop* stops; int stopCount = 0; @@ -134,7 +142,7 @@ static unique_ptr<LinearGradient> _applyLinearGradientProperty(SvgStyleGradient* } -static unique_ptr<RadialGradient> _applyRadialGradientProperty(SvgStyleGradient* g, const Shape* vg, const Box& vBox, int opacity) +static unique_ptr<RadialGradient> _applyRadialGradientProperty(SvgStyleGradient* g, const Box& vBox, int opacity) { Fill::ColorStop *stops; int stopCount = 0; @@ -320,14 +328,15 @@ static void _applyProperty(SvgLoaderData& loaderData, SvgNode* node, Shape* vg, if (!style->fill.paint.gradient->userSpace) bBox = _boundingBox(vg); if (style->fill.paint.gradient->type == SvgGradientType::Linear) { - auto linear = _applyLinearGradientProperty(style->fill.paint.gradient, vg, bBox, style->fill.opacity); - vg->fill(std::move(linear)); + auto linear = _applyLinearGradientProperty(style->fill.paint.gradient, bBox, style->fill.opacity); + vg->fill(std::move(linear)); } else if (style->fill.paint.gradient->type == SvgGradientType::Radial) { - auto radial = _applyRadialGradientProperty(style->fill.paint.gradient, vg, bBox, style->fill.opacity); - vg->fill(std::move(radial)); + auto radial = _applyRadialGradientProperty(style->fill.paint.gradient, bBox, style->fill.opacity); + vg->fill(std::move(radial)); } } else if (style->fill.paint.url) { //TODO: Apply the color pointed by url + TVGLOG("SVG", "The fill's url not supported."); } else if (style->fill.paint.curColor) { //Apply the current style color vg->fill(style->color.r, style->color.g, style->color.b, style->fill.opacity); @@ -363,14 +372,15 @@ static void _applyProperty(SvgLoaderData& loaderData, SvgNode* node, Shape* vg, if (!style->stroke.paint.gradient->userSpace) bBox = _boundingBox(vg); if (style->stroke.paint.gradient->type == SvgGradientType::Linear) { - auto linear = _applyLinearGradientProperty(style->stroke.paint.gradient, vg, bBox, style->stroke.opacity); + auto linear = _applyLinearGradientProperty(style->stroke.paint.gradient, bBox, style->stroke.opacity); vg->stroke(std::move(linear)); } else if (style->stroke.paint.gradient->type == SvgGradientType::Radial) { - auto radial = _applyRadialGradientProperty(style->stroke.paint.gradient, vg, bBox, style->stroke.opacity); + auto radial = _applyRadialGradientProperty(style->stroke.paint.gradient, bBox, style->stroke.opacity); vg->stroke(std::move(radial)); } } else if (style->stroke.paint.url) { //TODO: Apply the color pointed by url + TVGLOG("SVG", "The stroke's url not supported."); } else if (style->stroke.paint.curColor) { //Apply the current style color vg->stroke(style->color.r, style->color.g, style->color.b, style->stroke.opacity); @@ -772,6 +782,61 @@ static unique_ptr<Scene> _useBuildHelper(SvgLoaderData& loaderData, const SvgNod } +static void _applyTextFill(SvgStyleProperty* style, Text* text, const Box& vBox) +{ + //If fill property is nullptr then do nothing + if (style->fill.paint.none) { + //Do nothing + } else if (style->fill.paint.gradient) { + Box bBox = vBox; + if (!style->fill.paint.gradient->userSpace) bBox = _boundingBox(text); + + if (style->fill.paint.gradient->type == SvgGradientType::Linear) { + auto linear = _applyLinearGradientProperty(style->fill.paint.gradient, bBox, style->fill.opacity); + text->fill(std::move(linear)); + } else if (style->fill.paint.gradient->type == SvgGradientType::Radial) { + auto radial = _applyRadialGradientProperty(style->fill.paint.gradient, bBox, style->fill.opacity); + text->fill(std::move(radial)); + } + } else if (style->fill.paint.url) { + //TODO: Apply the color pointed by url + TVGLOG("SVG", "The fill's url not supported."); + } else if (style->fill.paint.curColor) { + //Apply the current style color + text->fill(style->color.r, style->color.g, style->color.b); + text->opacity(style->fill.opacity); + } else { + //Apply the fill color + text->fill(style->fill.paint.color.r, style->fill.paint.color.g, style->fill.paint.color.b); + text->opacity(style->fill.opacity); + } +} + + +static unique_ptr<Text> _textBuildHelper(SvgLoaderData& loaderData, const SvgNode* node, const Box& vBox, const string& svgPath) +{ + auto textNode = &node->node.text; + if (!textNode->text) return nullptr; + auto text = Text::gen(); + + Matrix textTransform = {1, 0, 0, 0, 1, 0, 0, 0, 1}; + if (node->transform) textTransform = *node->transform; + mathTranslateR(&textTransform, node->node.text.x, node->node.text.y - textNode->fontSize); + text->transform(textTransform); + + //TODO: handle def values of font and size as used in a system? + const float ptPerPx = 0.75f; //1 pt = 1/72; 1 in = 96 px; -> 72/96 = 0.75 + auto fontSizePt = textNode->fontSize * ptPerPx; + if (textNode->fontFamily) text->font(textNode->fontFamily, fontSizePt); + text->text(textNode->text); + + _applyTextFill(node->style, text.get(), vBox); + _applyComposition(loaderData, text.get(), node, vBox, svgPath); + + return text; +} + + static unique_ptr<Scene> _sceneBuildHelper(SvgLoaderData& loaderData, const SvgNode* node, const Box& vBox, const string& svgPath, bool mask, int depth, bool* isMaskWhite) { /* Exception handling: Prevent invalid SVG data input. @@ -800,6 +865,9 @@ static unique_ptr<Scene> _sceneBuildHelper(SvgLoaderData& loaderData, const SvgN scene->push(std::move(image)); if (isMaskWhite) *isMaskWhite = false; } + } else if ((*child)->type == SvgNodeType::Text) { + auto text = _textBuildHelper(loaderData, *child, vBox, svgPath); + if (text) scene->push(std::move(text)); } else if ((*child)->type != SvgNodeType::Mask) { auto shape = _shapeBuildHelper(loaderData, *child, vBox, svgPath); if (shape) { diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h index 3d73075a4a..05cbdc7f3a 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h @@ -23,21 +23,10 @@ #ifndef _TVG_SW_COMMON_H_ #define _TVG_SW_COMMON_H_ +#include <algorithm> #include "tvgCommon.h" #include "tvgRender.h" -#include <algorithm> - -#if 0 -#include <sys/time.h> -static double timeStamp() -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return (tv.tv_sec + tv.tv_usec / 1000000.0); -} -#endif - #define SW_CURVE_TYPE_POINT 0 #define SW_CURVE_TYPE_CUBIC 1 #define SW_ANGLE_PI (180L << 16) diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwFill.cpp b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwFill.cpp index be1662daeb..bd0b5ffdcb 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwFill.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwFill.cpp @@ -63,6 +63,66 @@ static void _calculateCoefficients(const SwFill* fill, uint32_t x, uint32_t y, f } +static uint32_t _estimateAAMargin(const Fill* fdata) +{ + constexpr float marginScalingFactor = 800.0f; + if (fdata->identifier() == TVG_CLASS_ID_RADIAL) { + auto radius = P(static_cast<const RadialGradient*>(fdata))->r; + return mathZero(radius) ? 0 : static_cast<uint32_t>(marginScalingFactor / radius); + } + auto grad = P(static_cast<const LinearGradient*>(fdata)); + Point p1 {grad->x1, grad->y1}; + Point p2 {grad->x2, grad->y2}; + auto length = mathLength(&p1, &p2); + return mathZero(length) ? 0 : static_cast<uint32_t>(marginScalingFactor / length); +} + + +static void _adjustAAMargin(uint32_t& iMargin, uint32_t index) +{ + constexpr float threshold = 0.1f; + constexpr uint32_t iMarginMax = 40; + + auto iThreshold = static_cast<uint32_t>(index * threshold); + if (iMargin > iThreshold) iMargin = iThreshold; + if (iMargin > iMarginMax) iMargin = iMarginMax; +} + + +static inline uint32_t _alphaUnblend(uint32_t c) +{ + auto a = (c >> 24); + if (a == 255 || a == 0) return c; + auto invA = 255.0f / static_cast<float>(a); + auto c0 = static_cast<uint8_t>(static_cast<float>((c >> 16) & 0xFF) * invA); + auto c1 = static_cast<uint8_t>(static_cast<float>((c >> 8) & 0xFF) * invA); + auto c2 = static_cast<uint8_t>(static_cast<float>(c & 0xFF) * invA); + + return (a << 24) | (c0 << 16) | (c1 << 8) | c2; +} + + +static void _applyAA(const SwFill* fill, uint32_t begin, uint32_t end) +{ + if (begin == 0 || end == 0) return; + + auto i = GRADIENT_STOP_SIZE - end; + auto rgbaEnd = _alphaUnblend(fill->ctable[i]); + auto rgbaBegin = _alphaUnblend(fill->ctable[begin]); + + auto dt = 1.0f / (begin + end + 1.0f); + float t = dt; + while (i != begin) { + auto dist = 255 - static_cast<int32_t>(255 * t); + auto color = INTERPOLATE(rgbaEnd, rgbaBegin, dist); + fill->ctable[i++] = ALPHA_BLEND((color | 0xff000000), (color >> 24)); + + if (i == GRADIENT_STOP_SIZE) i = 0; + t += dt; + } +} + + static bool _updateColorTable(SwFill* fill, const Fill* fdata, const SwSurface* surface, uint8_t opacity) { if (!fill->ctable) { @@ -88,6 +148,11 @@ static bool _updateColorTable(SwFill* fill, const Fill* fdata, const SwSurface* auto pos = 1.5f * inc; uint32_t i = 0; + //If repeat is true, anti-aliasing must be applied between the last and the first colors. + auto repeat = fill->spread == FillSpread::Repeat; + uint32_t iAABegin = repeat ? _estimateAAMargin(fdata) : 0; + uint32_t iAAEnd = 0; + fill->ctable[i++] = ALPHA_BLEND(rgba | 0xff000000, a); while (pos <= pColors->offset) { @@ -97,6 +162,11 @@ static bool _updateColorTable(SwFill* fill, const Fill* fdata, const SwSurface* } for (uint32_t j = 0; j < cnt - 1; ++j) { + if (repeat && j == cnt - 2 && iAAEnd == 0) { + iAAEnd = iAABegin; + _adjustAAMargin(iAAEnd, GRADIENT_STOP_SIZE - i); + } + auto curr = colors + j; auto next = curr + 1; auto delta = 1.0f / (next->offset - curr->offset); @@ -118,14 +188,18 @@ static bool _updateColorTable(SwFill* fill, const Fill* fdata, const SwSurface* } rgba = rgba2; a = a2; + + if (repeat && j == 0) _adjustAAMargin(iAABegin, i - 1); } rgba = ALPHA_BLEND((rgba | 0xff000000), a); for (; i < GRADIENT_STOP_SIZE; ++i) fill->ctable[i] = rgba; - //Make sure the last color stop is represented at the end of the table - fill->ctable[GRADIENT_STOP_SIZE - 1] = rgba; + //For repeat fill spread apply anti-aliasing between the last and first colors, + //othewise make sure the last color stop is represented at the end of the table. + if (repeat) _applyAA(fill, iAABegin, iAAEnd); + else fill->ctable[GRADIENT_STOP_SIZE - 1] = rgba; return true; } diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRaster.cpp b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRaster.cpp index 04f36c727f..b3507acdc3 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRaster.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRaster.cpp @@ -1087,6 +1087,7 @@ static bool _rasterDirectScaledMaskedImage(SwSurface* surface, const SwImage* im static bool _rasterScaledMaskedImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, const SwBBox& region, uint8_t opacity) { + TVGERR("SW_ENGINE", "Not supported ScaledMaskedImage!"); #if 0 //Enable it when GRAYSCALE image is supported TVGLOG("SW_ENGINE", "Scaled Masked(%d) Image [Region: %lu %lu %lu %lu]", (int)surface->compositor->method, region.min.x, region.min.y, region.max.x - region.min.x, region.max.y - region.min.y); @@ -1100,6 +1101,11 @@ static bool _rasterScaledMaskedImage(SwSurface* surface, const SwImage* image, c static bool _rasterScaledMattedImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, const SwBBox& region, uint8_t opacity) { + if (surface->channelSize == sizeof(uint8_t)) { + TVGERR("SW_ENGINE", "Not supported grayscale scaled matted image!"); + return false; + } + auto dbuffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); auto csize = surface->compositor->image.channelSize; auto cbuffer = surface->compositor->image.buf8 + (region.min.y * surface->compositor->image.stride + region.min.x) * csize; @@ -1130,6 +1136,11 @@ static bool _rasterScaledMattedImage(SwSurface* surface, const SwImage* image, c static bool _rasterScaledBlendingImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, const SwBBox& region, uint8_t opacity) { + if (surface->channelSize == sizeof(uint8_t)) { + TVGERR("SW_ENGINE", "Not supported grayscale scaled blending image!"); + return false; + } + auto dbuffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; auto sampleSize = _sampleSize(image->scale); @@ -1152,19 +1163,33 @@ static bool _rasterScaledBlendingImage(SwSurface* surface, const SwImage* image, static bool _rasterScaledImage(SwSurface* surface, const SwImage* image, const Matrix* itransform, const SwBBox& region, uint8_t opacity) { - auto dbuffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); auto scaleMethod = image->scale < DOWN_SCALE_TOLERANCE ? _interpDownScaler : _interpUpScaler; auto sampleSize = _sampleSize(image->scale); int32_t miny = 0, maxy = 0; - for (auto y = region.min.y; y < region.max.y; ++y, dbuffer += surface->stride) { - SCALED_IMAGE_RANGE_Y(y) - auto dst = dbuffer; - for (auto x = region.min.x; x < region.max.x; ++x, ++dst) { - SCALED_IMAGE_RANGE_X - auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sampleSize); - if (opacity < 255) src = ALPHA_BLEND(src, opacity); - *dst = src + ALPHA_BLEND(*dst, IA(src)); + //32bits channels + if (surface->channelSize == sizeof(uint32_t)) { + auto buffer = surface->buf32 + (region.min.y * surface->stride + region.min.x); + for (auto y = region.min.y; y < region.max.y; ++y, buffer += surface->stride) { + SCALED_IMAGE_RANGE_Y(y) + auto dst = buffer; + for (auto x = region.min.x; x < region.max.x; ++x, ++dst) { + SCALED_IMAGE_RANGE_X + auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sampleSize); + if (opacity < 255) src = ALPHA_BLEND(src, opacity); + *dst = src + ALPHA_BLEND(*dst, IA(src)); + } + } + } else if (surface->channelSize == sizeof(uint8_t)) { + auto buffer = surface->buf8 + (region.min.y * surface->stride + region.min.x); + for (auto y = region.min.y; y < region.max.y; ++y, buffer += surface->stride) { + SCALED_IMAGE_RANGE_Y(y) + auto dst = buffer; + for (auto x = region.min.x; x < region.max.x; ++x, ++dst) { + SCALED_IMAGE_RANGE_X + auto src = scaleMethod(image->buf32, image->stride, image->w, image->h, sx, sy, miny, maxy, sampleSize); + *dst = MULTIPLY(A(src), opacity); + } } } return true; @@ -1173,11 +1198,6 @@ static bool _rasterScaledImage(SwSurface* surface, const SwImage* image, const M static bool _scaledImage(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint8_t opacity) { - if (surface->channelSize == sizeof(uint8_t)) { - TVGERR("SW_ENGINE", "Not supported grayscale Textmap polygon mesh!"); - return false; - } - Matrix itransform; if (transform) { diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterAvx.h b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterAvx.h index cbaec28fa3..a072a88819 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterAvx.h +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterAvx.h @@ -101,47 +101,57 @@ static void avxRasterPixel32(uint32_t *dst, uint32_t val, uint32_t offset, int32 static bool avxRasterTranslucentRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { - if (surface->channelSize != sizeof(uint32_t)) { - TVGERR("SW_ENGINE", "Unsupported Channel Size = %d", surface->channelSize); - return false; - } - - auto color = surface->join(r, g, b, a); - auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; auto h = static_cast<uint32_t>(region.max.y - region.min.y); auto w = static_cast<uint32_t>(region.max.x - region.min.x); - uint32_t ialpha = 255 - a; + //32bits channels + if (surface->channelSize == sizeof(uint32_t)) { + auto color = surface->join(r, g, b, a); + auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; - auto avxColor = _mm_set1_epi32(color); - auto avxIalpha = _mm_set1_epi8(ialpha); + uint32_t ialpha = 255 - a; - for (uint32_t y = 0; y < h; ++y) { - auto dst = &buffer[y * surface->stride]; + auto avxColor = _mm_set1_epi32(color); + auto avxIalpha = _mm_set1_epi8(ialpha); - //1. fill the not aligned memory (for 128-bit registers a 16-bytes alignment is required) - auto notAligned = ((uintptr_t)dst & 0xf) / 4; - if (notAligned) { - notAligned = (N_32BITS_IN_128REG - notAligned > w ? w : N_32BITS_IN_128REG - notAligned); - for (uint32_t x = 0; x < notAligned; ++x, ++dst) { - *dst = color + ALPHA_BLEND(*dst, ialpha); + for (uint32_t y = 0; y < h; ++y) { + auto dst = &buffer[y * surface->stride]; + + //1. fill the not aligned memory (for 128-bit registers a 16-bytes alignment is required) + auto notAligned = ((uintptr_t)dst & 0xf) / 4; + if (notAligned) { + notAligned = (N_32BITS_IN_128REG - notAligned > w ? w : N_32BITS_IN_128REG - notAligned); + for (uint32_t x = 0; x < notAligned; ++x, ++dst) { + *dst = color + ALPHA_BLEND(*dst, ialpha); + } } - } - //2. fill the aligned memory - N_32BITS_IN_128REG pixels processed at once - uint32_t iterations = (w - notAligned) / N_32BITS_IN_128REG; - uint32_t avxFilled = iterations * N_32BITS_IN_128REG; - auto avxDst = (__m128i*)dst; - for (uint32_t x = 0; x < iterations; ++x, ++avxDst) { - *avxDst = _mm_add_epi32(avxColor, ALPHA_BLEND(*avxDst, avxIalpha)); - } + //2. fill the aligned memory - N_32BITS_IN_128REG pixels processed at once + uint32_t iterations = (w - notAligned) / N_32BITS_IN_128REG; + uint32_t avxFilled = iterations * N_32BITS_IN_128REG; + auto avxDst = (__m128i*)dst; + for (uint32_t x = 0; x < iterations; ++x, ++avxDst) { + *avxDst = _mm_add_epi32(avxColor, ALPHA_BLEND(*avxDst, avxIalpha)); + } - //3. fill the remaining pixels - int32_t leftovers = w - notAligned - avxFilled; - dst += avxFilled; - while (leftovers--) { - *dst = color + ALPHA_BLEND(*dst, ialpha); - dst++; + //3. fill the remaining pixels + int32_t leftovers = w - notAligned - avxFilled; + dst += avxFilled; + while (leftovers--) { + *dst = color + ALPHA_BLEND(*dst, ialpha); + dst++; + } + } + //8bit grayscale + } else if (surface->channelSize == sizeof(uint8_t)) { + TVGLOG("SW_ENGINE", "Require AVX Optimization, Channel Size = %d", surface->channelSize); + auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; + auto ialpha = ~a; + for (uint32_t y = 0; y < h; ++y) { + auto dst = &buffer[y * surface->stride]; + for (uint32_t x = 0; x < w; ++x, ++dst) { + *dst = a + MULTIPLY(*dst, ialpha); + } } } return true; @@ -150,56 +160,68 @@ static bool avxRasterTranslucentRect(SwSurface* surface, const SwBBox& region, u static bool avxRasterTranslucentRle(SwSurface* surface, const SwRleData* rle, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { - if (surface->channelSize != sizeof(uint32_t)) { - TVGERR("SW_ENGINE", "Unsupported Channel Size = %d", surface->channelSize); - return false; - } - - auto color = surface->join(r, g, b, a); auto span = rle->spans; - uint32_t src; - for (uint32_t i = 0; i < rle->size; ++i) { - auto dst = &surface->buf32[span->y * surface->stride + span->x]; + //32bit channels + if (surface->channelSize == sizeof(uint32_t)) { + auto color = surface->join(r, g, b, a); + uint32_t src; - if (span->coverage < 255) src = ALPHA_BLEND(color, span->coverage); - else src = color; + for (uint32_t i = 0; i < rle->size; ++i) { + auto dst = &surface->buf32[span->y * surface->stride + span->x]; - auto ialpha = IA(src); + if (span->coverage < 255) src = ALPHA_BLEND(color, span->coverage); + else src = color; - //1. fill the not aligned memory (for 128-bit registers a 16-bytes alignment is required) - auto notAligned = ((uintptr_t)dst & 0xf) / 4; - if (notAligned) { - notAligned = (N_32BITS_IN_128REG - notAligned > span->len ? span->len : N_32BITS_IN_128REG - notAligned); - for (uint32_t x = 0; x < notAligned; ++x, ++dst) { - *dst = src + ALPHA_BLEND(*dst, ialpha); + auto ialpha = IA(src); + + //1. fill the not aligned memory (for 128-bit registers a 16-bytes alignment is required) + auto notAligned = ((uintptr_t)dst & 0xf) / 4; + if (notAligned) { + notAligned = (N_32BITS_IN_128REG - notAligned > span->len ? span->len : N_32BITS_IN_128REG - notAligned); + for (uint32_t x = 0; x < notAligned; ++x, ++dst) { + *dst = src + ALPHA_BLEND(*dst, ialpha); + } } - } - //2. fill the aligned memory using avx - N_32BITS_IN_128REG pixels processed at once - //In order to avoid unneccessary avx variables declarations a check is made whether there are any iterations at all - uint32_t iterations = (span->len - notAligned) / N_32BITS_IN_128REG; - uint32_t avxFilled = 0; - if (iterations > 0) { - auto avxSrc = _mm_set1_epi32(src); - auto avxIalpha = _mm_set1_epi8(ialpha); + //2. fill the aligned memory using avx - N_32BITS_IN_128REG pixels processed at once + //In order to avoid unneccessary avx variables declarations a check is made whether there are any iterations at all + uint32_t iterations = (span->len - notAligned) / N_32BITS_IN_128REG; + uint32_t avxFilled = 0; + if (iterations > 0) { + auto avxSrc = _mm_set1_epi32(src); + auto avxIalpha = _mm_set1_epi8(ialpha); + + avxFilled = iterations * N_32BITS_IN_128REG; + auto avxDst = (__m128i*)dst; + for (uint32_t x = 0; x < iterations; ++x, ++avxDst) { + *avxDst = _mm_add_epi32(avxSrc, ALPHA_BLEND(*avxDst, avxIalpha)); + } + } - avxFilled = iterations * N_32BITS_IN_128REG; - auto avxDst = (__m128i*)dst; - for (uint32_t x = 0; x < iterations; ++x, ++avxDst) { - *avxDst = _mm_add_epi32(avxSrc, ALPHA_BLEND(*avxDst, avxIalpha)); + //3. fill the remaining pixels + int32_t leftovers = span->len - notAligned - avxFilled; + dst += avxFilled; + while (leftovers--) { + *dst = src + ALPHA_BLEND(*dst, ialpha); + dst++; } - } - //3. fill the remaining pixels - int32_t leftovers = span->len - notAligned - avxFilled; - dst += avxFilled; - while (leftovers--) { - *dst = src + ALPHA_BLEND(*dst, ialpha); - dst++; + ++span; + } + //8bit grayscale + } else if (surface->channelSize == sizeof(uint8_t)) { + TVGLOG("SW_ENGINE", "Require AVX Optimization, Channel Size = %d", surface->channelSize); + uint8_t src; + for (uint32_t i = 0; i < rle->size; ++i, ++span) { + auto dst = &surface->buf8[span->y * surface->stride + span->x]; + if (span->coverage < 255) src = MULTIPLY(span->coverage, a); + else src = a; + auto ialpha = ~a; + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + *dst = src + MULTIPLY(*dst, ialpha); + } } - - ++span; } return true; } diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterNeon.h b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterNeon.h index 1ea6cd96cf..91cf7743c1 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterNeon.h +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterNeon.h @@ -91,44 +91,56 @@ static void neonRasterPixel32(uint32_t *dst, uint32_t val, uint32_t offset, int3 static bool neonRasterTranslucentRle(SwSurface* surface, const SwRleData* rle, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { - if (surface->channelSize != sizeof(uint32_t)) { - TVGERR("SW_ENGINE", "Unsupported Channel Size = %d", surface->channelSize); - return false; - } - - auto color = surface->join(r, g, b, a); auto span = rle->spans; - uint32_t src; - uint8x8_t *vDst = nullptr; - uint16_t align; - - for (uint32_t i = 0; i < rle->size; ++i) { - if (span->coverage < 255) src = ALPHA_BLEND(color, span->coverage); - else src = color; - - auto dst = &surface->buf32[span->y * surface->stride + span->x]; - auto ialpha = IA(src); - - if ((((uintptr_t) dst) & 0x7) != 0) { - //fill not aligned byte - *dst = src + ALPHA_BLEND(*dst, ialpha); - vDst = (uint8x8_t*)(dst + 1); - align = 1; - } else { - vDst = (uint8x8_t*) dst; - align = 0; - } - uint8x8_t vSrc = (uint8x8_t) vdup_n_u32(src); - uint8x8_t vIalpha = vdup_n_u8((uint8_t) ialpha); + //32bit channels + if (surface->channelSize == sizeof(uint32_t)) { + auto color = surface->join(r, g, b, a); + uint32_t src; + uint8x8_t *vDst = nullptr; + uint16_t align; + + for (uint32_t i = 0; i < rle->size; ++i) { + if (span->coverage < 255) src = ALPHA_BLEND(color, span->coverage); + else src = color; - for (uint32_t x = 0; x < (span->len - align) / 2; ++x) - vDst[x] = vadd_u8(vSrc, ALPHA_BLEND(vDst[x], vIalpha)); + auto dst = &surface->buf32[span->y * surface->stride + span->x]; + auto ialpha = IA(src); - auto leftovers = (span->len - align) % 2; - if (leftovers > 0) dst[span->len - 1] = src + ALPHA_BLEND(dst[span->len - 1], ialpha); + if ((((uintptr_t) dst) & 0x7) != 0) { + //fill not aligned byte + *dst = src + ALPHA_BLEND(*dst, ialpha); + vDst = (uint8x8_t*)(dst + 1); + align = 1; + } else { + vDst = (uint8x8_t*) dst; + align = 0; + } - ++span; + uint8x8_t vSrc = (uint8x8_t) vdup_n_u32(src); + uint8x8_t vIalpha = vdup_n_u8((uint8_t) ialpha); + + for (uint32_t x = 0; x < (span->len - align) / 2; ++x) + vDst[x] = vadd_u8(vSrc, ALPHA_BLEND(vDst[x], vIalpha)); + + auto leftovers = (span->len - align) % 2; + if (leftovers > 0) dst[span->len - 1] = src + ALPHA_BLEND(dst[span->len - 1], ialpha); + + ++span; + } + //8bit grayscale + } else if (surface->channelSize == sizeof(uint8_t)) { + TVGLOG("SW_ENGINE", "Require Neon Optimization, Channel Size = %d", surface->channelSize); + uint8_t src; + for (uint32_t i = 0; i < rle->size; ++i, ++span) { + auto dst = &surface->buf8[span->y * surface->stride + span->x]; + if (span->coverage < 255) src = MULTIPLY(span->coverage, a); + else src = a; + auto ialpha = ~a; + for (uint32_t x = 0; x < span->len; ++x, ++dst) { + *dst = src + MULTIPLY(*dst, ialpha); + } + } } return true; } @@ -136,41 +148,51 @@ static bool neonRasterTranslucentRle(SwSurface* surface, const SwRleData* rle, u static bool neonRasterTranslucentRect(SwSurface* surface, const SwBBox& region, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { - if (surface->channelSize != sizeof(uint32_t)) { - TVGERR("SW_ENGINE", "Unsupported Channel Size = %d", surface->channelSize); - return false; - } - - auto color = surface->join(r, g, b, a); - auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; auto h = static_cast<uint32_t>(region.max.y - region.min.y); auto w = static_cast<uint32_t>(region.max.x - region.min.x); - auto ialpha = 255 - a; - auto vColor = vdup_n_u32(color); - auto vIalpha = vdup_n_u8((uint8_t) ialpha); + //32bits channels + if (surface->channelSize == sizeof(uint32_t)) { + auto color = surface->join(r, g, b, a); + auto buffer = surface->buf32 + (region.min.y * surface->stride) + region.min.x; + auto ialpha = 255 - a; - uint8x8_t* vDst = nullptr; - uint32_t align; + auto vColor = vdup_n_u32(color); + auto vIalpha = vdup_n_u8((uint8_t) ialpha); - for (uint32_t y = 0; y < h; ++y) { - auto dst = &buffer[y * surface->stride]; + uint8x8_t* vDst = nullptr; + uint32_t align; - if ((((uintptr_t) dst) & 0x7) != 0) { - //fill not aligned byte - *dst = color + ALPHA_BLEND(*dst, ialpha); - vDst = (uint8x8_t*) (dst + 1); - align = 1; - } else { - vDst = (uint8x8_t*) dst; - align = 0; - } + for (uint32_t y = 0; y < h; ++y) { + auto dst = &buffer[y * surface->stride]; - for (uint32_t x = 0; x < (w - align) / 2; ++x) - vDst[x] = vadd_u8((uint8x8_t)vColor, ALPHA_BLEND(vDst[x], vIalpha)); + if ((((uintptr_t) dst) & 0x7) != 0) { + //fill not aligned byte + *dst = color + ALPHA_BLEND(*dst, ialpha); + vDst = (uint8x8_t*) (dst + 1); + align = 1; + } else { + vDst = (uint8x8_t*) dst; + align = 0; + } - auto leftovers = (w - align) % 2; - if (leftovers > 0) dst[w - 1] = color + ALPHA_BLEND(dst[w - 1], ialpha); + for (uint32_t x = 0; x < (w - align) / 2; ++x) + vDst[x] = vadd_u8((uint8x8_t)vColor, ALPHA_BLEND(vDst[x], vIalpha)); + + auto leftovers = (w - align) % 2; + if (leftovers > 0) dst[w - 1] = color + ALPHA_BLEND(dst[w - 1], ialpha); + } + //8bit grayscale + } else if (surface->channelSize == sizeof(uint8_t)) { + TVGLOG("SW_ENGINE", "Require Neon Optimization, Channel Size = %d", surface->channelSize); + auto buffer = surface->buf8 + (region.min.y * surface->stride) + region.min.x; + auto ialpha = ~a; + for (uint32_t y = 0; y < h; ++y) { + auto dst = &buffer[y * surface->stride]; + for (uint32_t x = 0; x < w; ++x, ++dst) { + *dst = a + MULTIPLY(*dst, ialpha); + } + } } return true; } diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterTexmap.h b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterTexmap.h index 8ec2bc0c47..cfce7785c7 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterTexmap.h +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRasterTexmap.h @@ -34,14 +34,6 @@ struct AASpans int32_t yEnd; }; -static inline void _swap(float& a, float& b, float& tmp) -{ - tmp = a; - a = b; - b = tmp; -} - - //Careful! Shared resource, No support threading static float dudx, dvdx; static float dxdya, dxdyb, dudya, dvdya; @@ -85,7 +77,7 @@ static bool _rasterMaskedPolygonImageSegment(SwSurface* surface, const SwImage* int32_t sh = image->h; int32_t x1, x2, x, y, ar, ab, iru, irv, px, ay; int32_t vv = 0, uu = 0; - int32_t minx = INT32_MAX, maxx = INT32_MIN; + int32_t minx = INT32_MAX, maxx = 0; float dx, u, v, iptr; SwSpan* span = nullptr; //used only when rle based. @@ -113,7 +105,7 @@ static bool _rasterMaskedPolygonImageSegment(SwSurface* surface, const SwImage* if (!region) { minx = INT32_MAX; - maxx = INT32_MIN; + maxx = 0; //one single row, could be consisted of multiple spans. while (span->y == y && spanIdx < image->rle->size) { if (minx > span->x) minx = span->x; @@ -278,7 +270,7 @@ static void _rasterBlendingPolygonImageSegment(SwSurface* surface, const SwImage int32_t dw = surface->stride; int32_t x1, x2, x, y, ar, ab, iru, irv, px, ay; int32_t vv = 0, uu = 0; - int32_t minx = INT32_MAX, maxx = INT32_MIN; + int32_t minx = INT32_MAX, maxx = 0; float dx, u, v, iptr; uint32_t* buf; SwSpan* span = nullptr; //used only when rle based. @@ -307,7 +299,7 @@ static void _rasterBlendingPolygonImageSegment(SwSurface* surface, const SwImage if (!region) { minx = INT32_MAX; - maxx = INT32_MIN; + maxx = 0; //one single row, could be consisted of multiple spans. while (span->y == y && spanIdx < image->rle->size) { if (minx > span->x) minx = span->x; @@ -455,7 +447,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, int32_t dw = surface->stride; int32_t x1, x2, x, y, ar, ab, iru, irv, px, ay; int32_t vv = 0, uu = 0; - int32_t minx = INT32_MAX, maxx = INT32_MIN; + int32_t minx = INT32_MAX, maxx = 0; float dx, u, v, iptr; uint32_t* buf; SwSpan* span = nullptr; //used only when rle based. @@ -489,7 +481,7 @@ static void _rasterPolygonImageSegment(SwSurface* surface, const SwImage* image, if (!region) { minx = INT32_MAX; - maxx = INT32_MIN; + maxx = 0; //one single row, could be consisted of multiple spans. while (span->y == y && spanIdx < image->rle->size) { if (minx > span->x) minx = span->x; @@ -650,28 +642,27 @@ static void _rasterPolygonImage(SwSurface* surface, const SwImage* image, const float off_y; float dxdy[3] = {0.0f, 0.0f, 0.0f}; - float tmp; auto upper = false; //Sort the vertices in ascending Y order if (y[0] > y[1]) { - _swap(x[0], x[1], tmp); - _swap(y[0], y[1], tmp); - _swap(u[0], u[1], tmp); - _swap(v[0], v[1], tmp); + std::swap(x[0], x[1]); + std::swap(y[0], y[1]); + std::swap(u[0], u[1]); + std::swap(v[0], v[1]); } if (y[0] > y[2]) { - _swap(x[0], x[2], tmp); - _swap(y[0], y[2], tmp); - _swap(u[0], u[2], tmp); - _swap(v[0], v[2], tmp); + std::swap(x[0], x[2]); + std::swap(y[0], y[2]); + std::swap(u[0], u[2]); + std::swap(v[0], v[2]); } if (y[1] > y[2]) { - _swap(x[1], x[2], tmp); - _swap(y[1], y[2], tmp); - _swap(u[1], u[2], tmp); - _swap(v[1], v[2], tmp); + std::swap(x[1], x[2]); + std::swap(y[1], y[2]); + std::swap(u[1], u[2]); + std::swap(v[1], v[2]); } //Y indexes @@ -833,11 +824,13 @@ static AASpans* _AASpans(float ymin, float ymax, const SwImage* image, const SwB //Initialize X range auto height = yEnd - yStart; - aaSpans->lines = static_cast<AALine*>(calloc(height, sizeof(AALine))); + aaSpans->lines = static_cast<AALine*>(malloc(height * sizeof(AALine))); for (int32_t i = 0; i < height; i++) { aaSpans->lines[i].x[0] = INT32_MAX; - aaSpans->lines[i].x[1] = INT32_MIN; + aaSpans->lines[i].x[1] = 0; + aaSpans->lines[i].length[0] = 0; + aaSpans->lines[i].length[1] = 0; } return aaSpans; } @@ -885,7 +878,7 @@ static void _calcHorizCoverage(AALine *lines, int32_t eidx, int32_t y, int32_t x /* * This Anti-Aliasing mechanism is originated from Hermet Park's idea. * To understand this AA logic, you can refer this page: - * www.hermet.pe.kr/122 (hermetpark@gmail.com) + * https://uigraphics.tistory.com/1 */ static void _calcAAEdge(AASpans *aaSpans, int32_t eidx) { @@ -931,6 +924,9 @@ static void _calcAAEdge(AASpans *aaSpans, int32_t eidx) //Calculates AA Edges for (y++; y < yEnd; y++) { + + if (lines[y].x[0] == INT32_MAX) continue; + //Ready tx if (eidx == 0) { tx[0] = pEdge.x; diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp index f689179928..350f333405 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp @@ -20,6 +20,7 @@ * SOFTWARE. */ +#include <algorithm> #include "tvgMath.h" #include "tvgSwCommon.h" #include "tvgTaskScheduler.h" @@ -86,7 +87,7 @@ struct SwShapeTask : SwTask Additionally, the stroke style should not be dashed. */ bool antialiasing(float strokeWidth) { - return strokeWidth < 2.0f || rshape->stroke->dashCnt > 0 || rshape->stroke->strokeFirst; + return strokeWidth < 2.0f || rshape->stroke->dashCnt > 0 || rshape->stroke->strokeFirst || rshape->strokeTrim() || rshape->stroke->color[3] < 255;; } float validStrokeWidth() @@ -147,7 +148,7 @@ struct SwShapeTask : SwTask } } //Fill - if (flags & (RenderUpdateFlag::Gradient | RenderUpdateFlag::Transform | RenderUpdateFlag::Color)) { + if (flags & (RenderUpdateFlag::Path |RenderUpdateFlag::Gradient | RenderUpdateFlag::Transform | RenderUpdateFlag::Color)) { if (visibleFill || clipper) { if (!shapeGenRle(&shape, rshape, antialiasing(strokeWidth))) goto err; } @@ -160,7 +161,7 @@ struct SwShapeTask : SwTask } } //Stroke - if (flags & (RenderUpdateFlag::Stroke | RenderUpdateFlag::Transform)) { + if (flags & (RenderUpdateFlag::Path | RenderUpdateFlag::Stroke | RenderUpdateFlag::Transform)) { if (strokeWidth > 0.0f) { shapeResetStroke(&shape, rshape, transform); if (!shapeGenStrokeRle(&shape, rshape, transform, clipRegion, bbox, mpool, tid)) goto err; @@ -718,9 +719,6 @@ void* SwRenderer::prepareCommon(SwTask* task, const RenderTransform* transform, if (!surface) return task; if (flags == RenderUpdateFlag::None) return task; - //Finish previous task if it has duplicated request. - task->done(); - //TODO: Failed threading them. It would be better if it's possible. //See: https://github.com/thorvg/thorvg/issues/1409 //Guarantee composition targets get ready. @@ -769,8 +767,11 @@ RenderData SwRenderer::prepare(Surface* surface, const RenderMesh* mesh, RenderD //prepare task auto task = static_cast<SwImageTask*>(data); if (!task) task = new SwImageTask; + else task->done(); + task->source = surface; task->mesh = mesh; + return prepareCommon(task, transform, clips, opacity, flags); } @@ -780,6 +781,8 @@ RenderData SwRenderer::prepare(const Array<RenderData>& scene, RenderData data, //prepare task auto task = static_cast<SwSceneTask*>(data); if (!task) task = new SwSceneTask; + else task->done(); + task->scene = scene; //TODO: Failed threading them. It would be better if it's possible. @@ -788,6 +791,7 @@ RenderData SwRenderer::prepare(const Array<RenderData>& scene, RenderData data, for (auto task = scene.begin(); task < scene.end(); ++task) { static_cast<SwTask*>(*task)->done(); } + return prepareCommon(task, transform, clips, opacity, flags); } @@ -796,10 +800,10 @@ RenderData SwRenderer::prepare(const RenderShape& rshape, RenderData data, const { //prepare task auto task = static_cast<SwShapeTask*>(data); - if (!task) { - task = new SwShapeTask; - task->rshape = &rshape; - } + if (!task) task = new SwShapeTask; + else task->done(); + + task->rshape = &rshape; task->clipper = clipper; return prepareCommon(task, transform, clips, opacity, flags); diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwShape.cpp b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwShape.cpp index d8dd40d45b..4f069ece97 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwShape.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwShape.cpp @@ -420,6 +420,7 @@ static bool _axisAlignedRect(const SwOutline* outline) { //Fast Track: axis-aligned rectangle? if (outline->pts.count != 5) return false; + if (outline->types[2] == SW_CURVE_TYPE_CUBIC) return false; auto pt1 = outline->pts.data + 0; auto pt2 = outline->pts.data + 1; diff --git a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwStroke.cpp b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwStroke.cpp index 9ec4bd78a5..18f5f3eca8 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwStroke.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwStroke.cpp @@ -238,7 +238,7 @@ static void _outside(SwStroke& stroke, int32_t side, SwFixed lineLength) } else { //this is a mitered (pointed) or beveled (truncated) corner auto rotate = SIDE_TO_ROTATE(side); - auto bevel = (stroke.join == StrokeJoin::Bevel) ? true : false; + auto bevel = stroke.join == StrokeJoin::Bevel; SwFixed phi = 0; SwFixed thcos = 0; @@ -816,7 +816,7 @@ void strokeReset(SwStroke* stroke, const RenderShape* rshape, const Matrix* tran stroke->width = HALF_STROKE(rshape->strokeWidth()); stroke->cap = rshape->strokeCap(); - stroke->miterlimit = static_cast<SwFixed>(rshape->strokeMiterlimit()) << 16; + stroke->miterlimit = static_cast<SwFixed>(rshape->strokeMiterlimit() * 65536.0f); //Save line join: it can be temporarily changed when stroking curves... stroke->joinSaved = stroke->join = rshape->strokeJoin(); diff --git a/thirdparty/thorvg/src/renderer/tvgCanvas.h b/thirdparty/thorvg/src/renderer/tvgCanvas.h index a4b866eacb..81fd1b7d6f 100644 --- a/thirdparty/thorvg/src/renderer/tvgCanvas.h +++ b/thirdparty/thorvg/src/renderer/tvgCanvas.h @@ -26,17 +26,15 @@ #include "tvgPaint.h" +enum Status : uint8_t {Synced = 0, Updating, Drawing, Damanged}; + struct Canvas::Impl { - enum Status : uint8_t {Synced = 0, Updating, Drawing}; - list<Paint*> paints; RenderMethod* renderer; RenderRegion vport = {0, 0, INT32_MAX, INT32_MAX}; Status status = Status::Synced; - bool refresh = false; //if all paints should be updated by force. - Impl(RenderMethod* pRenderer) : renderer(pRenderer) { renderer->ref(); @@ -87,18 +85,13 @@ struct Canvas::Impl return Result::Success; } - void needRefresh() - { - refresh = true; - } - Result update(Paint* paint, bool force) { if (paints.empty() || status == Status::Drawing) return Result::InsufficientCondition; Array<RenderData> clips; auto flag = RenderUpdateFlag::None; - if (refresh || force) flag = RenderUpdateFlag::All; + if (status == Status::Damanged || force) flag = RenderUpdateFlag::All; if (paint) { paint->pImpl->update(renderer, nullptr, clips, 255, flag); @@ -106,7 +99,6 @@ struct Canvas::Impl for (auto paint : paints) { paint->pImpl->update(renderer, nullptr, clips, 255, flag); } - refresh = false; } status = Status::Updating; return Result::Success; @@ -114,6 +106,7 @@ struct Canvas::Impl Result draw() { + if (status == Status::Damanged) update(nullptr, false); if (status == Status::Drawing || paints.empty() || !renderer->preRender()) return Result::InsufficientCondition; bool rendered = false; @@ -129,19 +122,20 @@ struct Canvas::Impl Result sync() { - if (status == Status::Synced) return Result::InsufficientCondition; + if (status == Status::Synced || status == Status::Damanged) return Result::InsufficientCondition; if (renderer->sync()) { status = Status::Synced; return Result::Success; } - return Result::InsufficientCondition; + return Result::Unknown; } Result viewport(int32_t x, int32_t y, int32_t w, int32_t h) { - if (status != Status::Synced) return Result::InsufficientCondition; + if (status != Status::Damanged && status != Status::Synced) return Result::InsufficientCondition; + RenderRegion val = {x, y, w, h}; //intersect if the target buffer is already set. auto surface = renderer->mainSurface(); @@ -151,7 +145,7 @@ struct Canvas::Impl if (vport == val) return Result::Success; renderer->viewport(val); vport = val; - needRefresh(); + status = Status::Damanged; return Result::Success; } }; diff --git a/thirdparty/thorvg/src/renderer/tvgCommon.h b/thirdparty/thorvg/src/renderer/tvgCommon.h index d080ea19cf..15a2cc4ef0 100644 --- a/thirdparty/thorvg/src/renderer/tvgCommon.h +++ b/thirdparty/thorvg/src/renderer/tvgCommon.h @@ -87,4 +87,16 @@ uint16_t THORVG_VERSION_NUMBER(); #define P(A) ((A)->pImpl) //Access to pimpl. #define PP(A) (((Paint*)(A))->pImpl) //Access to pimpl. + +//for debugging +#if 0 +#include <sys/time.h> +static inline double THORVG_TIMESTAMP() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return (tv.tv_sec + tv.tv_usec / 1000000.0); +} +#endif + #endif //_TVG_COMMON_H_ diff --git a/thirdparty/thorvg/src/renderer/tvgGlCanvas.cpp b/thirdparty/thorvg/src/renderer/tvgGlCanvas.cpp index 211dbb589c..82666b7ae3 100644 --- a/thirdparty/thorvg/src/renderer/tvgGlCanvas.cpp +++ b/thirdparty/thorvg/src/renderer/tvgGlCanvas.cpp @@ -45,15 +45,14 @@ struct GlCanvas::Impl /************************************************************************/ #ifdef THORVG_GL_RASTER_SUPPORT -GlCanvas::GlCanvas() : Canvas(GlRenderer::gen()), pImpl(new Impl) +GlCanvas::GlCanvas() : Canvas(GlRenderer::gen()), pImpl(nullptr) #else -GlCanvas::GlCanvas() : Canvas(nullptr), pImpl(new Impl) +GlCanvas::GlCanvas() : Canvas(nullptr), pImpl(nullptr) #endif { } - GlCanvas::~GlCanvas() { delete(pImpl); @@ -63,6 +62,10 @@ GlCanvas::~GlCanvas() Result GlCanvas::target(int32_t id, uint32_t w, uint32_t h) noexcept { #ifdef THORVG_GL_RASTER_SUPPORT + if (Canvas::pImpl->status != Status::Damanged && Canvas::pImpl->status != Status::Synced) { + return Result::InsufficientCondition; + } + //We know renderer type, avoid dynamic_cast for performance. auto renderer = static_cast<GlRenderer*>(Canvas::pImpl->renderer); if (!renderer) return Result::MemoryCorruption; @@ -72,7 +75,7 @@ Result GlCanvas::target(int32_t id, uint32_t w, uint32_t h) noexcept renderer->viewport(Canvas::pImpl->vport); //Paints must be updated again with this new target. - Canvas::pImpl->needRefresh(); + Canvas::pImpl->status = Status::Damanged; return Result::Success; #endif diff --git a/thirdparty/thorvg/src/renderer/tvgLoader.cpp b/thirdparty/thorvg/src/renderer/tvgLoader.cpp index 4b8d3256a9..6a81ddcdbb 100644 --- a/thirdparty/thorvg/src/renderer/tvgLoader.cpp +++ b/thirdparty/thorvg/src/renderer/tvgLoader.cpp @@ -433,3 +433,27 @@ LoadModule* LoaderMgr::loader(const uint32_t *data, uint32_t w, uint32_t h, bool delete(loader); return nullptr; } + + +//loads fonts from memory - loader is cached (regardless of copy value) in order to access it while setting font +LoadModule* LoaderMgr::loader(const char* name, const char* data, uint32_t size, TVG_UNUSED const string& mimeType, bool copy) +{ +#ifdef THORVG_TTF_LOADER_SUPPORT + //TODO: add check for mimetype ? + if (auto loader = _findFromCache(name)) return loader; + + //function is dedicated for ttf loader (the only supported font loader) + auto loader = new TtfLoader; + if (loader->open(data, size, copy)) { + loader->hashpath = strdup(name); + loader->pathcache = true; + ScopedLock lock(key); + _activeLoaders.back(loader); + return loader; + } + + TVGLOG("LOADER", "The font data \"%s\" could not be loaded.", name); + delete(loader); +#endif + return nullptr; +} diff --git a/thirdparty/thorvg/src/renderer/tvgLoader.h b/thirdparty/thorvg/src/renderer/tvgLoader.h index b15032df27..74c4f43964 100644 --- a/thirdparty/thorvg/src/renderer/tvgLoader.h +++ b/thirdparty/thorvg/src/renderer/tvgLoader.h @@ -32,6 +32,7 @@ struct LoaderMgr static LoadModule* loader(const string& path, bool* invalid); static LoadModule* loader(const char* data, uint32_t size, const string& mimeType, bool copy); static LoadModule* loader(const uint32_t* data, uint32_t w, uint32_t h, bool copy); + static LoadModule* loader(const char* name, const char* data, uint32_t size, const string& mimeType, bool copy); static LoadModule* loader(const char* key); static bool retrieve(const string& path); static bool retrieve(LoadModule* loader); diff --git a/thirdparty/thorvg/src/renderer/tvgPaint.cpp b/thirdparty/thorvg/src/renderer/tvgPaint.cpp index fcb632e2b1..ff0f75dc0f 100644 --- a/thirdparty/thorvg/src/renderer/tvgPaint.cpp +++ b/thirdparty/thorvg/src/renderer/tvgPaint.cpp @@ -41,8 +41,39 @@ } +static Result _clipRect(RenderMethod* renderer, const Point* pts, const RenderTransform* pTransform, RenderTransform* rTransform, RenderRegion& before) +{ + //sorting + Point tmp[4]; + Point min = {FLT_MAX, FLT_MAX}; + Point max = {0.0f, 0.0f}; + + for (int i = 0; i < 4; ++i) { + tmp[i] = pts[i]; + if (rTransform) tmp[i] *= rTransform->m; + if (pTransform) tmp[i] *= pTransform->m; + if (tmp[i].x < min.x) min.x = tmp[i].x; + if (tmp[i].x > max.x) max.x = tmp[i].x; + if (tmp[i].y < min.y) min.y = tmp[i].y; + if (tmp[i].y > max.y) max.y = tmp[i].y; + } -static Result _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform, RenderTransform* rTransform, RenderRegion& viewport) + float region[4] = {float(before.x), float(before.x + before.w), float(before.y), float(before.y + before.h)}; + + //figure out if the clipper is a superset of the current viewport(before) region + if (min.x <= region[0] && max.x >= region[1] && min.y <= region[2] && max.y >= region[3]) { + //viewport region is same, nothing to do. + return Result::Success; + //figure out if the clipper is totally outside of the viewport + } else if (max.x <= region[0] || min.x >= region[1] || max.y <= region[2] || min.y >= region[3]) { + renderer->viewport({0, 0, 0, 0}); + return Result::Success; + } + return Result::InsufficientCondition; +} + + +static Result _compFastTrack(RenderMethod* renderer, Paint* cmpTarget, const RenderTransform* pTransform, RenderTransform* rTransform, RenderRegion& before) { /* Access Shape class by Paint is bad... but it's ok still it's an internal usage. */ auto shape = static_cast<Shape*>(cmpTarget); @@ -58,9 +89,13 @@ static Result _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform if (rTransform) rTransform->update(); - //No rotation and no skewing - if (pTransform && (!mathRightAngle(&pTransform->m) || mathSkewed(&pTransform->m))) return Result::InsufficientCondition; - if (rTransform && (!mathRightAngle(&rTransform->m) || mathSkewed(&rTransform->m))) return Result::InsufficientCondition; + //No rotation and no skewing, still can try out clipping the rect region. + auto tryClip = false; + + if (pTransform && (!mathRightAngle(&pTransform->m) || mathSkewed(&pTransform->m))) tryClip = true; + if (rTransform && (!mathRightAngle(&rTransform->m) || mathSkewed(&rTransform->m))) tryClip = true; + + if (tryClip) return _clipRect(renderer, pts, pTransform, rTransform, before); //Perpendicular Rectangle? auto pt1 = pts + 0; @@ -71,6 +106,8 @@ static Result _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform if ((mathEqual(pt1->x, pt2->x) && mathEqual(pt2->y, pt3->y) && mathEqual(pt3->x, pt4->x) && mathEqual(pt1->y, pt4->y)) || (mathEqual(pt2->x, pt3->x) && mathEqual(pt1->y, pt2->y) && mathEqual(pt1->x, pt4->x) && mathEqual(pt3->y, pt4->y))) { + RenderRegion after; + auto v1 = *pt1; auto v2 = *pt3; @@ -85,25 +122,19 @@ static Result _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform } //sorting - if (v1.x > v2.x) { - auto tmp = v2.x; - v2.x = v1.x; - v1.x = tmp; - } + if (v1.x > v2.x) std::swap(v1.x, v2.x); + if (v1.y > v2.y) std::swap(v1.y, v2.y); - if (v1.y > v2.y) { - auto tmp = v2.y; - v2.y = v1.y; - v1.y = tmp; - } + after.x = static_cast<int32_t>(v1.x); + after.y = static_cast<int32_t>(v1.y); + after.w = static_cast<int32_t>(ceil(v2.x - after.x)); + after.h = static_cast<int32_t>(ceil(v2.y - after.y)); - viewport.x = static_cast<int32_t>(v1.x); - viewport.y = static_cast<int32_t>(v1.y); - viewport.w = static_cast<int32_t>(ceil(v2.x - viewport.x)); - viewport.h = static_cast<int32_t>(ceil(v2.y - viewport.y)); + if (after.w < 0) after.w = 0; + if (after.h < 0) after.h = 0; - if (viewport.w < 0) viewport.w = 0; - if (viewport.h < 0) viewport.h = 0; + after.intersect(before); + renderer->viewport(after); return Result::Success; } @@ -264,11 +295,8 @@ RenderData Paint::Impl::update(RenderMethod* renderer, const RenderTransform* pT } } if (tryFastTrack) { - RenderRegion viewport2; - if ((compFastTrack = _compFastTrack(target, pTransform, target->pImpl->rTransform, viewport2)) == Result::Success) { - viewport = renderer->viewport(); - viewport2.intersect(viewport); - renderer->viewport(viewport2); + viewport = renderer->viewport(); + if ((compFastTrack = _compFastTrack(renderer, target, pTransform, target->pImpl->rTransform, viewport)) == Result::Success) { target->pImpl->ctxFlag |= ContextFlag::FastTrack; } } diff --git a/thirdparty/thorvg/src/renderer/tvgRender.h b/thirdparty/thorvg/src/renderer/tvgRender.h index 8f28d37dbc..a915d68fec 100644 --- a/thirdparty/thorvg/src/renderer/tvgRender.h +++ b/thirdparty/thorvg/src/renderer/tvgRender.h @@ -103,7 +103,7 @@ struct RenderRegion void intersect(const RenderRegion& rhs); void add(const RenderRegion& rhs); - bool operator==(const RenderRegion& rhs) + bool operator==(const RenderRegion& rhs) const { if (x == rhs.x && y == rhs.y && w == rhs.w && h == rhs.h) return true; return false; diff --git a/thirdparty/thorvg/src/renderer/tvgShape.cpp b/thirdparty/thorvg/src/renderer/tvgShape.cpp index c010aa7bbf..3b9293a00e 100644 --- a/thirdparty/thorvg/src/renderer/tvgShape.cpp +++ b/thirdparty/thorvg/src/renderer/tvgShape.cpp @@ -88,6 +88,8 @@ Result Shape::appendPath(const PathCommand *cmds, uint32_t cmdCnt, const Point* pImpl->grow(cmdCnt, ptsCnt); pImpl->append(cmds, cmdCnt, pts, ptsCnt); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } @@ -104,6 +106,8 @@ Result Shape::lineTo(float x, float y) noexcept { pImpl->lineTo(x, y); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } @@ -112,6 +116,8 @@ Result Shape::cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float { pImpl->cubicTo(cx1, cy1, cx2, cy2, x, y); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } @@ -120,6 +126,8 @@ Result Shape::close() noexcept { pImpl->close(); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } @@ -137,9 +145,12 @@ Result Shape::appendCircle(float cx, float cy, float rx, float ry) noexcept pImpl->cubicTo(cx + rxKappa, cy - ry, cx + rx, cy - ryKappa, cx + rx, cy); pImpl->close(); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } + Result Shape::appendArc(float cx, float cy, float radius, float startAngle, float sweep, bool pie) noexcept { //just circle @@ -196,6 +207,8 @@ Result Shape::appendArc(float cx, float cy, float radius, float startAngle, floa if (pie) pImpl->close(); + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } @@ -234,6 +247,8 @@ Result Shape::appendRect(float x, float y, float w, float h, float rx, float ry) pImpl->close(); } + pImpl->flag |= RenderUpdateFlag::Path; + return Result::Success; } diff --git a/thirdparty/thorvg/src/renderer/tvgShape.h b/thirdparty/thorvg/src/renderer/tvgShape.h index 4e85db37d0..ecc58b6cc0 100644 --- a/thirdparty/thorvg/src/renderer/tvgShape.h +++ b/thirdparty/thorvg/src/renderer/tvgShape.h @@ -167,24 +167,18 @@ struct Shape::Impl memcpy(rs.path.pts.end(), pts, sizeof(Point) * ptsCnt); rs.path.cmds.count += cmdCnt; rs.path.pts.count += ptsCnt; - - flag |= RenderUpdateFlag::Path; } void moveTo(float x, float y) { rs.path.cmds.push(PathCommand::MoveTo); rs.path.pts.push({x, y}); - - flag |= RenderUpdateFlag::Path; } void lineTo(float x, float y) { rs.path.cmds.push(PathCommand::LineTo); rs.path.pts.push({x, y}); - - flag |= RenderUpdateFlag::Path; } void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) @@ -193,8 +187,6 @@ struct Shape::Impl rs.path.pts.push({cx1, cy1}); rs.path.pts.push({cx2, cy2}); rs.path.pts.push({x, y}); - - flag |= RenderUpdateFlag::Path; } void close() @@ -203,8 +195,6 @@ struct Shape::Impl if (rs.path.cmds.count > 0 && rs.path.cmds.last() == PathCommand::Close) return; rs.path.cmds.push(PathCommand::Close); - - flag |= RenderUpdateFlag::Path; } void strokeWidth(float width) @@ -306,6 +296,7 @@ struct Shape::Impl if (!rs.stroke) rs.stroke = new RenderStroke(); if (rs.stroke->fill && rs.stroke->fill != p) delete(rs.stroke->fill); rs.stroke->fill = p; + rs.stroke->color[3] = 0; flag |= RenderUpdateFlag::Stroke; flag |= RenderUpdateFlag::GradientStroke; diff --git a/thirdparty/thorvg/src/renderer/tvgSwCanvas.cpp b/thirdparty/thorvg/src/renderer/tvgSwCanvas.cpp index 52d85d8320..d762492f22 100644 --- a/thirdparty/thorvg/src/renderer/tvgSwCanvas.cpp +++ b/thirdparty/thorvg/src/renderer/tvgSwCanvas.cpp @@ -46,9 +46,9 @@ struct SwCanvas::Impl /************************************************************************/ #ifdef THORVG_SW_RASTER_SUPPORT -SwCanvas::SwCanvas() : Canvas(SwRenderer::gen()), pImpl(new Impl) +SwCanvas::SwCanvas() : Canvas(SwRenderer::gen()), pImpl(nullptr) #else -SwCanvas::SwCanvas() : Canvas(nullptr), pImpl(new Impl) +SwCanvas::SwCanvas() : Canvas(nullptr), pImpl(nullptr) #endif { } @@ -82,6 +82,10 @@ Result SwCanvas::mempool(MempoolPolicy policy) noexcept Result SwCanvas::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h, Colorspace cs) noexcept { #ifdef THORVG_SW_RASTER_SUPPORT + if (Canvas::pImpl->status != Status::Damanged && Canvas::pImpl->status != Status::Synced) { + return Result::InsufficientCondition; + } + //We know renderer type, avoid dynamic_cast for performance. auto renderer = static_cast<SwRenderer*>(Canvas::pImpl->renderer); if (!renderer) return Result::MemoryCorruption; @@ -90,12 +94,12 @@ Result SwCanvas::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t Canvas::pImpl->vport = {0, 0, (int32_t)w, (int32_t)h}; renderer->viewport(Canvas::pImpl->vport); - //Paints must be updated again with this new target. - Canvas::pImpl->needRefresh(); - //FIXME: The value must be associated with an individual canvas instance. ImageLoader::cs = static_cast<ColorSpace>(cs); + //Paints must be updated again with this new target. + Canvas::pImpl->status = Status::Damanged; + return Result::Success; #endif return Result::NonSupport; diff --git a/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h b/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h index 58918e88f0..93f8481707 100644 --- a/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h +++ b/thirdparty/thorvg/src/renderer/tvgTaskScheduler.h @@ -23,6 +23,8 @@ #ifndef _TVG_TASK_SCHEDULER_H_ #define _TVG_TASK_SCHEDULER_H_ +#define _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR + #include <mutex> #include <condition_variable> diff --git a/thirdparty/thorvg/src/renderer/tvgText.cpp b/thirdparty/thorvg/src/renderer/tvgText.cpp index 1fe244c11d..4b5eb35ce5 100644 --- a/thirdparty/thorvg/src/renderer/tvgText.cpp +++ b/thirdparty/thorvg/src/renderer/tvgText.cpp @@ -71,6 +71,21 @@ Result Text::load(const std::string& path) noexcept } +Result Text::load(const char* name, const char* data, uint32_t size, const string& mimeType, bool copy) noexcept +{ + if (!name || (size == 0 && data)) return Result::InvalidArguments; + + //unload font + if (!data) { + if (LoaderMgr::retrieve(name)) return Result::Success; + return Result::InsufficientCondition; + } + + if (!LoaderMgr::loader(name, data, size, mimeType, copy)) return Result::NonSupport; + return Result::Success; +} + + Result Text::unload(const std::string& path) noexcept { if (LoaderMgr::retrieve(path)) return Result::Success; diff --git a/thirdparty/thorvg/src/renderer/tvgText.h b/thirdparty/thorvg/src/renderer/tvgText.h index f4fb12259a..c56ce8b878 100644 --- a/thirdparty/thorvg/src/renderer/tvgText.h +++ b/thirdparty/thorvg/src/renderer/tvgText.h @@ -100,7 +100,7 @@ struct Text::Impl bool render(RenderMethod* renderer) { if (paint) return PP(paint)->render(renderer); - return false; + return true; } bool load() diff --git a/thirdparty/thorvg/src/renderer/tvgWgCanvas.cpp b/thirdparty/thorvg/src/renderer/tvgWgCanvas.cpp index 7db77f6d0c..067e35b1f0 100644 --- a/thirdparty/thorvg/src/renderer/tvgWgCanvas.cpp +++ b/thirdparty/thorvg/src/renderer/tvgWgCanvas.cpp @@ -47,33 +47,39 @@ WgCanvas::WgCanvas() : Canvas(nullptr), pImpl(nullptr) { } + WgCanvas::~WgCanvas() { delete pImpl; } -Result WgCanvas::target(void* window, uint32_t w, uint32_t h) noexcept + +Result WgCanvas::target(void* instance, void* surface, uint32_t w, uint32_t h) noexcept { #ifdef THORVG_WG_RASTER_SUPPORT - if (!window) return Result::InvalidArguments; - if ((w == 0) || (h == 0)) return Result::InvalidArguments; + if (Canvas::pImpl->status != Status::Damanged && Canvas::pImpl->status != Status::Synced) { + return Result::InsufficientCondition; + } + + if (!instance || !surface || (w == 0) || (h == 0)) return Result::InvalidArguments; //We know renderer type, avoid dynamic_cast for performance. auto renderer = static_cast<WgRenderer*>(Canvas::pImpl->renderer); if (!renderer) return Result::MemoryCorruption; - if (!renderer->target(window, w, h)) return Result::Unknown; + if (!renderer->target((WGPUInstance)instance, (WGPUSurface)surface, w, h)) return Result::Unknown; Canvas::pImpl->vport = {0, 0, (int32_t)w, (int32_t)h}; renderer->viewport(Canvas::pImpl->vport); //Paints must be updated again with this new target. - Canvas::pImpl->needRefresh(); + Canvas::pImpl->status = Status::Damanged; return Result::Success; #endif return Result::NonSupport; } + unique_ptr<WgCanvas> WgCanvas::gen() noexcept { #ifdef THORVG_WG_RASTER_SUPPORT diff --git a/thirdparty/thorvg/update-thorvg.sh b/thirdparty/thorvg/update-thorvg.sh index c0034ba888..e964e5ab6d 100755 --- a/thirdparty/thorvg/update-thorvg.sh +++ b/thirdparty/thorvg/update-thorvg.sh @@ -1,6 +1,6 @@ #!/bin/bash -e -VERSION=0.13.7 +VERSION=0.14.1 cd thirdparty/thorvg/ || true rm -rf AUTHORS LICENSE inc/ src/ *.zip *.tar.gz tmp/ |
