diff options
1634 files changed, 12849 insertions, 6187 deletions
diff --git a/.clang-tidy b/.clang-tidy index aa5a269eac..366781cc82 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,45 +1,22 @@ --- -Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,cppcoreguidelines-pro-type-member-init,modernize-redundant-void-arg,modernize-use-bool-literals,modernize-use-default-member-init,modernize-use-nullptr,readability-braces-around-statements,readability-redundant-member-init' +Checks: >- + -*, + cppcoreguidelines-pro-type-member-init, + modernize-redundant-void-arg, + modernize-use-bool-literals, + modernize-use-default-member-init, + modernize-use-nullptr, + readability-braces-around-statements, + readability-redundant-member-init WarningsAsErrors: '' -HeaderFilterRegex: '' -FormatStyle: none +HeaderFileExtensions: ['', h, hh, hpp, hxx, inc, glsl] +ImplementationFileExtensions: [c, cc, cpp, cxx, m, mm, java] +HeaderFilterRegex: (core|doc|drivers|editor|main|modules|platform|scene|servers|tests)/ +FormatStyle: file CheckOptions: - - key: cert-dcl16-c.NewSuffixes - value: 'L;LL;LU;LLU' - - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField - value: '0' - - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors - value: '1' - - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic - value: '1' - - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays - value: '1' - - key: cppcoreguidelines-pro-type-member-init.UseAssignment - value: '1' - - key: google-readability-function-size.StatementThreshold - value: '800' - - key: google-readability-namespace-comments.ShortNamespaceLines - value: '10' - - key: google-readability-namespace-comments.SpacesBeforeComments - value: '2' - - key: modernize-loop-convert.MaxCopySize - value: '16' - - key: modernize-loop-convert.MinConfidence - value: reasonable - - key: modernize-loop-convert.NamingStyle - value: CamelCase - - key: modernize-pass-by-value.IncludeStyle - value: llvm - - key: modernize-replace-auto-ptr.IncludeStyle - value: llvm - - key: modernize-use-bool-literals.IgnoreMacros - value: '0' - - key: modernize-use-default-member-init.IgnoreMacros - value: '0' - - key: modernize-use-default-member-init.UseAssignment - value: '1' - - key: modernize-use-nullptr.NullMacros - value: 'NULL' - - key: readability-braces-around-statements.ShortStatementLines - value: '0' + cppcoreguidelines-pro-type-member-init.IgnoreArrays: true + cppcoreguidelines-pro-type-member-init.UseAssignment: true + modernize-use-bool-literals.IgnoreMacros: false + modernize-use-default-member-init.IgnoreMacros: false + modernize-use-default-member-init.UseAssignment: true ... 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 d09ecabe70..46f29d0d5f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,6 +20,22 @@ repos: platform/android/java/lib/src/com/.* ) + - repo: https://github.com/pocc/pre-commit-hooks + rev: v1.3.5 + hooks: + - id: clang-tidy + files: \.(c|h|cpp|hpp|cc|hh|cxx|hxx|m|mm|inc|java|glsl)$ + args: [--fix, --quiet, --use-color] + types_or: [text] + exclude: | + (?x)^( + tests/python_build/.*| + platform/android/java/lib/src/com/.* + ) + additional_dependencies: [clang-tidy==18.1.1] + require_serial: true + stages: [manual] # Not automatically triggered, invoked via `pre-commit run --hook-stage manual clang-tidy` + - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.4.4 hooks: @@ -102,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..3fabc4706f 100644 --- a/SConstruct +++ b/SConstruct @@ -566,7 +566,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 10cdf5b2e7..768540a0fa 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1480,6 +1480,8 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF("animation/warnings/check_angle_interpolation_type_conflicting", true); GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "audio/buses/default_bus_layout", PROPERTY_HINT_FILE, "*.tres"), "res://default_bus_layout.tres"); + GLOBAL_DEF(PropertyInfo(Variant::INT, "audio/general/default_playback_type", PROPERTY_HINT_ENUM, "Stream,Sample"), 0); + GLOBAL_DEF(PropertyInfo(Variant::INT, "audio/general/default_playback_type.web", PROPERTY_HINT_ENUM, "Stream,Sample"), 1); GLOBAL_DEF_RST("audio/general/text_to_speech", false); GLOBAL_DEF_RST(PropertyInfo(Variant::FLOAT, "audio/general/2d_panning_strength", PROPERTY_HINT_RANGE, "0,2,0.01"), 0.5f); GLOBAL_DEF_RST(PropertyInfo(Variant::FLOAT, "audio/general/3d_panning_strength", PROPERTY_HINT_RANGE, "0,2,0.01"), 0.5f); diff --git a/core/core_bind.cpp b/core/core_bind.cpp index e8a6a5075b..a1b7b81111 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -194,6 +194,18 @@ void ResourceSaver::_bind_methods() { ////// OS ////// +PackedByteArray OS::get_entropy(int p_bytes) { + PackedByteArray pba; + pba.resize(p_bytes); + Error err = ::OS::get_singleton()->get_entropy(pba.ptrw(), p_bytes); + ERR_FAIL_COND_V(err != OK, PackedByteArray()); + return pba; +} + +String OS::get_system_ca_certificates() { + return ::OS::get_singleton()->get_system_ca_certificates(); +} + PackedStringArray OS::get_connected_midi_inputs() { return ::OS::get_singleton()->get_connected_midi_inputs(); } @@ -573,6 +585,8 @@ String OS::get_unique_id() const { OS *OS::singleton = nullptr; void OS::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_entropy", "size"), &OS::get_entropy); + ClassDB::bind_method(D_METHOD("get_system_ca_certificates"), &OS::get_system_ca_certificates); ClassDB::bind_method(D_METHOD("get_connected_midi_inputs"), &OS::get_connected_midi_inputs); ClassDB::bind_method(D_METHOD("open_midi_inputs"), &OS::open_midi_inputs); ClassDB::bind_method(D_METHOD("close_midi_inputs"), &OS::close_midi_inputs); diff --git a/core/core_bind.h b/core/core_bind.h index febc33a9c1..b142a2fbbd 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -134,6 +134,9 @@ public: RENDERING_DRIVER_D3D12, }; + PackedByteArray get_entropy(int p_bytes); + String get_system_ca_certificates(); + virtual PackedStringArray get_connected_midi_inputs(); virtual void open_midi_inputs(); virtual void close_midi_inputs(); diff --git a/core/crypto/crypto.cpp b/core/crypto/crypto.cpp index 7fef819159..d3d0079410 100644 --- a/core/crypto/crypto.cpp +++ b/core/crypto/crypto.cpp @@ -72,31 +72,26 @@ void X509Certificate::_bind_methods() { Ref<TLSOptions> TLSOptions::client(Ref<X509Certificate> p_trusted_chain, const String &p_common_name_override) { Ref<TLSOptions> opts; opts.instantiate(); + opts->mode = MODE_CLIENT; opts->trusted_ca_chain = p_trusted_chain; opts->common_name = p_common_name_override; - opts->verify_mode = TLS_VERIFY_FULL; return opts; } Ref<TLSOptions> TLSOptions::client_unsafe(Ref<X509Certificate> p_trusted_chain) { Ref<TLSOptions> opts; opts.instantiate(); + opts->mode = MODE_CLIENT_UNSAFE; opts->trusted_ca_chain = p_trusted_chain; - if (p_trusted_chain.is_null()) { - opts->verify_mode = TLS_VERIFY_NONE; - } else { - opts->verify_mode = TLS_VERIFY_CERT; - } return opts; } Ref<TLSOptions> TLSOptions::server(Ref<CryptoKey> p_own_key, Ref<X509Certificate> p_own_certificate) { Ref<TLSOptions> opts; opts.instantiate(); - opts->server_mode = true; + opts->mode = MODE_SERVER; opts->own_certificate = p_own_certificate; opts->private_key = p_own_key; - opts->verify_mode = TLS_VERIFY_NONE; return opts; } @@ -104,6 +99,13 @@ void TLSOptions::_bind_methods() { ClassDB::bind_static_method("TLSOptions", D_METHOD("client", "trusted_chain", "common_name_override"), &TLSOptions::client, DEFVAL(Ref<X509Certificate>()), DEFVAL(String())); ClassDB::bind_static_method("TLSOptions", D_METHOD("client_unsafe", "trusted_chain"), &TLSOptions::client_unsafe, DEFVAL(Ref<X509Certificate>())); ClassDB::bind_static_method("TLSOptions", D_METHOD("server", "key", "certificate"), &TLSOptions::server); + + ClassDB::bind_method(D_METHOD("is_server"), &TLSOptions::is_server); + ClassDB::bind_method(D_METHOD("is_unsafe_client"), &TLSOptions::is_unsafe_client); + ClassDB::bind_method(D_METHOD("get_common_name_override"), &TLSOptions::get_common_name_override); + ClassDB::bind_method(D_METHOD("get_trusted_ca_chain"), &TLSOptions::get_trusted_ca_chain); + ClassDB::bind_method(D_METHOD("get_private_key"), &TLSOptions::get_private_key); + ClassDB::bind_method(D_METHOD("get_own_certificate"), &TLSOptions::get_own_certificate); } /// HMACContext diff --git a/core/crypto/crypto.h b/core/crypto/crypto.h index fbd01be86d..16649422cf 100644 --- a/core/crypto/crypto.h +++ b/core/crypto/crypto.h @@ -72,17 +72,15 @@ public: class TLSOptions : public RefCounted { GDCLASS(TLSOptions, RefCounted); -public: - enum TLSVerifyMode { - TLS_VERIFY_NONE = 0, - TLS_VERIFY_CERT = 1, - TLS_VERIFY_FULL = 2, +private: + enum Mode { + MODE_CLIENT = 0, + MODE_CLIENT_UNSAFE = 1, + MODE_SERVER = 2, }; -private: - bool server_mode = false; + Mode mode = MODE_CLIENT; String common_name; - TLSVerifyMode verify_mode = TLS_VERIFY_FULL; Ref<X509Certificate> trusted_ca_chain; Ref<X509Certificate> own_certificate; Ref<CryptoKey> private_key; @@ -95,12 +93,12 @@ public: static Ref<TLSOptions> client_unsafe(Ref<X509Certificate> p_trusted_chain); static Ref<TLSOptions> server(Ref<CryptoKey> p_own_key, Ref<X509Certificate> p_own_certificate); - TLSVerifyMode get_verify_mode() const { return verify_mode; } - String get_common_name() const { return common_name; } + String get_common_name_override() const { return common_name; } Ref<X509Certificate> get_trusted_ca_chain() const { return trusted_ca_chain; } Ref<X509Certificate> get_own_certificate() const { return own_certificate; } Ref<CryptoKey> get_private_key() const { return private_key; } - bool is_server() const { return server_mode; } + bool is_server() const { return mode == MODE_SERVER; } + bool is_unsafe_client() const { return mode == MODE_CLIENT_UNSAFE; } }; class HMACContext : public RefCounted { 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/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..58ad61b621 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()) { @@ -463,25 +465,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 +509,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 +532,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 +586,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 +624,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); @@ -732,6 +757,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 +1294,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/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/object.cpp b/core/object/object.cpp index 0383753f38..97a3a405b9 100644 --- a/core/object/object.cpp +++ b/core/object/object.cpp @@ -236,20 +236,12 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid } if (_extension && _extension->set) { -// C style pointer casts should never trigger a compiler warning because the risk is assumed by the user, so GCC should keep quiet about it. -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#endif - if (_extension->set(_extension_instance, (const GDExtensionStringNamePtr)&p_name, (const GDExtensionVariantPtr)&p_value)) { + if (_extension->set(_extension_instance, (GDExtensionConstStringNamePtr)&p_name, (GDExtensionConstVariantPtr)&p_value)) { if (r_valid) { *r_valid = true; } return; } -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif } // Try built-in setter. @@ -323,21 +315,12 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const { } } if (_extension && _extension->get) { -// C style pointer casts should never trigger a compiler warning because the risk is assumed by the user, so GCC should keep quiet about it. -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#endif - - if (_extension->get(_extension_instance, (const GDExtensionStringNamePtr)&p_name, (GDExtensionVariantPtr)&ret)) { + if (_extension->get(_extension_instance, (GDExtensionConstStringNamePtr)&p_name, (GDExtensionVariantPtr)&ret)) { if (r_valid) { *r_valid = true; } return ret; } -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif } // Try built-in getter. @@ -575,19 +558,11 @@ bool Object::property_can_revert(const StringName &p_name) const { } } -// C style pointer casts should never trigger a compiler warning because the risk is assumed by the user, so GCC should keep quiet about it. -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#endif if (_extension && _extension->property_can_revert) { - if (_extension->property_can_revert(_extension_instance, (const GDExtensionStringNamePtr)&p_name)) { + if (_extension->property_can_revert(_extension_instance, (GDExtensionConstStringNamePtr)&p_name)) { return true; } } -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif return _property_can_revertv(p_name); } @@ -601,19 +576,11 @@ Variant Object::property_get_revert(const StringName &p_name) const { } } -// C style pointer casts should never trigger a compiler warning because the risk is assumed by the user, so GCC should keep quiet about it. -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wignored-qualifiers" -#endif if (_extension && _extension->property_get_revert) { - if (_extension->property_get_revert(_extension_instance, (const GDExtensionStringNamePtr)&p_name, (GDExtensionVariantPtr)&ret)) { + if (_extension->property_get_revert(_extension_instance, (GDExtensionConstStringNamePtr)&p_name, (GDExtensionVariantPtr)&ret)) { return ret; } } -#if defined(__GNUC__) && !defined(__clang__) -#pragma GCC diagnostic pop -#endif if (_property_get_revertv(p_name, ret)) { return ret; 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/script_language_extension.h b/core/object/script_language_extension.h index 8fd26c3d2c..c9344f5799 100644 --- a/core/object/script_language_extension.h +++ b/core/object/script_language_extension.h @@ -646,7 +646,7 @@ public: virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr, int p_info_max) override { int ret = 0; - GDVIRTUAL_REQUIRED_CALL(_profiling_get_accumulated_data, p_info_arr, p_info_max, ret); + GDVIRTUAL_REQUIRED_CALL(_profiling_get_frame_data, p_info_arr, p_info_max, ret); return ret; } 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/register_core_types.cpp b/core/register_core_types.cpp index 8a55e4de8f..c0a86e9fb7 100644 --- a/core/register_core_types.cpp +++ b/core/register_core_types.cpp @@ -444,8 +444,8 @@ void unregister_core_types() { unregister_global_constants(); - ClassDB::cleanup(); ResourceCache::clear(); + ClassDB::cleanup(); CoreStringNames::free(); StringName::cleanup(); 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/string/translation_po.cpp b/core/string/translation_po.cpp index 06fd4717d7..8e275505b0 100644 --- a/core/string/translation_po.cpp +++ b/core/string/translation_po.cpp @@ -140,43 +140,87 @@ int TranslationPO::_get_plural_index(int p_n) const { input_val.clear(); input_val.push_back(p_n); - Variant result; - for (int i = 0; i < equi_tests.size(); i++) { - Error err = expr->parse(equi_tests[i], input_name); - ERR_FAIL_COND_V_MSG(err != OK, 0, "Cannot parse expression. Error: " + expr->get_error_text()); + return _eq_test(equi_tests, 0); +} - result = expr->execute(input_val); - ERR_FAIL_COND_V_MSG(expr->has_execute_failed(), 0, "Cannot evaluate expression."); +int TranslationPO::_eq_test(const Ref<EQNode> &p_node, const Variant &p_result) const { + if (p_node.is_valid()) { + Error err = expr->parse(p_node->regex, input_name); + ERR_FAIL_COND_V_MSG(err != OK, 0, vformat("Cannot parse expression \"%s\". Error: %s", p_node->regex, expr->get_error_text())); - // Last expression. Variant result will either map to a bool or an integer, in both cases returning it will give the correct plural index. - if (i + 1 == equi_tests.size()) { - return result; - } + Variant result = expr->execute(input_val); + ERR_FAIL_COND_V_MSG(expr->has_execute_failed(), 0, vformat("Cannot evaluate expression \"%s\".", p_node->regex)); if (bool(result)) { - return i; + return _eq_test(p_node->left, result); + } else { + return _eq_test(p_node->right, result); } + } else { + return p_result; + } +} + +int TranslationPO::_find_unquoted(const String &p_src, char32_t p_chr) const { + const int len = p_src.length(); + if (len == 0) { + return -1; } - ERR_FAIL_V_MSG(0, "Unexpected. Function should have returned. Please report this bug."); + const char32_t *src = p_src.get_data(); + bool in_quote = false; + for (int i = 0; i < len; i++) { + if (in_quote) { + if (src[i] == ')') { + in_quote = false; + } + } else { + if (src[i] == '(') { + in_quote = true; + } else if (src[i] == p_chr) { + return i; + } + } + } + + return -1; } -void TranslationPO::_cache_plural_tests(const String &p_plural_rule) { +void TranslationPO::_cache_plural_tests(const String &p_plural_rule, Ref<EQNode> &p_node) { // Some examples of p_plural_rule passed in can have the form: // "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5" (Arabic) // "n >= 2" (French) // When evaluating the last, especially careful with this one. // "n != 1" (English) - int first_ques_mark = p_plural_rule.find("?"); + + String rule = p_plural_rule; + if (rule.begins_with("(") && rule.ends_with(")")) { + int bcount = 0; + for (int i = 1; i < rule.length() - 1 && bcount >= 0; i++) { + if (rule[i] == '(') { + bcount++; + } else if (rule[i] == ')') { + bcount--; + } + } + if (bcount == 0) { + rule = rule.substr(1, rule.length() - 2); + } + } + + int first_ques_mark = _find_unquoted(rule, '?'); + int first_colon = _find_unquoted(rule, ':'); + if (first_ques_mark == -1) { - equi_tests.push_back(p_plural_rule.strip_edges()); + p_node->regex = rule.strip_edges(); return; } - String equi_test = p_plural_rule.substr(0, first_ques_mark).strip_edges(); - equi_tests.push_back(equi_test); + p_node->regex = rule.substr(0, first_ques_mark).strip_edges(); - String after_colon = p_plural_rule.substr(p_plural_rule.find(":") + 1, p_plural_rule.length()); - _cache_plural_tests(after_colon); + p_node->left.instantiate(); + _cache_plural_tests(rule.substr(first_ques_mark + 1, first_colon - first_ques_mark - 1).strip_edges(), p_node->left); + p_node->right.instantiate(); + _cache_plural_tests(rule.substr(first_colon + 1).strip_edges(), p_node->right); } void TranslationPO::set_plural_rule(const String &p_plural_rule) { @@ -188,12 +232,12 @@ void TranslationPO::set_plural_rule(const String &p_plural_rule) { int expression_start = p_plural_rule.find("=", first_semi_col) + 1; int second_semi_col = p_plural_rule.rfind(";"); - plural_rule = p_plural_rule.substr(expression_start, second_semi_col - expression_start); + plural_rule = p_plural_rule.substr(expression_start, second_semi_col - expression_start).strip_edges(); // Setup the cache to make evaluating plural rule faster later on. - plural_rule = plural_rule.replacen("(", ""); - plural_rule = plural_rule.replacen(")", ""); - _cache_plural_tests(plural_rule); + equi_tests.instantiate(); + _cache_plural_tests(plural_rule, equi_tests); + expr.instantiate(); input_name.push_back("n"); } diff --git a/core/string/translation_po.h b/core/string/translation_po.h index 73f9b33a87..ba820c6ee4 100644 --- a/core/string/translation_po.h +++ b/core/string/translation_po.h @@ -50,7 +50,17 @@ class TranslationPO : public Translation { String plural_rule; // Cache temporary variables related to _get_plural_index() to make it faster - Vector<String> equi_tests; + class EQNode : public RefCounted { + public: + String regex; + Ref<EQNode> left; + Ref<EQNode> right; + }; + Ref<EQNode> equi_tests; + + int _find_unquoted(const String &p_src, char32_t p_chr) const; + int _eq_test(const Ref<EQNode> &p_node, const Variant &p_result) const; + Vector<String> input_name; mutable Ref<Expression> expr; mutable Array input_val; @@ -59,7 +69,7 @@ class TranslationPO : public Translation { mutable int last_plural_n = -1; // Set it to an impossible value at the beginning. mutable int last_plural_mapped_index = 0; - void _cache_plural_tests(const String &p_plural_rule); + void _cache_plural_tests(const String &p_plural_rule, Ref<EQNode> &p_node); int _get_plural_index(int p_n) const; Vector<String> _get_message_list() const override; 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/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_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/AnimationMixer.xml b/doc/classes/AnimationMixer.xml index c635eba2ab..8a493ce91f 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. 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/AudioSample.xml b/doc/classes/AudioSample.xml new file mode 100644 index 0000000000..e3820c11a0 --- /dev/null +++ b/doc/classes/AudioSample.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="AudioSample" inherits="RefCounted" experimental="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> + <brief_description> + Base class for audio samples. + </brief_description> + <description> + Base class for audio samples. + </description> + <tutorials> + </tutorials> +</class> diff --git a/doc/classes/AudioSamplePlayback.xml b/doc/classes/AudioSamplePlayback.xml new file mode 100644 index 0000000000..74a2d5e656 --- /dev/null +++ b/doc/classes/AudioSamplePlayback.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="AudioSamplePlayback" inherits="RefCounted" experimental="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> + <brief_description> + Meta class for playing back audio samples. + </brief_description> + <description> + Meta class for playing back audio samples. + </description> + <tutorials> + </tutorials> +</class> diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml index b3cf53367d..6830c632cf 100644 --- a/doc/classes/AudioServer.xml +++ b/doc/classes/AudioServer.xml @@ -183,6 +183,14 @@ If [code]true[/code], the bus at index [param bus_idx] is in solo mode. </description> </method> + <method name="is_stream_registered_as_sample" experimental=""> + <return type="bool" /> + <param index="0" name="stream" type="AudioStream" /> + <description> + If [code]true[/code], the stream is registered as a sample. The engine will not have to register it before playing the sample. + If [code]false[/code], the stream will have to be registered before playing it. To prevent lag spikes, register the stream as sample with [method register_stream_as_sample]. + </description> + </method> <method name="lock"> <return type="void" /> <description> @@ -198,6 +206,14 @@ Moves the bus from index [param index] to index [param to_index]. </description> </method> + <method name="register_stream_as_sample" experimental=""> + <return type="void" /> + <param index="0" name="stream" type="AudioStream" /> + <description> + Forces the registration of a stream as a sample. + [b]Note:[/b] Lag spikes may occur when calling this method, especially on single-threaded builds. It is suggested to call this method while loading assets, where the lag spike could be masked, instead of registering the sample right before it needs to be played. + </description> + </method> <method name="remove_bus"> <return type="void" /> <param index="0" name="index" type="int" /> @@ -344,5 +360,19 @@ <constant name="SPEAKER_SURROUND_71" value="3" enum="SpeakerMode"> A 7.1 channel surround setup was detected. </constant> + <constant name="PLAYBACK_TYPE_DEFAULT" value="0" enum="PlaybackType" experimental=""> + The playback will be considered of the type declared at [member ProjectSettings.audio/general/default_playback_type]. + </constant> + <constant name="PLAYBACK_TYPE_STREAM" value="1" enum="PlaybackType" experimental=""> + Force the playback to be considered as a stream. + </constant> + <constant name="PLAYBACK_TYPE_SAMPLE" value="2" enum="PlaybackType" experimental=""> + Force the playback to be considered as a sample. This can provide lower latency and more stable playback (with less risk of audio crackling), at the cost of having less flexibility. + [b]Note:[/b] Only currently supported on the web platform. + [b]Note:[/b] [AudioEffect]s are not supported when playback is considered as a sample. + </constant> + <constant name="PLAYBACK_TYPE_MAX" value="3" enum="PlaybackType" experimental=""> + Represents the size of the [enum PlaybackType] enum. + </constant> </constants> </class> diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml index 4abce3f1da..44edff122e 100644 --- a/doc/classes/AudioStream.xml +++ b/doc/classes/AudioStream.xml @@ -57,6 +57,18 @@ Override this method to customize the returned value of [method is_monophonic]. Should return [code]true[/code] if this audio stream only supports one channel. </description> </method> + <method name="can_be_sampled" qualifiers="const" experimental=""> + <return type="bool" /> + <description> + Returns if the current [AudioStream] can be used as a sample. Only static streams can be sampled. + </description> + </method> + <method name="generate_sample" qualifiers="const" experimental=""> + <return type="AudioSample" /> + <description> + Generates an [AudioSample] based on the current stream. + </description> + </method> <method name="get_length" qualifiers="const"> <return type="float" /> <description> @@ -69,6 +81,12 @@ Returns a newly created [AudioStreamPlayback] intended to play this audio stream. Useful for when you want to extend [method _instantiate_playback] but call [method instantiate_playback] from an internally held AudioStream subresource. An example of this can be found in the source code for [code]AudioStreamRandomPitch::instantiate_playback[/code]. </description> </method> + <method name="is_meta_stream" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if the stream is a collection of other streams, [code]false[/code] otherwise. + </description> + </method> <method name="is_monophonic" qualifiers="const"> <return type="bool" /> <description> diff --git a/doc/classes/AudioStreamPlayback.xml b/doc/classes/AudioStreamPlayback.xml index 9f87b76a2b..02f3407f79 100644 --- a/doc/classes/AudioStreamPlayback.xml +++ b/doc/classes/AudioStreamPlayback.xml @@ -79,5 +79,18 @@ Overridable method. Called whenever the audio stream is mixed if the playback is active and [method AudioServer.set_enable_tagging_used_audio_streams] has been set to [code]true[/code]. Editor plugins may use this method to "tag" the current position along the audio stream and display it in a preview. </description> </method> + <method name="get_sample_playback" qualifiers="const" experimental=""> + <return type="AudioSamplePlayback" /> + <description> + Returns the [AudioSamplePlayback] associated with this [AudioStreamPlayback] for playing back the audio sample of this stream. + </description> + </method> + <method name="set_sample_playback" experimental=""> + <return type="void" /> + <param index="0" name="playback_sample" type="AudioSamplePlayback" /> + <description> + Associates [AudioSamplePlayback] to this [AudioStreamPlayback] for playing back the audio sample of this stream. + </description> + </method> </methods> </class> diff --git a/doc/classes/AudioStreamPlaybackPolyphonic.xml b/doc/classes/AudioStreamPlaybackPolyphonic.xml index 106f2a3dbb..f71762d6a5 100644 --- a/doc/classes/AudioStreamPlaybackPolyphonic.xml +++ b/doc/classes/AudioStreamPlaybackPolyphonic.xml @@ -22,8 +22,10 @@ <param index="1" name="from_offset" type="float" default="0" /> <param index="2" name="volume_db" type="float" default="0" /> <param index="3" name="pitch_scale" type="float" default="1.0" /> + <param index="4" name="playback_type" type="int" enum="AudioServer.PlaybackType" default="0" /> + <param index="5" name="bus" type="StringName" default="&"Master"" /> <description> - Play an [AudioStream] at a given offset, volume and pitch scale. Playback starts immediately. + Play an [AudioStream] at a given offset, volume, pitch scale, playback type, and bus. Playback starts immediately. The return value is a unique integer ID that is associated to this playback stream and which can be used to control it. This ID becomes invalid when the stream ends (if it does not loop), when the [AudioStreamPlaybackPolyphonic] is stopped, or when [method stop_stream] is called. This function returns [constant INVALID_ID] if the amount of streams currently playing equals [member AudioStreamPolyphonic.polyphony]. If you need a higher amount of maximum polyphony, raise this value. diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml index a7d0a10073..7b4b7c289b 100644 --- a/doc/classes/AudioStreamPlayer.xml +++ b/doc/classes/AudioStreamPlayer.xml @@ -74,6 +74,9 @@ <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0"> The audio's pitch and tempo, as a multiplier of the [member stream]'s sample rate. A value of [code]2.0[/code] doubles the audio's pitch, while a value of [code]0.5[/code] halves the pitch. </member> + <member name="playback_type" type="int" setter="set_playback_type" getter="get_playback_type" enum="AudioServer.PlaybackType" default="0" experimental=""> + The playback type of the stream player. If set other than to the default value, it will force that playback type. + </member> <member name="playing" type="bool" setter="_set_playing" getter="is_playing" default="false"> If [code]true[/code], this node is playing sounds. Setting this property has the same effect as [method play] and [method stop]. </member> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index 8b81887976..a3206ba1d6 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -78,6 +78,9 @@ <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0"> The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate. </member> + <member name="playback_type" type="int" setter="set_playback_type" getter="get_playback_type" enum="AudioServer.PlaybackType" default="0" experimental=""> + The playback type of the stream player. If set other than to the default value, it will force that playback type. + </member> <member name="playing" type="bool" setter="_set_playing" getter="is_playing" default="false"> If [code]true[/code], audio is playing or is queued to be played (see [method play]). </member> diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index af92fd4a44..bf02caffb4 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -99,6 +99,9 @@ <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0"> The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate. </member> + <member name="playback_type" type="int" setter="set_playback_type" getter="get_playback_type" enum="AudioServer.PlaybackType" default="0" experimental=""> + The playback type of the stream player. If set other than to the default value, it will force that playback type. + </member> <member name="playing" type="bool" setter="_set_playing" getter="is_playing" default="false"> If [code]true[/code], audio is playing or is queued to be played (see [method play]). </member> 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/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/Color.xml b/doc/classes/Color.xml index 37beca5f81..3f0ccc0b5e 100644 --- a/doc/classes/Color.xml +++ b/doc/classes/Color.xml @@ -203,7 +203,7 @@ <return type="Color" /> <param index="0" name="hex" type="int" /> <description> - Returns the [Color] associated with the provided [param hex] integer in 32-bit RGBA format (8 bits per channel). + Returns the [Color] associated with the provided [param hex] integer in 32-bit RGBA format (8 bits per channel). This method is the inverse of [method to_rgba32]. In GDScript and C#, the [int] is best visualized with hexadecimal notation ([code]"0x"[/code] prefix, making it [code]"0xRRGGBBAA"[/code]). [codeblocks] [gdscript] @@ -223,7 +223,7 @@ <return type="Color" /> <param index="0" name="hex" type="int" /> <description> - Returns the [Color] associated with the provided [param hex] integer in 64-bit RGBA format (16 bits per channel). + Returns the [Color] associated with the provided [param hex] integer in 64-bit RGBA format (16 bits per channel). This method is the inverse of [method to_rgba64]. In GDScript and C#, the [int] is best visualized with hexadecimal notation ([code]"0x"[/code] prefix, making it [code]"0xRRRRGGGGBBBBAAAA"[/code]). </description> </method> @@ -441,7 +441,7 @@ <method name="to_rgba32" qualifiers="const"> <return type="int" /> <description> - Returns the color converted to a 32-bit integer in RGBA format (each component is 8 bits). RGBA is Godot's default format. + Returns the color converted to a 32-bit integer in RGBA format (each component is 8 bits). RGBA is Godot's default format. This method is the inverse of [method hex]. [codeblocks] [gdscript] var color = Color(1, 0.5, 0.2) @@ -457,7 +457,7 @@ <method name="to_rgba64" qualifiers="const"> <return type="int" /> <description> - Returns the color converted to a 64-bit integer in RGBA format (each component is 16 bits). RGBA is Godot's default format. + Returns the color converted to a 64-bit integer in RGBA format (each component is 16 bits). RGBA is Godot's default format. This method is the inverse of [method hex64]. [codeblocks] [gdscript] var color = Color(1, 0.5, 0.2) diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml index 3e2b3ea111..4d304cf5fd 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"> @@ -35,6 +36,7 @@ <description> Customize a resource. If changes are made to it, return the same or a new resource. Otherwise, return [code]null[/code]. The [i]path[/i] argument is only used when customizing an actual file, otherwise this means that this resource is part of another one and it will be empty. + Calling [method skip] inside this callback will make the file not included in the export. Implementing this method is required if [method _begin_customize_resources] returns [code]true[/code]. </description> </method> @@ -44,6 +46,7 @@ <param index="1" name="path" type="String" /> <description> Customize a scene. If changes are made to it, return the same or a new scene. Otherwise, return [code]null[/code]. If a new scene is returned, it is up to you to dispose of the old one. + Calling [method skip] inside this callback will make the file not included in the export. Implementing this method is required if [method _begin_customize_scenes] returns [code]true[/code]. </description> </method> @@ -81,8 +84,9 @@ <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, except for imported resources (resources that have an associated [code].import[/code] file). 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. + Use [method _customize_resource] for imported resources that are not handled by this function. </description> </method> <method name="_get_android_dependencies" qualifiers="virtual const"> 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..c97ae197d9 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -623,10 +623,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 +1043,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 +1065,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 +1091,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/OS.xml b/doc/classes/OS.xml index 7c69bc6ed2..3d048e2f63 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -262,6 +262,14 @@ [b]Note:[/b] This method is not supported on the Web platform. It returns an empty string. </description> </method> + <method name="get_entropy"> + <return type="PackedByteArray" /> + <param index="0" name="size" type="int" /> + <description> + Generates a [PackedByteArray] of cryptographically secure random bytes with given [param size]. + [b]Note:[/b] Generating large quantities of bytes using this method can result in locking and entropy of lower quality on most platforms. Using [method Crypto.generate_random_bytes] is preferred in most cases. + </description> + </method> <method name="get_environment" qualifiers="const"> <return type="String" /> <param index="0" name="variable" type="String" /> @@ -455,6 +463,12 @@ Returns the amount of static memory being used by the program in bytes. Only works in debug builds. </description> </method> + <method name="get_system_ca_certificates"> + <return type="String" /> + <description> + Returns the list of certification authorities trusted by the operating system as a string of concatenated certificates in PEM format. + </description> + </method> <method name="get_system_dir" qualifiers="const"> <return type="String" /> <param index="0" name="dir" type="int" enum="OS.SystemDir" /> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index b0dec2d00a..eecb3ca525 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -693,6 +693,7 @@ <return type="int" /> <description> Returns the object's unique instance ID. This ID can be saved in [EncodedObjectAsID], and can be used to retrieve this object instance with [method @GlobalScope.instance_from_id]. + [b]Note:[/b] This ID is only useful during the current session. It won't correspond to a similar object if the ID is sent over a network, or loaded from a file at a later time. </description> </method> <method name="get_meta" 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/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index c8a11427b9..b1556783d5 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. @@ -393,7 +394,7 @@ Safer override for [member audio/driver/mix_rate] in the Web platform. Here [code]0[/code] means "let the browser choose" (since some browsers do not like forcing the mix rate). </member> <member name="audio/driver/output_latency" type="int" setter="" getter="" default="15"> - Specifies the preferred output latency in milliseconds for audio. Lower values will result in lower audio latency at the cost of increased CPU usage. Low values may result in audible cracking on slower hardware. + Specifies the preferred output latency in milliseconds for audio. Lower values will result in lower audio latency at the cost of increased CPU usage. Low values may result in audible crackling on slower hardware. Audio output latency may be constrained by the host operating system and audio hardware drivers. If the host can not provide the specified audio output latency then Godot will attempt to use the nearest latency allowed by the host. As such you should always use [method AudioServer.get_output_latency] to determine the actual audio output latency. Audio output latency can be overridden using the [code]--audio-output-latency <ms>[/code] command line argument. [b]Note:[/b] This setting is ignored on Android, and on all versions of Windows prior to Windows 10. @@ -409,6 +410,15 @@ The base strength of the panning effect for all [AudioStreamPlayer3D] nodes. The panning strength can be further scaled on each Node using [member AudioStreamPlayer3D.panning_strength]. A value of [code]0.0[/code] disables stereo panning entirely, leaving only volume attenuation in place. A value of [code]1.0[/code] completely mutes one of the channels if the sound is located exactly to the left (or right) of the listener. The default value of [code]0.5[/code] is tuned for headphones. When using speakers, you may find lower values to sound better as speakers have a lower stereo separation compared to headphones. </member> + <member name="audio/general/default_playback_type" type="int" setter="" getter="" default="0" experimental=""> + Specifies the default playback type of the platform. + The default value is set to [b]Stream[/b], as most platforms have no issues mixing streams. + </member> + <member name="audio/general/default_playback_type.web" type="int" setter="" getter="" default="1" experimental=""> + Specifies the default playback type of the Web platform. + The default value is set to [b]Sample[/b] as the Web platform is not suited to mix audio streams outside of the Web Audio API, especially when exporting a single-threaded game. [b]Sample[/b] allows for lower latency on the web platform at the cost of flexibility ([AudioEffect]s are not supported). + [b]Warning:[/b] Forcing [b]Stream[/b] on the Web platform may cause high audio latency and crackling, especially when exporting a multi-threaded game. + </member> <member name="audio/general/ios/mix_with_others" type="bool" setter="" getter="" default="false"> Sets the [url=https://developer.apple.com/documentation/avfaudio/avaudiosession/categoryoptions/1616611-mixwithothers]mixWithOthers[/url] option for the AVAudioSession on iOS. This will override the mix behavior, if the category is set to [code]Play and Record[/code], [code]Playback[/code], or [code]Multi Route[/code]. [code]Ambient[/code] always has this set per default. @@ -467,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> @@ -2342,7 +2355,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]). @@ -2634,6 +2646,8 @@ [b]Note:[/b] This setting is only effective when using the Forward+ rendering method, not Mobile and Compatibility. </member> <member name="rendering/limits/global_shader_variables/buffer_size" type="int" setter="" getter="" default="65536"> + The maximum number of uniforms that can be used by the global shader uniform buffer. Each item takes up one slot. In other words, a single uniform float and a uniform vec4 will take the same amount of space in the buffer. + [b]Note:[/b] When using the Compatibility backend, most mobile devices (and all web exports) will be limited to a maximum size of 1024 due to hardware constraints. </member> <member name="rendering/limits/opengl/max_lights_per_object" type="int" setter="" getter="" default="8"> Max number of omnilights and spotlights renderable per object. At the default value of 8, this means that each surface can be affected by up to 8 omnilights and 8 spotlights. This is further limited by hardware support and [member rendering/limits/opengl/max_renderable_lights]. Setting this low will slightly reduce memory usage, may decrease shader compile times, and may result in faster rendering on low-end, mobile, or web devices. @@ -2912,11 +2926,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/RID.xml b/doc/classes/RID.xml index 8fd93d00b9..323ac3b0ec 100644 --- a/doc/classes/RID.xml +++ b/doc/classes/RID.xml @@ -6,6 +6,7 @@ <description> The RID [Variant] type is used to access a low-level resource by its unique ID. RIDs are opaque, which means they do not grant access to the resource by themselves. They are used by the low-level server classes, such as [DisplayServer], [RenderingServer], [TextServer], etc. A low-level resource may correspond to a high-level [Resource], such as [Texture] or [Mesh]. + [b]Note:[/b] RIDs are only useful during the current session. It won't correspond to a similar resource if sent over a network, or loaded from a file at a later time. </description> <tutorials> </tutorials> diff --git a/doc/classes/ResourceImporterImageFont.xml b/doc/classes/ResourceImporterImageFont.xml index afc791f874..6dbfa1d651 100644 --- a/doc/classes/ResourceImporterImageFont.xml +++ b/doc/classes/ResourceImporterImageFont.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ResourceImporterImageFont" inherits="ResourceImporter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Imports a fixed-width bitmap font where all glyphs have the same width and height. + Imports a bitmap font where all glyphs have the same width and height. </brief_description> <description> - This image-based workflow can be easier to use than [ResourceImporterBMFont], but it requires all glyphs to have the same width and height. This makes [ResourceImporterImageFont] most suited to fixed-width fonts. + This image-based workflow can be easier to use than [ResourceImporterBMFont], but it requires all glyphs to have the same width and height, glyph advances and drawing offsets can be customized. This makes [ResourceImporterImageFont] most suited to fixed-width fonts. See also [ResourceImporterDynamicFont]. </description> <tutorials> 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/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/SpriteFrames.xml b/doc/classes/SpriteFrames.xml index 93c4a6e8de..fd8c15c560 100644 --- a/doc/classes/SpriteFrames.xml +++ b/doc/classes/SpriteFrames.xml @@ -23,7 +23,7 @@ <param index="2" name="duration" type="float" default="1.0" /> <param index="3" name="at_position" type="int" default="-1" /> <description> - Adds a frame to the [param anim] animation. If [param at_position] is [code]-1[/code], the frame will be added to the end of the animation. + Adds a frame to the [param anim] animation. If [param at_position] is [code]-1[/code], the frame will be added to the end of the animation. [param duration] specifies the relative duration, see [method get_frame_duration] for details. </description> </method> <method name="clear"> @@ -139,7 +139,7 @@ <param index="2" name="texture" type="Texture2D" /> <param index="3" name="duration" type="float" default="1.0" /> <description> - Sets the [param texture] and the [param duration] of the frame [param idx] in the [param anim] animation. + Sets the [param texture] and the [param duration] of the frame [param idx] in the [param anim] animation. [param duration] specifies the relative duration, see [method get_frame_duration] for details. </description> </method> </methods> diff --git a/doc/classes/TLSOptions.xml b/doc/classes/TLSOptions.xml index aed100ec07..3bc0bb7e03 100644 --- a/doc/classes/TLSOptions.xml +++ b/doc/classes/TLSOptions.xml @@ -40,6 +40,42 @@ [b]Note:[/b] On the Web platform, TLS verification is always enforced against the CA list of the web browser. This is considered a security feature. </description> </method> + <method name="get_common_name_override" qualifiers="const"> + <return type="String" /> + <description> + Returns the common name (domain name) override specified when creating with [method TLSOptions.client]. + </description> + </method> + <method name="get_own_certificate" qualifiers="const"> + <return type="X509Certificate" /> + <description> + Returns the [X509Certificate] specified when creating with [method TLSOptions.server]. + </description> + </method> + <method name="get_private_key" qualifiers="const"> + <return type="CryptoKey" /> + <description> + Returns the [CryptoKey] specified when creating with [method TLSOptions.server]. + </description> + </method> + <method name="get_trusted_ca_chain" qualifiers="const"> + <return type="X509Certificate" /> + <description> + Returns the CA [X509Certificate] chain specified when creating with [method TLSOptions.client] or [method TLSOptions.client_unsafe]. + </description> + </method> + <method name="is_server" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if created with [method TLSOptions.server], [code]false[/code] otherwise. + </description> + </method> + <method name="is_unsafe_client" qualifiers="const"> + <return type="bool" /> + <description> + Returns [code]true[/code] if created with [method TLSOptions.client_unsafe], [code]false[/code] otherwise. + </description> + </method> <method name="server" qualifiers="static"> <return type="TLSOptions" /> <param index="0" name="key" type="CryptoKey" /> 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/classes/Vector2.xml b/doc/classes/Vector2.xml index a7df54e880..78183ae36c 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -196,7 +196,7 @@ <param index="0" name="with" type="Vector2" /> <description> Returns the dot product of this vector and [param with]. This can be used to compare the angle between two vectors. For example, this can be used to determine whether an enemy is facing the player. - The dot product will be [code]0[/code] for a straight angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees. + The dot product will be [code]0[/code] for a right angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees. When using unit (normalized) vectors, the result will always be between [code]-1.0[/code] (180 degree angle) when the vectors are facing opposite directions, and [code]1.0[/code] (0 degree angle) when the vectors are aligned. [b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]. </description> diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml index 1692ba3ece..c04fcd0b24 100644 --- a/doc/classes/Vector3.xml +++ b/doc/classes/Vector3.xml @@ -171,7 +171,7 @@ <param index="0" name="with" type="Vector3" /> <description> Returns the dot product of this vector and [param with]. This can be used to compare the angle between two vectors. For example, this can be used to determine whether an enemy is facing the player. - The dot product will be [code]0[/code] for a straight angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees. + The dot product will be [code]0[/code] for a right angle (90 degrees), greater than 0 for angles narrower than 90 degrees and lower than 0 for angles wider than 90 degrees. When using unit (normalized) vectors, the result will always be between [code]-1.0[/code] (180 degree angle) when the vectors are facing opposite directions, and [code]1.0[/code] (0 degree angle) when the vectors are aligned. [b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]. </description> 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.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index 5fabeb94f5..941b1a1b28 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -2742,8 +2742,7 @@ RasterizerCanvasGLES3::RasterizerCanvasGLES3() { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } - int uniform_max_size = config->max_uniform_buffer_size; - if (uniform_max_size < 65536) { + if (config->max_uniform_buffer_size < 65536) { data.max_lights_per_render = 64; } else { data.max_lights_per_render = 256; diff --git a/drivers/gles3/rasterizer_canvas_gles3.h b/drivers/gles3/rasterizer_canvas_gles3.h index a3762e828e..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, @@ -157,6 +156,8 @@ class RasterizerCanvasGLES3 : public RendererCanvasRender { float atlas_rect[4]; }; + static_assert(sizeof(LightUniform) % 16 == 0, "2D light UBO size must be a multiple of 16 bytes"); + public: enum { BASE_UNIFORM_LOCATION = 0, @@ -186,6 +187,8 @@ public: uint32_t pad2; }; + static_assert(sizeof(StateBuffer) % 16 == 0, "2D state UBO size must be a multiple of 16 bytes"); + struct PolygonBuffers { GLuint vertex_buffer = 0; GLuint vertex_array = 0; @@ -230,6 +233,8 @@ public: uint32_t lights[4]; }; + static_assert(sizeof(InstanceData) == 128, "2D instance data struct size must be 128 bytes"); + struct Data { GLuint canvas_quad_vertices; GLuint canvas_quad_array; diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index 071765a03c..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 @@ -398,8 +398,7 @@ void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, Display // Viewport doesn't cover entire window so clear window to black before blitting. // Querying the actual window size from the DisplayServer would deadlock in separate render thread mode, // so let's set the biggest viewport the implementation supports, to be sure the window is fully covered. - GLsizei max_vp[2] = {}; - glGetIntegerv(GL_MAX_VIEWPORT_DIMS, max_vp); + Size2i max_vp = GLES3::Utilities::get_singleton()->get_maximum_viewport_size(); glViewport(0, 0, max_vp[0], max_vp[1]); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 9ea030bbd4..8e89889fd1 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(); } diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index b6c7a0c5a5..4c70c43244 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -428,6 +428,7 @@ private: bool pancake_shadows; }; static_assert(sizeof(UBO) % 16 == 0, "Scene UBO size must be a multiple of 16 bytes"); + static_assert(sizeof(UBO) < 16384, "Scene UBO size must be 16384 bytes or smaller"); struct MultiviewUBO { float projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16]; @@ -435,6 +436,7 @@ private: float eye_offset[RendererSceneRender::MAX_RENDER_VIEWS][4]; }; static_assert(sizeof(MultiviewUBO) % 16 == 0, "Multiview UBO size must be a multiple of 16 bytes"); + static_assert(sizeof(MultiviewUBO) < 16384, "MultiviewUBO size must be 16384 bytes or smaller"); struct TonemapUBO { float exposure = 1.0; diff --git a/drivers/gles3/shader_gles3.cpp b/drivers/gles3/shader_gles3.cpp index 876309d22c..4a15ed827a 100644 --- a/drivers/gles3/shader_gles3.cpp +++ b/drivers/gles3/shader_gles3.cpp @@ -37,6 +37,7 @@ #include "core/io/file_access.h" #include "drivers/gles3/rasterizer_gles3.h" +#include "drivers/gles3/storage/config.h" static String _mkid(const String &p_id) { String id = "m_" + p_id.replace("__", "_dus_"); @@ -801,7 +802,9 @@ void ShaderGLES3::initialize(const String &p_general_defines, int p_base_texture print_verbose("Shader '" + name + "' SHA256: " + base_sha256); } - glGetInteger64v(GL_MAX_TEXTURE_IMAGE_UNITS, &max_image_units); + GLES3::Config *config = GLES3::Config::get_singleton(); + ERR_FAIL_NULL(config); + max_image_units = config->max_texture_image_units; } void ShaderGLES3::set_shader_cache_dir(const String &p_dir) { diff --git a/drivers/gles3/shader_gles3.h b/drivers/gles3/shader_gles3.h index 8968e76c12..9ee939e343 100644 --- a/drivers/gles3/shader_gles3.h +++ b/drivers/gles3/shader_gles3.h @@ -148,7 +148,7 @@ private: static bool shader_cache_save_debug; bool shader_cache_dir_valid = false; - int64_t max_image_units = 0; + GLint max_image_units = 0; enum StageType { STAGE_TYPE_VERTEX, diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 65332c06be..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 @@ -346,14 +339,16 @@ uniform sampler2D color_texture; //texunit:0 layout(location = 0) out vec4 frag_color; +/* clang-format off */ +// This needs to be outside clang-format so the ubo comment is in the right place #ifdef MATERIAL_UNIFORMS_USED -layout(std140) uniform MaterialUniforms{ -//ubo:4 +layout(std140) uniform MaterialUniforms{ //ubo:4 #MATERIAL_UNIFORMS }; #endif +/* clang-format on */ #GLOBALS 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 07e6d04cb7..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,10 +48,27 @@ 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 { - int64_t max_extensions = 0; - glGetInteger64v(GL_NUM_EXTENSIONS, &max_extensions); - for (int64_t i = 0; i < max_extensions; i++) { + GLint max_extensions = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &max_extensions); + for (int i = 0; i < max_extensions; i++) { const GLubyte *s = glGetStringi(GL_EXTENSIONS, i); if (!s) { break; @@ -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"); @@ -80,11 +102,14 @@ Config::Config() { rgtc_supported = extensions.has("GL_EXT_texture_compression_rgtc") || extensions.has("GL_ARB_texture_compression_rgtc") || extensions.has("EXT_texture_compression_rgtc"); } - glGetInteger64v(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &max_vertex_texture_image_units); - glGetInteger64v(GL_MAX_TEXTURE_IMAGE_UNITS, &max_texture_image_units); - glGetInteger64v(GL_MAX_TEXTURE_SIZE, &max_texture_size); + glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &max_vertex_texture_image_units); + glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &max_texture_image_units); + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); + glGetIntegerv(GL_MAX_VIEWPORT_DIMS, max_viewport_size); glGetInteger64v(GL_MAX_UNIFORM_BLOCK_SIZE, &max_uniform_buffer_size); - glGetInteger64v(GL_MAX_VIEWPORT_DIMS, max_viewport_size); + + // sanity clamp buffer size to 16K..1MB + max_uniform_buffer_size = CLAMP(max_uniform_buffer_size, 16384, 1048576); support_anisotropic_filter = extensions.has("GL_EXT_texture_filter_anisotropic"); if (support_anisotropic_filter) { diff --git a/drivers/gles3/storage/config.h b/drivers/gles3/storage/config.h index ee7b1b26ed..0c9f9bc275 100644 --- a/drivers/gles3/storage/config.h +++ b/drivers/gles3/storage/config.h @@ -57,11 +57,12 @@ public: bool use_nearest_mip_filter = false; bool use_depth_prepass = true; - int64_t max_vertex_texture_image_units = 0; - int64_t max_texture_image_units = 0; - int64_t max_texture_size = 0; - int64_t max_viewport_size[2] = { 0, 0 }; - int64_t max_uniform_buffer_size = 0; + GLint max_vertex_texture_image_units = 0; + GLint max_texture_image_units = 0; + GLint max_texture_size = 0; + GLint max_viewport_size[2] = { 0, 0 }; + GLint64 max_uniform_buffer_size = 0; + int64_t max_renderable_elements = 0; int64_t max_renderable_lights = 0; int64_t max_lights_per_object = 0; diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index 996c205042..21790d29b5 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -1055,6 +1055,7 @@ void MaterialData::update_parameters_internal(const HashMap<StringName, Variant> ubo_data.resize(p_ubo_size); if (ubo_data.size()) { + ERR_FAIL_COND(p_ubo_size > uint32_t(Config::get_singleton()->max_uniform_buffer_size)); memset(ubo_data.ptrw(), 0, ubo_data.size()); //clear } } @@ -1108,17 +1109,17 @@ MaterialStorage::MaterialStorage() { static_assert(sizeof(GlobalShaderUniforms::Value) == 16); - global_shader_uniforms.buffer_size = MAX(4096, (int)GLOBAL_GET("rendering/limits/global_shader_variables/buffer_size")); - if (global_shader_uniforms.buffer_size > uint32_t(Config::get_singleton()->max_uniform_buffer_size)) { - global_shader_uniforms.buffer_size = uint32_t(Config::get_singleton()->max_uniform_buffer_size); - 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)); + 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); } 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); @@ -1787,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); @@ -1998,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; } @@ -2078,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/particles_storage.h b/drivers/gles3/storage/particles_storage.h index ca347ed070..086f5f7936 100644 --- a/drivers/gles3/storage/particles_storage.h +++ b/drivers/gles3/storage/particles_storage.h @@ -145,6 +145,9 @@ private: Collider colliders[MAX_COLLIDERS]; }; + static_assert(sizeof(ParticlesFrameParams) % 16 == 0, "ParticlesFrameParams size must be a multiple of 16 bytes"); + static_assert(sizeof(ParticlesFrameParams) < 16384, "ParticlesFrameParams must be 16384 bytes or smaller"); + struct Particles { RS::ParticlesMode mode = RS::PARTICLES_MODE_3D; bool inactive = true; 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/gles3/storage/utilities.cpp b/drivers/gles3/storage/utilities.cpp index 356dc06733..7f0be36466 100644 --- a/drivers/gles3/storage/utilities.cpp +++ b/drivers/gles3/storage/utilities.cpp @@ -463,10 +463,7 @@ String Utilities::get_video_adapter_api_version() const { Size2i Utilities::get_maximum_viewport_size() const { Config *config = Config::get_singleton(); - if (!config) { - return Size2i(); - } - + ERR_FAIL_NULL_V(config, Size2i()); return Size2i(config->max_viewport_size[0], config->max_viewport_size[1]); } 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/action_map_editor.cpp b/editor/action_map_editor.cpp index f70730d540..6b237366fd 100644 --- a/editor/action_map_editor.cpp +++ b/editor/action_map_editor.cpp @@ -519,7 +519,7 @@ void ActionMapEditor::show_message(const String &p_message) { void ActionMapEditor::use_external_search_box(LineEdit *p_searchbox) { memdelete(action_list_search); action_list_search = p_searchbox; - action_list_search->connect("text_changed", callable_mp(this, &ActionMapEditor::_search_term_updated)); + action_list_search->connect(SceneStringName(text_changed), callable_mp(this, &ActionMapEditor::_search_term_updated)); } void ActionMapEditor::_on_filter_focused() { @@ -543,7 +543,7 @@ ActionMapEditor::ActionMapEditor() { action_list_search->set_h_size_flags(Control::SIZE_EXPAND_FILL); action_list_search->set_placeholder(TTR("Filter by Name")); action_list_search->set_clear_button_enabled(true); - action_list_search->connect("text_changed", callable_mp(this, &ActionMapEditor::_search_term_updated)); + action_list_search->connect(SceneStringName(text_changed), callable_mp(this, &ActionMapEditor::_search_term_updated)); top_hbox->add_child(action_list_search); action_list_search_by_event = memnew(EventListenerLineEdit); @@ -569,7 +569,7 @@ ActionMapEditor::ActionMapEditor() { add_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL); add_edit->set_placeholder(TTR("Add New Action")); add_edit->set_clear_button_enabled(true); - add_edit->connect("text_changed", callable_mp(this, &ActionMapEditor::_add_edit_text_changed)); + add_edit->connect(SceneStringName(text_changed), callable_mp(this, &ActionMapEditor::_add_edit_text_changed)); add_edit->connect("text_submitted", callable_mp(this, &ActionMapEditor::_add_action)); add_hbox->add_child(add_edit); @@ -614,7 +614,7 @@ ActionMapEditor::ActionMapEditor() { // Adding event dialog event_config_dialog = memnew(InputEventConfigurationDialog); - event_config_dialog->connect("confirmed", callable_mp(this, &ActionMapEditor::_event_config_confirmed)); + event_config_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ActionMapEditor::_event_config_confirmed)); add_child(event_config_dialog); message = memnew(AcceptDialog); diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index 2136a843b6..ad7598202f 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -242,9 +242,9 @@ void AnimationBezierTrackEdit::_notification(int p_what) { draw_rect(Rect2(Point2(), get_size()), accent, false, Math::round(EDSCALE)); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); int hsep = get_theme_constant(SNAME("h_separation"), SNAME("ItemList")); int vsep = get_theme_constant(SNAME("v_separation"), SNAME("ItemList")); Color linecolor = color; @@ -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(); } @@ -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(); @@ -1235,7 +1237,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 +1279,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 { @@ -1418,21 +1422,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 +1572,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 +1601,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; @@ -1763,12 +1769,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 +1815,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(); } @@ -1883,11 +1897,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(); @@ -1928,6 +1946,7 @@ void AnimationBezierTrackEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("_bezier_track_insert_key"), &AnimationBezierTrackEdit::_bezier_track_insert_key); 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..888dad5341 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); diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index d45f1d7a78..a3d0dfb89b 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); @@ -1435,9 +1435,9 @@ void AnimationTimelineEdit::_notification(int p_what) { return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); int zoomw = key_range; float scale = get_zoom_scale(); @@ -1627,8 +1627,8 @@ void AnimationTimelineEdit::set_animation(const Ref<Animation> &p_animation, boo Size2 AnimationTimelineEdit::get_minimum_size() const { Size2 ms = add_track->get_minimum_size(); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); ms.height = MAX(ms.height, font->get_height(font_size)); ms.width = get_buttons_width() + add_track->get_minimum_size().width + get_editor_theme_icon(SNAME("Hsize"))->get_width() + 2; return ms; @@ -1636,7 +1636,7 @@ Size2 AnimationTimelineEdit::get_minimum_size() const { void AnimationTimelineEdit::set_zoom(Range *p_zoom) { zoom = p_zoom; - zoom->connect("value_changed", callable_mp(this, &AnimationTimelineEdit::_zoom_changed)); + zoom->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTimelineEdit::_zoom_changed)); } void AnimationTimelineEdit::auto_fit() { @@ -1922,7 +1922,7 @@ AnimationTimelineEdit::AnimationTimelineEdit() { length->set_custom_minimum_size(Vector2(70 * EDSCALE, 0)); length->set_hide_slider(true); length->set_tooltip_text(TTR("Animation length (seconds)")); - length->connect("value_changed", callable_mp(this, &AnimationTimelineEdit::_anim_length_changed)); + length->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTimelineEdit::_anim_length_changed)); len_hb->add_child(length); loop = memnew(Button); loop->set_flat(true); @@ -1983,9 +1983,9 @@ void AnimationTrackEdit::_notification(int p_what) { draw_style_box(get_theme_stylebox(SNAME("Focus"), EditorStringName(EditorStyles)), Rect2(Point2(1 * EDSCALE, 0), get_size() - Size2(1 * EDSCALE, 0))); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); int hsep = get_theme_constant(SNAME("h_separation"), SNAME("ItemList")); Color linecolor = color; linecolor.a = 0.2; @@ -2323,7 +2323,7 @@ void AnimationTrackEdit::draw_key_link(int p_index, float p_pixels_sec, int p_x, return; } - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); color.a = 0.5; int from_x = MAX(p_x, p_clip_left); @@ -2360,9 +2360,9 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool Vector2 ofs(p_x - icon_to_draw->get_width() / 2, int(get_size().height - icon_to_draw->get_height()) / 2); if (animation->track_get_type(track) == Animation::TYPE_METHOD) { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); color.a = 0.5; Dictionary d = animation->track_get_key_value(track, p_index); @@ -2485,8 +2485,8 @@ NodePath AnimationTrackEdit::get_path() const { Size2 AnimationTrackEdit::get_minimum_size() const { Ref<Texture2D> texture = get_editor_theme_icon(SNAME("Object")); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int separation = get_theme_constant(SNAME("v_separation"), SNAME("ItemList")); int max_h = MAX(texture->get_height(), font->get_height(font_size)); @@ -2826,6 +2826,9 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) { } menu->reset_size(); + moving_selection_attempt = false; + moving_selection = false; + Vector2 popup_pos = get_screen_position() + update_mode_rect.position + Vector2(0, update_mode_rect.size.height); menu->set_position(popup_pos); menu->popup(); @@ -2872,6 +2875,9 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) { } menu->reset_size(); + moving_selection_attempt = false; + moving_selection = false; + Vector2 popup_pos = get_screen_position() + interp_mode_rect.position + Vector2(0, interp_mode_rect.size.height); menu->set_position(popup_pos); menu->popup(); @@ -2889,6 +2895,9 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) { menu->add_icon_item(get_editor_theme_icon(SNAME("InterpWrapLoop")), TTR("Wrap Loop Interp"), MENU_LOOP_WRAP); menu->reset_size(); + moving_selection_attempt = false; + moving_selection = false; + Vector2 popup_pos = get_screen_position() + loop_wrap_rect.position + Vector2(0, loop_wrap_rect.size.height); menu->set_position(popup_pos); menu->popup(); @@ -2943,6 +2952,9 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) { } menu->reset_size(); + moving_selection_attempt = false; + moving_selection = false; + menu->set_position(get_screen_position() + get_local_mouse_position()); menu->popup(); @@ -2965,6 +2977,10 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) { path->set_text(animation->track_get_path(track)); Vector2 theme_ofs = path->get_theme_stylebox(CoreStringName(normal), SNAME("LineEdit"))->get_offset(); + + moving_selection_attempt = false; + moving_selection = false; + path_popup->set_position(get_screen_position() + path_rect.position - theme_ofs); path_popup->set_size(path_rect.size); path_popup->popup(); @@ -3402,10 +3418,10 @@ void AnimationTrackEditGroup::_notification(int p_what) { } break; case NOTIFICATION_DRAW: { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int separation = get_theme_constant(SNAME("h_separation"), SNAME("ItemList")); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); if (root) { Node *n = root->get_node_or_null(node); @@ -3467,8 +3483,8 @@ void AnimationTrackEditGroup::set_type_and_name(const Ref<Texture2D> &p_type, co } Size2 AnimationTrackEditGroup::get_minimum_size() const { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int separation = get_theme_constant(SNAME("v_separation"), SNAME("ItemList")); return Vector2(0, MAX(font->get_height(font_size), icon_size.y) + separation); @@ -4425,7 +4441,7 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD } } - float time = timeline->get_play_position(); + float time = p_id.time == FLT_MAX ? timeline->get_play_position() : p_id.time; Variant value; switch (p_id.type) { @@ -4433,7 +4449,9 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD case Animation::TYPE_ROTATION_3D: case Animation::TYPE_SCALE_3D: case Animation::TYPE_BLEND_SHAPE: - case Animation::TYPE_VALUE: { + case Animation::TYPE_VALUE: + case Animation::TYPE_AUDIO: + case Animation::TYPE_ANIMATION: { value = p_id.value; } break; @@ -4449,10 +4467,9 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD bezier_edit_icon->set_disabled(false); } break; - case Animation::TYPE_ANIMATION: { - value = p_id.value; - } break; default: { + // Other track types shouldn't use this code path. + DEV_ASSERT(false); } } @@ -5067,17 +5084,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: @@ -5185,87 +5192,68 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { p_ofs += SECOND_DECIMAL; } - EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); + Node *node = root->get_node_or_null(animation->track_get_path(p_track)); + if (!node) { + EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a key.")); + return; + } + + // Special handling for this one. + if (animation->track_get_type(p_track) == Animation::TYPE_METHOD) { + method_selector->select_method_from_instance(node); + + insert_key_from_track_call_ofs = p_ofs; + insert_key_from_track_call_track = p_track; + return; + } + + InsertData id; + id.path = animation->track_get_path(p_track); + id.advance = false; + id.track_idx = p_track; + id.type = animation->track_get_type(p_track); + // TRANSLATORS: This describes the target of new animation track, will be inserted into another string. + id.query = vformat(TTR("node '%s'"), node->get_name()); + id.time = p_ofs; + // id.value is filled in each case handled below. + switch (animation->track_get_type(p_track)) { case Animation::TYPE_POSITION_3D: { - if (!root->has_node(animation->track_get_path(p_track))) { - EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a key.")); - return; - } - Node3D *base = Object::cast_to<Node3D>(root->get_node(animation->track_get_path(p_track))); + Node3D *base = Object::cast_to<Node3D>(node); if (!base) { EditorNode::get_singleton()->show_warning(TTR("Track is not of type Node3D, can't insert key")); return; } - Vector3 pos = base->get_position(); - - undo_redo->create_action(TTR("Add Position Key")); - undo_redo->add_do_method(animation.ptr(), "position_track_insert_key", p_track, p_ofs, pos); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); - + id.value = base->get_position(); } break; case Animation::TYPE_ROTATION_3D: { - if (!root->has_node(animation->track_get_path(p_track))) { - EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a key.")); - return; - } - Node3D *base = Object::cast_to<Node3D>(root->get_node(animation->track_get_path(p_track))); + Node3D *base = Object::cast_to<Node3D>(node); if (!base) { EditorNode::get_singleton()->show_warning(TTR("Track is not of type Node3D, can't insert key")); return; } - Quaternion rot = base->get_transform().basis.operator Quaternion(); - - undo_redo->create_action(TTR("Add Rotation Key")); - undo_redo->add_do_method(animation.ptr(), "rotation_track_insert_key", p_track, p_ofs, rot); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); - + id.value = base->get_transform().basis.operator Quaternion(); } break; case Animation::TYPE_SCALE_3D: { - if (!root->has_node(animation->track_get_path(p_track))) { - EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a key.")); - return; - } - Node3D *base = Object::cast_to<Node3D>(root->get_node(animation->track_get_path(p_track))); + Node3D *base = Object::cast_to<Node3D>(node); if (!base) { EditorNode::get_singleton()->show_warning(TTR("Track is not of type Node3D, can't insert key")); return; } - undo_redo->create_action(TTR("Add Scale Key")); - undo_redo->add_do_method(animation.ptr(), "scale_track_insert_key", p_track, p_ofs, base->get_scale()); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); - + id.value = base->get_scale(); } break; case Animation::TYPE_BLEND_SHAPE: case Animation::TYPE_VALUE: { NodePath bp; - Variant value; - _find_hint_for_track(p_track, bp, &value); - - undo_redo->create_action(TTR("Add Track Key")); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, value); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); - + _find_hint_for_track(p_track, bp, &id.value); } break; case Animation::TYPE_METHOD: { - if (!root->has_node(animation->track_get_path(p_track))) { - EditorNode::get_singleton()->show_warning(TTR("Track path is invalid, so can't add a method key.")); - return; - } Node *base = root->get_node_or_null(animation->track_get_path(p_track)); ERR_FAIL_NULL(base); @@ -5287,12 +5275,7 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { arr[3] = 0.25; arr[4] = 0; - undo_redo->create_action(TTR("Add Track Key")); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, arr); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); - + id.value = arr; } break; case Animation::TYPE_AUDIO: { Dictionary ak; @@ -5300,22 +5283,18 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { ak["start_offset"] = 0; ak["end_offset"] = 0; - undo_redo->create_action(TTR("Add Track Key")); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, ak); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); + id.value = ak; } break; case Animation::TYPE_ANIMATION: { - StringName anim = "[stop]"; - - undo_redo->create_action(TTR("Add Track Key")); - undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, anim); - undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); - undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", p_track, p_ofs); - undo_redo->commit_action(); + id.value = StringName("[stop]"); } break; + default: { + // All track types should be handled by now. + DEV_ASSERT(false); + } } + + _query_insert(id); } void AnimationTrackEditor::_add_method_key(const String &p_method) { @@ -7211,7 +7190,7 @@ AnimationTrackEditor::AnimationTrackEditor() { timeline->connect("timeline_changed", callable_mp(this, &AnimationTrackEditor::_timeline_changed)); timeline->connect("name_limit_changed", callable_mp(this, &AnimationTrackEditor::_name_limit_changed)); timeline->connect("track_added", callable_mp(this, &AnimationTrackEditor::_add_track)); - timeline->connect("value_changed", callable_mp(this, &AnimationTrackEditor::_timeline_value_changed)); + timeline->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTrackEditor::_timeline_value_changed)); timeline->connect("length_changed", callable_mp(this, &AnimationTrackEditor::_update_length)); panner.instantiate(); @@ -7240,7 +7219,7 @@ AnimationTrackEditor::AnimationTrackEditor() { hscroll = memnew(HScrollBar); hscroll->share(timeline); hscroll->hide(); - hscroll->connect("value_changed", callable_mp(this, &AnimationTrackEditor::_update_scroll)); + hscroll->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTrackEditor::_update_scroll)); timeline_vbox->add_child(hscroll); timeline->set_hscroll(hscroll); @@ -7318,14 +7297,14 @@ AnimationTrackEditor::AnimationTrackEditor() { step->set_custom_minimum_size(Size2(100, 0) * EDSCALE); step->set_tooltip_text(TTR("Animation step value.")); bottom_hb->add_child(step); - step->connect("value_changed", callable_mp(this, &AnimationTrackEditor::_update_step)); + step->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTrackEditor::_update_step)); step->set_read_only(true); snap_mode = memnew(OptionButton); snap_mode->add_item(TTR("Seconds")); snap_mode->add_item(TTR("FPS")); bottom_hb->add_child(snap_mode); - snap_mode->connect("item_selected", callable_mp(this, &AnimationTrackEditor::_snap_mode_changed)); + snap_mode->connect(SceneStringName(item_selected), callable_mp(this, &AnimationTrackEditor::_snap_mode_changed)); snap_mode->set_disabled(true); bottom_hb->add_child(memnew(VSeparator)); @@ -7404,7 +7383,7 @@ AnimationTrackEditor::AnimationTrackEditor() { pick_track->register_text_enter(pick_track->get_filter_line_edit()); pick_track->set_title(TTR("Pick a node to animate:")); pick_track->connect("selected", callable_mp(this, &AnimationTrackEditor::_new_track_node_selected)); - pick_track->get_filter_line_edit()->connect("text_changed", callable_mp(this, &AnimationTrackEditor::_pick_track_filter_text_changed)); + pick_track->get_filter_line_edit()->connect(SceneStringName(text_changed), callable_mp(this, &AnimationTrackEditor::_pick_track_filter_text_changed)); pick_track->get_filter_line_edit()->connect(SceneStringName(gui_input), callable_mp(this, &AnimationTrackEditor::_pick_track_filter_input)); prop_selector = memnew(PropertySelector); @@ -7417,7 +7396,7 @@ AnimationTrackEditor::AnimationTrackEditor() { insert_confirm = memnew(ConfirmationDialog); add_child(insert_confirm); - insert_confirm->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_confirm_insert_list)); + insert_confirm->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_confirm_insert_list)); VBoxContainer *icvb = memnew(VBoxContainer); insert_confirm->add_child(icvb); insert_confirm_text = memnew(Label); @@ -7474,7 +7453,7 @@ AnimationTrackEditor::AnimationTrackEditor() { optimize_vb->add_margin_child(TTR("Max Precision Error:"), optimize_precision_error); optimize_dialog->set_ok_button_text(TTR("Optimize")); - optimize_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_OPTIMIZE_ANIMATION_CONFIRM)); + optimize_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_OPTIMIZE_ANIMATION_CONFIRM)); // cleanup_dialog = memnew(ConfirmationDialog); @@ -7509,7 +7488,7 @@ AnimationTrackEditor::AnimationTrackEditor() { cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)")); cleanup_dialog->set_ok_button_text(TTR("Clean-Up")); - cleanup_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); + cleanup_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_CLEAN_UP_ANIMATION_CONFIRM)); // scale_dialog = memnew(ConfirmationDialog); @@ -7521,13 +7500,13 @@ AnimationTrackEditor::AnimationTrackEditor() { scale->set_max(99999); scale->set_step(0.001); vbc->add_margin_child(TTR("Scale Ratio:"), scale); - scale_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_SCALE_CONFIRM)); + scale_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_SCALE_CONFIRM)); add_child(scale_dialog); // ease_dialog = memnew(ConfirmationDialog); ease_dialog->set_title(TTR("Select Transition and Easing")); - ease_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_EASE_CONFIRM)); + ease_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_EASE_CONFIRM)); add_child(ease_dialog); GridContainer *ease_grid = memnew(GridContainer); ease_grid->set_columns(2); @@ -7569,7 +7548,7 @@ AnimationTrackEditor::AnimationTrackEditor() { // bake_dialog = memnew(ConfirmationDialog); bake_dialog->set_title(TTR("Animation Baker")); - bake_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_BAKE_ANIMATION_CONFIRM)); + bake_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_BAKE_ANIMATION_CONFIRM)); add_child(bake_dialog); GridContainer *bake_grid = memnew(GridContainer); bake_grid->set_columns(2); @@ -7614,7 +7593,7 @@ AnimationTrackEditor::AnimationTrackEditor() { track_copy_select->set_v_size_flags(SIZE_EXPAND_FILL); track_copy_select->set_hide_root(true); track_copy_vbox->add_child(track_copy_select); - track_copy_dialog->connect("confirmed", callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_COPY_TRACKS_CONFIRM)); + track_copy_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_COPY_TRACKS_CONFIRM)); } AnimationTrackEditor::~AnimationTrackEditor() { diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 1498a948f5..4c7c1a58f8 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -464,6 +464,7 @@ class AnimationTrackEditor : public VBoxContainer { Animation::TrackType type; NodePath path; int track_idx = 0; + float time = FLT_MAX; // Defaults to current timeline position. Variant value; String query; bool advance = false; diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index 7a53f4dded..0297aaaf7f 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -82,14 +82,14 @@ void AnimationTrackEditBool::draw_key(int p_index, float p_pixels_sec, int p_x, /// COLOR /// int AnimationTrackEditColor::get_key_height() const { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return font->get_height(font_size) * 0.8; } Rect2 AnimationTrackEditColor::get_key_rect(int p_index, float p_pixels_sec) { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; return Rect2(-fh / 2, 0, fh, get_size().height); } @@ -99,8 +99,8 @@ bool AnimationTrackEditColor::is_key_selectable_by_distance() const { } void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int p_x, int p_next_x, int p_clip_left, int p_clip_right) { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = (font->get_height(font_size) * 0.8); fh /= 3; @@ -168,8 +168,8 @@ void AnimationTrackEditColor::draw_key_link(int p_index, float p_pixels_sec, int void AnimationTrackEditColor::draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right) { Color color = get_animation()->track_get_key_value(get_track(), p_index); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x - fh / 2, int(get_size().height - fh) / 2), Size2(fh, fh)); @@ -207,8 +207,8 @@ int AnimationTrackEditAudio::get_key_height() const { return AnimationTrackEdit::get_key_height(); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return int(font->get_height(font_size) * 1.5); } @@ -240,8 +240,8 @@ Rect2 AnimationTrackEditAudio::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } @@ -304,8 +304,8 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); float fh = int(font->get_height(font_size) * 1.5); Rect2 rect = Rect2(from_x, (get_size().height - fh) / 2, to_x - from_x, fh); draw_rect(rect, Color(0.25, 0.25, 0.25)); @@ -334,12 +334,12 @@ void AnimationTrackEditAudio::draw_key(int p_index, float p_pixels_sec, int p_x, draw_rect(rect, accent, false); } } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); draw_rect_clipped(rect, color); if (p_selected) { @@ -367,8 +367,8 @@ int AnimationTrackEditSpriteFrame::get_key_height() const { return AnimationTrackEdit::get_key_height(); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return int(font->get_height(font_size) * 2); } @@ -435,8 +435,8 @@ Rect2 AnimationTrackEditSpriteFrame::get_key_rect(int p_index, float p_pixels_se size = size.floor(); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int height = int(font->get_height(font_size) * 2); int width = height * size.width / size.height; @@ -526,8 +526,8 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in region.size = texture->get_size(); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int height = int(font->get_height(font_size) * 2); int width = height * region.size.width / region.size.height; @@ -570,8 +570,8 @@ int AnimationTrackEditSubAnim::get_key_height() const { return AnimationTrackEdit::get_key_height(); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return int(font->get_height(font_size) * 1.5); } @@ -599,8 +599,8 @@ Rect2 AnimationTrackEditSubAnim::get_key_rect(int p_index, float p_pixels_sec) { return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } @@ -654,13 +654,13 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); Color bg = color; bg.r = 1 - color.r; bg.g = 1 - color.g; @@ -705,12 +705,12 @@ void AnimationTrackEditSubAnim::draw_key(int p_index, float p_pixels_sec, int p_ draw_rect(rect, accent, false); } } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); draw_rect_clipped(rect, color); if (p_selected) { @@ -783,7 +783,7 @@ void AnimationTrackEditVolumeDB::draw_key_link(int p_index, float p_pixels_sec, int y_from = (get_size().height - tex_h) / 2; - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); color.a *= 0.7; draw_line(Point2(from_x, y_from + h * tex_h), Point2(to_x, y_from + h_n * tex_h), color, 2); @@ -804,8 +804,8 @@ void AnimationTrackEditTypeAudio::_preview_changed(ObjectID p_which) { } int AnimationTrackEditTypeAudio::get_key_height() const { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return int(font->get_height(font_size) * 1.5); } @@ -870,8 +870,8 @@ void AnimationTrackEditTypeAudio::draw_key(int p_index, float p_pixels_sec, int } } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); float fh = int(font->get_height(font_size) * 1.5); Ref<AudioStreamPreview> preview = AudioStreamPreviewGenerator::get_singleton()->generate_preview(stream); @@ -1175,8 +1175,8 @@ int AnimationTrackEditTypeAnimation::get_key_height() const { return AnimationTrackEdit::get_key_height(); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return int(font->get_height(font_size) * 1.5); } @@ -1204,8 +1204,8 @@ Rect2 AnimationTrackEditTypeAnimation::get_key_rect(int p_index, float p_pixels_ return Rect2(0, 0, len * p_pixels_sec, get_size().height); } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; return Rect2(0, 0, fh, get_size().height); } @@ -1259,13 +1259,13 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 1.5; Rect2 rect(from_x, int(get_size().height - fh) / 2, to_x - from_x, fh); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); Color bg = color; bg.r = 1 - color.r; bg.g = 1 - color.g; @@ -1310,12 +1310,12 @@ void AnimationTrackEditTypeAnimation::draw_key(int p_index, float p_pixels_sec, draw_rect(rect, accent, false); } } else { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); int fh = font->get_height(font_size) * 0.8; Rect2 rect(Vector2(p_x, int(get_size().height - fh) / 2), Size2(fh, fh)); - Color color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Label")); draw_rect_clipped(rect, color); if (p_selected) { diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 0e272429a3..a9d37a6a99 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -115,7 +115,7 @@ void FindReplaceBar::_notification(int p_what) { } break; case NOTIFICATION_THEME_CHANGED: { - matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } break; case NOTIFICATION_PREDELETE: { @@ -252,7 +252,7 @@ void FindReplaceBar::_replace() { void FindReplaceBar::_replace_all() { text_editor->begin_complex_operation(); text_editor->remove_secondary_carets(); - text_editor->disconnect("text_changed", callable_mp(this, &FindReplaceBar::_editor_text_changed)); + text_editor->disconnect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_editor_text_changed)); // Line as x so it gets priority in comparison, column as y. Point2i orig_cursor(text_editor->get_caret_line(0), text_editor->get_caret_column(0)); Point2i prev_match = Point2(-1, -1); @@ -338,27 +338,27 @@ void FindReplaceBar::_replace_all() { } text_editor->set_v_scroll(vsval); - matches_label->add_theme_color_override("font_color", rc > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + matches_label->add_theme_color_override(SceneStringName(font_color), rc > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); matches_label->set_text(vformat(TTR("%d replaced."), rc)); - callable_mp((Object *)text_editor, &Object::connect).call_deferred("text_changed", callable_mp(this, &FindReplaceBar::_editor_text_changed), 0U); + callable_mp((Object *)text_editor, &Object::connect).call_deferred(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_editor_text_changed), 0U); results_count = -1; results_count_to_current = -1; 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() { @@ -437,7 +450,7 @@ void FindReplaceBar::_update_matches_display() { } else { matches_label->show(); - matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); if (results_count == 0) { matches_label->set_text(TTR("No match")); @@ -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,9 +674,10 @@ 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("text_changed", callable_mp(this, &FindReplaceBar::_editor_text_changed)); + text_editor->disconnect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_editor_text_changed)); text_editor = nullptr; } @@ -668,10 +690,9 @@ void FindReplaceBar::set_text_edit(CodeTextEditor *p_text_editor) { needs_to_count_results = true; base_text_editor = p_text_editor; text_editor = base_text_editor->get_text_editor(); - text_editor->connect("text_changed", callable_mp(this, &FindReplaceBar::_editor_text_changed)); + 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() { @@ -708,7 +729,7 @@ FindReplaceBar::FindReplaceBar() { search_text->set_placeholder(TTR("Find")); search_text->set_tooltip_text(TTR("Find")); search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - search_text->connect("text_changed", callable_mp(this, &FindReplaceBar::_search_text_changed)); + search_text->connect(SceneStringName(text_changed), callable_mp(this, &FindReplaceBar::_search_text_changed)); search_text->connect("text_submitted", callable_mp(this, &FindReplaceBar::_search_text_submitted)); search_text->connect(SceneStringName(focus_exited), callable_mp(this, &FindReplaceBar::_focus_lost)); @@ -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")); @@ -1430,17 +1454,17 @@ void CodeTextEditor::_update_text_editor_theme() { for (int i = 0; i < count; i++) { Control *n = Object::cast_to<Control>(status_bar->get_child(i)); if (n) { - n->add_theme_font_override(SNAME("font"), status_bar_font); - n->add_theme_font_size_override(SNAME("font_size"), status_bar_font_size); + n->add_theme_font_override(SceneStringName(font), status_bar_font); + n->add_theme_font_size_override(SceneStringName(font_size), status_bar_font_size); } } const Color &error_color = get_theme_color(SNAME("error_color"), EditorStringName(Editor)); const Color &warning_color = get_theme_color(SNAME("warning_color"), EditorStringName(Editor)); - error->add_theme_color_override(SNAME("font_color"), error_color); - error_button->add_theme_color_override(SNAME("font_color"), error_color); - warning_button->add_theme_color_override(SNAME("font_color"), warning_color); + error->add_theme_color_override(SceneStringName(font_color), error_color); + error_button->add_theme_color_override(SceneStringName(font_color), error_color); + warning_button->add_theme_color_override(SceneStringName(font_color), warning_color); _update_font_ligatures(); } @@ -1448,7 +1472,7 @@ void CodeTextEditor::_update_text_editor_theme() { void CodeTextEditor::_update_font_ligatures() { int ot_mode = EDITOR_GET("interface/editor/code_font_contextual_ligatures"); - Ref<FontVariation> fc = text_editor->get_theme_font(SNAME("font")); + Ref<FontVariation> fc = text_editor->get_theme_font(SceneStringName(font)); if (fc.is_valid()) { switch (ot_mode) { case 1: { // Disable ligatures. @@ -1633,12 +1657,12 @@ void CodeTextEditor::remove_all_bookmarks() { } void CodeTextEditor::_zoom_in() { - int s = text_editor->get_theme_font_size("font_size"); + int s = text_editor->get_theme_font_size(SceneStringName(font_size)); _zoom_to(zoom_factor * (s + MAX(1.0f, EDSCALE)) / s); } void CodeTextEditor::_zoom_out() { - int s = text_editor->get_theme_font_size("font_size"); + int s = text_editor->get_theme_font_size(SceneStringName(font_size)); _zoom_to(zoom_factor * (s - MAX(1.0f, EDSCALE)) / s); } @@ -1664,10 +1688,10 @@ void CodeTextEditor::set_zoom_factor(float p_zoom_factor) { zoom_button->set_text(itos(Math::round(zoom_factor * 100)) + " %"); - if (text_editor->has_theme_font_size_override("font_size")) { - text_editor->remove_theme_font_size_override("font_size"); + if (text_editor->has_theme_font_size_override(SceneStringName(font_size))) { + text_editor->remove_theme_font_size_override(SceneStringName(font_size)); } - text_editor->add_theme_font_size_override("font_size", new_font_size); + text_editor->add_theme_font_size_override(SceneStringName(font_size), new_font_size); } float CodeTextEditor::get_zoom_factor() { @@ -1816,7 +1840,7 @@ CodeTextEditor::CodeTextEditor() { text_editor->connect(SceneStringName(gui_input), callable_mp(this, &CodeTextEditor::_text_editor_gui_input)); text_editor->connect("caret_changed", callable_mp(this, &CodeTextEditor::_line_col_changed)); - text_editor->connect("text_changed", callable_mp(this, &CodeTextEditor::_text_changed)); + text_editor->connect(SceneStringName(text_changed), callable_mp(this, &CodeTextEditor::_text_changed)); text_editor->connect("code_completion_requested", callable_mp(this, &CodeTextEditor::_complete_request)); TypedArray<String> cs; cs.push_back("."); 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 cede2c0ab6..bfc4d91af7 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -670,8 +670,8 @@ void ConnectDialog::init(const ConnectionData &p_cd, const PackedStringArray &p_ void ConnectDialog::popup_dialog(const String &p_for_signal) { from_signal->set_text(p_for_signal); - warning_label->add_theme_color_override("font_color", warning_label->get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); - error_label->add_theme_color_override("font_color", error_label->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + warning_label->add_theme_color_override(SceneStringName(font_color), warning_label->get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + error_label->add_theme_color_override(SceneStringName(font_color), error_label->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); filter_nodes->clear(); if (!advanced->is_pressed()) { @@ -737,7 +737,7 @@ ConnectDialog::ConnectDialog() { filter_nodes->set_h_size_flags(Control::SIZE_FILL | Control::SIZE_EXPAND); filter_nodes->set_placeholder(TTR("Filter Nodes")); filter_nodes->set_clear_button_enabled(true); - filter_nodes->connect("text_changed", callable_mp(tree, &SceneTreeEditor::set_filter)); + filter_nodes->connect(SceneStringName(text_changed), callable_mp(tree, &SceneTreeEditor::set_filter)); Button *focus_current = memnew(Button); hbc_filter->add_child(focus_current); @@ -769,14 +769,14 @@ ConnectDialog::ConnectDialog() { method_vbc->add_child(method_search); method_search->set_placeholder(TTR("Filter Methods")); method_search->set_clear_button_enabled(true); - method_search->connect("text_changed", callable_mp(this, &ConnectDialog::_update_method_tree).unbind(1)); + method_search->connect(SceneStringName(text_changed), callable_mp(this, &ConnectDialog::_update_method_tree).unbind(1)); method_tree = memnew(Tree); method_vbc->add_child(method_tree); method_tree->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); method_tree->set_v_size_flags(Control::SIZE_EXPAND_FILL); method_tree->set_hide_root(true); - method_tree->connect("item_selected", callable_mp(this, &ConnectDialog::_method_selected)); + method_tree->connect(SceneStringName(item_selected), callable_mp(this, &ConnectDialog::_method_selected)); method_tree->connect("item_activated", callable_mp((Window *)method_popup, &Window::hide)); empty_tree_label = memnew(Label(TTR("No method found matching given filters."))); @@ -839,7 +839,7 @@ ConnectDialog::ConnectDialog() { unbind_count = memnew(SpinBox); unbind_count->set_tooltip_text(TTR("Allows to drop arguments sent by signal emitter.")); - unbind_count->connect("value_changed", callable_mp(this, &ConnectDialog::_unbind_count_changed)); + unbind_count->connect(SceneStringName(value_changed), callable_mp(this, &ConnectDialog::_unbind_count_changed)); vbc_right->add_margin_child(TTR("Unbind Signal Arguments:"), unbind_count); @@ -848,7 +848,7 @@ ConnectDialog::ConnectDialog() { dst_method = memnew(LineEdit); dst_method->set_h_size_flags(Control::SIZE_EXPAND_FILL); - dst_method->connect("text_changed", callable_mp(method_tree, &Tree::deselect_all).unbind(1)); + dst_method->connect(SceneStringName(text_changed), callable_mp(method_tree, &Tree::deselect_all).unbind(1)); hbc_method->add_child(dst_method); register_text_enter(dst_method); @@ -981,7 +981,6 @@ void ConnectionsDock::_make_or_edit_connection() { } EditorNode::get_singleton()->emit_signal(SNAME("script_add_function_request"), target, cd.method, script_function_args); - hide(); } update_tree(); @@ -1586,7 +1585,7 @@ ConnectionsDock::ConnectionsDock() { search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); search_box->set_placeholder(TTR("Filter Signals")); search_box->set_clear_button_enabled(true); - search_box->connect("text_changed", callable_mp(this, &ConnectionsDock::_filter_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &ConnectionsDock::_filter_changed)); vbc->add_child(search_box); tree = memnew(ConnectionsDockTree); @@ -1607,13 +1606,12 @@ ConnectionsDock::ConnectionsDock() { connect_button->connect(SceneStringName(pressed), callable_mp(this, &ConnectionsDock::_connect_pressed)); connect_dialog = memnew(ConnectDialog); - connect_dialog->connect("connected", callable_mp(NodeDock::get_singleton(), &NodeDock::restore_last_valid_node), CONNECT_DEFERRED); connect_dialog->set_process_shortcut_input(true); add_child(connect_dialog); disconnect_all_dialog = memnew(ConfirmationDialog); add_child(disconnect_all_dialog); - disconnect_all_dialog->connect("confirmed", callable_mp(this, &ConnectionsDock::_disconnect_all)); + disconnect_all_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ConnectionsDock::_disconnect_all)); disconnect_all_dialog->set_text(TTR("Are you sure you want to remove all connections from this signal?")); class_menu = memnew(PopupMenu); @@ -1641,7 +1639,7 @@ ConnectionsDock::ConnectionsDock() { add_child(slot_menu); connect_dialog->connect("connected", callable_mp(this, &ConnectionsDock::_make_or_edit_connection)); - tree->connect("item_selected", callable_mp(this, &ConnectionsDock::_tree_item_selected)); + tree->connect(SceneStringName(item_selected), callable_mp(this, &ConnectionsDock::_tree_item_selected)); tree->connect("item_activated", callable_mp(this, &ConnectionsDock::_tree_item_activated)); tree->connect(SceneStringName(gui_input), callable_mp(this, &ConnectionsDock::_tree_gui_input)); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 2b36b9254c..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); } } } @@ -447,11 +452,11 @@ void CreateDialog::_sbox_input(const Ref<InputEvent> &p_ie) { void CreateDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &CreateDialog::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &CreateDialog::_confirmed)); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &CreateDialog::_confirmed)); + disconnect(SceneStringName(confirmed), callable_mp(this, &CreateDialog::_confirmed)); } break; case NOTIFICATION_VISIBILITY_CHANGED: { @@ -777,7 +782,7 @@ CreateDialog::CreateDialog() { recent->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); rec_vb->add_margin_child(TTR("Recent:"), recent, true); recent->set_allow_reselect(true); - recent->connect("item_selected", callable_mp(this, &CreateDialog::_history_selected)); + recent->connect(SceneStringName(item_selected), callable_mp(this, &CreateDialog::_history_selected)); recent->connect("item_activated", callable_mp(this, &CreateDialog::_history_activated)); recent->add_theme_constant_override("draw_guides", 1); @@ -789,7 +794,7 @@ CreateDialog::CreateDialog() { search_box = memnew(LineEdit); search_box->set_clear_button_enabled(true); search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); - search_box->connect("text_changed", callable_mp(this, &CreateDialog::_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &CreateDialog::_text_changed)); search_box->connect(SceneStringName(gui_input), callable_mp(this, &CreateDialog::_sbox_input)); HBoxContainer *search_hb = memnew(HBoxContainer); diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index 3f8df5e313..d3bd18c0e8 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -416,20 +416,20 @@ void EditorDebuggerNode::_update_errors() { if (error_count == 0 && warning_count == 0) { debugger_button->set_text(TTR("Debugger")); - debugger_button->remove_theme_color_override("font_color"); + debugger_button->remove_theme_color_override(SceneStringName(font_color)); debugger_button->set_icon(Ref<Texture2D>()); } else { debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); if (error_count >= 1 && warning_count >= 1) { debugger_button->set_icon(get_editor_theme_icon(SNAME("ErrorWarning"))); // Use error color to represent the highest level of severity reported. - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + debugger_button->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } else if (error_count >= 1) { debugger_button->set_icon(get_editor_theme_icon(SNAME("Error"))); - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + debugger_button->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } else { debugger_button->set_icon(get_editor_theme_icon(SNAME("Warning"))); - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + debugger_button->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } } last_error_count = error_count; diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp index 332e8f2ffc..1ea9a66534 100644 --- a/editor/debugger/editor_performance_profiler.cpp +++ b/editor/debugger/editor_performance_profiler.cpp @@ -113,8 +113,8 @@ void EditorPerformanceProfiler::_monitor_draw() { info_message->hide(); Ref<StyleBox> graph_style_box = get_theme_stylebox(CoreStringName(normal), SNAME("TextEdit")); - Ref<Font> graph_font = get_theme_font(SNAME("font"), SNAME("TextEdit")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("TextEdit")); + Ref<Font> graph_font = get_theme_font(SceneStringName(font), SNAME("TextEdit")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("TextEdit")); int columns = int(Math::ceil(Math::sqrt(float(active.size())))); int rows = int(Math::ceil(float(active.size()) / float(columns))); diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp index 0e2a7ee599..24bb694860 100644 --- a/editor/debugger/editor_profiler.cpp +++ b/editor/debugger/editor_profiler.cpp @@ -425,7 +425,7 @@ void EditorProfiler::_notification(int p_what) { activate->set_icon(get_editor_theme_icon(SNAME("Play"))); clear_button->set_icon(get_editor_theme_icon(SNAME("Clear"))); - theme_cache.seek_line_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + theme_cache.seek_line_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); theme_cache.seek_line_color.a = 0.8; theme_cache.seek_line_hover_color = theme_cache.seek_line_color; theme_cache.seek_line_hover_color.a = 0.4; @@ -640,7 +640,7 @@ EditorProfiler::EditorProfiler() { display_mode->add_item(TTR("Average Time (ms)")); display_mode->add_item(TTR("Frame %")); display_mode->add_item(TTR("Physics Frame %")); - display_mode->connect("item_selected", callable_mp(this, &EditorProfiler::_combo_changed)); + display_mode->connect(SceneStringName(item_selected), callable_mp(this, &EditorProfiler::_combo_changed)); hb->add_child(display_mode); @@ -652,7 +652,7 @@ EditorProfiler::EditorProfiler() { // TRANSLATORS: This is an option in the profiler to display the time spent in a function, exincluding the time spent in other functions called by that function. display_time->add_item(TTR("Self")); display_time->set_tooltip_text(TTR("Inclusive: Includes time from other functions called by this function.\nUse this to spot bottlenecks.\n\nSelf: Only count the time spent in the function itself, not in other functions called by that function.\nUse this to find individual functions to optimize.")); - display_time->connect("item_selected", callable_mp(this, &EditorProfiler::_combo_changed)); + display_time->connect(SceneStringName(item_selected), callable_mp(this, &EditorProfiler::_combo_changed)); hb->add_child(display_time); @@ -671,7 +671,7 @@ EditorProfiler::EditorProfiler() { cursor_metric_edit->set_value(0); cursor_metric_edit->set_editable(false); hb->add_child(cursor_metric_edit); - cursor_metric_edit->connect("value_changed", callable_mp(this, &EditorProfiler::_cursor_metric_changed)); + cursor_metric_edit->connect(SceneStringName(value_changed), callable_mp(this, &EditorProfiler::_cursor_metric_changed)); hb->add_theme_constant_override("separation", 8 * EDSCALE); diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp index 38f1061a72..17977fcb29 100644 --- a/editor/debugger/editor_visual_profiler.cpp +++ b/editor/debugger/editor_visual_profiler.cpp @@ -446,9 +446,9 @@ void EditorVisualProfiler::_graph_tex_draw() { return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - const Color color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + const Color color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); if (seeking) { int max_frames = frame_metrics.size(); @@ -750,7 +750,7 @@ EditorVisualProfiler::EditorVisualProfiler() { display_mode = memnew(OptionButton); display_mode->add_item(TTR("Frame Time (ms)")); display_mode->add_item(TTR("Frame %")); - display_mode->connect("item_selected", callable_mp(this, &EditorVisualProfiler::_combo_changed)); + display_mode->connect(SceneStringName(item_selected), callable_mp(this, &EditorVisualProfiler::_combo_changed)); hb->add_child(display_mode); @@ -770,7 +770,7 @@ EditorVisualProfiler::EditorVisualProfiler() { cursor_metric_edit = memnew(SpinBox); cursor_metric_edit->set_h_size_flags(SIZE_FILL); hb->add_child(cursor_metric_edit); - cursor_metric_edit->connect("value_changed", callable_mp(this, &EditorVisualProfiler::_cursor_metric_changed)); + cursor_metric_edit->connect(SceneStringName(value_changed), callable_mp(this, &EditorVisualProfiler::_cursor_metric_changed)); hb->add_theme_constant_override("separation", 8 * EDSCALE); diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index e35ca590b3..5e96daf69c 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -825,13 +825,13 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, uint64_t p_thread void ScriptEditorDebugger::_set_reason_text(const String &p_reason, MessageType p_type) { switch (p_type) { case MESSAGE_ERROR: - reason->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + reason->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); break; case MESSAGE_WARNING: - reason->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + reason->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); break; default: - reason->add_theme_color_override("font_color", get_theme_color(SNAME("success_color"), EditorStringName(Editor))); + reason->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("success_color"), EditorStringName(Editor))); } reason->set_text(p_reason); @@ -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)); @@ -851,7 +851,7 @@ void ScriptEditorDebugger::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { le_set->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_set)); le_clear->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_clear)); - error_tree->connect("item_selected", callable_mp(this, &ScriptEditorDebugger::_error_selected)); + error_tree->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditorDebugger::_error_selected)); error_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_error_activated)); breakpoints_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_breakpoint_tree_clicked)); [[fallthrough]]; @@ -869,7 +869,7 @@ void ScriptEditorDebugger::_notification(int p_what) { vmem_export->set_icon(get_editor_theme_icon(SNAME("Save"))); search->set_right_icon(get_editor_theme_icon(SNAME("Search"))); - reason->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + reason->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); TreeItem *error_root = error_tree->get_root(); if (error_root) { @@ -1886,7 +1886,7 @@ ScriptEditorDebugger::ScriptEditorDebugger() { threads = memnew(OptionButton); thread_hb->add_child(threads); threads->set_h_size_flags(SIZE_EXPAND_FILL); - threads->connect("item_selected", callable_mp(this, &ScriptEditorDebugger::_select_thread)); + threads->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditorDebugger::_select_thread)); stack_dump = memnew(Tree); stack_dump->set_allow_reselect(true); diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 0c870baec1..c83e677b37 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -327,7 +327,7 @@ void DependencyEditorOwners::_select_file(int p_idx) { EditorNode::get_singleton()->load_resource(fpath); } hide(); - emit_signal(SNAME("confirmed")); + emit_signal(SceneStringName(confirmed)); } void DependencyEditorOwners::_empty_clicked(const Vector2 &p_pos, MouseButton p_mouse_button_index) { @@ -875,7 +875,7 @@ OrphanResourcesDialog::OrphanResourcesDialog() { add_child(delete_confirm); dep_edit = memnew(DependencyEditor); add_child(dep_edit); - delete_confirm->connect("confirmed", callable_mp(this, &OrphanResourcesDialog::_delete_confirm)); + delete_confirm->connect(SceneStringName(confirmed), callable_mp(this, &OrphanResourcesDialog::_delete_confirm)); set_hide_on_ok(false); VBoxContainer *vbc = memnew(VBoxContainer); diff --git a/editor/directory_create_dialog.cpp b/editor/directory_create_dialog.cpp index 6f9b91731b..604531f109 100644 --- a/editor/directory_create_dialog.cpp +++ b/editor/directory_create_dialog.cpp @@ -159,5 +159,5 @@ DirectoryCreateDialog::DirectoryCreateDialog() { validation_panel->set_update_callback(callable_mp(this, &DirectoryCreateDialog::_on_dir_path_changed)); validation_panel->set_accept_button(get_ok_button()); - dir_path->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + dir_path->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); } diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index 6893b2878b..dc943fc783 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -359,7 +359,7 @@ EditorAbout::EditorAbout() { _tpl_text->set_v_size_flags(Control::SIZE_EXPAND_FILL); tpl_hbc->add_child(_tpl_text); - _tpl_tree->connect("item_selected", callable_mp(this, &EditorAbout::_license_tree_selected)); + _tpl_tree->connect(SceneStringName(item_selected), callable_mp(this, &EditorAbout::_license_tree_selected)); tpl_ti_all->select(0); _tpl_text->set_text(tpl_ti_all->get_metadata(0)); } diff --git a/editor/editor_asset_installer.cpp b/editor/editor_asset_installer.cpp index 8f675cf548..8662ad75b2 100644 --- a/editor/editor_asset_installer.cpp +++ b/editor/editor_asset_installer.cpp @@ -601,7 +601,7 @@ void EditorAssetInstaller::_notification(int p_what) { } else { show_source_files_button->set_icon(get_editor_theme_icon(SNAME("Forward"))); } - asset_conflicts_link->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + asset_conflicts_link->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); generic_extension_icon = get_editor_theme_icon(SNAME("Object")); diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index a4994d1f92..3b337997e0 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -105,7 +105,7 @@ void EditorAudioBus::_notification(int p_what) { bus_options->set_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl"))); - audio_value_preview_label->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), SNAME("TooltipLabel"))); + audio_value_preview_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), SNAME("TooltipLabel"))); audio_value_preview_label->add_theme_color_override("font_shadow_color", get_theme_color(SNAME("font_shadow_color"), SNAME("TooltipLabel"))); audio_value_preview_box->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("TooltipPanel"))); @@ -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); @@ -884,8 +894,8 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { preview_timer->set_one_shot(true); add_child(preview_timer); - slider->connect("value_changed", callable_mp(this, &EditorAudioBus::_volume_changed)); - slider->connect("value_changed", callable_mp(this, &EditorAudioBus::_show_value)); + slider->connect(SceneStringName(value_changed), callable_mp(this, &EditorAudioBus::_volume_changed)); + slider->connect(SceneStringName(value_changed), callable_mp(this, &EditorAudioBus::_show_value)); preview_timer->connect("timeout", callable_mp(this, &EditorAudioBus::_hide_value_preview)); hb->add_child(slider); @@ -938,7 +948,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { send = memnew(OptionButton); send->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); send->set_clip_text(true); - send->connect("item_selected", callable_mp(this, &EditorAudioBus::_send_selected)); + send->connect(SceneStringName(item_selected), callable_mp(this, &EditorAudioBus::_send_selected)); vb->add_child(send); set_focus_mode(FOCUS_CLICK); @@ -1419,8 +1429,8 @@ void EditorAudioMeterNotches::add_notch(float p_normalized_offset, float p_db_va } Size2 EditorAudioMeterNotches::get_minimum_size() const { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); float font_height = font->get_height(font_size); float width = 0; @@ -1440,10 +1450,10 @@ Size2 EditorAudioMeterNotches::get_minimum_size() const { void EditorAudioMeterNotches::_update_theme_item_cache() { Control::_update_theme_item_cache(); - theme_cache.notch_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + theme_cache.notch_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); - theme_cache.font = get_theme_font(SNAME("font"), SNAME("Label")); - theme_cache.font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + theme_cache.font = get_theme_font(SceneStringName(font), SNAME("Label")); + theme_cache.font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); } void EditorAudioMeterNotches::_bind_methods() { diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index a5c4831db7..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; @@ -753,12 +779,12 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_ } if (!FileAccess::exists(p_path)) { - EditorNode::get_singleton()->show_warning(TTR("Can't add Autoload:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path)); + EditorNode::get_singleton()->show_warning(TTR("Can't add Autoload:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), p_path)); return false; } if (!p_path.begins_with("res://")) { - EditorNode::get_singleton()->show_warning(TTR("Can't add Autoload:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path)); + EditorNode::get_singleton()->show_warning(TTR("Can't add Autoload:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), p_path)); return false; } @@ -857,34 +883,13 @@ 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); error_message = memnew(Label); error_message->hide(); error_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_RIGHT); - error_message->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); + error_message->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); add_child(error_message); Label *l = memnew(Label); @@ -896,7 +901,7 @@ EditorAutoloadSettings::EditorAutoloadSettings() { autoload_add_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); autoload_add_path->set_clear_button_enabled(true); autoload_add_path->set_placeholder(vformat(TTR("Set path or press \"%s\" to create a script."), TTR("Add"))); - autoload_add_path->connect("text_changed", callable_mp(this, &EditorAutoloadSettings::_autoload_path_text_changed)); + autoload_add_path->connect(SceneStringName(text_changed), callable_mp(this, &EditorAutoloadSettings::_autoload_path_text_changed)); browse_button = memnew(Button); hbc->add_child(browse_button); @@ -919,7 +924,7 @@ EditorAutoloadSettings::EditorAutoloadSettings() { autoload_add_name = memnew(LineEdit); autoload_add_name->set_h_size_flags(SIZE_EXPAND_FILL); autoload_add_name->connect("text_submitted", callable_mp(this, &EditorAutoloadSettings::_autoload_text_submitted)); - autoload_add_name->connect("text_changed", callable_mp(this, &EditorAutoloadSettings::_autoload_text_changed)); + autoload_add_name->connect(SceneStringName(text_changed), callable_mp(this, &EditorAutoloadSettings::_autoload_text_changed)); hbc->add_child(autoload_add_name); add_autoload = memnew(Button); 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_build_profile.cpp b/editor/editor_build_profile.cpp index 799bda78ab..f55fbe03d8 100644 --- a/editor/editor_build_profile.cpp +++ b/editor/editor_build_profile.cpp @@ -864,7 +864,7 @@ EditorBuildProfileManager::EditorBuildProfileManager() { confirm_dialog = memnew(ConfirmationDialog); add_child(confirm_dialog); confirm_dialog->set_title(TTR("Please Confirm:")); - confirm_dialog->connect("confirmed", callable_mp(this, &EditorBuildProfileManager::_action_confirm)); + confirm_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorBuildProfileManager::_action_confirm)); import_profile = memnew(EditorFileDialog); add_child(import_profile); @@ -884,7 +884,7 @@ EditorBuildProfileManager::EditorBuildProfileManager() { force_detect_classes = memnew(LineEdit); main_vbc->add_margin_child(TTR("Forced Classes on Detect:"), force_detect_classes); - force_detect_classes->connect("text_changed", callable_mp(this, &EditorBuildProfileManager::_force_detect_classes_changed)); + force_detect_classes->connect(SceneStringName(text_changed), callable_mp(this, &EditorBuildProfileManager::_force_detect_classes_changed)); set_title(TTR("Edit Compilation Configuration Profile")); diff --git a/editor/editor_command_palette.cpp b/editor/editor_command_palette.cpp index badab92fb0..a4a08d5b5e 100644 --- a/editor/editor_command_palette.cpp +++ b/editor/editor_command_palette.cpp @@ -140,7 +140,7 @@ void EditorCommandPalette::_update_command_search(const String &search_text) { ti->set_metadata(0, entries[i].key_name); ti->set_text_alignment(1, HORIZONTAL_ALIGNMENT_RIGHT); ti->set_text(1, shortcut_text); - Color c = get_theme_color(SNAME("font_color"), EditorStringName(Editor)) * Color(1, 1, 1, 0.5); + Color c = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)) * Color(1, 1, 1, 0.5); ti->set_custom_color(1, c); } @@ -342,7 +342,7 @@ EditorCommandPalette *EditorCommandPalette::get_singleton() { EditorCommandPalette::EditorCommandPalette() { set_hide_on_ok(false); - connect("confirmed", callable_mp(this, &EditorCommandPalette::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &EditorCommandPalette::_confirmed)); VBoxContainer *vbc = memnew(VBoxContainer); add_child(vbc); @@ -350,7 +350,7 @@ EditorCommandPalette::EditorCommandPalette() { command_search_box = memnew(LineEdit); command_search_box->set_placeholder(TTR("Filter Commands")); command_search_box->connect(SceneStringName(gui_input), callable_mp(this, &EditorCommandPalette::_sbox_input)); - command_search_box->connect("text_changed", callable_mp(this, &EditorCommandPalette::_update_command_search)); + command_search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorCommandPalette::_update_command_search)); command_search_box->set_v_size_flags(Control::SIZE_EXPAND_FILL); command_search_box->set_clear_button_enabled(true); MarginContainer *margin_container_csb = memnew(MarginContainer); @@ -360,7 +360,7 @@ EditorCommandPalette::EditorCommandPalette() { search_options = memnew(Tree); search_options->connect("item_activated", callable_mp(this, &EditorCommandPalette::_confirmed)); - search_options->connect("item_selected", callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled).bind(false)); + search_options->connect(SceneStringName(item_selected), callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled).bind(false)); search_options->connect("nothing_selected", callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled).bind(true)); search_options->create_item(); search_options->set_hide_root(true); diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index ba04f36abe..37cd74d2ac 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -936,7 +936,7 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { profile_list->set_h_size_flags(Control::SIZE_EXPAND_FILL); profile_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); profiles_hbc->add_child(profile_list); - profile_list->connect("item_selected", callable_mp(this, &EditorFeatureProfileManager::_profile_selected)); + profile_list->connect(SceneStringName(item_selected), callable_mp(this, &EditorFeatureProfileManager::_profile_selected)); profile_actions[PROFILE_NEW] = memnew(Button(TTR("Create Profile"))); profiles_hbc->add_child(profile_actions[PROFILE_NEW]); @@ -1026,14 +1026,14 @@ EditorFeatureProfileManager::EditorFeatureProfileManager() { new_profile_vb->add_child(new_profile_name); new_profile_name->set_custom_minimum_size(Size2(300 * EDSCALE, 1)); add_child(new_profile_dialog); - new_profile_dialog->connect("confirmed", callable_mp(this, &EditorFeatureProfileManager::_create_new_profile)); + new_profile_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorFeatureProfileManager::_create_new_profile)); new_profile_dialog->register_text_enter(new_profile_name); new_profile_dialog->set_ok_button_text(TTR("Create")); erase_profile_dialog = memnew(ConfirmationDialog); add_child(erase_profile_dialog); erase_profile_dialog->set_title(TTR("Remove Profile")); - erase_profile_dialog->connect("confirmed", callable_mp(this, &EditorFeatureProfileManager::_erase_selected_profile)); + erase_profile_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorFeatureProfileManager::_erase_selected_profile)); import_profiles = memnew(EditorFileDialog); add_child(import_profiles); diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index a1e392cd7d..f0dc850af0 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; @@ -161,6 +162,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 +207,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; @@ -314,23 +370,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 +629,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 +681,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 +692,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 +704,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; @@ -663,10 +743,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 +788,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 +809,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 +830,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 +851,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 +896,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); + ScannedDirectory *sd = memnew(ScannedDirectory); + sd->name = E->get(); + sd->full_path = p_dir->full_path.path_join(sd->name); - efd->parent = p_dir; - efd->name = E->get(); + nb_files_total_scan += _scan_new_dir(sd, da); - _scan_new_dir(efd, da, p_progress.get_sub(idx, total)); - - 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(); - p_progress.update(idx, total); + 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); + + 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 +978,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 +1007,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 +1023,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 +1055,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 +1072,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 +1098,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 +1125,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 +1197,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 +1215,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 +1262,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 +1281,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 +1297,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 +1373,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 +1441,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 +1461,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 +1482,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 +1745,79 @@ 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_path = file_info->deps[0]; // Assuming the first dependency is a script. + 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 +1841,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())); @@ -1719,6 +1948,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 +1971,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 +2023,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,18 +2047,39 @@ 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(); + _process_update_pending(); + if (update_files_icon_cache) { + _update_files_icon_path(); + } else { + for (EditorFileSystemDirectory::FileInfo *fi : files_to_update_icon_path) { + _update_file_icon_path(fi); + } + } call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later } } @@ -1831,31 +2088,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(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); + 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); +} + +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 +2668,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 +2714,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 +2742,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..b0c6f0de51 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; @@ -91,6 +92,7 @@ public: 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 +159,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 +182,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 +215,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 +226,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,11 +270,20 @@ 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; @@ -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 3dc8584096..00ac1c7c6f 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -3969,12 +3969,12 @@ void EditorHelpHighlighter::reset_cache() { #ifdef MODULE_GDSCRIPT_ENABLED highlight_data_caches[LANGUAGE_GDSCRIPT].clear(); - text_edits[LANGUAGE_GDSCRIPT]->add_theme_color_override("font_color", text_color); + text_edits[LANGUAGE_GDSCRIPT]->add_theme_color_override(SceneStringName(font_color), text_color); #endif #ifdef MODULE_MONO_ENABLED highlight_data_caches[LANGUAGE_CSHARP].clear(); - text_edits[LANGUAGE_CSHARP]->add_theme_color_override("font_color", text_color); + text_edits[LANGUAGE_CSHARP]->add_theme_color_override(SceneStringName(font_color), text_color); #endif } @@ -3983,7 +3983,7 @@ EditorHelpHighlighter::EditorHelpHighlighter() { #ifdef MODULE_GDSCRIPT_ENABLED TextEdit *gdscript_text_edit = memnew(TextEdit); - gdscript_text_edit->add_theme_color_override("font_color", text_color); + gdscript_text_edit->add_theme_color_override(SceneStringName(font_color), text_color); Ref<GDScript> gdscript; gdscript.instantiate(); @@ -4000,7 +4000,7 @@ EditorHelpHighlighter::EditorHelpHighlighter() { #ifdef MODULE_MONO_ENABLED TextEdit *csharp_text_edit = memnew(TextEdit); - csharp_text_edit->add_theme_color_override("font_color", text_color); + csharp_text_edit->add_theme_color_override(SceneStringName(font_color), text_color); // See GH-89610. //Ref<CSharpScript> csharp; @@ -4037,7 +4037,7 @@ FindBar::FindBar() { add_child(search_text); search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); search_text->set_h_size_flags(SIZE_EXPAND_FILL); - search_text->connect("text_changed", callable_mp(this, &FindBar::_search_text_changed)); + search_text->connect(SceneStringName(text_changed), callable_mp(this, &FindBar::_search_text_changed)); search_text->connect("text_submitted", callable_mp(this, &FindBar::_search_text_submitted)); matches_label = memnew(Label); @@ -4094,7 +4094,7 @@ void FindBar::_notification(int p_what) { hide_button->set_texture_hover(get_editor_theme_icon(SNAME("Close"))); hide_button->set_texture_pressed(get_editor_theme_icon(SNAME("Close"))); hide_button->set_custom_minimum_size(hide_button->get_texture_normal()->get_size()); - matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } break; case NOTIFICATION_VISIBILITY_CHANGED: { @@ -4162,7 +4162,7 @@ void FindBar::_update_matches_label() { } else { matches_label->show(); - matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor))); matches_label->set_text(vformat(results_count == 1 ? TTR("%d match.") : TTR("%d matches."), results_count)); } } diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index f42cc62fe2..ff5bc6ba87 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -212,7 +212,7 @@ void EditorHelpSearch::_notification(int p_what) { } break; case NOTIFICATION_READY: { - connect("confirmed", callable_mp(this, &EditorHelpSearch::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &EditorHelpSearch::_confirmed)); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { @@ -316,7 +316,7 @@ EditorHelpSearch::EditorHelpSearch() { search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); search_box->set_clear_button_enabled(true); search_box->connect(SceneStringName(gui_input), callable_mp(this, &EditorHelpSearch::_search_box_gui_input)); - search_box->connect("text_changed", callable_mp(this, &EditorHelpSearch::_search_box_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorHelpSearch::_search_box_text_changed)); register_text_enter(search_box); hbox->add_child(search_box); @@ -351,7 +351,7 @@ EditorHelpSearch::EditorHelpSearch() { filter_combo->add_item(TTR("Constants Only"), SEARCH_CONSTANTS); filter_combo->add_item(TTR("Properties Only"), SEARCH_PROPERTIES); filter_combo->add_item(TTR("Theme Properties Only"), SEARCH_THEME_ITEMS); - filter_combo->connect("item_selected", callable_mp(this, &EditorHelpSearch::_filter_combo_item_selected)); + filter_combo->connect(SceneStringName(item_selected), callable_mp(this, &EditorHelpSearch::_filter_combo_item_selected)); hbox->add_child(filter_combo); // Create the results tree. @@ -369,7 +369,7 @@ EditorHelpSearch::EditorHelpSearch() { results_tree->set_hide_root(true); results_tree->set_select_mode(Tree::SELECT_ROW); results_tree->connect("item_activated", callable_mp(this, &EditorHelpSearch::_confirmed)); - results_tree->connect("item_selected", callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled).bind(false)); + results_tree->connect(SceneStringName(item_selected), callable_mp((BaseButton *)get_ok_button(), &BaseButton::set_disabled).bind(false)); vbox->add_child(results_tree, true); } diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 7f21bb9ca8..467a19ebb1 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -69,8 +69,8 @@ bool EditorInspector::_property_path_matches(const String &p_property_path, cons Size2 EditorProperty::get_minimum_size() const { Size2 ms; - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Tree")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Tree")); ms.height = label.is_empty() ? 0 : font->get_height(font_size) + 4 * EDSCALE; for (int i = 0; i < get_child_count(); i++) { @@ -132,8 +132,8 @@ void EditorProperty::_notification(int p_what) { { int child_room = size.width * (1.0 - split_ratio); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Tree")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Tree")); int height = label.is_empty() ? 0 : font->get_height(font_size) + 4 * EDSCALE; bool no_children = true; @@ -240,8 +240,8 @@ void EditorProperty::_notification(int p_what) { } break; case NOTIFICATION_DRAW: { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Tree")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Tree")); bool rtl = is_layout_rtl(); Size2 size = get_size(); @@ -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; } @@ -1251,11 +1253,13 @@ void EditorInspectorCategory::_notification(int p_what) { w -= hs + icon_size; } - Color color = get_theme_color(SNAME("font_color"), SNAME("Tree")); + Color color = get_theme_color(SceneStringName(font_color), SNAME("Tree")); 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); @@ -1452,7 +1462,7 @@ void EditorInspectorSection::_notification(int p_what) { Ref<Font> font = get_theme_font(SNAME("bold"), EditorStringName(EditorFonts)); int font_size = get_theme_font_size(SNAME("bold_size"), EditorStringName(EditorFonts)); - Color font_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color font_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); if (folded && revertable_properties.size()) { int label_width = font->get_string_size(label, HORIZONTAL_ALIGNMENT_LEFT, available, font_size, TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_CONSTRAIN_ELLIPSIS).x; @@ -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; } @@ -1545,8 +1553,8 @@ Size2 EditorInspectorSection::get_minimum_size() const { ms = ms.max(minsize); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Tree")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Tree")); ms.height += font->get_height(font_size) + get_theme_constant(SNAME("v_separation"), SNAME("Tree")); ms.width += get_theme_constant(SNAME("inspector_margin"), EditorStringName(Editor)); @@ -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); @@ -2252,7 +2261,7 @@ void EditorInspectorArray::_setup() { if (numbered) { ae.number = memnew(Label); - ae.number->add_theme_font_override("font", numbers_font); + ae.number->add_theme_font_override(SceneStringName(font), numbers_font); ae.number->set_custom_minimum_size(Size2(numbers_min_w, 0)); ae.number->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_RIGHT); ae.number->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); @@ -2471,7 +2480,7 @@ EditorInspectorArray::EditorInspectorArray(bool p_read_only) { resize_dialog = memnew(AcceptDialog); resize_dialog->set_title(TTRC("Resize Array")); resize_dialog->add_cancel_button(); - resize_dialog->connect("confirmed", callable_mp(this, &EditorInspectorArray::_resize_dialog_confirmed)); + resize_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorInspectorArray::_resize_dialog_confirmed)); add_child(resize_dialog); VBoxContainer *resize_dialog_vbox = memnew(VBoxContainer); @@ -2479,7 +2488,7 @@ EditorInspectorArray::EditorInspectorArray(bool p_read_only) { new_size_spin_box = memnew(SpinBox); new_size_spin_box->set_max(16384); - new_size_spin_box->connect("value_changed", callable_mp(this, &EditorInspectorArray::_new_size_spin_box_value_changed)); + new_size_spin_box->connect(SceneStringName(value_changed), callable_mp(this, &EditorInspectorArray::_new_size_spin_box_value_changed)); new_size_spin_box->get_line_edit()->connect("text_submitted", callable_mp(this, &EditorInspectorArray::_new_size_spin_box_text_submitted)); new_size_spin_box->set_editable(!read_only); resize_dialog_vbox->add_margin_child(TTRC("New Size:"), new_size_spin_box); @@ -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; } @@ -3667,7 +3682,7 @@ void EditorInspector::set_use_filter(bool p_use) { void EditorInspector::register_text_enter(Node *p_line_edit) { search_box = Object::cast_to<LineEdit>(p_line_edit); if (search_box) { - search_box->connect("text_changed", callable_mp(this, &EditorInspector::_filter_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorInspector::_filter_changed)); } } @@ -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()); @@ -4292,7 +4311,7 @@ void EditorInspector::_show_add_meta_dialog() { add_meta_dialog->set_ok_button_text(TTR("Add")); add_child(add_meta_dialog); add_meta_dialog->register_text_enter(add_meta_name); - add_meta_dialog->connect("confirmed", callable_mp(this, &EditorInspector::_add_meta_confirm)); + add_meta_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorInspector::_add_meta_confirm)); validation_panel = memnew(EditorValidationPanel); vbc->add_child(validation_panel); @@ -4300,7 +4319,7 @@ void EditorInspector::_show_add_meta_dialog() { validation_panel->set_update_callback(callable_mp(this, &EditorInspector::_check_meta_name)); validation_panel->set_accept_button(add_meta_dialog->get_ok_button()); - add_meta_name->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + add_meta_name->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); } Node *node = Object::cast_to<Node>(object); @@ -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); @@ -4349,7 +4367,7 @@ EditorInspector::EditorInspector() { property_focusable = -1; property_clipboard = Variant(); - get_v_scroll_bar()->connect("value_changed", callable_mp(this, &EditorInspector::_vscroll_changed)); + get_v_scroll_bar()->connect(SceneStringName(value_changed), callable_mp(this, &EditorInspector::_vscroll_changed)); update_scroll_request = -1; if (EditorSettings::get_singleton()) { refresh_countdown = float(EDITOR_GET("docks/property_editor/auto_refresh_interval")); 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_layouts_dialog.cpp b/editor/editor_layouts_dialog.cpp index fe21fb26e7..6032605684 100644 --- a/editor/editor_layouts_dialog.cpp +++ b/editor/editor_layouts_dialog.cpp @@ -133,7 +133,7 @@ EditorLayoutsDialog::EditorLayoutsDialog() { name->set_anchor_and_offset(SIDE_RIGHT, Control::ANCHOR_END, -5); name->connect(SceneStringName(gui_input), callable_mp(this, &EditorLayoutsDialog::_line_gui_input)); name->connect(SceneStringName(focus_entered), callable_mp(this, &EditorLayoutsDialog::_deselect_layout_names)); - name->connect("text_changed", callable_mp(this, &EditorLayoutsDialog::_update_ok_disable_state).unbind(1)); + name->connect(SceneStringName(text_changed), callable_mp(this, &EditorLayoutsDialog::_update_ok_disable_state).unbind(1)); } void EditorLayoutsDialog::set_name_line_enabled(bool p_enabled) { diff --git a/editor/editor_locale_dialog.cpp b/editor/editor_locale_dialog.cpp index e97e4ac777..f8fd05bf1e 100644 --- a/editor/editor_locale_dialog.cpp +++ b/editor/editor_locale_dialog.cpp @@ -399,7 +399,7 @@ EditorLocaleDialog::EditorLocaleDialog() { filter_mode->set_h_size_flags(Control::SIZE_EXPAND_FILL); filter_mode->add_item(TTR("Show Selected Locales Only"), SHOW_ONLY_SELECTED_LOCALES); filter_mode->select(0); - filter_mode->connect("item_selected", callable_mp(this, &EditorLocaleDialog::_filter_mode_changed)); + filter_mode->connect(SceneStringName(item_selected), callable_mp(this, &EditorLocaleDialog::_filter_mode_changed)); hb_filter->add_child(filter_mode); } { diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 166d09af30..6a016c217a 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -124,7 +124,7 @@ void EditorLog::_update_theme() { theme_cache.error_icon = get_editor_theme_icon(SNAME("Error")); theme_cache.warning_color = get_theme_color(SNAME("warning_color"), EditorStringName(Editor)); theme_cache.warning_icon = get_editor_theme_icon(SNAME("Warning")); - theme_cache.message_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)) * Color(1, 1, 1, 0.6); + theme_cache.message_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)) * Color(1, 1, 1, 0.6); } void EditorLog::_editor_settings_changed() { @@ -471,7 +471,7 @@ EditorLog::EditorLog() { search_box->set_placeholder(TTR("Filter Messages")); search_box->set_clear_button_enabled(true); search_box->set_visible(true); - search_box->connect("text_changed", callable_mp(this, &EditorLog::_search_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorLog::_search_changed)); vb_left->add_child(search_box); VBoxContainer *vb_right = memnew(VBoxContainer); diff --git a/editor/editor_native_shader_source_visualizer.cpp b/editor/editor_native_shader_source_visualizer.cpp index 37c8bffe3d..3d7d37c94e 100644 --- a/editor/editor_native_shader_source_visualizer.cpp +++ b/editor/editor_native_shader_source_visualizer.cpp @@ -96,8 +96,8 @@ void EditorNativeShaderSourceVisualizer::_inspect_shader(RID p_shader) { CodeEdit *code_edit = memnew(CodeEdit); code_edit->set_editable(false); code_edit->set_syntax_highlighter(syntax_highlighter); - code_edit->add_theme_font_override("font", get_theme_font("source", EditorStringName(EditorFonts))); - code_edit->add_theme_font_size_override("font_size", get_theme_font_size("source_size", EditorStringName(EditorFonts))); + code_edit->add_theme_font_override(SceneStringName(font), get_theme_font("source", EditorStringName(EditorFonts))); + code_edit->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size("source_size", EditorStringName(EditorFonts))); code_edit->add_theme_constant_override("line_spacing", EDITOR_DEF("text_editor/theme/line_spacing", 6)); // Appearance: Caret diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index d5e1242406..71603e6190 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -543,6 +543,8 @@ void EditorNode::_update_theme(bool p_skip_creation) { tb->set_icon(theme->get_icon(p_editor->get_name(), EditorStringName(EditorIcons))); } } + + _update_renderer_color(); } editor_dock_manager->update_tab_styles(); @@ -677,6 +679,8 @@ void EditorNode::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { + singleton->active_plugins.clear(); + if (progress_dialog) { progress_dialog->queue_free(); } @@ -702,23 +706,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); @@ -856,6 +844,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()) { @@ -950,6 +955,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 @@ -1733,7 +1739,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; @@ -1779,6 +1785,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; @@ -1808,9 +1824,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); @@ -2304,6 +2318,12 @@ void EditorNode::push_item(Object *p_object, const String &p_property, bool p_in _edit_current(); } +void EditorNode::edit_previous_item() { + if (editor_history.previous()) { + _edit_current(); + } +} + void EditorNode::push_item_no_inspector(Object *p_object) { _add_to_history(p_object, "", false); _edit_current(false, true); @@ -2718,10 +2738,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. @@ -3322,6 +3342,13 @@ void EditorNode::_exit_editor(int p_exit_code) { // Dim the editor window while it's quitting to make it clearer that it's busy. dim_editor(true); + // Unload addons before quitting to allow cleanup. + for (const KeyValue<String, EditorPlugin *> &E : addon_name_to_plugin) { + print_verbose(vformat("Unloading addon: %s", E.key)); + remove_editor_plugin(E.value, false); + memdelete(E.value); + } + get_tree()->quit(p_exit_code); } @@ -3537,7 +3564,7 @@ void EditorNode::add_extension_editor_plugin(const StringName &p_class_name) { void EditorNode::remove_extension_editor_plugin(const StringName &p_class_name) { // If we're exiting, the editor plugins will get cleaned up anyway, so don't do anything. - if (singleton->exiting) { + if (!singleton || singleton->exiting) { return; } @@ -5283,7 +5310,7 @@ bool EditorNode::immediate_confirmation_dialog(const String &p_text, const Strin cd->get_label()->set_custom_minimum_size(Size2(p_wrap_width, 0) * EDSCALE); } - cd->connect("confirmed", callable_mp(singleton, &EditorNode::_immediate_dialog_confirmed)); + cd->connect(SceneStringName(confirmed), callable_mp(singleton, &EditorNode::_immediate_dialog_confirmed)); singleton->gui_base->add_child(cd); cd->popup_centered(); @@ -6177,15 +6204,12 @@ Vector<Ref<EditorResourceConversionPlugin>> EditorNode::find_resource_conversion void EditorNode::_update_renderer_color() { String rendering_method = renderer->get_selected_metadata(); - // TODO: Use theme colors instead of hardcoded values. if (rendering_method == "forward_plus") { - renderer->add_theme_color_override("font_color", Color::hex(0x5d8c3fff)); - } - if (rendering_method == "mobile") { - renderer->add_theme_color_override("font_color", Color::hex(0xa5557dff)); - } - if (rendering_method == "gl_compatibility") { - renderer->add_theme_color_override("font_color", Color::hex(0x5586a4ff)); + renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("forward_plus_color"), EditorStringName(Editor))); + } else if (rendering_method == "mobile") { + renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("mobile_color"), EditorStringName(Editor))); + } else if (rendering_method == "gl_compatibility") { + renderer->add_theme_color_override(SceneStringName(font_color), theme->get_color(SNAME("gl_compatibility_color"), EditorStringName(Editor))); } } @@ -6434,6 +6458,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")); @@ -6784,7 +6809,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.")); @@ -6840,7 +6865,7 @@ EditorNode::EditorNode() { save_accept = memnew(AcceptDialog); save_accept->set_unparent_when_invisible(true); - save_accept->connect("confirmed", callable_mp(this, &EditorNode::_menu_option).bind((int)MenuOptions::FILE_SAVE_AS_SCENE)); + save_accept->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_option).bind((int)MenuOptions::FILE_SAVE_AS_SCENE)); project_export = memnew(ProjectExportDialog); gui_base->add_child(project_export); @@ -6993,8 +7018,8 @@ EditorNode::EditorNode() { if (can_expand && global_menu) { project_title = memnew(Label); - project_title->add_theme_font_override("font", theme->get_font(SNAME("bold"), EditorStringName(EditorFonts))); - project_title->add_theme_font_size_override("font_size", theme->get_font_size(SNAME("bold_size"), EditorStringName(EditorFonts))); + project_title->add_theme_font_override(SceneStringName(font), theme->get_font(SNAME("bold"), EditorStringName(EditorFonts))); + project_title->add_theme_font_size_override(SceneStringName(font_size), theme->get_font_size(SNAME("bold_size"), EditorStringName(EditorFonts))); project_title->set_focus_mode(Control::FOCUS_NONE); project_title->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); project_title->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); @@ -7132,7 +7157,7 @@ EditorNode::EditorNode() { // Add the renderers name to the UI. if (current_renderer_ps == current_renderer_os) { - renderer->connect("item_selected", callable_mp(this, &EditorNode::_renderer_selected)); + renderer->connect(SceneStringName(item_selected), callable_mp(this, &EditorNode::_renderer_selected)); // As we are doing string comparisons, keep in standard case to prevent problems with capitals // "vulkan" in particular uses lowercase "v" in the code, and uppercase in the UI. PackedStringArray renderers = ProjectSettings::get_singleton()->get_custom_property_info().get(StringName("rendering/renderer/rendering_method")).hint_string.split(",", false); @@ -7158,7 +7183,7 @@ EditorNode::EditorNode() { video_restart_dialog = memnew(ConfirmationDialog); video_restart_dialog->set_ok_button_text(TTR("Save & Restart")); - video_restart_dialog->connect("confirmed", callable_mp(this, &EditorNode::_menu_option).bind(SET_RENDERER_NAME_SAVE_AND_RESTART)); + video_restart_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_option).bind(SET_RENDERER_NAME_SAVE_AND_RESTART)); gui_base->add_child(video_restart_dialog); progress_hb = memnew(BackgroundProgress); @@ -7260,13 +7285,13 @@ EditorNode::EditorNode() { confirmation = memnew(ConfirmationDialog); gui_base->add_child(confirmation); - confirmation->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current)); + confirmation->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_confirm_current)); save_confirmation = memnew(ConfirmationDialog); save_confirmation->add_button(TTR("Don't Save"), DisplayServer::get_singleton()->get_swap_cancel_ok(), "discard"); gui_base->add_child(save_confirmation); save_confirmation->set_min_size(Vector2(450.0 * EDSCALE, 0)); - save_confirmation->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current)); + save_confirmation->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_confirm_current)); save_confirmation->connect("custom_action", callable_mp(this, &EditorNode::_discard_changes)); save_confirmation->connect("canceled", callable_mp(this, &EditorNode::_cancel_close_scene_tab)); @@ -7274,7 +7299,7 @@ EditorNode::EditorNode() { gradle_build_manage_templates->set_text(TTR("Android build template is missing, please install relevant templates.")); gradle_build_manage_templates->set_ok_button_text(TTR("Manage Templates")); gradle_build_manage_templates->add_button(TTR("Install from file"))->connect(SceneStringName(pressed), callable_mp(this, &EditorNode::_menu_option).bind(SETTINGS_INSTALL_ANDROID_BUILD_TEMPLATE)); - gradle_build_manage_templates->connect("confirmed", callable_mp(this, &EditorNode::_menu_option).bind(SETTINGS_MANAGE_EXPORT_TEMPLATES)); + gradle_build_manage_templates->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_option).bind(SETTINGS_MANAGE_EXPORT_TEMPLATES)); gui_base->add_child(gradle_build_manage_templates); file_android_build_source = memnew(EditorFileDialog); @@ -7293,12 +7318,12 @@ EditorNode::EditorNode() { vbox->add_child(install_android_build_template_message); choose_android_export_profile = memnew(OptionButton); - choose_android_export_profile->connect("item_selected", callable_mp(this, &EditorNode::_android_export_preset_selected)); + choose_android_export_profile->connect(SceneStringName(item_selected), callable_mp(this, &EditorNode::_android_export_preset_selected)); vbox->add_child(choose_android_export_profile); install_android_build_template = memnew(ConfirmationDialog); install_android_build_template->set_ok_button_text(TTR("Install")); - install_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current)); + install_android_build_template->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_confirm_current)); install_android_build_template->add_child(vbox); install_android_build_template->set_min_size(Vector2(500.0 * EDSCALE, 0)); gui_base->add_child(install_android_build_template); @@ -7306,7 +7331,7 @@ EditorNode::EditorNode() { remove_android_build_template = memnew(ConfirmationDialog); remove_android_build_template->set_ok_button_text(TTR("Show in File Manager")); - remove_android_build_template->connect("confirmed", callable_mp(this, &EditorNode::_menu_option).bind(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); + remove_android_build_template->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_option).bind(FILE_EXPLORE_ANDROID_BUILD_TEMPLATES)); gui_base->add_child(remove_android_build_template); file_templates = memnew(EditorFileDialog); @@ -7372,8 +7397,8 @@ EditorNode::EditorNode() { vbc->add_child(disk_changed_list); disk_changed_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); - disk_changed->connect("confirmed", callable_mp(this, &EditorNode::_reload_modified_scenes)); - disk_changed->connect("confirmed", callable_mp(this, &EditorNode::_reload_project_settings)); + disk_changed->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_reload_modified_scenes)); + disk_changed->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_reload_project_settings)); disk_changed->set_ok_button_text(TTR("Discard local changes and reload")); disk_changed->add_button(TTR("Keep local changes and overwrite"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); @@ -7506,7 +7531,7 @@ EditorNode::EditorNode() { open_imported = memnew(ConfirmationDialog); open_imported->set_ok_button_text(TTR("Open Anyway")); new_inherited_button = open_imported->add_button(TTR("New Inherited"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "inherit"); - open_imported->connect("confirmed", callable_mp(this, &EditorNode::_open_imported)); + open_imported->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_open_imported)); open_imported->connect("custom_action", callable_mp(this, &EditorNode::_inherit_imported)); gui_base->add_child(open_imported); @@ -7542,7 +7567,7 @@ EditorNode::EditorNode() { pick_main_scene = memnew(ConfirmationDialog); gui_base->add_child(pick_main_scene); pick_main_scene->set_ok_button_text(TTR("Select")); - pick_main_scene->connect("confirmed", callable_mp(this, &EditorNode::_menu_option).bind(SETTINGS_PICK_MAIN_SCENE)); + pick_main_scene->connect(SceneStringName(confirmed), callable_mp(this, &EditorNode::_menu_option).bind(SETTINGS_PICK_MAIN_SCENE)); select_current_scene_button = pick_main_scene->add_button(TTR("Select Current"), true, "select_current"); pick_main_scene->connect("custom_action", callable_mp(this, &EditorNode::_pick_main_scene_custom_action)); diff --git a/editor/editor_node.h b/editor/editor_node.h index 899da99450..28bd692ddf 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); @@ -764,6 +765,7 @@ public: void push_item(Object *p_object, const String &p_property = "", bool p_inspector_only = false); void push_item_no_inspector(Object *p_object); + void edit_previous_item(); void edit_item(Object *p_object, Object *p_editing_owner); void push_node_item(Node *p_node); void hide_unused_editors(const Object *p_editing_owner = nullptr); @@ -928,12 +930,29 @@ public: struct EditorProgress { String task; - bool step(const String &p_state, int p_step = -1, bool p_force_refresh = true) { return EditorNode::progress_task_step(task, p_state, p_step, p_force_refresh); } + bool step(const String &p_state, int p_step = -1, bool p_force_refresh = true) { + if (Thread::is_main_thread()) { + return EditorNode::progress_task_step(task, p_state, p_step, p_force_refresh); + } else { + EditorNode::progress_task_step_bg(task, p_step); + return false; + } + } EditorProgress(const String &p_task, const String &p_label, int p_amount, bool p_can_cancel = false) { - EditorNode::progress_add_task(p_task, p_label, p_amount, p_can_cancel); + if (Thread::is_main_thread()) { + EditorNode::progress_add_task(p_task, p_label, p_amount, p_can_cancel); + } else { + EditorNode::progress_add_task_bg(p_task, p_label, p_amount); + } task = p_task; } - ~EditorProgress() { EditorNode::progress_end_task(task); } + ~EditorProgress() { + if (Thread::is_main_thread()) { + EditorNode::progress_end_task(task); + } else { + EditorNode::progress_end_task_bg(task); + } + } }; class EditorPluginList : public Object { diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index ecc31bb0e2..fdb4ec170b 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -140,7 +140,7 @@ EditorPropertyText::EditorPropertyText() { hb->add_child(text); add_focusable(text); text->set_h_size_flags(SIZE_EXPAND_FILL); - text->connect("text_changed", callable_mp(this, &EditorPropertyText::_text_changed)); + text->connect(SceneStringName(text_changed), callable_mp(this, &EditorPropertyText::_text_changed)); text->connect("text_submitted", callable_mp(this, &EditorPropertyText::_text_submitted)); } @@ -165,10 +165,10 @@ void EditorPropertyMultilineText::_open_big_text() { big_text = memnew(TextEdit); if (expression) { big_text->set_syntax_highlighter(text->get_syntax_highlighter()); - big_text->add_theme_font_override("font", get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); - big_text->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); + big_text->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); + big_text->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); } - big_text->connect("text_changed", callable_mp(this, &EditorPropertyMultilineText::_big_text_changed)); + big_text->connect(SceneStringName(text_changed), callable_mp(this, &EditorPropertyMultilineText::_big_text_changed)); big_text->set_line_wrapping_mode(TextEdit::LineWrappingMode::LINE_WRAPPING_BOUNDARY); big_text_dialog = memnew(AcceptDialog); big_text_dialog->add_child(big_text); @@ -204,15 +204,15 @@ void EditorPropertyMultilineText::_notification(int p_what) { font = get_theme_font(SNAME("expression"), EditorStringName(EditorFonts)); font_size = get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts)); - text->add_theme_font_override("font", font); - text->add_theme_font_size_override("font_size", font_size); + text->add_theme_font_override(SceneStringName(font), font); + text->add_theme_font_size_override(SceneStringName(font_size), font_size); if (big_text) { - big_text->add_theme_font_override("font", font); - big_text->add_theme_font_size_override("font_size", font_size); + big_text->add_theme_font_override(SceneStringName(font), font); + big_text->add_theme_font_size_override(SceneStringName(font_size), font_size); } } else { - font = get_theme_font(SNAME("font"), SNAME("TextEdit")); - font_size = get_theme_font_size(SNAME("font_size"), SNAME("TextEdit")); + font = get_theme_font(SceneStringName(font), SNAME("TextEdit")); + font_size = get_theme_font_size(SceneStringName(font_size), SNAME("TextEdit")); } text->set_custom_minimum_size(Vector2(0, font->get_height(font_size) * 6)); } break; @@ -228,7 +228,7 @@ EditorPropertyMultilineText::EditorPropertyMultilineText(bool p_expression) { add_child(hb); set_bottom_editor(hb); text = memnew(TextEdit); - text->connect("text_changed", callable_mp(this, &EditorPropertyMultilineText::_text_changed)); + text->connect(SceneStringName(text_changed), callable_mp(this, &EditorPropertyMultilineText::_text_changed)); text->set_line_wrapping_mode(TextEdit::LineWrappingMode::LINE_WRAPPING_BOUNDARY); add_focusable(text); hb->add_child(text); @@ -376,7 +376,7 @@ EditorPropertyTextEnum::EditorPropertyTextEnum() { option_button->set_flat(true); option_button->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); default_layout->add_child(option_button); - option_button->connect("item_selected", callable_mp(this, &EditorPropertyTextEnum::_option_selected)); + option_button->connect(SceneStringName(item_selected), callable_mp(this, &EditorPropertyTextEnum::_option_selected)); edit_button = memnew(Button); edit_button->set_flat(true); @@ -735,7 +735,7 @@ EditorPropertyEnum::EditorPropertyEnum() { options->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); add_child(options); add_focusable(options); - options->connect("item_selected", callable_mp(this, &EditorPropertyEnum::_option_selected)); + options->connect(SceneStringName(item_selected), callable_mp(this, &EditorPropertyEnum::_option_selected)); } ///////////////////// FLAGS ///////////////////////// @@ -850,7 +850,7 @@ EditorPropertyLayersGrid::EditorPropertyLayersGrid() { rename_dialog->set_ok_button_text(TTR("Rename")); add_child(rename_dialog); rename_dialog->register_text_enter(rename_dialog_text); - rename_dialog->connect("confirmed", callable_mp(this, &EditorPropertyLayersGrid::_rename_operation_confirm)); + rename_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorPropertyLayersGrid::_rename_operation_confirm)); layer_rename = memnew(PopupMenu); layer_rename->add_item(TTR("Rename layer"), 0); add_child(layer_rename); @@ -858,8 +858,8 @@ EditorPropertyLayersGrid::EditorPropertyLayersGrid() { } Size2 EditorPropertyLayersGrid::get_grid_size() const { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); return Vector2(0, font->get_height(font_size) * 3); } @@ -998,7 +998,7 @@ void EditorPropertyLayersGrid::_notification(int p_what) { Color color = get_theme_color(read_only ? SNAME("highlight_disabled_color") : SNAME("highlight_color"), EditorStringName(Editor)); - Color text_color = get_theme_color(read_only ? SNAME("font_disabled_color") : SNAME("font_color"), EditorStringName(Editor)); + Color text_color = get_theme_color(read_only ? SNAME("font_disabled_color") : SceneStringName(font_color), EditorStringName(Editor)); text_color.a *= 0.5; Color text_color_on = get_theme_color(read_only ? SNAME("font_disabled_color") : SNAME("font_hover_color"), EditorStringName(Editor)); @@ -1029,8 +1029,8 @@ void EditorPropertyLayersGrid::_notification(int p_what) { draw_rect(rect2, color); flag_rects.push_back(rect2); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Vector2 offset; offset.y = rect2.size.y * 0.75; @@ -1348,7 +1348,7 @@ EditorPropertyInteger::EditorPropertyInteger() { spin->set_flat(true); add_child(spin); add_focusable(spin); - spin->connect("value_changed", callable_mp(this, &EditorPropertyInteger::_value_changed)); + spin->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyInteger::_value_changed)); } ///////////////////// OBJECT ID ///////////////////////// @@ -1485,7 +1485,7 @@ EditorPropertyFloat::EditorPropertyFloat() { spin->set_flat(true); add_child(spin); add_focusable(spin); - spin->connect("value_changed", callable_mp(this, &EditorPropertyFloat::_value_changed)); + spin->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyFloat::_value_changed)); } ///////////////////// EASING ///////////////////////// @@ -1570,14 +1570,14 @@ void EditorPropertyEasing::_draw_easing() { const float exp = get_edited_property_value(); - const Ref<Font> f = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - const Color font_color = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SNAME("font_color"), SNAME("LineEdit")); + const Ref<Font> f = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + const Color font_color = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SceneStringName(font_color), SNAME("LineEdit")); Color line_color; if (dragging) { line_color = get_theme_color(SNAME("accent_color"), EditorStringName(Editor)); } else { - line_color = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SNAME("font_color"), SNAME("LineEdit")) * Color(1, 1, 1, 0.9); + line_color = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SceneStringName(font_color), SNAME("LineEdit")) * Color(1, 1, 1, 0.9); } Vector<Point2> points; @@ -1670,7 +1670,7 @@ void EditorPropertyEasing::_notification(int p_what) { preset->add_icon_item(get_editor_theme_icon(SNAME("CurveInOut")), "Ease In-Out", EASING_IN_OUT); preset->add_icon_item(get_editor_theme_icon(SNAME("CurveOutIn")), "Ease Out-In", EASING_OUT_IN); } - easing_draw->set_custom_minimum_size(Size2(0, get_theme_font(SNAME("font"), SNAME("Label"))->get_height(get_theme_font_size(SNAME("font_size"), SNAME("Label"))) * 2)); + easing_draw->set_custom_minimum_size(Size2(0, get_theme_font(SceneStringName(font), SNAME("Label"))->get_height(get_theme_font_size(SceneStringName(font_size), SNAME("Label"))) * 2)); } break; } } @@ -1697,7 +1697,7 @@ EditorPropertyEasing::EditorPropertyEasing() { spin->set_hide_slider(true); spin->set_allow_lesser(true); spin->set_allow_greater(true); - spin->connect("value_changed", callable_mp(this, &EditorPropertyEasing::_spin_value_changed)); + spin->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyEasing::_spin_value_changed)); spin->get_line_edit()->connect(SceneStringName(focus_exited), callable_mp(this, &EditorPropertyEasing::_spin_focus_exited)); spin->hide(); add_child(spin); @@ -1789,7 +1789,7 @@ EditorPropertyRect2::EditorPropertyRect2(bool p_force_wide) { } add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyRect2::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyRect2::_value_changed).bind(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1885,7 +1885,7 @@ EditorPropertyRect2i::EditorPropertyRect2i(bool p_force_wide) { } add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyRect2i::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyRect2i::_value_changed).bind(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -1972,7 +1972,7 @@ EditorPropertyPlane::EditorPropertyPlane(bool p_force_wide) { spin[i]->set_label(desc[i]); bc->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyPlane::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyPlane::_value_changed).bind(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -2078,9 +2078,9 @@ void EditorPropertyQuaternion::_notification(int p_what) { euler[i]->add_theme_color_override("label_color", colors[i]); } edit_button->set_icon(get_editor_theme_icon(SNAME("Edit"))); - euler_label->add_theme_color_override(SNAME("font_color"), get_theme_color(SNAME("property_color"), SNAME("EditorProperty"))); + euler_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("property_color"), SNAME("EditorProperty"))); warning->set_icon(get_editor_theme_icon(SNAME("NodeWarning"))); - warning->add_theme_color_override(SNAME("font_color"), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + warning->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } break; } } @@ -2145,7 +2145,7 @@ EditorPropertyQuaternion::EditorPropertyQuaternion() { spin[i]->set_label(desc[i]); default_layout->add_child(spin[i]); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyQuaternion::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyQuaternion::_value_changed).bind(desc[i])); if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -2172,7 +2172,7 @@ EditorPropertyQuaternion::EditorPropertyQuaternion() { euler[i]->set_label(desc[i]); edit_custom_layout->add_child(euler[i]); add_focusable(euler[i]); - euler[i]->connect("value_changed", callable_mp(this, &EditorPropertyQuaternion::_custom_value_changed)); + euler[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyQuaternion::_custom_value_changed)); if (horizontal) { euler[i]->set_h_size_flags(SIZE_EXPAND_FILL); } @@ -2261,7 +2261,7 @@ EditorPropertyAABB::EditorPropertyAABB() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyAABB::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyAABB::_value_changed).bind(desc[i])); } set_bottom_editor(g); } @@ -2345,7 +2345,7 @@ EditorPropertyTransform2D::EditorPropertyTransform2D(bool p_include_origin) { } spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyTransform2D::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyTransform2D::_value_changed).bind(desc[i])); } set_bottom_editor(g); } @@ -2428,7 +2428,7 @@ EditorPropertyBasis::EditorPropertyBasis() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyBasis::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyBasis::_value_changed).bind(desc[i])); } set_bottom_editor(g); } @@ -2520,7 +2520,7 @@ EditorPropertyTransform3D::EditorPropertyTransform3D() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyTransform3D::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyTransform3D::_value_changed).bind(desc[i])); } set_bottom_editor(g); } @@ -2620,7 +2620,7 @@ EditorPropertyProjection::EditorPropertyProjection() { g->add_child(spin[i]); spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); add_focusable(spin[i]); - spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyProjection::_value_changed).bind(desc[i])); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyProjection::_value_changed).bind(desc[i])); } set_bottom_editor(g); } diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 53a10a779f..633f6abad9 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -381,7 +381,7 @@ void EditorPropertyArray::update_property() { size_slider->set_max(INT32_MAX); size_slider->set_h_size_flags(SIZE_EXPAND_FILL); size_slider->set_read_only(is_read_only()); - size_slider->connect("value_changed", callable_mp(this, &EditorPropertyArray::_length_changed)); + size_slider->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyArray::_length_changed)); hbox->add_child(size_slider); property_vbox = memnew(VBoxContainer); @@ -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_properties_vector.cpp b/editor/editor_properties_vector.cpp index 65f8983b74..365cbc6ec8 100644 --- a/editor/editor_properties_vector.cpp +++ b/editor/editor_properties_vector.cpp @@ -222,7 +222,7 @@ EditorPropertyVectorN::EditorPropertyVectorN(Variant::Type p_type, bool p_force_ if (horizontal) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } - spin[i]->connect(SNAME("value_changed"), callable_mp(this, &EditorPropertyVectorN::_value_changed).bind(String(COMPONENT_LABELS[i]))); + spin[i]->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyVectorN::_value_changed).bind(String(COMPONENT_LABELS[i]))); spin[i]->connect(SNAME("grabbed"), callable_mp(this, &EditorPropertyVectorN::_grab_changed).bind(true)); spin[i]->connect(SNAME("ungrabbed"), callable_mp(this, &EditorPropertyVectorN::_grab_changed).bind(false)); add_focusable(spin[i]); diff --git a/editor/editor_quick_open.cpp b/editor/editor_quick_open.cpp index 356055c457..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())); } @@ -261,7 +264,7 @@ String EditorQuickOpen::get_base_type() const { void EditorQuickOpen::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &EditorQuickOpen::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &EditorQuickOpen::_confirmed)); search_box->set_clear_button_enabled(true); } break; @@ -278,7 +281,7 @@ void EditorQuickOpen::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &EditorQuickOpen::_confirmed)); + disconnect(SceneStringName(confirmed), callable_mp(this, &EditorQuickOpen::_confirmed)); } break; } } @@ -292,7 +295,7 @@ EditorQuickOpen::EditorQuickOpen() { add_child(vbc); search_box = memnew(LineEdit); - search_box->connect("text_changed", callable_mp(this, &EditorQuickOpen::_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorQuickOpen::_text_changed)); search_box->connect(SceneStringName(gui_input), callable_mp(this, &EditorQuickOpen::_sbox_input)); vbc->add_margin_child(TTR("Search:"), search_box); register_text_enter(search_box); diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp index fbd9d84e26..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" @@ -373,7 +374,7 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) { duplicate_resources_dialog = memnew(ConfirmationDialog); add_child(duplicate_resources_dialog); duplicate_resources_dialog->set_title(TTR("Make Unique (Recursive)")); - duplicate_resources_dialog->connect("confirmed", callable_mp(this, &EditorResourcePicker::_duplicate_selected_resources)); + duplicate_resources_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorResourcePicker::_duplicate_selected_resources)); VBoxContainer *vb = memnew(VBoxContainer); duplicate_resources_dialog->add_child(vb); @@ -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); @@ -1231,8 +1237,8 @@ void EditorAudioStreamPicker::_notification(int p_what) { void EditorAudioStreamPicker::_update_resource() { EditorResourcePicker::_update_resource(); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Ref<AudioStream> audio_stream = get_edited_resource(); if (audio_stream.is_valid() && audio_stream->get_length() > 0.0) { set_assign_button_min_size(Size2(1, font->get_height(font_size) * 3)); @@ -1250,20 +1256,18 @@ void EditorAudioStreamPicker::_preview_draw() { return; } - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); get_assign_button()->set_text(""); Size2i size = stream_preview_rect->get_size(); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); Rect2 rect(Point2(), size); 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_run_native.cpp b/editor/editor_run_native.cpp index 715f310b5b..548eac1737 100644 --- a/editor/editor_run_native.cpp +++ b/editor/editor_run_native.cpp @@ -205,7 +205,7 @@ EditorRunNative::EditorRunNative() { run_native_confirm = memnew(ConfirmationDialog); add_child(run_native_confirm); - run_native_confirm->connect("confirmed", callable_mp(this, &EditorRunNative::_confirm_run_native)); + run_native_confirm->connect(SceneStringName(confirmed), callable_mp(this, &EditorRunNative::_confirm_run_native)); set_process(true); } 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_sectioned_inspector.cpp b/editor/editor_sectioned_inspector.cpp index 22120bfc01..bc7bfcfa58 100644 --- a/editor/editor_sectioned_inspector.cpp +++ b/editor/editor_sectioned_inspector.cpp @@ -304,7 +304,7 @@ void SectionedInspector::update_category_list() { void SectionedInspector::register_search_box(LineEdit *p_box) { search_box = p_box; inspector->register_text_enter(p_box); - search_box->connect("text_changed", callable_mp(this, &SectionedInspector::_search_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &SectionedInspector::_search_changed)); } void SectionedInspector::_search_changed(const String &p_what) { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 782d64621f..e021be9668 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) @@ -483,7 +480,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { 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 +639,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 +662,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") @@ -1098,7 +1098,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 7f9310f715..6fd6a7103f 100644 --- a/editor/editor_settings_dialog.cpp +++ b/editor/editor_settings_dialog.cpp @@ -213,7 +213,7 @@ void EditorSettingsDialog::_update_icons() { restart_close_button->set_icon(shortcuts->get_editor_theme_icon(SNAME("Close"))); restart_container->add_theme_style_override(SceneStringName(panel), shortcuts->get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); restart_icon->set_texture(shortcuts->get_editor_theme_icon(SNAME("StatusWarning"))); - restart_label->add_theme_color_override("font_color", shortcuts->get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + restart_label->add_theme_color_override(SceneStringName(font_color), shortcuts->get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } void EditorSettingsDialog::_event_config_confirmed() { @@ -307,7 +307,7 @@ void EditorSettingsDialog::_create_shortcut_treeitem(TreeItem *p_parent, const S shortcut_item->set_text(1, sc_text); if (sc_text == "None") { // Fade out unassigned shortcut labels for easier visual grepping. - shortcut_item->set_custom_color(1, shortcuts->get_theme_color(SNAME("font_color"), SNAME("Label")) * Color(1, 1, 1, 0.5)); + shortcut_item->set_custom_color(1, shortcuts->get_theme_color(SceneStringName(font_color), SNAME("Label")) * Color(1, 1, 1, 0.5)); } if (p_allow_revert) { @@ -775,7 +775,7 @@ EditorSettingsDialog::EditorSettingsDialog() { shortcut_search_box->set_placeholder(TTR("Filter by Name")); shortcut_search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); top_hbox->add_child(shortcut_search_box); - shortcut_search_box->connect("text_changed", callable_mp(this, &EditorSettingsDialog::_filter_shortcuts)); + shortcut_search_box->connect(SceneStringName(text_changed), callable_mp(this, &EditorSettingsDialog::_filter_shortcuts)); shortcut_search_by_event = memnew(EventListenerLineEdit); shortcut_search_by_event->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -809,7 +809,7 @@ EditorSettingsDialog::EditorSettingsDialog() { // Adding event dialog shortcut_editor = memnew(InputEventConfigurationDialog); - shortcut_editor->connect("confirmed", callable_mp(this, &EditorSettingsDialog::_event_config_confirmed)); + shortcut_editor->connect(SceneStringName(confirmed), callable_mp(this, &EditorSettingsDialog::_event_config_confirmed)); shortcut_editor->set_allowed_input_types(INPUT_KEY); add_child(shortcut_editor); 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 c9dfe1f521..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; } @@ -166,7 +166,7 @@ void EngineUpdateLabel::_set_message(const String &p_message, const Color &p_col if (is_disabled()) { add_theme_color_override("font_disabled_color", p_color); } else { - add_theme_color_override("font_color", p_color); + add_theme_color_override(SceneStringName(font_color), p_color); } set_text(p_message); } @@ -264,7 +264,7 @@ void EngineUpdateLabel::_notification(int p_what) { } break; case NOTIFICATION_THEME_CHANGED: { - theme_cache.default_color = get_theme_color("font_color", "Button"); + theme_cache.default_color = get_theme_color(SceneStringName(font_color), "Button"); theme_cache.disabled_color = get_theme_color("font_disabled_color", "Button"); theme_cache.error_color = get_theme_color("error_color", EditorStringName(Editor)); theme_cache.update_color = get_theme_color("warning_color", EditorStringName(Editor)); diff --git a/editor/event_listener_line_edit.cpp b/editor/event_listener_line_edit.cpp index 424319610a..a6b30233fc 100644 --- a/editor/event_listener_line_edit.cpp +++ b/editor/event_listener_line_edit.cpp @@ -216,7 +216,7 @@ void EventListenerLineEdit::grab_focus() { void EventListenerLineEdit::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("text_changed", callable_mp(this, &EventListenerLineEdit::_on_text_changed)); + connect(SceneStringName(text_changed), callable_mp(this, &EventListenerLineEdit::_on_text_changed)); connect(SceneStringName(focus_entered), callable_mp(this, &EventListenerLineEdit::_on_focus)); connect(SceneStringName(focus_exited), callable_mp(this, &EventListenerLineEdit::_on_unfocus)); set_right_icon(get_editor_theme_icon(SNAME("Keyboard"))); 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 5a95b553e9..527544fea3 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -99,12 +99,12 @@ bool EditorExportPlatform::fill_log_messages(RichTextLabel *p_log, Error p_err) p_log->set_table_column_expand(1, true); for (int m = 0; m < msg_count; m++) { EditorExportPlatform::ExportMessage msg = get_message(m); - Color color = p_log->get_theme_color(SNAME("font_color"), SNAME("Label")); + Color color = p_log->get_theme_color(SceneStringName(font_color), SNAME("Label")); Ref<Texture> icon; switch (msg.msg_type) { case EditorExportPlatform::EXPORT_MESSAGE_INFO: { - color = p_log->get_theme_color(SNAME("font_color"), EditorStringName(Editor)) * Color(1, 1, 1, 0.6); + color = p_log->get_theme_color(SceneStringName(font_color), EditorStringName(Editor)) * Color(1, 1, 1, 0.6); } break; case EditorExportPlatform::EXPORT_MESSAGE_WARNING: { icon = p_log->get_editor_theme_icon(SNAME("Warning")); diff --git a/editor/export/export_template_manager.cpp b/editor/export/export_template_manager.cpp index 588d99f08f..a6f6c87ee1 100644 --- a/editor/export/export_template_manager.cpp +++ b/editor/export/export_template_manager.cpp @@ -366,9 +366,9 @@ void ExportTemplateManager::_set_current_progress_status(const String &p_status, if (p_error) { download_progress_bar->hide(); - download_progress_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + download_progress_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } else { - download_progress_label->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), SNAME("Label"))); + download_progress_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), SNAME("Label"))); } } @@ -810,9 +810,9 @@ void ExportTemplateManager::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { - current_value->add_theme_font_override("font", get_theme_font(SNAME("main"), EditorStringName(EditorFonts))); - current_missing_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); - current_installed_label->add_theme_color_override("font_color", get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); + current_value->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("main"), EditorStringName(EditorFonts))); + current_missing_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + current_installed_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); mirror_options_button->set_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl"))); } break; @@ -1051,7 +1051,7 @@ ExportTemplateManager::ExportTemplateManager() { uninstall_confirm = memnew(ConfirmationDialog); uninstall_confirm->set_title(TTR("Uninstall Template")); add_child(uninstall_confirm); - uninstall_confirm->connect("confirmed", callable_mp(this, &ExportTemplateManager::_uninstall_template_confirmed)); + uninstall_confirm->connect(SceneStringName(confirmed), callable_mp(this, &ExportTemplateManager::_uninstall_template_confirmed)); install_file_dialog = memnew(FileDialog); install_file_dialog->set_title(TTR("Select Template File")); @@ -1065,5 +1065,5 @@ ExportTemplateManager::ExportTemplateManager() { hide_dialog_accept = memnew(AcceptDialog); hide_dialog_accept->set_text(TTR("The templates will continue to download.\nYou may experience a short editor freeze when they finish.")); add_child(hide_dialog_accept); - hide_dialog_accept->connect("confirmed", callable_mp(this, &ExportTemplateManager::_hide_dialog)); + hide_dialog_accept->connect(SceneStringName(confirmed), callable_mp(this, &ExportTemplateManager::_hide_dialog)); } 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/export/project_export.cpp b/editor/export/project_export.cpp index 7787512cc2..3103e504b9 100644 --- a/editor/export/project_export.cpp +++ b/editor/export/project_export.cpp @@ -68,7 +68,7 @@ void ProjectExportTextureFormatError::_bind_methods() { void ProjectExportTextureFormatError::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { - texture_format_error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + texture_format_error_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } break; } } @@ -107,7 +107,7 @@ void ProjectExportDialog::_notification(int p_what) { case NOTIFICATION_READY: { duplicate_preset->set_icon(presets->get_editor_theme_icon(SNAME("Duplicate"))); delete_preset->set_icon(presets->get_editor_theme_icon(SNAME("Remove"))); - connect("confirmed", callable_mp(this, &ProjectExportDialog::_export_pck_zip)); + connect(SceneStringName(confirmed), callable_mp(this, &ProjectExportDialog::_export_pck_zip)); _update_export_all(); } break; } @@ -1246,7 +1246,7 @@ ProjectExportDialog::ProjectExportDialog() { presets->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); SET_DRAG_FORWARDING_GCD(presets, ProjectExportDialog); mc->add_child(presets); - presets->connect("item_selected", callable_mp(this, &ProjectExportDialog::_edit_preset)); + presets->connect(SceneStringName(item_selected), callable_mp(this, &ProjectExportDialog::_edit_preset)); duplicate_preset = memnew(Button); duplicate_preset->set_tooltip_text(TTR("Duplicate")); duplicate_preset->set_flat(true); @@ -1266,7 +1266,7 @@ ProjectExportDialog::ProjectExportDialog() { name = memnew(LineEdit); settings_vb->add_margin_child(TTR("Name:"), name); - name->connect("text_changed", callable_mp(this, &ProjectExportDialog::_name_changed)); + name->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_name_changed)); runnable = memnew(CheckButton); runnable->set_text(TTR("Runnable")); @@ -1328,7 +1328,7 @@ ProjectExportDialog::ProjectExportDialog() { export_filter->add_item(TTR("Export all resources in the project except resources checked below")); export_filter->add_item(TTR("Export as dedicated server")); resources_vb->add_margin_child(TTR("Export Mode:"), export_filter); - export_filter->connect("item_selected", callable_mp(this, &ProjectExportDialog::_export_type_changed)); + export_filter->connect(SceneStringName(item_selected), callable_mp(this, &ProjectExportDialog::_export_type_changed)); include_label = memnew(Label); include_label->set_text(TTR("Resources to export:")); @@ -1379,13 +1379,13 @@ ProjectExportDialog::ProjectExportDialog() { resources_vb->add_margin_child( TTR("Filters to export non-resource files/folders\n(comma-separated, e.g: *.json, *.txt, docs/*)"), include_filters); - include_filters->connect("text_changed", callable_mp(this, &ProjectExportDialog::_filter_changed)); + include_filters->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_filter_changed)); exclude_filters = memnew(LineEdit); resources_vb->add_margin_child( TTR("Filters to exclude files/folders from project\n(comma-separated, e.g: *.json, *.txt, docs/*)"), exclude_filters); - exclude_filters->connect("text_changed", callable_mp(this, &ProjectExportDialog::_filter_changed)); + exclude_filters->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_filter_changed)); // Feature tags. @@ -1393,7 +1393,7 @@ ProjectExportDialog::ProjectExportDialog() { feature_vb->set_name(TTR("Features")); feature_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL); custom_features = memnew(LineEdit); - custom_features->connect("text_changed", callable_mp(this, &ProjectExportDialog::_custom_features_changed)); + custom_features->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_custom_features_changed)); feature_vb->add_margin_child(TTR("Custom (comma-separated):"), custom_features); custom_feature_display = memnew(RichTextLabel); custom_feature_display->set_custom_minimum_size(Size2(1, 75 * EDSCALE)); @@ -1422,22 +1422,22 @@ ProjectExportDialog::ProjectExportDialog() { sec_vb->add_child(enc_directory); enc_in_filters = memnew(LineEdit); - enc_in_filters->connect("text_changed", callable_mp(this, &ProjectExportDialog::_enc_filters_changed)); + enc_in_filters->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_enc_filters_changed)); sec_vb->add_margin_child( TTR("Filters to include files/folders\n(comma-separated, e.g: *.tscn, *.tres, scenes/*)"), enc_in_filters); enc_ex_filters = memnew(LineEdit); - enc_ex_filters->connect("text_changed", callable_mp(this, &ProjectExportDialog::_enc_filters_changed)); + enc_ex_filters->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_enc_filters_changed)); sec_vb->add_margin_child( TTR("Filters to exclude files/folders\n(comma-separated, e.g: *.ctex, *.import, music/*)"), enc_ex_filters); script_key = memnew(LineEdit); - script_key->connect("text_changed", callable_mp(this, &ProjectExportDialog::_script_encryption_key_changed)); + script_key->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_script_encryption_key_changed)); script_key_error = memnew(Label); script_key_error->set_text(String::utf8("• ") + TTR("Invalid Encryption Key (must be 64 hexadecimal characters long)")); - script_key_error->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); + script_key_error->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); sec_vb->add_margin_child(TTR("Encryption Key (256-bits as hexadecimal):"), script_key); sec_vb->add_child(script_key_error); sections->add_child(sec_scroll_container); @@ -1461,7 +1461,7 @@ ProjectExportDialog::ProjectExportDialog() { script_mode->add_item(TTR("Text (easier debugging)"), (int)EditorExportPreset::MODE_SCRIPT_TEXT); script_mode->add_item(TTR("Binary tokens (faster loading)"), (int)EditorExportPreset::MODE_SCRIPT_BINARY_TOKENS); script_mode->add_item(TTR("Compressed binary tokens (smaller files)"), (int)EditorExportPreset::MODE_SCRIPT_BINARY_TOKENS_COMPRESSED); - script_mode->connect("item_selected", callable_mp(this, &ProjectExportDialog::_script_export_mode_changed)); + script_mode->connect(SceneStringName(item_selected), callable_mp(this, &ProjectExportDialog::_script_export_mode_changed)); sections->add_child(script_vb); @@ -1483,7 +1483,7 @@ ProjectExportDialog::ProjectExportDialog() { delete_confirm = memnew(ConfirmationDialog); add_child(delete_confirm); delete_confirm->set_ok_button_text(TTR("Delete")); - delete_confirm->connect("confirmed", callable_mp(this, &ProjectExportDialog::_delete_preset_confirm)); + delete_confirm->connect(SceneStringName(confirmed), callable_mp(this, &ProjectExportDialog::_delete_preset_confirm)); // Export buttons, dialogs and errors. @@ -1539,12 +1539,12 @@ ProjectExportDialog::ProjectExportDialog() { export_error = memnew(Label); main_vb->add_child(export_error); export_error->hide(); - export_error->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); + export_error->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); export_warning = memnew(Label); main_vb->add_child(export_warning); export_warning->hide(); - export_warning->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor))); + export_warning->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor))); export_templates_error = memnew(HBoxContainer); main_vb->add_child(export_templates_error); @@ -1552,7 +1552,7 @@ ProjectExportDialog::ProjectExportDialog() { Label *export_error2 = memnew(Label); export_templates_error->add_child(export_error2); - export_error2->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); + export_error2->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); export_error2->set_text(String::utf8("• ") + TTR("Export templates for this platform are missing:") + " "); result_dialog = memnew(AcceptDialog); @@ -1576,7 +1576,7 @@ ProjectExportDialog::ProjectExportDialog() { export_project->set_access(EditorFileDialog::ACCESS_FILESYSTEM); add_child(export_project); export_project->connect("file_selected", callable_mp(this, &ProjectExportDialog::_export_project_to_path)); - export_project->get_line_edit()->connect("text_changed", callable_mp(this, &ProjectExportDialog::_validate_export_path)); + export_project->get_line_edit()->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_validate_export_path)); export_project->add_option(TTR("Export With Debug"), Vector<String>(), true); export_pck_zip->add_option(TTR("Export With Debug"), Vector<String>(), true); diff --git a/editor/fbx_importer_manager.cpp b/editor/fbx_importer_manager.cpp index 1fded345c8..2650b642fa 100644 --- a/editor/fbx_importer_manager.cpp +++ b/editor/fbx_importer_manager.cpp @@ -44,7 +44,7 @@ void FBXImporterManager::_notification(int p_what) { } break; case NOTIFICATION_READY: { - connect("confirmed", callable_mp(this, &FBXImporterManager::_path_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &FBXImporterManager::_path_confirmed)); } break; } } @@ -93,11 +93,11 @@ void FBXImporterManager::_validate_path(const String &p_path) { if (success) { path_status->set_text(TTR("FBX2glTF executable is valid.")); - path_status->add_theme_color_override("font_color", path_status->get_theme_color(SNAME("success_color"), EditorStringName(Editor))); + path_status->add_theme_color_override(SceneStringName(font_color), path_status->get_theme_color(SNAME("success_color"), EditorStringName(Editor))); get_ok_button()->set_disabled(false); } else { path_status->set_text(error); - path_status->add_theme_color_override("font_color", path_status->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + path_status->add_theme_color_override(SceneStringName(font_color), path_status->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); get_ok_button()->set_disabled(true); } } @@ -165,7 +165,7 @@ FBXImporterManager::FBXImporterManager() { add_child(vb); - fbx_path->connect("text_changed", callable_mp(this, &FBXImporterManager::_validate_path)); + fbx_path->connect(SceneStringName(text_changed), callable_mp(this, &FBXImporterManager::_validate_path)); get_ok_button()->set_text(TTR("Confirm Path")); get_cancel_button()->connect(SceneStringName(pressed), callable_mp(this, &FBXImporterManager::_cancel_setup)); diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index f8a82187b9..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); @@ -4003,7 +3976,7 @@ FileSystemDock::FileSystemDock() { tree_search_box->set_h_size_flags(SIZE_EXPAND_FILL); tree_search_box->set_placeholder(TTR("Filter Files")); tree_search_box->set_clear_button_enabled(true); - tree_search_box->connect("text_changed", callable_mp(this, &FileSystemDock::_search_changed).bind(tree_search_box)); + tree_search_box->connect(SceneStringName(text_changed), callable_mp(this, &FileSystemDock::_search_changed).bind(tree_search_box)); toolbar2_hbc->add_child(tree_search_box); tree_button_sort = _create_file_menu_button(); @@ -4055,7 +4028,7 @@ FileSystemDock::FileSystemDock() { file_list_search_box->set_h_size_flags(SIZE_EXPAND_FILL); file_list_search_box->set_placeholder(TTR("Filter Files")); file_list_search_box->set_clear_button_enabled(true); - file_list_search_box->connect("text_changed", callable_mp(this, &FileSystemDock::_search_changed).bind(file_list_search_box)); + file_list_search_box->connect(SceneStringName(text_changed), callable_mp(this, &FileSystemDock::_search_changed).bind(file_list_search_box)); path_hb->add_child(file_list_search_box); file_list_button_sort = _create_file_menu_button(); @@ -4111,7 +4084,7 @@ FileSystemDock::FileSystemDock() { add_child(overwrite_dialog); overwrite_dialog->set_ok_button_text(TTR("Overwrite")); overwrite_dialog->add_button(TTR("Keep Both"), true)->connect(SceneStringName(pressed), callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(false)); - overwrite_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(true)); + overwrite_dialog->connect(SceneStringName(confirmed), callable_mp(this, &FileSystemDock::_overwrite_dialog_action).bind(true)); VBoxContainer *overwrite_dialog_vb = memnew(VBoxContainer); overwrite_dialog->add_child(overwrite_dialog_vb); @@ -4138,7 +4111,7 @@ FileSystemDock::FileSystemDock() { duplicate_dialog->set_ok_button_text(TTR("Duplicate")); add_child(duplicate_dialog); duplicate_dialog->register_text_enter(duplicate_dialog_text); - duplicate_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_duplicate_operation_confirm)); + duplicate_dialog->connect(SceneStringName(confirmed), callable_mp(this, &FileSystemDock::_duplicate_operation_confirm)); make_dir_dialog = memnew(DirectoryCreateDialog); add_child(make_dir_dialog); @@ -4146,7 +4119,7 @@ FileSystemDock::FileSystemDock() { make_scene_dialog = memnew(SceneCreateDialog); add_child(make_scene_dialog); - make_scene_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_make_scene_confirm)); + make_scene_dialog->connect(SceneStringName(confirmed), callable_mp(this, &FileSystemDock::_make_scene_confirm)); make_script_dialog = memnew(ScriptCreateDialog); make_script_dialog->set_title(TTR("Create Script")); 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/find_in_files.cpp b/editor/find_in_files.cpp index e9edcab52f..719fa25dad 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -319,7 +319,7 @@ FindInFilesDialog::FindInFilesDialog() { _search_text_line_edit = memnew(LineEdit); _search_text_line_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL); - _search_text_line_edit->connect("text_changed", callable_mp(this, &FindInFilesDialog::_on_search_text_modified)); + _search_text_line_edit->connect(SceneStringName(text_changed), callable_mp(this, &FindInFilesDialog::_on_search_text_modified)); _search_text_line_edit->connect("text_submitted", callable_mp(this, &FindInFilesDialog::_on_search_text_submitted)); gc->add_child(_search_text_line_edit); @@ -624,7 +624,7 @@ FindInFilesPanel::FindInFilesPanel() { _results_display = memnew(Tree); _results_display->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); _results_display->set_v_size_flags(SIZE_EXPAND_FILL); - _results_display->connect("item_selected", callable_mp(this, &FindInFilesPanel::_on_result_selected)); + _results_display->connect(SceneStringName(item_selected), callable_mp(this, &FindInFilesPanel::_on_result_selected)); _results_display->connect("item_edited", callable_mp(this, &FindInFilesPanel::_on_item_edited)); _results_display->set_hide_root(true); _results_display->set_select_mode(Tree::SELECT_ROW); @@ -644,7 +644,7 @@ FindInFilesPanel::FindInFilesPanel() { _replace_line_edit = memnew(LineEdit); _replace_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); - _replace_line_edit->connect("text_changed", callable_mp(this, &FindInFilesPanel::_on_replace_text_changed)); + _replace_line_edit->connect(SceneStringName(text_changed), callable_mp(this, &FindInFilesPanel::_on_replace_text_changed)); _replace_container->add_child(_replace_line_edit); _replace_all_button = memnew(Button); @@ -714,10 +714,10 @@ void FindInFilesPanel::stop_search() { void FindInFilesPanel::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { - _search_text_label->add_theme_font_override("font", get_theme_font(SNAME("source"), EditorStringName(EditorFonts))); - _search_text_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); - _results_display->add_theme_font_override("font", get_theme_font(SNAME("source"), EditorStringName(EditorFonts))); - _results_display->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); + _search_text_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("source"), EditorStringName(EditorFonts))); + _search_text_label->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); + _results_display->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("source"), EditorStringName(EditorFonts))); + _results_display->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); // Rebuild search tree. if (!_finder->get_search_text().is_empty()) { @@ -750,7 +750,7 @@ void FindInFilesPanel::_on_result_found(const String &fpath, int line_number, in file_item = E->value; } - Color file_item_color = _results_display->get_theme_color(SNAME("font_color")) * Color(1, 1, 1, 0.67); + Color file_item_color = _results_display->get_theme_color(SceneStringName(font_color)) * Color(1, 1, 1, 0.67); file_item->set_custom_color(0, file_item_color); file_item->set_selectable(0, false); @@ -796,8 +796,8 @@ void FindInFilesPanel::draw_result_text(Object *item_obj, Rect2 rect) { } Result r = E->value; String item_text = item->get_text(_with_replace ? 1 : 0); - Ref<Font> font = _results_display->get_theme_font(SNAME("font")); - int font_size = _results_display->get_theme_font_size(SNAME("font_size")); + Ref<Font> font = _results_display->get_theme_font(SceneStringName(font)); + int font_size = _results_display->get_theme_font_size(SceneStringName(font_size)); Rect2 match_rect = rect; match_rect.position.x += font->get_string_size(item_text.left(r.begin_trimmed), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size).x - 1; @@ -815,7 +815,7 @@ void FindInFilesPanel::_on_item_edited() { TreeItem *item = _results_display->get_selected(); // Change opacity to half if checkbox is checked, otherwise full. - Color use_color = _results_display->get_theme_color(SNAME("font_color")); + Color use_color = _results_display->get_theme_color(SceneStringName(font_color)); if (!item->is_checked(0)) { use_color.a *= 0.5; } diff --git a/editor/group_settings_editor.cpp b/editor/group_settings_editor.cpp index 981a847428..bb899af582 100644 --- a/editor/group_settings_editor.cpp +++ b/editor/group_settings_editor.cpp @@ -400,7 +400,7 @@ void GroupSettingsEditor::show_message(const String &p_message) { void GroupSettingsEditor::_show_remove_dialog() { if (!remove_dialog) { remove_dialog = memnew(ConfirmationDialog); - remove_dialog->connect("confirmed", callable_mp(this, &GroupSettingsEditor::_confirm_delete)); + remove_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GroupSettingsEditor::_confirm_delete)); VBoxContainer *vbox = memnew(VBoxContainer); remove_label = memnew(Label); @@ -431,7 +431,7 @@ void GroupSettingsEditor::_show_rename_dialog() { if (!rename_group_dialog) { rename_group_dialog = memnew(ConfirmationDialog); rename_group_dialog->set_title(TTR("Rename Group")); - rename_group_dialog->connect("confirmed", callable_mp(this, &GroupSettingsEditor::_confirm_rename)); + rename_group_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GroupSettingsEditor::_confirm_rename)); VBoxContainer *vbc = memnew(VBoxContainer); rename_group_dialog->add_child(vbc); @@ -451,7 +451,7 @@ void GroupSettingsEditor::_show_rename_dialog() { rename_validation_panel->set_update_callback(callable_mp(this, &GroupSettingsEditor::_check_rename)); rename_validation_panel->set_accept_button(rename_group_dialog->get_ok_button()); - rename_group->connect("text_changed", callable_mp(rename_validation_panel, &EditorValidationPanel::update).unbind(1)); + rename_group->connect(SceneStringName(text_changed), callable_mp(rename_validation_panel, &EditorValidationPanel::update).unbind(1)); vbc->add_child(rename_validation_panel); @@ -499,7 +499,7 @@ GroupSettingsEditor::GroupSettingsEditor() { group_name = memnew(LineEdit); group_name->set_h_size_flags(SIZE_EXPAND_FILL); group_name->set_clear_button_enabled(true); - group_name->connect("text_changed", callable_mp(this, &GroupSettingsEditor::_group_name_text_changed)); + group_name->connect(SceneStringName(text_changed), callable_mp(this, &GroupSettingsEditor::_group_name_text_changed)); group_name->connect("text_submitted", callable_mp(this, &GroupSettingsEditor::_text_submitted)); hbc->add_child(group_name); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index ed83ae98f3..18ac4074da 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -607,7 +607,7 @@ void GroupsEditor::_show_add_group_dialog() { if (!add_group_dialog) { add_group_dialog = memnew(ConfirmationDialog); add_group_dialog->set_title(TTR("Create New Group")); - add_group_dialog->connect("confirmed", callable_mp(this, &GroupsEditor::_confirm_add)); + add_group_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GroupsEditor::_confirm_add)); VBoxContainer *vbc = memnew(VBoxContainer); add_group_dialog->add_child(vbc); @@ -652,7 +652,7 @@ void GroupsEditor::_show_add_group_dialog() { add_validation_panel->set_update_callback(callable_mp(this, &GroupsEditor::_check_add)); add_validation_panel->set_accept_button(add_group_dialog->get_ok_button()); - add_group_name->connect("text_changed", callable_mp(add_validation_panel, &EditorValidationPanel::update).unbind(1)); + add_group_name->connect(SceneStringName(text_changed), callable_mp(add_validation_panel, &EditorValidationPanel::update).unbind(1)); vbc->add_child(add_validation_panel); @@ -673,7 +673,7 @@ void GroupsEditor::_show_rename_group_dialog() { if (!rename_group_dialog) { rename_group_dialog = memnew(ConfirmationDialog); rename_group_dialog->set_title(TTR("Rename Group")); - rename_group_dialog->connect("confirmed", callable_mp(this, &GroupsEditor::_confirm_rename)); + rename_group_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GroupsEditor::_confirm_rename)); VBoxContainer *vbc = memnew(VBoxContainer); rename_group_dialog->add_child(vbc); @@ -693,7 +693,7 @@ void GroupsEditor::_show_rename_group_dialog() { rename_validation_panel->set_update_callback(callable_mp(this, &GroupsEditor::_check_rename)); rename_validation_panel->set_accept_button(rename_group_dialog->get_ok_button()); - rename_group->connect("text_changed", callable_mp(rename_validation_panel, &EditorValidationPanel::update).unbind(1)); + rename_group->connect(SceneStringName(text_changed), callable_mp(rename_validation_panel, &EditorValidationPanel::update).unbind(1)); vbc->add_child(rename_validation_panel); @@ -729,7 +729,7 @@ void GroupsEditor::_show_rename_group_dialog() { void GroupsEditor::_show_remove_group_dialog() { if (!remove_group_dialog) { remove_group_dialog = memnew(ConfirmationDialog); - remove_group_dialog->connect("confirmed", callable_mp(this, &GroupsEditor::_confirm_delete)); + remove_group_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GroupsEditor::_confirm_delete)); VBoxContainer *vbox = memnew(VBoxContainer); remove_label = memnew(Label); @@ -843,7 +843,7 @@ GroupsEditor::GroupsEditor() { filter->set_clear_button_enabled(true); filter->set_placeholder(TTR("Filter Groups")); filter->set_h_size_flags(SIZE_EXPAND_FILL); - filter->connect("text_changed", callable_mp(this, &GroupsEditor::_update_tree).unbind(1)); + filter->connect(SceneStringName(text_changed), callable_mp(this, &GroupsEditor::_update_tree).unbind(1)); hbc->add_child(filter); tree = memnew(Tree); diff --git a/editor/gui/editor_file_dialog.cpp b/editor/gui/editor_file_dialog.cpp index 97c54e8f48..3e94310c83 100644 --- a/editor/gui/editor_file_dialog.cpp +++ b/editor/gui/editor_file_dialog.cpp @@ -1786,7 +1786,7 @@ void EditorFileDialog::_update_option_controls() { } ob->select(opt.default_idx); grid_options->add_child(ob); - ob->connect("item_selected", callable_mp(this, &EditorFileDialog::_option_changed_item_selected).bind(opt.name)); + ob->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_option_changed_item_selected).bind(opt.name)); selected_options[opt.name] = opt.default_idx; } } @@ -2173,7 +2173,7 @@ EditorFileDialog::EditorFileDialog() { pathhb->add_child(shortcuts_container); drives = memnew(OptionButton); - drives->connect("item_selected", callable_mp(this, &EditorFileDialog::_select_drive)); + drives->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_select_drive)); pathhb->add_child(drives); pathhb->add_child(memnew(VSeparator)); @@ -2225,7 +2225,7 @@ EditorFileDialog::EditorFileDialog() { favorites->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); fav_vb->add_child(favorites); favorites->set_v_size_flags(Control::SIZE_EXPAND_FILL); - favorites->connect("item_selected", callable_mp(this, &EditorFileDialog::_favorite_selected)); + favorites->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_favorite_selected)); VBoxContainer *rec_vb = memnew(VBoxContainer); vsc->add_child(rec_vb); @@ -2235,7 +2235,7 @@ EditorFileDialog::EditorFileDialog() { recent->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); recent->set_allow_reselect(true); rec_vb->add_margin_child(TTR("Recent:"), recent, true); - recent->connect("item_selected", callable_mp(this, &EditorFileDialog::_recent_selected)); + recent->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_recent_selected)); VBoxContainer *item_vb = memnew(VBoxContainer); list_hb->add_child(item_vb); @@ -2300,25 +2300,25 @@ EditorFileDialog::EditorFileDialog() { dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); _update_drives(); - connect("confirmed", callable_mp(this, &EditorFileDialog::_action_pressed)); - item_list->connect("item_selected", callable_mp(this, &EditorFileDialog::_item_selected), CONNECT_DEFERRED); + connect(SceneStringName(confirmed), callable_mp(this, &EditorFileDialog::_action_pressed)); + item_list->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_item_selected), CONNECT_DEFERRED); item_list->connect("multi_selected", callable_mp(this, &EditorFileDialog::_multi_selected), CONNECT_DEFERRED); item_list->connect("item_activated", callable_mp(this, &EditorFileDialog::_item_dc_selected).bind()); item_list->connect("empty_clicked", callable_mp(this, &EditorFileDialog::_items_clear_selection)); dir->connect("text_submitted", callable_mp(this, &EditorFileDialog::_dir_submitted)); file->connect("text_submitted", callable_mp(this, &EditorFileDialog::_file_submitted)); - filter->connect("item_selected", callable_mp(this, &EditorFileDialog::_filter_selected)); + filter->connect(SceneStringName(item_selected), callable_mp(this, &EditorFileDialog::_filter_selected)); confirm_save = memnew(ConfirmationDialog); add_child(confirm_save); - confirm_save->connect("confirmed", callable_mp(this, &EditorFileDialog::_save_confirm_pressed)); + confirm_save->connect(SceneStringName(confirmed), callable_mp(this, &EditorFileDialog::_save_confirm_pressed)); dep_remove_dialog = memnew(DependencyRemoveDialog); add_child(dep_remove_dialog); global_remove_dialog = memnew(ConfirmationDialog); global_remove_dialog->set_text(TTR("Remove the selected files? For safety only files and empty directories can be deleted from here. (Cannot be undone.)\nDepending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently.")); - global_remove_dialog->connect("confirmed", callable_mp(this, &EditorFileDialog::_delete_files_global)); + global_remove_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorFileDialog::_delete_files_global)); add_child(global_remove_dialog); makedialog = memnew(ConfirmationDialog); @@ -2331,7 +2331,7 @@ EditorFileDialog::EditorFileDialog() { makevb->add_margin_child(TTR("Name:"), makedirname); add_child(makedialog); makedialog->register_text_enter(makedirname); - makedialog->connect("confirmed", callable_mp(this, &EditorFileDialog::_make_dir_confirm)); + makedialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorFileDialog::_make_dir_confirm)); error_dialog = memnew(AcceptDialog); add_child(error_dialog); diff --git a/editor/gui/editor_object_selector.cpp b/editor/gui/editor_object_selector.cpp index 434aef1419..5b303760b0 100644 --- a/editor/gui/editor_object_selector.cpp +++ b/editor/gui/editor_object_selector.cpp @@ -38,8 +38,8 @@ #include "scene/gui/margin_container.h" Size2 EditorObjectSelector::get_minimum_size() const { - Ref<Font> font = get_theme_font(SNAME("font")); - int font_size = get_theme_font_size(SNAME("font_size")); + Ref<Font> font = get_theme_font(SceneStringName(font)); + int font_size = get_theme_font_size(SceneStringName(font_size)); return Button::get_minimum_size() + Size2(0, font->get_height(font_size)); } @@ -205,7 +205,7 @@ void EditorObjectSelector::_notification(int p_what) { int icon_size = get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor)); current_object_icon->set_custom_minimum_size(Size2(icon_size, icon_size)); - current_object_label->add_theme_font_override("font", get_theme_font(SNAME("main"), EditorStringName(EditorFonts))); + current_object_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("main"), EditorStringName(EditorFonts))); sub_objects_icon->set_texture(get_theme_icon(SNAME("arrow"), SNAME("OptionButton"))); sub_objects_menu->add_theme_constant_override("icon_max_width", icon_size); } break; 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_spin_slider.cpp b/editor/gui/editor_spin_slider.cpp index a838299288..6c85641d3a 100644 --- a/editor/gui/editor_spin_slider.cpp +++ b/editor/gui/editor_spin_slider.cpp @@ -314,8 +314,8 @@ void EditorSpinSlider::_draw_spin_slider() { if (!flat) { draw_style_box(sb, Rect2(Vector2(), size)); } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("LineEdit")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("LineEdit")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("LineEdit")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("LineEdit")); int sep_base = 4 * EDSCALE; int sep = sep_base + sb->get_offset().x; //make it have the same margin on both sides, looks better @@ -328,7 +328,7 @@ void EditorSpinSlider::_draw_spin_slider() { int vofs = (size.height - font->get_height(font_size)) / 2 + font->get_ascent(font_size); - Color fc = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SNAME("font_color"), SNAME("LineEdit")); + Color fc = get_theme_color(is_read_only() ? SNAME("font_uneditable_color") : SceneStringName(font_color), SNAME("LineEdit")); Color lc = get_theme_color(is_read_only() ? SNAME("read_only_label_color") : SNAME("label_color")); if (flat && !label.is_empty()) { @@ -514,8 +514,8 @@ LineEdit *EditorSpinSlider::get_line_edit() { Size2 EditorSpinSlider::get_minimum_size() const { Ref<StyleBox> sb = get_theme_stylebox(CoreStringName(normal), SNAME("LineEdit")); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("LineEdit")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("LineEdit")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("LineEdit")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("LineEdit")); Size2 ms = sb->get_minimum_size(); ms.height += font->get_height(font_size); diff --git a/editor/gui/editor_validation_panel.cpp b/editor/gui/editor_validation_panel.cpp index 80bb08517c..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; @@ -108,17 +109,17 @@ void EditorValidationPanel::set_message(int p_id, const String &p_text, MessageT switch (p_type) { case MSG_OK: - label->add_theme_color_override(SNAME("font_color"), theme_cache.valid_color); + label->add_theme_color_override(SceneStringName(font_color), theme_cache.valid_color); break; case MSG_WARNING: - label->add_theme_color_override(SNAME("font_color"), theme_cache.warning_color); + label->add_theme_color_override(SceneStringName(font_color), theme_cache.warning_color); break; case MSG_ERROR: - label->add_theme_color_override(SNAME("font_color"), theme_cache.error_color); + label->add_theme_color_override(SceneStringName(font_color), theme_cache.error_color); valid = false; break; case MSG_INFO: - label->remove_theme_color_override(SNAME("font_color")); + label->remove_theme_color_override(SceneStringName(font_color)); break; } } diff --git a/editor/gui/editor_zoom_widget.cpp b/editor/gui/editor_zoom_widget.cpp index 73afbc3ab5..341da7bfaf 100644 --- a/editor/gui/editor_zoom_widget.cpp +++ b/editor/gui/editor_zoom_widget.cpp @@ -211,7 +211,7 @@ EditorZoomWidget::EditorZoomWidget() { zoom_reset->add_theme_style_override(SceneStringName(pressed), empty_stylebox); zoom_reset->add_theme_constant_override("outline_size", Math::ceil(2 * EDSCALE)); zoom_reset->add_theme_color_override("font_outline_color", Color(0, 0, 0)); - zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1)); + zoom_reset->add_theme_color_override(SceneStringName(font_color), Color(1, 1, 1)); zoom_reset->set_shortcut(ED_GET_SHORTCUT("canvas_item_editor/zoom_100_percent")); zoom_reset->set_shortcut_context(this); diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index fc52d7a0ae..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")); } } @@ -1690,7 +1689,7 @@ void SceneTreeDialog::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &SceneTreeDialog::_select)); + connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDialog::_select)); } break; case NOTIFICATION_THEME_CHANGED: { @@ -1702,7 +1701,7 @@ void SceneTreeDialog::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &SceneTreeDialog::_select)); + disconnect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDialog::_select)); } break; } } @@ -1746,7 +1745,7 @@ SceneTreeDialog::SceneTreeDialog() { filter->set_placeholder(TTR("Filter Nodes")); filter->set_clear_button_enabled(true); filter->add_theme_constant_override("minimum_character_width", 0); - filter->connect("text_changed", callable_mp(this, &SceneTreeDialog::_filter_changed)); + filter->connect(SceneStringName(text_changed), callable_mp(this, &SceneTreeDialog::_filter_changed)); filter_hbc->add_child(filter); // Add 'Show All' button to HBoxContainer next to the filter, visible only when valid_types is defined. diff --git a/editor/history_dock.cpp b/editor/history_dock.cpp index 6bbc46e76c..5a64fba788 100644 --- a/editor/history_dock.cpp +++ b/editor/history_dock.cpp @@ -262,5 +262,5 @@ HistoryDock::HistoryDock() { action_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); add_child(action_list); action_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); - action_list->connect("item_selected", callable_mp(this, &HistoryDock::seek_history)); + action_list->connect(SceneStringName(item_selected), callable_mp(this, &HistoryDock::seek_history)); } 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_scene.cpp b/editor/import/3d/resource_importer_scene.cpp index c0d38af26a..2db3fb1f07 100644 --- a/editor/import/3d/resource_importer_scene.cpp +++ b/editor/import/3d/resource_importer_scene.cpp @@ -762,6 +762,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R StaticBody3D *col = memnew(StaticBody3D); col->set_transform(mi->get_transform()); col->set_name(fixed_name); + _copy_meta(p_node, col); p_node->replace_by(col); p_node->set_owner(nullptr); memdelete(p_node); @@ -776,6 +777,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R StaticBody3D *sb = memnew(StaticBody3D); sb->set_name(fixed_name); Object::cast_to<Node3D>(sb)->set_transform(Object::cast_to<Node3D>(p_node)->get_transform()); + _copy_meta(p_node, sb); p_node->replace_by(sb); p_node->set_owner(nullptr); memdelete(p_node); @@ -820,6 +822,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R RigidBody3D *rigid_body = memnew(RigidBody3D); rigid_body->set_name(_fixstr(name, "rigid_body")); + _copy_meta(p_node, rigid_body); p_node->replace_by(rigid_body); rigid_body->set_transform(mi->get_transform()); p_node = rigid_body; @@ -884,6 +887,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R Ref<NavigationMesh> nmesh = mesh->create_navigation_mesh(); nmi->set_navigation_mesh(nmesh); Object::cast_to<Node3D>(nmi)->set_transform(mi->get_transform()); + _copy_meta(p_node, nmi); p_node->replace_by(nmi); p_node->set_owner(nullptr); memdelete(p_node); @@ -924,6 +928,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R VehicleBody3D *bv = memnew(VehicleBody3D); String n = _fixstr(p_node->get_name(), "vehicle"); bv->set_name(n); + _copy_meta(p_node, bv); p_node->replace_by(bv); p_node->set_name(n); bv->add_child(p_node); @@ -943,6 +948,7 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R VehicleWheel3D *bv = memnew(VehicleWheel3D); String n = _fixstr(p_node->get_name(), "wheel"); bv->set_name(n); + _copy_meta(p_node, bv); p_node->replace_by(bv); p_node->set_name(n); bv->add_child(p_node); @@ -1550,6 +1556,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap< case MESH_PHYSICS_RIGID_BODY_AND_MESH: { RigidBody3D *rigid_body = memnew(RigidBody3D); rigid_body->set_name(p_node->get_name()); + _copy_meta(p_node, rigid_body); p_node->replace_by(rigid_body); rigid_body->set_transform(mi->get_transform() * get_collision_shapes_transform(node_settings)); rigid_body->set_position(p_applied_root_scale * rigid_body->get_position()); @@ -1568,6 +1575,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap< col->set_transform(mi->get_transform() * get_collision_shapes_transform(node_settings)); col->set_position(p_applied_root_scale * col->get_position()); col->set_name(p_node->get_name()); + _copy_meta(p_node, col); p_node->replace_by(col); p_node->set_owner(nullptr); memdelete(p_node); @@ -1583,6 +1591,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap< area->set_transform(mi->get_transform() * get_collision_shapes_transform(node_settings)); area->set_position(p_applied_root_scale * area->get_position()); area->set_name(p_node->get_name()); + _copy_meta(p_node, area); p_node->replace_by(area); p_node->set_owner(nullptr); memdelete(p_node); @@ -1626,6 +1635,7 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap< if (navmesh_mode == NAVMESH_NAVMESH_ONLY) { nmi->set_transform(mi->get_transform()); + _copy_meta(p_node, nmi); p_node->replace_by(nmi); p_node->set_owner(nullptr); memdelete(p_node); @@ -1949,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)); @@ -2553,6 +2563,7 @@ Node *ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_ } if (mesh.is_valid()) { + _copy_meta(src_mesh_node->get_mesh().ptr(), mesh.ptr()); mesh_node->set_mesh(mesh); for (int i = 0; i < mesh->get_surface_count(); i++) { mesh_node->set_surface_override_material(i, src_mesh_node->get_surface_material(i)); @@ -2581,6 +2592,8 @@ Node *ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_ mesh_node->set_visibility_range_end_margin(src_mesh_node->get_visibility_range_end_margin()); mesh_node->set_visibility_range_fade_mode(src_mesh_node->get_visibility_range_fade_mode()); + _copy_meta(p_node, mesh_node); + p_node->replace_by(mesh_node); p_node->set_owner(nullptr); memdelete(p_node); @@ -2604,6 +2617,15 @@ void ResourceImporterScene::_add_shapes(Node *p_node, const Vector<Ref<Shape3D>> } } +void ResourceImporterScene::_copy_meta(Object *p_src_object, Object *p_dst_object) { + List<StringName> meta_list; + p_src_object->get_meta_list(&meta_list); + for (const StringName &meta_key : meta_list) { + Variant meta_value = p_src_object->get_meta(meta_key); + p_dst_object->set_meta(meta_key, meta_value); + } +} + void ResourceImporterScene::_optimize_track_usage(AnimationPlayer *p_player, AnimationImportTracks *p_track_actions) { List<StringName> anims; p_player->get_animation_list(&anims); diff --git a/editor/import/3d/resource_importer_scene.h b/editor/import/3d/resource_importer_scene.h index bbf2d20163..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); @@ -219,6 +220,7 @@ class ResourceImporterScene : public ResourceImporter { void _replace_owner(Node *p_node, Node *p_scene, Node *p_new_owner); Node *_generate_meshes(Node *p_node, const Dictionary &p_mesh_data, bool p_generate_lods, bool p_create_shadow_meshes, LightBakeMode p_light_bake_mode, float p_lightmap_texel_size, const Vector<uint8_t> &p_src_lightmap_cache, Vector<Vector<uint8_t>> &r_lightmap_caches); void _add_shapes(Node *p_node, const Vector<Ref<Shape3D>> &p_shapes); + void _copy_meta(Object *p_src_object, Object *p_dst_object); enum AnimationImportTracks { ANIMATION_IMPORT_TRACKS_IF_PRESENT, @@ -323,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(); @@ -481,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/import/3d/scene_import_settings.cpp b/editor/import/3d/scene_import_settings.cpp index 3d1eae26af..6b741b7dd7 100644 --- a/editor/import/3d/scene_import_settings.cpp +++ b/editor/import/3d/scene_import_settings.cpp @@ -1256,7 +1256,7 @@ void SceneImportSettingsDialog::_update_theme_item_cache() { void SceneImportSettingsDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - connect("confirmed", callable_mp(this, &SceneImportSettingsDialog::_re_import)); + connect(SceneStringName(confirmed), callable_mp(this, &SceneImportSettingsDialog::_re_import)); } break; case NOTIFICATION_THEME_CHANGED: { @@ -1665,7 +1665,7 @@ SceneImportSettingsDialog::SceneImportSettingsDialog() { animation_slider->set_step(1.0 / 100.0); animation_slider->set_value_no_signal(0.0); animation_slider->set_focus_mode(Control::FOCUS_NONE); - animation_slider->connect(SNAME("value_changed"), callable_mp(this, &SceneImportSettingsDialog::_animation_slider_value_changed)); + animation_slider->connect(SceneStringName(value_changed), callable_mp(this, &SceneImportSettingsDialog::_animation_slider_value_changed)); base_viewport->set_use_own_world_3d(true); @@ -1810,7 +1810,7 @@ SceneImportSettingsDialog::SceneImportSettingsDialog() { external_path_tree = memnew(Tree); external_paths->add_child(external_path_tree); external_path_tree->connect("button_clicked", callable_mp(this, &SceneImportSettingsDialog::_browse_save_callback)); - external_paths->connect("confirmed", callable_mp(this, &SceneImportSettingsDialog::_save_dir_confirm)); + external_paths->connect(SceneStringName(confirmed), callable_mp(this, &SceneImportSettingsDialog::_save_dir_confirm)); external_path_tree->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); external_path_tree->set_columns(3); external_path_tree->set_column_titles_visible(true); diff --git a/editor/import/audio_stream_import_settings.cpp b/editor/import/audio_stream_import_settings.cpp index 6353e63695..a53deefee9 100644 --- a/editor/import/audio_stream_import_settings.cpp +++ b/editor/import/audio_stream_import_settings.cpp @@ -41,7 +41,7 @@ void AudioStreamImportSettingsDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", callable_mp(this, &AudioStreamImportSettingsDialog::_preview_changed)); - connect("confirmed", callable_mp(this, &AudioStreamImportSettingsDialog::_reimport)); + connect(SceneStringName(confirmed), callable_mp(this, &AudioStreamImportSettingsDialog::_reimport)); } break; case NOTIFICATION_THEME_CHANGED: { @@ -52,13 +52,13 @@ void AudioStreamImportSettingsDialog::_notification(int p_what) { color_rect->set_color(get_theme_color(SNAME("dark_color_1"), EditorStringName(Editor))); _current_label->begin_bulk_theme_override(); - _current_label->add_theme_font_override("font", get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); - _current_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); + _current_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); + _current_label->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); _current_label->end_bulk_theme_override(); _duration_label->begin_bulk_theme_override(); - _duration_label->add_theme_font_override("font", get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); - _duration_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); + _duration_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); + _duration_label->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); _duration_label->end_bulk_theme_override(); zoom_in->set_icon(get_editor_theme_icon(SNAME("ZoomMore"))); @@ -546,7 +546,7 @@ AudioStreamImportSettingsDialog::AudioStreamImportSettingsDialog() { loop_offset->set_step(0.001); loop_offset->set_suffix("sec"); loop_offset->set_tooltip_text(TTR("Loop offset (from beginning). Note that if BPM is set, this setting will be ignored.")); - loop_offset->connect("value_changed", callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); + loop_offset->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); loop_hb->add_child(loop_offset); main_vbox->add_margin_child(TTR("Loop:"), loop_hb); @@ -560,7 +560,7 @@ AudioStreamImportSettingsDialog::AudioStreamImportSettingsDialog() { bpm_edit->set_max(400); bpm_edit->set_step(0.01); bpm_edit->set_tooltip_text(TTR("Configure the Beats Per Measure (tempo) used for the interactive streams.\nThis is required in order to configure beat information.")); - bpm_edit->connect("value_changed", callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); + bpm_edit->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); interactive_hb->add_child(bpm_edit); interactive_hb->add_spacer(); beats_enabled = memnew(CheckBox); @@ -570,7 +570,7 @@ AudioStreamImportSettingsDialog::AudioStreamImportSettingsDialog() { beats_edit = memnew(SpinBox); beats_edit->set_tooltip_text(TTR("Configure the amount of Beats used for music-aware looping. If zero, it will be autodetected from the length.\nIt is recommended to set this value (either manually or by clicking on a beat number in the preview) to ensure looping works properly.")); beats_edit->set_max(99999); - beats_edit->connect("value_changed", callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); + beats_edit->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); interactive_hb->add_child(beats_edit); bar_beats_label = memnew(Label(TTR("Bar Beats:"))); interactive_hb->add_child(bar_beats_label); @@ -578,7 +578,7 @@ AudioStreamImportSettingsDialog::AudioStreamImportSettingsDialog() { bar_beats_edit->set_tooltip_text(TTR("Configure the Beats Per Bar. This used for music-aware transitions between AudioStreams.")); bar_beats_edit->set_min(2); bar_beats_edit->set_max(32); - bar_beats_edit->connect("value_changed", callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); + bar_beats_edit->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamImportSettingsDialog::_settings_changed).unbind(1)); interactive_hb->add_child(bar_beats_edit); interactive_hb->add_spacer(); main_vbox->add_margin_child(TTR("Music Playback:"), interactive_hb); @@ -621,7 +621,7 @@ AudioStreamImportSettingsDialog::AudioStreamImportSettingsDialog() { zoom_in->connect(SceneStringName(pressed), callable_mp(this, &AudioStreamImportSettingsDialog::_preview_zoom_in)); zoom_reset->connect(SceneStringName(pressed), callable_mp(this, &AudioStreamImportSettingsDialog::_preview_zoom_reset)); zoom_out->connect(SceneStringName(pressed), callable_mp(this, &AudioStreamImportSettingsDialog::_preview_zoom_out)); - zoom_bar->connect("value_changed", callable_mp(this, &AudioStreamImportSettingsDialog::_preview_zoom_offset_changed)); + zoom_bar->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamImportSettingsDialog::_preview_zoom_offset_changed)); vbox->add_child(zoom_hbox); _indicator = memnew(Control); diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp index 9b6a7b9a93..00ce3d6a7a 100644 --- a/editor/import/dynamic_font_import_settings.cpp +++ b/editor/import/dynamic_font_import_settings.cpp @@ -487,8 +487,8 @@ void DynamicFontImportSettingsDialog::_main_prop_changed(const String &p_edited_ } } - font_preview_label->add_theme_font_override("font", font_preview); - font_preview_label->add_theme_font_size_override("font_size", 200 * EDSCALE); + font_preview_label->add_theme_font_override(SceneStringName(font), font_preview); + font_preview_label->add_theme_font_size_override(SceneStringName(font_size), 200 * EDSCALE); font_preview_label->queue_redraw(); } @@ -643,7 +643,7 @@ void DynamicFontImportSettingsDialog::_change_text_opts() { font_main_text->set_variation_face_index(import_variation_data->get("variation_face_index")); font_main_text->set_variation_transform(import_variation_data->get("variation_transform")); - text_edit->add_theme_font_override("font", font_main_text); + text_edit->add_theme_font_override(SceneStringName(font), font_main_text); } void DynamicFontImportSettingsDialog::_glyph_update_lbl() { @@ -837,7 +837,7 @@ void DynamicFontImportSettingsDialog::_edit_range(int32_t p_start, int32_t p_end item->set_selectable(col + 1, true); item->set_custom_font(col + 1, font_main_big); - item->set_custom_font_size(col + 1, get_theme_font_size(SNAME("font_size")) * 2); + item->set_custom_font_size(col + 1, get_theme_font_size(SceneStringName(font_size)) * 2); col++; if (col == 16) { @@ -924,12 +924,12 @@ String DynamicFontImportSettingsDialog::_pad_zeros(const String &p_hex) const { void DynamicFontImportSettingsDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - connect("confirmed", callable_mp(this, &DynamicFontImportSettingsDialog::_re_import)); + connect(SceneStringName(confirmed), callable_mp(this, &DynamicFontImportSettingsDialog::_re_import)); } break; case NOTIFICATION_THEME_CHANGED: { add_var->set_icon(get_editor_theme_icon(SNAME("Add"))); - label_warn->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + label_warn->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } break; } } @@ -1097,7 +1097,7 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { font_main->set_data(font_data); font_main->set_multichannel_signed_distance_field(false); - text_edit->add_theme_font_override("font", font_main); + text_edit->add_theme_font_override(SceneStringName(font), font_main); base_path = p_path; @@ -1119,7 +1119,7 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { inspector_text->edit(text_settings_data.ptr()); - int gww = get_theme_font(SNAME("font"))->get_string_size("00000").x + 50; + int gww = get_theme_font(SceneStringName(font))->get_string_size("00000").x + 50; glyph_table->set_column_custom_minimum_width(0, gww); glyph_table->clear(); vars_list->clear(); @@ -1226,8 +1226,8 @@ void DynamicFontImportSettingsDialog::open_settings(const String &p_path) { font_preview->set_subpixel_positioning((TextServer::SubpixelPositioning)import_settings_data->get("subpixel_positioning").operator int()); font_preview->set_oversampling(import_settings_data->get("oversampling")); } - font_preview_label->add_theme_font_override("font", font_preview); - font_preview_label->add_theme_font_size_override("font_size", 200 * EDSCALE); + font_preview_label->add_theme_font_override(SceneStringName(font), font_preview); + font_preview_label->add_theme_font_size_override(SceneStringName(font_size), 200 * EDSCALE); font_preview_label->queue_redraw(); _variations_validate(); @@ -1385,7 +1385,7 @@ DynamicFontImportSettingsDialog::DynamicFontImportSettingsDialog() { vars_list->set_column_custom_minimum_width(1, 50 * EDSCALE); vars_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); page2_side_vb->add_child(vars_list); - vars_list->connect("item_selected", callable_mp(this, &DynamicFontImportSettingsDialog::_variation_selected)); + vars_list->connect(SceneStringName(item_selected), callable_mp(this, &DynamicFontImportSettingsDialog::_variation_selected)); vars_list->connect("button_clicked", callable_mp(this, &DynamicFontImportSettingsDialog::_variation_remove)); inspector_vars = memnew(EditorInspector); @@ -1538,7 +1538,7 @@ DynamicFontImportSettingsDialog::DynamicFontImportSettingsDialog() { } glyphs_split->add_child(glyph_tree); glyph_tree->connect("item_activated", callable_mp(this, &DynamicFontImportSettingsDialog::_range_edited)); - glyph_tree->connect("item_selected", callable_mp(this, &DynamicFontImportSettingsDialog::_range_selected)); + glyph_tree->connect(SceneStringName(item_selected), callable_mp(this, &DynamicFontImportSettingsDialog::_range_selected)); // Common diff --git a/editor/import/resource_importer_imagefont.cpp b/editor/import/resource_importer_imagefont.cpp index 22223bda94..f1b6d3a6ac 100644 --- a/editor/import/resource_importer_imagefont.cpp +++ b/editor/import/resource_importer_imagefont.cpp @@ -38,7 +38,7 @@ String ResourceImporterImageFont::get_importer_name() const { } String ResourceImporterImageFont::get_visible_name() const { - return "Font Data (Monospace Image Font)"; + return "Font Data (Image Font)"; } void ResourceImporterImageFont::get_recognized_extensions(List<String> *p_extensions) const { diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp index ab7988109f..31e3022f6b 100644 --- a/editor/import_defaults_editor.cpp +++ b/editor/import_defaults_editor.cpp @@ -207,7 +207,7 @@ ImportDefaultsEditor::ImportDefaultsEditor() { importers = memnew(OptionButton); hb->add_child(importers); hb->add_spacer(); - importers->connect("item_selected", callable_mp(this, &ImportDefaultsEditor::_importer_selected)); + importers->connect(SceneStringName(item_selected), callable_mp(this, &ImportDefaultsEditor::_importer_selected)); reset_defaults = memnew(Button); reset_defaults->set_text(TTR("Reset to Defaults")); reset_defaults->set_disabled(true); diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 2347c715a8..846456ea55 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -726,7 +726,7 @@ void ImportDock::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { import_opts->edit(params); - label_warning->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + label_warning->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } break; } } @@ -739,12 +739,12 @@ void ImportDock::_set_dirty(bool p_dirty) { if (p_dirty) { // Add a dirty marker to notify the user that they should reimport the selected resource to see changes. import->set_text(TTR("Reimport") + " (*)"); - import->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + import->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); import->set_tooltip_text(TTR("You have pending changes that haven't been applied yet. Click Reimport to apply changes made to the import options.\nSelecting another resource in the FileSystem dock without clicking Reimport first will discard changes made in the Import dock.")); } else { // Remove the dirty marker on the Reimport button. import->set_text(TTR("Reimport")); - import->remove_theme_color_override("font_color"); + import->remove_theme_color_override(SceneStringName(font_color)); import->set_tooltip_text(""); } } @@ -787,7 +787,7 @@ ImportDock::ImportDock() { import_as->set_fit_to_longest_item(false); import_as->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); import_as->set_h_size_flags(SIZE_EXPAND_FILL); - import_as->connect("item_selected", callable_mp(this, &ImportDock::_importer_selected)); + import_as->connect(SceneStringName(item_selected), callable_mp(this, &ImportDock::_importer_selected)); hb->add_child(import_as); import_as->set_h_size_flags(SIZE_EXPAND_FILL); preset = memnew(MenuButton); @@ -834,7 +834,7 @@ ImportDock::ImportDock() { reimport_confirm = memnew(ConfirmationDialog); content->add_child(reimport_confirm); - reimport_confirm->connect("confirmed", callable_mp(this, &ImportDock::_reimport_and_cleanup)); + reimport_confirm->connect(SceneStringName(confirmed), callable_mp(this, &ImportDock::_reimport_and_cleanup)); VBoxContainer *vbc_confirm = memnew(VBoxContainer()); cleanup_warning = memnew(Label(TTR("The imported resource is currently loaded. All instances will be replaced and undo history will be cleared."))); diff --git a/editor/input_event_configuration_dialog.cpp b/editor/input_event_configuration_dialog.cpp index 2ecce2f739..dc839b02f6 100644 --- a/editor/input_event_configuration_dialog.cpp +++ b/editor/input_event_configuration_dialog.cpp @@ -583,7 +583,7 @@ void InputEventConfigurationDialog::_notification(int p_what) { icon_cache.joypad_button = get_editor_theme_icon(SNAME("JoyButton")); icon_cache.joypad_axis = get_editor_theme_icon(SNAME("JoyAxis")); - event_as_text->add_theme_font_override("font", get_theme_font(SNAME("bold"), EditorStringName(EditorFonts))); + event_as_text->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("bold"), EditorStringName(EditorFonts))); _update_input_list(); } break; @@ -646,7 +646,7 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { event_as_text->set_custom_minimum_size(Size2(500, 0) * EDSCALE); event_as_text->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); event_as_text->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - event_as_text->add_theme_font_size_override("font_size", 18 * EDSCALE); + event_as_text->add_theme_font_size_override(SceneStringName(font_size), 18 * EDSCALE); main_vbox->add_child(event_as_text); event_listener = memnew(EventListenerLineEdit); @@ -669,14 +669,14 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { input_list_search->set_h_size_flags(Control::SIZE_EXPAND_FILL); input_list_search->set_placeholder(TTR("Filter Inputs")); input_list_search->set_clear_button_enabled(true); - input_list_search->connect("text_changed", callable_mp(this, &InputEventConfigurationDialog::_search_term_updated)); + input_list_search->connect(SceneStringName(text_changed), callable_mp(this, &InputEventConfigurationDialog::_search_term_updated)); manual_vbox->add_child(input_list_search); input_list_tree = memnew(Tree); input_list_tree->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); input_list_tree->set_custom_minimum_size(Size2(0, 100 * EDSCALE)); // Min height for tree input_list_tree->connect("item_activated", callable_mp(this, &InputEventConfigurationDialog::_input_list_item_activated)); - input_list_tree->connect("item_selected", callable_mp(this, &InputEventConfigurationDialog::_input_list_item_selected)); + input_list_tree->connect(SceneStringName(item_selected), callable_mp(this, &InputEventConfigurationDialog::_input_list_item_selected)); input_list_tree->set_v_size_flags(Control::SIZE_EXPAND_FILL); manual_vbox->add_child(input_list_tree); @@ -708,7 +708,7 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { for (int i = -1; i < 8; i++) { device_id_option->add_item(EventListenerLineEdit::get_device_string(i)); } - device_id_option->connect("item_selected", callable_mp(this, &InputEventConfigurationDialog::_device_selection_changed)); + device_id_option->connect(SceneStringName(item_selected), callable_mp(this, &InputEventConfigurationDialog::_device_selection_changed)); _set_current_device(InputMap::ALL_DEVICES); device_container->add_child(device_id_option); @@ -744,7 +744,7 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { key_mode->add_item(TTR("Keycode (Latin Equivalent)"), KEYMODE_KEYCODE); key_mode->add_item(TTR("Physical Keycode (Position on US QWERTY Keyboard)"), KEYMODE_PHY_KEYCODE); key_mode->add_item(TTR("Key Label (Unicode, Case-Insensitive)"), KEYMODE_UNICODE); - key_mode->connect("item_selected", callable_mp(this, &InputEventConfigurationDialog::_key_mode_selected)); + key_mode->connect(SceneStringName(item_selected), callable_mp(this, &InputEventConfigurationDialog::_key_mode_selected)); key_mode->hide(); additional_options_container->add_child(key_mode); @@ -762,7 +762,7 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { key_location->add_item(TTR("Any"), (int)KeyLocation::UNSPECIFIED); key_location->add_item(TTR("Left"), (int)KeyLocation::LEFT); key_location->add_item(TTR("Right"), (int)KeyLocation::RIGHT); - key_location->connect("item_selected", callable_mp(this, &InputEventConfigurationDialog::_key_location_selected)); + key_location->connect(SceneStringName(item_selected), callable_mp(this, &InputEventConfigurationDialog::_key_location_selected)); location_container->add_child(key_location); additional_options_container->add_child(location_container); diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index ad2e16636b..acdbd6d9c4 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -451,10 +451,10 @@ void InspectorDock::_notification(int p_what) { search->set_right_icon(get_editor_theme_icon(SNAME("Search"))); if (info_is_warning) { info->set_icon(get_editor_theme_icon(SNAME("NodeWarning"))); - info->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + info->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } else { info->set_icon(get_editor_theme_icon(SNAME("NodeInfo"))); - info->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), EditorStringName(Editor))); + info->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), EditorStringName(Editor))); } } break; } @@ -481,10 +481,10 @@ void InspectorDock::set_info(const String &p_button_text, const String &p_messag if (info_is_warning) { info->set_icon(get_editor_theme_icon(SNAME("NodeWarning"))); - info->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + info->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } else { info->set_icon(get_editor_theme_icon(SNAME("NodeInfo"))); - info->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), EditorStringName(Editor))); + info->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), EditorStringName(Editor))); } if (!p_button_text.is_empty() && !p_message.is_empty()) { @@ -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); @@ -774,7 +775,7 @@ InspectorDock::InspectorDock(EditorData &p_editor_data) { bottom_label->set_text(TTR("This cannot be undone. Are you sure?")); container->add_child(bottom_label); - unique_resources_confirmation->connect("confirmed", callable_mp(this, &InspectorDock::_menu_confirm_current)); + unique_resources_confirmation->connect(SceneStringName(confirmed), callable_mp(this, &InspectorDock::_menu_confirm_current)); info_dialog = memnew(AcceptDialog); EditorNode::get_singleton()->get_gui_base()->add_child(info_dialog); diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index b8e0b61cd9..0c79e5d747 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -67,23 +67,11 @@ void NodeDock::update_lists() { connections->update_tree(); } -void NodeDock::_on_node_tree_exited() { - set_node(nullptr); -} - void NodeDock::set_node(Node *p_node) { - if (last_valid_node) { - last_valid_node->disconnect(SceneStringName(tree_exited), callable_mp(this, &NodeDock::_on_node_tree_exited)); - last_valid_node = nullptr; - } - connections->set_node(p_node); groups->set_current(p_node); if (p_node) { - last_valid_node = p_node; - last_valid_node->connect(SceneStringName(tree_exited), callable_mp(this, &NodeDock::_on_node_tree_exited)); - if (connections_button->is_pressed()) { connections->show(); } else { @@ -100,10 +88,6 @@ void NodeDock::set_node(Node *p_node) { } } -void NodeDock::restore_last_valid_node() { - set_node(last_valid_node); -} - NodeDock::NodeDock() { singleton = this; diff --git a/editor/node_dock.h b/editor/node_dock.h index 41495ffead..e9dcc41d48 100644 --- a/editor/node_dock.h +++ b/editor/node_dock.h @@ -47,7 +47,6 @@ class NodeDock : public VBoxContainer { HBoxContainer *mode_hb = nullptr; Label *select_a_node = nullptr; - Node *last_valid_node = nullptr; private: static NodeDock *singleton; @@ -58,11 +57,9 @@ public: protected: static void _bind_methods(); void _notification(int p_what); - void _on_node_tree_exited(); public: void set_node(Node *p_node); - void restore_last_valid_node(); void show_groups(); void show_connections(); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index b1279e4192..f73c494b25 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -169,7 +169,7 @@ void AbstractPolygon2DEditor::_notification(int p_what) { button_edit->set_pressed(true); get_tree()->connect("node_removed", callable_mp(this, &AbstractPolygon2DEditor::_node_removed)); - create_resource->connect("confirmed", callable_mp(this, &AbstractPolygon2DEditor::_create_resource)); + create_resource->connect(SceneStringName(confirmed), callable_mp(this, &AbstractPolygon2DEditor::_create_resource)); } break; } } @@ -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) { @@ -579,7 +579,7 @@ void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overl String num = String::num(vertex.vertex); Size2 num_size = font->get_string_size(num, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size); const float outline_size = 4; - Color font_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color font_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); Color outline_color = font_color.inverted(); p_overlay->draw_string_outline(font, point - num_size * 0.5, num, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, outline_size, outline_color); p_overlay->draw_string(font, point - num_size * 0.5, num, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, font_color); diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp index 52ea7ff0ba..7d580e8de9 100644 --- a/editor/plugins/animation_blend_space_1d_editor.cpp +++ b/editor/plugins/animation_blend_space_1d_editor.cpp @@ -217,12 +217,12 @@ void AnimationNodeBlendSpace1DEditor::_blend_space_draw() { return; } - Color linecolor = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color linecolor = get_theme_color(SceneStringName(font_color), SNAME("Label")); Color linecolor_soft = linecolor; linecolor_soft.a *= 0.5; - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Ref<Texture2D> icon = get_editor_theme_icon(SNAME("KeyValue")); Ref<Texture2D> icon_selected = get_editor_theme_icon(SNAME("KeySelected")); @@ -574,7 +574,7 @@ void AnimationNodeBlendSpace1DEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { error_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); - error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + error_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); tool_blend->set_icon(get_editor_theme_icon(SNAME("EditPivot"))); tool_select->set_icon(get_editor_theme_icon(SNAME("ToolSelect"))); @@ -720,7 +720,7 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { top_hb->add_child(memnew(Label(TTR("Blend:")))); interpolation = memnew(OptionButton); top_hb->add_child(interpolation); - interpolation->connect("item_selected", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); + interpolation->connect(SceneStringName(item_selected), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); edit_hb = memnew(HBoxContainer); top_hb->add_child(edit_hb); @@ -732,7 +732,7 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { edit_value->set_min(-1000); edit_value->set_max(1000); edit_value->set_step(0.01); - edit_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_edit_point_pos)); + edit_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_edit_point_pos)); open_editor = memnew(Button); edit_hb->add_child(open_editor); @@ -786,10 +786,10 @@ AnimationNodeBlendSpace1DEditor::AnimationNodeBlendSpace1DEditor() { bottom_hb->add_child(max_value); } - snap_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); - min_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); - max_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); - label_value->connect("text_changed", callable_mp(this, &AnimationNodeBlendSpace1DEditor::_labels_changed)); + snap_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); + min_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); + max_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_config_changed)); + label_value->connect(SceneStringName(text_changed), callable_mp(this, &AnimationNodeBlendSpace1DEditor::_labels_changed)); error_panel = memnew(PanelContainer); add_child(error_panel); diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp index ef61a95ee7..55949df54f 100644 --- a/editor/plugins/animation_blend_space_2d_editor.cpp +++ b/editor/plugins/animation_blend_space_2d_editor.cpp @@ -445,11 +445,11 @@ void AnimationNodeBlendSpace2DEditor::_blend_space_draw() { return; } - Color linecolor = get_theme_color(SNAME("font_color"), SNAME("Label")); + Color linecolor = get_theme_color(SceneStringName(font_color), SNAME("Label")); Color linecolor_soft = linecolor; linecolor_soft.a *= 0.5; - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Ref<Texture2D> icon = get_editor_theme_icon(SNAME("KeyValue")); Ref<Texture2D> icon_selected = get_editor_theme_icon(SNAME("KeySelected")); @@ -796,7 +796,7 @@ void AnimationNodeBlendSpace2DEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { error_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); - error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + error_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); tool_blend->set_icon(get_editor_theme_icon(SNAME("EditPivot"))); tool_select->set_icon(get_editor_theme_icon(SNAME("ToolSelect"))); @@ -968,7 +968,7 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { top_hb->add_child(memnew(Label(TTR("Blend:")))); interpolation = memnew(OptionButton); top_hb->add_child(interpolation); - interpolation->connect("item_selected", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + interpolation->connect(SceneStringName(item_selected), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); edit_hb = memnew(HBoxContainer); top_hb->add_child(edit_hb); @@ -979,13 +979,13 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { edit_x->set_min(-1000); edit_x->set_step(0.01); edit_x->set_max(1000); - edit_x->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_edit_point_pos)); + edit_x->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_edit_point_pos)); edit_y = memnew(SpinBox); edit_hb->add_child(edit_y); edit_y->set_min(-1000); edit_y->set_step(0.01); edit_y->set_max(1000); - edit_y->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_edit_point_pos)); + edit_y->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_edit_point_pos)); open_editor = memnew(Button); edit_hb->add_child(open_editor); open_editor->set_text(TTR("Open Editor")); @@ -1060,14 +1060,14 @@ AnimationNodeBlendSpace2DEditor::AnimationNodeBlendSpace2DEditor() { min_x_value->set_step(0.01); } - snap_x->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - snap_y->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - max_x_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - min_x_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - max_y_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - min_y_value->connect("value_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); - label_x->connect("text_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_labels_changed)); - label_y->connect("text_changed", callable_mp(this, &AnimationNodeBlendSpace2DEditor::_labels_changed)); + snap_x->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + snap_y->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + max_x_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + min_x_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + max_y_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + min_y_value->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_config_changed)); + label_x->connect(SceneStringName(text_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_labels_changed)); + label_y->connect(SceneStringName(text_changed), callable_mp(this, &AnimationNodeBlendSpace2DEditor::_labels_changed)); error_panel = memnew(PanelContainer); add_child(error_panel); diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 28e1eeccc4..a28fe01666 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -165,10 +165,10 @@ void AnimationNodeBlendTreeEditor::update_graph() { name->set_editable(!read_only); name->set_expand_to_text_length_enabled(true); node->add_child(name); - node->set_slot(0, false, 0, Color(), true, read_only ? -1 : 0, get_theme_color(SNAME("font_color"), SNAME("Label"))); + node->set_slot(0, false, 0, Color(), true, read_only ? -1 : 0, get_theme_color(SceneStringName(font_color), SNAME("Label"))); name->connect("text_submitted", callable_mp(this, &AnimationNodeBlendTreeEditor::_node_renamed).bind(agnode), CONNECT_DEFERRED); name->connect(SceneStringName(focus_exited), callable_mp(this, &AnimationNodeBlendTreeEditor::_node_renamed_focus_out).bind(agnode), CONNECT_DEFERRED); - name->connect("text_changed", callable_mp(this, &AnimationNodeBlendTreeEditor::_node_rename_lineedit_changed), CONNECT_DEFERRED); + name->connect(SceneStringName(text_changed), callable_mp(this, &AnimationNodeBlendTreeEditor::_node_rename_lineedit_changed), CONNECT_DEFERRED); base = 1; agnode->set_deletable(true); @@ -186,7 +186,7 @@ void AnimationNodeBlendTreeEditor::update_graph() { Label *in_name = memnew(Label); node->add_child(in_name); in_name->set_text(agnode->get_input_name(i)); - node->set_slot(base + i, true, read_only ? -1 : 0, get_theme_color(SNAME("font_color"), SNAME("Label")), false, 0, Color()); + node->set_slot(base + i, true, read_only ? -1 : 0, get_theme_color(SceneStringName(font_color), SNAME("Label")), false, 0, Color()); } List<PropertyInfo> pinfo; @@ -943,7 +943,7 @@ void AnimationNodeBlendTreeEditor::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { error_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); - error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + error_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); if (is_visible_in_tree()) { update_graph(); diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index a2f1fa5614..afe7ea83d8 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -76,7 +76,7 @@ void AnimationLibraryEditor::_add_library_validate(const String &p_name) { } if (error != "") { - add_library_validate->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + add_library_validate->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); add_library_validate->set_text(error); add_library_dialog->get_ok_button()->set_disabled(true); } else { @@ -89,7 +89,7 @@ void AnimationLibraryEditor::_add_library_validate(const String &p_name) { add_library_validate->set_text(TTR("Library name is valid.")); } } - add_library_validate->add_theme_color_override("font_color", get_theme_color(SNAME("success_color"), EditorStringName(Editor))); + add_library_validate->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("success_color"), EditorStringName(Editor))); add_library_dialog->get_ok_button()->set_disabled(false); } } @@ -798,13 +798,13 @@ AnimationLibraryEditor::AnimationLibraryEditor() { VBoxContainer *dialog_vb = memnew(VBoxContainer); add_library_name = memnew(LineEdit); dialog_vb->add_child(add_library_name); - add_library_name->connect("text_changed", callable_mp(this, &AnimationLibraryEditor::_add_library_validate)); + add_library_name->connect(SceneStringName(text_changed), callable_mp(this, &AnimationLibraryEditor::_add_library_validate)); add_child(add_library_dialog); add_library_validate = memnew(Label); dialog_vb->add_child(add_library_validate); add_library_dialog->add_child(dialog_vb); - add_library_dialog->connect("confirmed", callable_mp(this, &AnimationLibraryEditor::_add_library_confirm)); + add_library_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationLibraryEditor::_add_library_confirm)); add_library_dialog->register_text_enter(add_library_name); VBoxContainer *vb = memnew(VBoxContainer); diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 0a2c192ea4..484d2b1fff 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -125,7 +125,7 @@ void AnimationPlayerEditor::_notification(int p_what) { onion_skinning->get_popup()->connect(SceneStringName(id_pressed), callable_mp(this, &AnimationPlayerEditor::_onion_skinning_menu)); - blend_editor.next->connect(SNAME("item_selected"), callable_mp(this, &AnimationPlayerEditor::_blend_editor_next_changed)); + blend_editor.next->connect(SceneStringName(item_selected), callable_mp(this, &AnimationPlayerEditor::_blend_editor_next_changed)); get_tree()->connect(SNAME("node_removed"), callable_mp(this, &AnimationPlayerEditor::_node_removed)); @@ -1951,7 +1951,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(AnimationPlayerEditorPlugin *p_plug delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect(SNAME("confirmed"), callable_mp(this, &AnimationPlayerEditor::_animation_remove_confirmed)); + delete_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationPlayerEditor::_animation_remove_confirmed)); tool_anim = memnew(MenuButton); tool_anim->set_shortcut_context(this); @@ -2056,7 +2056,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(AnimationPlayerEditorPlugin *p_plug error_dialog->set_title(TTR("Error!")); name_dialog->add_child(error_dialog); - name_dialog->connect(SNAME("confirmed"), callable_mp(this, &AnimationPlayerEditor::_animation_name_edited)); + name_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationPlayerEditor::_animation_name_edited)); blend_editor.dialog = memnew(AcceptDialog); blend_editor.dialog->set_title(TTR("Cross-Animation Blend Times")); @@ -2090,9 +2090,9 @@ AnimationPlayerEditor::AnimationPlayerEditor(AnimationPlayerEditorPlugin *p_plug play_bw_from->connect(SceneStringName(pressed), callable_mp(this, &AnimationPlayerEditor::_play_bw_from_pressed)); stop->connect(SceneStringName(pressed), callable_mp(this, &AnimationPlayerEditor::_stop_pressed)); - animation->connect(SNAME("item_selected"), callable_mp(this, &AnimationPlayerEditor::_animation_selected)); + animation->connect(SceneStringName(item_selected), callable_mp(this, &AnimationPlayerEditor::_animation_selected)); - frame->connect(SNAME("value_changed"), callable_mp(this, &AnimationPlayerEditor::_seek_value_changed).bind(false)); + frame->connect(SceneStringName(value_changed), callable_mp(this, &AnimationPlayerEditor::_seek_value_changed).bind(false)); scale->connect(SNAME("text_submitted"), callable_mp(this, &AnimationPlayerEditor::_scale_changed)); add_child(track_editor); diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 8be010c00b..7d81ae695a 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -1269,7 +1269,7 @@ void AnimationNodeStateMachineEditor::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { panel->add_theme_style_override(SceneStringName(panel), theme_cache.panel_style); error_panel->add_theme_style_override(SceneStringName(panel), theme_cache.error_panel_style); - error_label->add_theme_color_override("font_color", theme_cache.error_color); + error_label->add_theme_color_override(SceneStringName(font_color), theme_cache.error_color); tool_select->set_icon(theme_cache.tool_icon_select); tool_create->set_icon(theme_cache.tool_icon_create); @@ -1748,13 +1748,13 @@ AnimationNodeStateMachineEditor::AnimationNodeStateMachineEditor() { v_scroll = memnew(VScrollBar); state_machine_draw->add_child(v_scroll); v_scroll->set_anchors_and_offsets_preset(PRESET_RIGHT_WIDE); - v_scroll->connect("value_changed", callable_mp(this, &AnimationNodeStateMachineEditor::_scroll_changed)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeStateMachineEditor::_scroll_changed)); h_scroll = memnew(HScrollBar); state_machine_draw->add_child(h_scroll); h_scroll->set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE); h_scroll->set_offset(SIDE_RIGHT, -v_scroll->get_size().x * EDSCALE); - h_scroll->connect("value_changed", callable_mp(this, &AnimationNodeStateMachineEditor::_scroll_changed)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &AnimationNodeStateMachineEditor::_scroll_changed)); error_panel = memnew(PanelContainer); add_child(error_panel); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 25c173ed35..e6fe554923 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -91,9 +91,9 @@ void EditorAssetLibraryItem::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { icon->set_texture_normal(get_editor_theme_icon(SNAME("ProjectIconLoading"))); - category->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)); - author->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)); - price->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)); + category->add_theme_color_override(SceneStringName(font_color), Color(0.5, 0.5, 0.5)); + author->add_theme_color_override(SceneStringName(font_color), Color(0.5, 0.5, 0.5)); + price->add_theme_color_override(SceneStringName(font_color), Color(0.5, 0.5, 0.5)); if (author->get_default_cursor_shape() == CURSOR_ARROW) { // Disable visible feedback if author link isn't clickable. @@ -457,7 +457,7 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("AssetLib"))); - status->add_theme_color_override("font_color", get_theme_color(SNAME("status_color"), SNAME("AssetLib"))); + status->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("status_color"), SNAME("AssetLib"))); dismiss_button->set_texture_normal(get_theme_icon(SNAME("dismiss"), SNAME("AssetLib"))); } break; @@ -620,7 +620,7 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() { asset_installer = memnew(EditorAssetInstaller); panel->add_child(asset_installer); - asset_installer->connect("confirmed", callable_mp(this, &EditorAssetLibraryItemDownload::_close)); + asset_installer->connect(SceneStringName(confirmed), callable_mp(this, &EditorAssetLibraryItemDownload::_close)); prev_status = -1; @@ -1427,7 +1427,7 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const description = memnew(EditorAssetLibraryItemDescription); add_child(description); - description->connect("confirmed", callable_mp(this, &EditorAssetLibrary::_install_asset)); + description->connect(SceneStringName(confirmed), callable_mp(this, &EditorAssetLibrary::_install_asset)); description->configure(r["title"], r["asset_id"], category_map[r["category_id"]], r["category_id"], r["author"], r["author_id"], r["cost"], r["version"], r["version_string"], r["description"], r["download_url"], r["browse_url"], r["download_hash"]); @@ -1601,7 +1601,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { filter->set_clear_button_enabled(true); search_hb->add_child(filter); filter->set_h_size_flags(Control::SIZE_EXPAND_FILL); - filter->connect("text_changed", callable_mp(this, &EditorAssetLibrary::_search_text_changed)); + filter->connect(SceneStringName(text_changed), callable_mp(this, &EditorAssetLibrary::_search_text_changed)); // Perform a search automatically if the user hasn't entered any text for a certain duration. // This way, the user doesn't need to press Enter to initiate their search. @@ -1643,7 +1643,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { sort->set_h_size_flags(Control::SIZE_EXPAND_FILL); sort->set_clip_text(true); - sort->connect("item_selected", callable_mp(this, &EditorAssetLibrary::_rerun_search)); + sort->connect(SceneStringName(item_selected), callable_mp(this, &EditorAssetLibrary::_rerun_search)); search_hb2->add_child(memnew(VSeparator)); @@ -1653,7 +1653,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { search_hb2->add_child(categories); categories->set_h_size_flags(Control::SIZE_EXPAND_FILL); categories->set_clip_text(true); - categories->connect("item_selected", callable_mp(this, &EditorAssetLibrary::_rerun_search)); + categories->connect(SceneStringName(item_selected), callable_mp(this, &EditorAssetLibrary::_rerun_search)); search_hb2->add_child(memnew(VSeparator)); @@ -1662,7 +1662,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { _update_repository_options(); - repository->connect("item_selected", callable_mp(this, &EditorAssetLibrary::_repository_changed)); + repository->connect(SceneStringName(item_selected), callable_mp(this, &EditorAssetLibrary::_repository_changed)); search_hb2->add_child(repository); repository->set_h_size_flags(Control::SIZE_EXPAND_FILL); diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp index af6bbb679a..f691bad3c3 100644 --- a/editor/plugins/audio_stream_editor_plugin.cpp +++ b/editor/plugins/audio_stream_editor_plugin.cpp @@ -47,8 +47,8 @@ void AudioStreamEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { Ref<Font> font = get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts)); - _current_label->add_theme_font_override(SNAME("font"), font); - _duration_label->add_theme_font_override(SNAME("font"), font); + _current_label->add_theme_font_override(SceneStringName(font), font); + _duration_label->add_theme_font_override(SceneStringName(font), font); _play_button->set_icon(get_editor_theme_icon(SNAME("MainPlay"))); _stop_button->set_icon(get_editor_theme_icon(SNAME("Stop"))); diff --git a/editor/plugins/bone_map_editor_plugin.cpp b/editor/plugins/bone_map_editor_plugin.cpp index c7207a6eab..c00436b01f 100644 --- a/editor/plugins/bone_map_editor_plugin.cpp +++ b/editor/plugins/bone_map_editor_plugin.cpp @@ -273,7 +273,7 @@ BonePicker::~BonePicker() { void BoneMapper::create_editor() { // Create Bone picker. picker = memnew(BonePicker(skeleton)); - picker->connect("confirmed", callable_mp(this, &BoneMapper::_apply_picker_selection)); + picker->connect(SceneStringName(confirmed), callable_mp(this, &BoneMapper::_apply_picker_selection)); add_child(picker, false, INTERNAL_MODE_FRONT); profile_selector = memnew(EditorPropertyResource); diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 5c7d02dcfa..4e2940a8cb 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; @@ -2786,10 +2820,10 @@ Control::CursorShape CanvasItemEditor::get_cursor_shape(const Point2 &p_pos) con } void CanvasItemEditor::_draw_text_at_position(Point2 p_position, const String &p_string, Side p_side) { - Color color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); color.a = 0.8; - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Size2 text_size = font->get_string_size(p_string, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size); switch (p_side) { case SIDE_LEFT: @@ -2855,7 +2889,7 @@ void CanvasItemEditor::_draw_guides() { } // Dragged guide. - Color text_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color text_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); Color outline_color = text_color.inverted(); const float outline_size = 2; if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE) { @@ -2894,8 +2928,8 @@ void CanvasItemEditor::_draw_smart_snapping() { void CanvasItemEditor::_draw_rulers() { Color bg_color = get_theme_color(SNAME("dark_color_2"), EditorStringName(Editor)); - Color graduation_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)).lerp(bg_color, 0.5); - Color font_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color graduation_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)).lerp(bg_color, 0.5); + Color font_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); font_color.a = 0.8; Ref<Font> font = get_theme_font(SNAME("rulers"), EditorStringName(EditorFonts)); int font_size = get_theme_font_size(SNAME("rulers_size"), EditorStringName(EditorFonts)); @@ -3074,7 +3108,7 @@ void CanvasItemEditor::_draw_ruler_tool() { Ref<Font> font = get_theme_font(SNAME("bold"), EditorStringName(EditorFonts)); int font_size = 1.3 * get_theme_font_size(SNAME("bold_size"), EditorStringName(EditorFonts)); - Color font_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color font_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); Color font_secondary_color = font_color; font_secondary_color.set_v(font_secondary_color.get_v() > 0.5 ? 0.7 : 0.3); Color outline_color = font_color.inverted(); @@ -3741,8 +3775,8 @@ void CanvasItemEditor::_draw_hover() { Ref<Texture2D> node_icon = hovering_results[i].icon; String node_name = hovering_results[i].name; - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Size2 node_name_size = font->get_string_size(node_name, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size); Size2 item_size = Size2(icon_size.x + 4 + node_name_size.x, MAX(icon_size.y, node_name_size.y - 3)); @@ -3815,8 +3849,8 @@ void CanvasItemEditor::_draw_message() { return; } - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Point2 msgpos = Point2(RULER_WIDTH + 5 * EDSCALE, viewport->get_size().y - 20 * EDSCALE); viewport->draw_string(font, msgpos + Point2(1, 1), message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); viewport->draw_string(font, msgpos + Point2(-1, -1), message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); @@ -5275,12 +5309,12 @@ CanvasItemEditor::CanvasItemEditor() { h_scroll = memnew(HScrollBar); viewport->add_child(h_scroll); - h_scroll->connect("value_changed", callable_mp(this, &CanvasItemEditor::_update_scroll)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &CanvasItemEditor::_update_scroll)); h_scroll->hide(); v_scroll = memnew(VScrollBar); viewport->add_child(v_scroll); - v_scroll->connect("value_changed", callable_mp(this, &CanvasItemEditor::_update_scroll)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &CanvasItemEditor::_update_scroll)); v_scroll->hide(); viewport->add_child(controls_vb); @@ -5609,7 +5643,7 @@ CanvasItemEditor::CanvasItemEditor() { p->add_shortcut(ED_SHORTCUT("canvas_item_editor/anim_clear_pose", TTR("Clear Pose"), KeyModifierMask::SHIFT | Key::K), ANIM_CLEAR_POSE); snap_dialog = memnew(SnapDialog); - snap_dialog->connect("confirmed", callable_mp(this, &CanvasItemEditor::_snap_changed)); + snap_dialog->connect(SceneStringName(confirmed), callable_mp(this, &CanvasItemEditor::_snap_changed)); add_child(snap_dialog); select_sb = Ref<StyleBoxTexture>(memnew(StyleBoxTexture)); @@ -6218,7 +6252,7 @@ void CanvasItemEditorViewport::_update_theme() { check->set_icon(get_editor_theme_icon(check->get_text())); } - label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } void CanvasItemEditorViewport::_notification(int p_what) { @@ -6266,7 +6300,7 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(CanvasItemEditor *p_canvas_it texture_node_type_selector = memnew(AcceptDialog); EditorNode::get_singleton()->get_gui_base()->add_child(texture_node_type_selector); texture_node_type_selector->set_title(TTR("Change Default Type")); - texture_node_type_selector->connect("confirmed", callable_mp(this, &CanvasItemEditorViewport::_on_change_type_confirmed)); + texture_node_type_selector->connect(SceneStringName(confirmed), callable_mp(this, &CanvasItemEditorViewport::_on_change_type_confirmed)); texture_node_type_selector->connect("canceled", callable_mp(this, &CanvasItemEditorViewport::_on_change_type_closed)); VBoxContainer *vbc = memnew(VBoxContainer); @@ -6295,7 +6329,7 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(CanvasItemEditor *p_canvas_it canvas_item_editor->get_controls_container()->add_child(label); label_desc = memnew(Label); - label_desc->add_theme_color_override("font_color", Color(0.6f, 0.6f, 0.6f, 1)); + label_desc->add_theme_color_override(SceneStringName(font_color), Color(0.6f, 0.6f, 0.6f, 1)); label_desc->add_theme_color_override("font_shadow_color", Color(0.2f, 0.2f, 0.2f, 1)); label_desc->add_theme_constant_override("shadow_outline_size", 1 * EDSCALE); label_desc->add_theme_constant_override("line_spacing", 0); 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/control_editor_plugin.cpp b/editor/plugins/control_editor_plugin.cpp index 3479d22267..df20395ac5 100644 --- a/editor/plugins/control_editor_plugin.cpp +++ b/editor/plugins/control_editor_plugin.cpp @@ -214,7 +214,7 @@ EditorPropertyAnchorsPreset::EditorPropertyAnchorsPreset() { options->set_flat(true); add_child(options); add_focusable(options); - options->connect("item_selected", callable_mp(this, &EditorPropertyAnchorsPreset::_option_selected)); + options->connect(SceneStringName(item_selected), callable_mp(this, &EditorPropertyAnchorsPreset::_option_selected)); } void EditorPropertySizeFlags::_set_read_only(bool p_read_only) { @@ -397,7 +397,7 @@ EditorPropertySizeFlags::EditorPropertySizeFlags() { vb->add_child(flag_presets); add_focusable(flag_presets); set_label_reference(flag_presets); - flag_presets->connect("item_selected", callable_mp(this, &EditorPropertySizeFlags::_preset_selected)); + flag_presets->connect(SceneStringName(item_selected), callable_mp(this, &EditorPropertySizeFlags::_preset_selected)); flag_options = memnew(VBoxContainer); flag_options->hide(); diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp index 1c0d93248d..92c0fd847b 100644 --- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp @@ -305,7 +305,7 @@ CPUParticles2DEditorPlugin::CPUParticles2DEditorPlugin() { toolbar->add_child(emission_mask); - emission_mask->connect("confirmed", callable_mp(this, &CPUParticles2DEditorPlugin::_generate_emission_mask)); + emission_mask->connect(SceneStringName(confirmed), callable_mp(this, &CPUParticles2DEditorPlugin::_generate_emission_mask)); } CPUParticles2DEditorPlugin::~CPUParticles2DEditorPlugin() { diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.cpp b/editor/plugins/cpu_particles_3d_editor_plugin.cpp index f01bc542da..be2847d1d7 100644 --- a/editor/plugins/cpu_particles_3d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_3d_editor_plugin.cpp @@ -187,7 +187,7 @@ CPUParticles3DEditor::CPUParticles3DEditor() { add_child(generate_aabb); - generate_aabb->connect("confirmed", callable_mp(this, &CPUParticles3DEditor::_generate_aabb)); + generate_aabb->connect(SceneStringName(confirmed), callable_mp(this, &CPUParticles3DEditor::_generate_aabb)); } void CPUParticles3DEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 278543dc36..e37619aa20 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -658,8 +658,8 @@ void CurveEdit::set_selected_index(int p_index) { } void CurveEdit::update_view_transform() { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); const real_t margin = font->get_height(font_size) + 2 * EDSCALE; @@ -820,10 +820,10 @@ void CurveEdit::_redraw() { // Draw number markings. draw_set_transform_matrix(Transform2D()); - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); float font_height = font->get_height(font_size); - Color text_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color text_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); for (int i = 0; i <= grid_steps.x; ++i) { real_t x = i * step_size.x; @@ -841,8 +841,8 @@ void CurveEdit::_redraw() { // The scaling up ensures that the curve rendering doesn't break when we use a quad line to draw it. draw_set_transform_matrix(Transform2D(0, get_view_pos(Vector2(0, 0)))); - const Color line_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); - const Color edge_line_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)) * Color(1, 1, 1, 0.75); + const Color line_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); + const Color edge_line_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)) * Color(1, 1, 1, 0.75); CanvasItemPlotCurve plot_func(*this, line_color, edge_line_color); plot_curve_accurate(**curve, 2.f, (get_view_pos(Vector2(1, curve->get_max_value())) - get_view_pos(Vector2(0, curve->get_min_value()))) / Vector2(1, curve->get_range()), plot_func); @@ -852,7 +852,7 @@ void CurveEdit::_redraw() { bool shift_pressed = Input::get_singleton()->is_key_pressed(Key::SHIFT); - const Color point_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + const Color point_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); for (int i = 0; i < curve->get_point_count(); ++i) { Vector2 pos = get_view_pos(curve->get_point_position(i)); @@ -873,7 +873,7 @@ void CurveEdit::_redraw() { // Draw tangents if not dragging a point, or if holding a point without having moved it yet. if (grabbing == GRAB_NONE || initial_grab_pos == point_pos || selected_tangent_index != TANGENT_NONE) { const Color selected_tangent_color = get_theme_color(SNAME("accent_color"), EditorStringName(Editor)).darkened(0.25); - const Color tangent_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)).darkened(0.25); + const Color tangent_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)).darkened(0.25); if (selected_index != 0) { Vector2 control_pos = get_tangent_view_pos(selected_index, TANGENT_LEFT); @@ -1019,7 +1019,7 @@ CurveEditor::CurveEditor() { snap_count_edit->set_value(DEFAULT_SNAP); snap_count_edit->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); toolbar->add_child(snap_count_edit); - snap_count_edit->connect("value_changed", callable_mp(this, &CurveEditor::_set_snap_count)); + snap_count_edit->connect(SceneStringName(value_changed), callable_mp(this, &CurveEditor::_set_snap_count)); presets_button = memnew(MenuButton); presets_button->set_text(TTR("Presets")); 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/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp index f2b38536b5..7ac924571d 100644 --- a/editor/plugins/editor_preview_plugins.cpp +++ b/editor/plugins/editor_preview_plugins.cpp @@ -97,6 +97,10 @@ Ref<Texture2D> EditorTexturePreviewPlugin::generate(const Ref<Resource> &p_from, return Ref<Texture2D>(); } + if (!atex->get_region().has_area()) { + return Ref<Texture2D>(); + } + img = atlas->get_region(atex->get_region()); } else { Ref<Texture2D> tex = p_from; diff --git a/editor/plugins/font_config_plugin.cpp b/editor/plugins/font_config_plugin.cpp index 6d1e102808..15b268337f 100644 --- a/editor/plugins/font_config_plugin.cpp +++ b/editor/plugins/font_config_plugin.cpp @@ -892,9 +892,9 @@ void FontPreview::_notification(int p_what) { switch (p_what) { case NOTIFICATION_DRAW: { // Draw font name (style). - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); - Color text_color = get_theme_color(SNAME("font_color"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); + Color text_color = get_theme_color(SceneStringName(font_color), SNAME("Label")); // Draw font preview. bool prev_ok = true; diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.cpp b/editor/plugins/gpu_particles_2d_editor_plugin.cpp index 5376dfd956..b70c34b785 100644 --- a/editor/plugins/gpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_2d_editor_plugin.cpp @@ -401,7 +401,7 @@ GPUParticles2DEditorPlugin::GPUParticles2DEditorPlugin() { toolbar->add_child(generate_visibility_rect); - generate_visibility_rect->connect("confirmed", callable_mp(this, &GPUParticles2DEditorPlugin::_generate_visibility_rect)); + generate_visibility_rect->connect(SceneStringName(confirmed), callable_mp(this, &GPUParticles2DEditorPlugin::_generate_visibility_rect)); emission_mask = memnew(ConfirmationDialog); emission_mask->set_title(TTR("Load Emission Mask")); @@ -423,7 +423,7 @@ GPUParticles2DEditorPlugin::GPUParticles2DEditorPlugin() { toolbar->add_child(emission_mask); - emission_mask->connect("confirmed", callable_mp(this, &GPUParticles2DEditorPlugin::_generate_emission_mask)); + emission_mask->connect(SceneStringName(confirmed), callable_mp(this, &GPUParticles2DEditorPlugin::_generate_emission_mask)); } GPUParticles2DEditorPlugin::~GPUParticles2DEditorPlugin() { diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.cpp b/editor/plugins/gpu_particles_3d_editor_plugin.cpp index b1dd1b2182..00c5332464 100644 --- a/editor/plugins/gpu_particles_3d_editor_plugin.cpp +++ b/editor/plugins/gpu_particles_3d_editor_plugin.cpp @@ -221,7 +221,7 @@ GPUParticles3DEditorBase::GPUParticles3DEditorBase() { emd_vb->add_margin_child(TTR("Emission Source:"), emission_fill); emission_dialog->set_ok_button_text(TTR("Create")); - emission_dialog->connect("confirmed", callable_mp(this, &GPUParticles3DEditorBase::_generate_emission_points)); + emission_dialog->connect(SceneStringName(confirmed), callable_mp(this, &GPUParticles3DEditorBase::_generate_emission_points)); emission_tree_dialog = memnew(SceneTreeDialog); Vector<StringName> valid_types; @@ -434,7 +434,7 @@ GPUParticles3DEditor::GPUParticles3DEditor() { add_child(generate_aabb); - generate_aabb->connect("confirmed", callable_mp(this, &GPUParticles3DEditor::_generate_aabb)); + generate_aabb->connect(SceneStringName(confirmed), callable_mp(this, &GPUParticles3DEditor::_generate_aabb)); } void GPUParticles3DEditorPlugin::edit(Object *p_object) { diff --git a/editor/plugins/gradient_editor_plugin.cpp b/editor/plugins/gradient_editor_plugin.cpp index dd7998c6bf..8bf5dad97f 100644 --- a/editor/plugins/gradient_editor_plugin.cpp +++ b/editor/plugins/gradient_editor_plugin.cpp @@ -640,7 +640,7 @@ GradientEditor::GradientEditor() { snap_count_edit->set_value(DEFAULT_SNAP); snap_count_edit->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); toolbar->add_child(snap_count_edit); - snap_count_edit->connect("value_changed", callable_mp(this, &GradientEditor::_set_snap_count)); + snap_count_edit->connect(SceneStringName(value_changed), callable_mp(this, &GradientEditor::_set_snap_count)); gradient_editor_rect = memnew(GradientEdit); add_child(gradient_editor_rect); diff --git a/editor/plugins/gradient_texture_2d_editor_plugin.cpp b/editor/plugins/gradient_texture_2d_editor_plugin.cpp index 9a2e625210..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)); @@ -298,7 +298,7 @@ GradientTexture2DEditor::GradientTexture2DEditor() { snap_count_edit->set_value(DEFAULT_SNAP); snap_count_edit->set_custom_minimum_size(Size2(65 * EDSCALE, 0)); toolbar->add_child(snap_count_edit); - snap_count_edit->connect("value_changed", callable_mp(this, &GradientTexture2DEditor::_set_snap_count)); + snap_count_edit->connect(SceneStringName(value_changed), callable_mp(this, &GradientTexture2DEditor::_set_snap_count)); texture_editor_rect = memnew(GradientTexture2DEdit); add_child(texture_editor_rect); diff --git a/editor/plugins/input_event_editor_plugin.cpp b/editor/plugins/input_event_editor_plugin.cpp index 1f6bb11929..5a90d2de61 100644 --- a/editor/plugins/input_event_editor_plugin.cpp +++ b/editor/plugins/input_event_editor_plugin.cpp @@ -94,7 +94,7 @@ InputEventConfigContainer::InputEventConfigContainer() { add_child(memnew(Control)); config_dialog = memnew(InputEventConfigurationDialog); - config_dialog->connect("confirmed", callable_mp(this, &InputEventConfigContainer::_config_dialog_confirmed)); + config_dialog->connect(SceneStringName(confirmed), callable_mp(this, &InputEventConfigContainer::_config_dialog_confirmed)); add_child(config_dialog); } diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp index 6eae3b975a..4ebacbd0b3 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp @@ -558,7 +558,7 @@ MeshInstance3DEditor::MeshInstance3DEditor() { outline_dialog_vbc->add_margin_child(TTR("Outline Size:"), outline_size); add_child(outline_dialog); - outline_dialog->connect("confirmed", callable_mp(this, &MeshInstance3DEditor::_create_outline_mesh)); + outline_dialog->connect(SceneStringName(confirmed), callable_mp(this, &MeshInstance3DEditor::_create_outline_mesh)); shape_dialog = memnew(ConfirmationDialog); shape_dialog->set_title(TTR("Create Collision Shape")); @@ -596,7 +596,7 @@ MeshInstance3DEditor::MeshInstance3DEditor() { shape_dialog_vbc->add_child(shape_type); add_child(shape_dialog); - shape_dialog->connect("confirmed", callable_mp(this, &MeshInstance3DEditor::_create_collision_shape)); + shape_dialog->connect(SceneStringName(confirmed), callable_mp(this, &MeshInstance3DEditor::_create_collision_shape)); err_dialog = memnew(AcceptDialog); add_child(err_dialog); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 05b7fa08ca..c6a0dfb888 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; @@ -1639,17 +1647,13 @@ void Node3DEditorViewport::input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseMotion> m = p_event; if (m.is_valid()) { - if (_edit.mode == TRANSFORM_ROTATE) { - _edit.mouse_pos = m->get_position(); // rotate should not wrap - } else { - _edit.mouse_pos += _get_warped_mouse_motion(p_event); - } + _edit.mouse_pos += _get_warped_mouse_motion(p_event); update_transform(_get_key_modifier(m) == Key::SHIFT); } } void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) { - if (previewing) { + if (previewing || get_viewport()->gui_get_drag_data()) { return; //do NONE } @@ -2899,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; @@ -2971,14 +2975,14 @@ void Node3DEditorViewport::_notification(int p_what) { // Middle point is at 15 ms. cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), rtos(cpu_time).pad_decimals(2))); cpu_time_label->add_theme_color_override( - "font_color", + SceneStringName(font_color), frame_time_gradient->get_color_at_offset( Math::remap(cpu_time, 0, 30, 0, 1))); gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), rtos(gpu_time).pad_decimals(2))); // Middle point is at 15 ms. gpu_time_label->add_theme_color_override( - "font_color", + SceneStringName(font_color), frame_time_gradient->get_color_at_offset( Math::remap(gpu_time, 0, 30, 0, 1))); @@ -2986,7 +2990,7 @@ void Node3DEditorViewport::_notification(int p_what) { fps_label->set_text(vformat(TTR("FPS: %d"), fps)); // Middle point is at 60 FPS. fps_label->add_theme_color_override( - "font_color", + SceneStringName(font_color), frame_time_gradient->get_color_at_offset( Math::remap(fps, 110, 10, 0, 1))); } @@ -3047,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. @@ -3077,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: { @@ -3150,8 +3170,8 @@ void Node3DEditorViewport::_draw() { RID ci = surface->get_canvas_item(); if (message_time > 0) { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Point2 msgpos = Point2(5, get_size().y - 20); font->draw_string(ci, msgpos + Point2(1, 1), message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); font->draw_string(ci, msgpos + Point2(-1, -1), message, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(0, 0, 0, 0.8)); @@ -3229,8 +3249,8 @@ void Node3DEditorViewport::_draw() { *surface, 1.0 - logscale_t, get_editor_theme_icon(SNAME("ViewportSpeed")), - get_theme_font(SNAME("font"), SNAME("Label")), - get_theme_font_size(SNAME("font_size"), SNAME("Label")), + get_theme_font(SceneStringName(font), SNAME("Label")), + get_theme_font_size(SceneStringName(font_size), SNAME("Label")), vformat("%s m/s", String::num(freelook_speed).pad_decimals(precision)), Color(1.0, 0.95, 0.7)); } @@ -3252,8 +3272,8 @@ void Node3DEditorViewport::_draw() { *surface, logscale_t, get_editor_theme_icon(SNAME("ViewportZoom")), - get_theme_font(SNAME("font"), SNAME("Label")), - get_theme_font_size(SNAME("font_size"), SNAME("Label")), + get_theme_font(SceneStringName(font), SNAME("Label")), + get_theme_font_size(SceneStringName(font_size), SNAME("Label")), vformat("%s m", String::num(cursor.distance).pad_decimals(precision)), Color(0.7, 0.95, 1.0)); } @@ -5362,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(); @@ -5383,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")); @@ -5391,7 +5417,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p zoom_limit_label = memnew(Label); zoom_limit_label->set_text(TTR("To zoom further, change the camera's clipping planes (View -> Settings...)")); zoom_limit_label->set_name("ZoomLimitMessageLabel"); - zoom_limit_label->add_theme_color_override("font_color", Color(1, 1, 1, 1)); + zoom_limit_label->add_theme_color_override(SceneStringName(font_color), Color(1, 1, 1, 1)); zoom_limit_label->hide(); bottom_center_vbox->add_child(zoom_limit_label); @@ -5399,7 +5425,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p preview_material_label->set_anchors_and_offsets_preset(LayoutPreset::PRESET_BOTTOM_LEFT); preview_material_label->set_offset(Side::SIDE_TOP, -70 * EDSCALE); preview_material_label->set_text(TTR("Overriding material...")); - preview_material_label->add_theme_color_override("font_color", Color(1, 1, 1, 1)); + preview_material_label->add_theme_color_override(SceneStringName(font_color), Color(1, 1, 1, 1)); preview_material_label->hide(); surface->add_child(preview_material_label); @@ -5408,7 +5434,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p preview_material_label_desc->set_offset(Side::SIDE_TOP, -50 * EDSCALE); Key key = (OS::get_singleton()->has_feature("macos") || OS::get_singleton()->has_feature("web_macos") || OS::get_singleton()->has_feature("web_ios")) ? Key::META : Key::CTRL; preview_material_label_desc->set_text(vformat(TTR("Drag and drop to override the material of any geometry node.\nHold %s when dropping to override a specific surface."), find_keycode_name(key))); - preview_material_label_desc->add_theme_color_override("font_color", Color(0.8, 0.8, 0.8, 1)); + preview_material_label_desc->add_theme_color_override(SceneStringName(font_color), Color(0.8, 0.8, 0.8, 1)); preview_material_label_desc->add_theme_constant_override("line_spacing", 0); preview_material_label_desc->hide(); surface->add_child(preview_material_label_desc); @@ -5418,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); @@ -5452,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(); @@ -7806,8 +7834,8 @@ void Node3DEditor::_update_theme() { environ_button->set_icon(get_editor_theme_icon(SNAME("PreviewEnvironment"))); sun_environ_settings->set_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl"))); - sun_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window"))); - environ_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window"))); + sun_title->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("title_font"), SNAME("Window"))); + environ_title->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("title_font"), SNAME("Window"))); sun_color->set_custom_minimum_size(Size2(0, get_theme_constant(SNAME("color_picker_button_height"), EditorStringName(Editor)))); environ_sky_color->set_custom_minimum_size(Size2(0, get_theme_constant(SNAME("color_picker_button_height"), EditorStringName(Editor)))); @@ -7854,8 +7882,8 @@ void Node3DEditor::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { _update_theme(); _update_gizmos_menu_theme(); - sun_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window"))); - environ_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window"))); + sun_title->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("title_font"), SNAME("Window"))); + environ_title->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("title_font"), SNAME("Window"))); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { @@ -8435,6 +8463,7 @@ Node3DEditor::Node3DEditor() { VBoxContainer *vbc = this; custom_camera = nullptr; + ERR_FAIL_COND_MSG(singleton != nullptr, "A Node3DEditor singleton already exists."); singleton = this; editor_selection = EditorNode::get_singleton()->get_editor_selection(); editor_selection->add_editor_plugin(this); @@ -8620,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`. @@ -8723,7 +8753,7 @@ Node3DEditor::Node3DEditor() { snap_dialog = memnew(ConfirmationDialog); snap_dialog->set_title(TTR("Snap Settings")); add_child(snap_dialog); - snap_dialog->connect("confirmed", callable_mp(this, &Node3DEditor::_snap_changed)); + snap_dialog->connect(SceneStringName(confirmed), callable_mp(this, &Node3DEditor::_snap_changed)); snap_dialog->get_cancel_button()->connect(SceneStringName(pressed), callable_mp(this, &Node3DEditor::_snap_update)); VBoxContainer *snap_dialog_vbc = memnew(VBoxContainer); @@ -8776,7 +8806,7 @@ Node3DEditor::Node3DEditor() { settings_vbc->add_margin_child(TTR("View Z-Far:"), settings_zfar); for (uint32_t i = 0; i < VIEWPORTS_COUNT; ++i) { - settings_dialog->connect("confirmed", callable_mp(viewports[i], &Node3DEditorViewport::_view_settings_confirmed).bind(0.0)); + settings_dialog->connect(SceneStringName(confirmed), callable_mp(viewports[i], &Node3DEditorViewport::_view_settings_confirmed).bind(0.0)); } /* XFORM DIALOG */ @@ -8840,7 +8870,7 @@ Node3DEditor::Node3DEditor() { xform_type->add_item(TTR("Post")); xform_vbc->add_child(xform_type); - xform_dialog->connect("confirmed", callable_mp(this, &Node3DEditor::_xform_dialog_action)); + xform_dialog->connect(SceneStringName(confirmed), callable_mp(this, &Node3DEditor::_xform_dialog_action)); selected = nullptr; @@ -8918,7 +8948,7 @@ void fragment() { sun_angle_altitude->set_max(90); sun_angle_altitude->set_min(-90); sun_angle_altitude->set_step(0.1); - sun_angle_altitude->connect("value_changed", callable_mp(this, &Node3DEditor::_sun_direction_angle_set).unbind(1)); + sun_angle_altitude->connect(SceneStringName(value_changed), callable_mp(this, &Node3DEditor::_sun_direction_angle_set).unbind(1)); sun_angle_altitude_vbox->add_child(sun_angle_altitude); sun_angle_hbox->add_child(sun_angle_altitude_vbox); VBoxContainer *sun_angle_azimuth_vbox = memnew(VBoxContainer); @@ -8932,7 +8962,7 @@ void fragment() { sun_angle_azimuth->set_step(0.1); sun_angle_azimuth->set_allow_greater(true); sun_angle_azimuth->set_allow_lesser(true); - sun_angle_azimuth->connect("value_changed", callable_mp(this, &Node3DEditor::_sun_direction_angle_set).unbind(1)); + sun_angle_azimuth->connect(SceneStringName(value_changed), callable_mp(this, &Node3DEditor::_sun_direction_angle_set).unbind(1)); sun_angle_azimuth_vbox->add_child(sun_angle_azimuth); sun_angle_hbox->add_child(sun_angle_azimuth_vbox); sun_angle_hbox->add_theme_constant_override("separation", 10); @@ -8949,11 +8979,11 @@ void fragment() { sun_energy->set_min(0); sun_energy->set_step(0.05); sun_vb->add_margin_child(TTR("Sun Energy"), sun_energy); - sun_energy->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); + sun_energy->connect(SceneStringName(value_changed), callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); sun_max_distance = memnew(EditorSpinSlider); sun_vb->add_margin_child(TTR("Shadow Max Distance"), sun_max_distance); - sun_max_distance->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); + sun_max_distance->connect(SceneStringName(value_changed), callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); sun_max_distance->set_min(1); sun_max_distance->set_max(4096); @@ -9001,7 +9031,7 @@ void fragment() { environ_energy->set_max(8.0); environ_energy->set_min(0); environ_energy->set_step(0.05); - environ_energy->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); + environ_energy->connect(SceneStringName(value_changed), callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1)); environ_vb->add_margin_child(TTR("Sky Energy"), environ_energy); HBoxContainer *fx_vb = memnew(HBoxContainer); fx_vb->set_h_size_flags(SIZE_EXPAND_FILL); @@ -9064,6 +9094,7 @@ void fragment() { clear(); // Make sure values are initialized. Will call _snap_update() for us. } Node3DEditor::~Node3DEditor() { + singleton = nullptr; memdelete(preview_node); if (preview_sun_dangling && preview_sun) { memdelete(preview_sun); 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/particle_process_material_editor_plugin.cpp b/editor/plugins/particle_process_material_editor_plugin.cpp index 96359bf81c..79c9c69584 100644 --- a/editor/plugins/particle_process_material_editor_plugin.cpp +++ b/editor/plugins/particle_process_material_editor_plugin.cpp @@ -427,12 +427,12 @@ ParticleProcessMaterialMinMaxPropertyEditor::ParticleProcessMaterialMinMaxProper min_edit = memnew(EditorSpinSlider); min_edit->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(min_edit); - min_edit->connect(SNAME("value_changed"), callable_mp(this, &ParticleProcessMaterialMinMaxPropertyEditor::_sync_sliders).bind(min_edit)); + min_edit->connect(SceneStringName(value_changed), callable_mp(this, &ParticleProcessMaterialMinMaxPropertyEditor::_sync_sliders).bind(min_edit)); max_edit = memnew(EditorSpinSlider); max_edit->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(max_edit); - max_edit->connect(SNAME("value_changed"), callable_mp(this, &ParticleProcessMaterialMinMaxPropertyEditor::_sync_sliders).bind(max_edit)); + max_edit->connect(SceneStringName(value_changed), callable_mp(this, &ParticleProcessMaterialMinMaxPropertyEditor::_sync_sliders).bind(max_edit)); toggle_mode_button = memnew(Button); toggle_mode_button->set_toggle_mode(true); diff --git a/editor/plugins/path_2d_editor_plugin.cpp b/editor/plugins/path_2d_editor_plugin.cpp index ccb4e4921b..5b23cf44d0 100644 --- a/editor/plugins/path_2d_editor_plugin.cpp +++ b/editor/plugins/path_2d_editor_plugin.cpp @@ -688,7 +688,7 @@ Path2DEditor::Path2DEditor() { clear_points_dialog = memnew(ConfirmationDialog); clear_points_dialog->set_title(TTR("Please Confirm...")); clear_points_dialog->set_text(TTR("Remove all curve points?")); - clear_points_dialog->connect("confirmed", callable_mp(this, &Path2DEditor::_mode_selected).bind(MODE_CLEAR_POINTS)); + clear_points_dialog->connect(SceneStringName(confirmed), callable_mp(this, &Path2DEditor::_mode_selected).bind(MODE_CLEAR_POINTS)); add_child(clear_points_dialog); PopupMenu *menu; diff --git a/editor/plugins/path_3d_editor_plugin.cpp b/editor/plugins/path_3d_editor_plugin.cpp index 447e82f70d..240206e124 100644 --- a/editor/plugins/path_3d_editor_plugin.cpp +++ b/editor/plugins/path_3d_editor_plugin.cpp @@ -881,7 +881,7 @@ Path3DEditorPlugin::Path3DEditorPlugin() { clear_points_dialog = memnew(ConfirmationDialog); clear_points_dialog->set_title(TTR("Please Confirm...")); clear_points_dialog->set_text(TTR("Remove all curve points?")); - clear_points_dialog->connect("confirmed", callable_mp(this, &Path3DEditorPlugin::_clear_points)); + clear_points_dialog->connect(SceneStringName(confirmed), callable_mp(this, &Path3DEditorPlugin::_clear_points)); topmenu_bar->add_child(clear_points_dialog); handle_menu = memnew(MenuButton); diff --git a/editor/plugins/plugin_config_dialog.cpp b/editor/plugins/plugin_config_dialog.cpp index fda06c3eec..af9efda939 100644 --- a/editor/plugins/plugin_config_dialog.cpp +++ b/editor/plugins/plugin_config_dialog.cpp @@ -160,7 +160,7 @@ void PluginConfigDialog::_notification(int p_what) { } break; case NOTIFICATION_READY: { - connect("confirmed", callable_mp(this, &PluginConfigDialog::_on_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &PluginConfigDialog::_on_confirmed)); get_cancel_button()->connect(SceneStringName(pressed), callable_mp(this, &PluginConfigDialog::_on_canceled)); } break; } @@ -335,10 +335,10 @@ PluginConfigDialog::PluginConfigDialog() { validation_panel->set_update_callback(callable_mp(this, &PluginConfigDialog::_on_required_text_changed)); validation_panel->set_accept_button(get_ok_button()); - script_option_edit->connect("item_selected", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); - name_edit->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); - subfolder_edit->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); - script_edit->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + script_option_edit->connect(SceneStringName(item_selected), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + name_edit->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + subfolder_edit->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + script_edit->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); } PluginConfigDialog::~PluginConfigDialog() { diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 61bd21db67..b5db7bef70 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -1308,7 +1308,7 @@ Polygon2DEditor::Polygon2DEditor() { uv_edit = memnew(AcceptDialog); add_child(uv_edit); uv_edit->set_title(TTR("Polygon 2D UV Editor")); - uv_edit->connect("confirmed", callable_mp(this, &Polygon2DEditor::_uv_edit_popup_hide)); + 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)); VBoxContainer *uv_main_vb = memnew(VBoxContainer); @@ -1470,7 +1470,7 @@ Polygon2DEditor::Polygon2DEditor() { sb_off_x->set_step(1); sb_off_x->set_value(snap_offset.x); sb_off_x->set_suffix("px"); - sb_off_x->connect("value_changed", callable_mp(this, &Polygon2DEditor::_set_snap_off_x)); + sb_off_x->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_set_snap_off_x)); grid_settings_vb->add_margin_child(TTR("Grid Offset X:"), sb_off_x); SpinBox *sb_off_y = memnew(SpinBox); @@ -1479,7 +1479,7 @@ Polygon2DEditor::Polygon2DEditor() { sb_off_y->set_step(1); sb_off_y->set_value(snap_offset.y); sb_off_y->set_suffix("px"); - sb_off_y->connect("value_changed", callable_mp(this, &Polygon2DEditor::_set_snap_off_y)); + sb_off_y->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_set_snap_off_y)); grid_settings_vb->add_margin_child(TTR("Grid Offset Y:"), sb_off_y); SpinBox *sb_step_x = memnew(SpinBox); @@ -1488,7 +1488,7 @@ Polygon2DEditor::Polygon2DEditor() { sb_step_x->set_step(1); sb_step_x->set_value(snap_step.x); sb_step_x->set_suffix("px"); - sb_step_x->connect("value_changed", callable_mp(this, &Polygon2DEditor::_set_snap_step_x)); + sb_step_x->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_set_snap_step_x)); grid_settings_vb->add_margin_child(TTR("Grid Step X:"), sb_step_x); SpinBox *sb_step_y = memnew(SpinBox); @@ -1497,7 +1497,7 @@ Polygon2DEditor::Polygon2DEditor() { sb_step_y->set_step(1); sb_step_y->set_value(snap_step.y); sb_step_y->set_suffix("px"); - sb_step_y->connect("value_changed", callable_mp(this, &Polygon2DEditor::_set_snap_step_y)); + sb_step_y->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_set_snap_step_y)); grid_settings_vb->add_margin_child(TTR("Grid Step Y:"), sb_step_y); zoom_widget = memnew(EditorZoomWidget); @@ -1509,11 +1509,11 @@ Polygon2DEditor::Polygon2DEditor() { uv_vscroll = memnew(VScrollBar); uv_vscroll->set_step(0.001); uv_edit_draw->add_child(uv_vscroll); - uv_vscroll->connect("value_changed", callable_mp(this, &Polygon2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); + uv_vscroll->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); uv_hscroll = memnew(HScrollBar); uv_hscroll->set_step(0.001); uv_edit_draw->add_child(uv_hscroll); - uv_hscroll->connect("value_changed", callable_mp(this, &Polygon2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); + uv_hscroll->connect(SceneStringName(value_changed), callable_mp(this, &Polygon2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); bone_scroll_main_vb = memnew(VBoxContainer); bone_scroll_main_vb->hide(); diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp index 4d0156eb5b..8b31aa92b3 100644 --- a/editor/plugins/root_motion_editor_plugin.cpp +++ b/editor/plugins/root_motion_editor_plugin.cpp @@ -212,7 +212,7 @@ EditorPropertyRootMotion::EditorPropertyRootMotion() { filter_dialog = memnew(ConfirmationDialog); add_child(filter_dialog); filter_dialog->set_title(TTR("Edit Filtered Tracks:")); - filter_dialog->connect("confirmed", callable_mp(this, &EditorPropertyRootMotion::_confirmed)); + filter_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorPropertyRootMotion::_confirmed)); filters = memnew(Tree); filter_dialog->add_child(filters); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 334b253316..a670c7937b 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -399,7 +399,7 @@ void ScriptEditorQuickOpen::_confirmed() { void ScriptEditorQuickOpen::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); search_box->set_clear_button_enabled(true); [[fallthrough]]; @@ -409,7 +409,7 @@ void ScriptEditorQuickOpen::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); + disconnect(SceneStringName(confirmed), callable_mp(this, &ScriptEditorQuickOpen::_confirmed)); } break; } } @@ -423,7 +423,7 @@ ScriptEditorQuickOpen::ScriptEditorQuickOpen() { add_child(vbc); search_box = memnew(LineEdit); vbc->add_margin_child(TTR("Search:"), search_box); - search_box->connect("text_changed", callable_mp(this, &ScriptEditorQuickOpen::_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &ScriptEditorQuickOpen::_text_changed)); search_box->connect(SceneStringName(gui_input), callable_mp(this, &ScriptEditorQuickOpen::_sbox_input)); search_options = memnew(Tree); vbc->add_margin_child(TTR("Matches:"), search_options, true); @@ -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(); } @@ -1759,10 +1755,10 @@ void ScriptEditor::_notification(int p_what) { EditorNode::get_singleton()->connect("scene_saved", callable_mp(this, &ScriptEditor::_scene_saved_callback)); FileSystemDock::get_singleton()->connect("files_moved", callable_mp(this, &ScriptEditor::_files_moved)); FileSystemDock::get_singleton()->connect("file_removed", callable_mp(this, &ScriptEditor::_file_removed)); - script_list->connect("item_selected", callable_mp(this, &ScriptEditor::_script_selected)); + script_list->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditor::_script_selected)); - members_overview->connect("item_selected", callable_mp(this, &ScriptEditor::_members_overview_selected)); - help_overview->connect("item_selected", callable_mp(this, &ScriptEditor::_help_overview_selected)); + members_overview->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditor::_members_overview_selected)); + help_overview->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditor::_help_overview_selected)); script_split->connect("dragged", callable_mp(this, &ScriptEditor::_split_dragged)); list_split->connect("dragged", callable_mp(this, &ScriptEditor::_split_dragged)); @@ -2079,7 +2075,7 @@ void ScriptEditor::_update_script_colors() { int hist_size = EDITOR_GET("text_editor/script_list/script_temperature_history_size"); Color hot_color = get_theme_color(SNAME("accent_color"), EditorStringName(Editor)); hot_color.set_s(hot_color.get_s() * 0.9); - Color cold_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + Color cold_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); for (int i = 0; i < script_list->get_item_count(); i++) { int c = script_list->get_item_metadata(i); @@ -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(); } } @@ -2856,6 +2849,10 @@ void ScriptEditor::_add_callback(Object *p_obj, const String &p_function, const break; } + + // Move back to the previously edited node to reselect it in the Inspector and the NodeDock. + // We assume that the previous item is the node on which the callbacks were added. + EditorNode::get_singleton()->edit_previous_item(); } void ScriptEditor::_save_editor_state(ScriptEditorBase *p_editor) { @@ -4022,7 +4019,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { filter_scripts = memnew(LineEdit); filter_scripts->set_placeholder(TTR("Filter Scripts")); filter_scripts->set_clear_button_enabled(true); - filter_scripts->connect("text_changed", callable_mp(this, &ScriptEditor::_filter_scripts_text_changed)); + filter_scripts->connect(SceneStringName(text_changed), callable_mp(this, &ScriptEditor::_filter_scripts_text_changed)); scripts_vbox->add_child(filter_scripts); script_list = memnew(ItemList); @@ -4052,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); @@ -4067,7 +4065,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { filter_methods = memnew(LineEdit); filter_methods->set_placeholder(TTR("Filter Methods")); filter_methods->set_clear_button_enabled(true); - filter_methods->connect("text_changed", callable_mp(this, &ScriptEditor::_filter_methods_text_changed)); + filter_methods->connect(SceneStringName(text_changed), callable_mp(this, &ScriptEditor::_filter_methods_text_changed)); overview_vbox->add_child(filter_methods); members_overview = memnew(ItemList); @@ -4247,7 +4245,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { erase_tab_confirm = memnew(ConfirmationDialog); erase_tab_confirm->set_ok_button_text(TTR("Save")); erase_tab_confirm->add_button(TTR("Discard"), DisplayServer::get_singleton()->get_swap_cancel_ok(), "discard"); - erase_tab_confirm->connect("confirmed", callable_mp(this, &ScriptEditor::_close_current_tab).bind(true, true)); + erase_tab_confirm->connect(SceneStringName(confirmed), callable_mp(this, &ScriptEditor::_close_current_tab).bind(true, true)); erase_tab_confirm->connect("custom_action", callable_mp(this, &ScriptEditor::_close_discard_current_tab)); add_child(erase_tab_confirm); @@ -4284,7 +4282,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { disk_changed_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); disk_changed_list->set_v_size_flags(SIZE_EXPAND_FILL); - disk_changed->connect("confirmed", callable_mp(this, &ScriptEditor::reload_scripts).bind(false)); + disk_changed->connect(SceneStringName(confirmed), callable_mp(this, &ScriptEditor::reload_scripts).bind(false)); disk_changed->set_ok_button_text(TTR("Discard local changes and reload")); disk_changed->add_button(TTR("Keep local changes and overwrite"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 8dc398138c..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); } @@ -725,7 +730,7 @@ ShaderEditorPlugin::ShaderEditorPlugin() { shader_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); shader_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); vb->add_child(shader_list); - shader_list->connect("item_selected", callable_mp(this, &ShaderEditorPlugin::_shader_selected)); + shader_list->connect(SceneStringName(item_selected), callable_mp(this, &ShaderEditorPlugin::_shader_selected)); shader_list->connect("item_clicked", callable_mp(this, &ShaderEditorPlugin::_shader_list_clicked)); SET_DRAG_FORWARDING_GCD(shader_list, ShaderEditorPlugin); diff --git a/editor/plugins/shader_file_editor_plugin.cpp b/editor/plugins/shader_file_editor_plugin.cpp index dac5592113..05919fb0f6 100644 --- a/editor/plugins/shader_file_editor_plugin.cpp +++ b/editor/plugins/shader_file_editor_plugin.cpp @@ -258,7 +258,7 @@ ShaderFileEditor::ShaderFileEditor() { versions = memnew(ItemList); versions->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); - versions->connect("item_selected", callable_mp(this, &ShaderFileEditor::_version_selected)); + versions->connect(SceneStringName(item_selected), callable_mp(this, &ShaderFileEditor::_version_selected)); versions->set_custom_minimum_size(Size2i(200 * EDSCALE, 0)); main_hs->add_child(versions); diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp index e4eaab7325..f5ae695aa4 100644 --- a/editor/plugins/skeleton_3d_editor_plugin.cpp +++ b/editor/plugins/skeleton_3d_editor_plugin.cpp @@ -838,7 +838,7 @@ void Skeleton3DEditor::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { update_joint_tree(); - joint_tree->connect("item_selected", callable_mp(this, &Skeleton3DEditor::_joint_tree_selection_changed)); + joint_tree->connect(SceneStringName(item_selected), callable_mp(this, &Skeleton3DEditor::_joint_tree_selection_changed)); joint_tree->connect("item_mouse_selected", callable_mp(this, &Skeleton3DEditor::_joint_tree_rmb_select)); #ifdef TOOLS_ENABLED skeleton->connect(SceneStringName(pose_updated), callable_mp(this, &Skeleton3DEditor::_draw_gizmo)); diff --git a/editor/plugins/sprite_2d_editor_plugin.cpp b/editor/plugins/sprite_2d_editor_plugin.cpp index c7a89484f0..3647fa2d59 100644 --- a/editor/plugins/sprite_2d_editor_plugin.cpp +++ b/editor/plugins/sprite_2d_editor_plugin.cpp @@ -613,12 +613,12 @@ Sprite2DEditor::Sprite2DEditor() { v_scroll = memnew(VScrollBar); debug_uv->add_child(v_scroll); - v_scroll->connect("value_changed", callable_mp(this, &Sprite2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &Sprite2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); h_scroll = memnew(HScrollBar); debug_uv->add_child(h_scroll); - h_scroll->connect("value_changed", callable_mp(this, &Sprite2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &Sprite2DEditor::_update_zoom_and_pan).unbind(1).bind(false)); - debug_uv_dialog->connect("confirmed", callable_mp(this, &Sprite2DEditor::_create_node)); + debug_uv_dialog->connect(SceneStringName(confirmed), callable_mp(this, &Sprite2DEditor::_create_node)); HBoxContainer *hb = memnew(HBoxContainer); hb->add_child(memnew(Label(TTR("Simplification:")))); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index d1da61e5fc..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); } } @@ -1816,7 +1820,7 @@ SpriteFramesEditor::SpriteFramesEditor() { anim_speed->set_step(0.01); anim_speed->set_custom_arrow_step(1); anim_speed->set_tooltip_text(TTR("Animation Speed")); - anim_speed->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_animation_speed_changed)); + anim_speed->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_animation_speed_changed)); hbc_animlist->add_child(anim_speed); anim_search_box = memnew(LineEdit); @@ -1824,7 +1828,7 @@ SpriteFramesEditor::SpriteFramesEditor() { anim_search_box->set_h_size_flags(SIZE_EXPAND_FILL); anim_search_box->set_placeholder(TTR("Filter Animations")); anim_search_box->set_clear_button_enabled(true); - anim_search_box->connect("text_changed", callable_mp(this, &SpriteFramesEditor::_animation_search_text_changed)); + anim_search_box->connect(SceneStringName(text_changed), callable_mp(this, &SpriteFramesEditor::_animation_search_text_changed)); animations = memnew(Tree); sub_vb->add_child(animations); @@ -1960,7 +1964,7 @@ SpriteFramesEditor::SpriteFramesEditor() { frame_duration->set_custom_arrow_step(0.1); frame_duration->set_allow_lesser(false); frame_duration->set_allow_greater(true); - frame_duration->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_frame_duration_changed)); + frame_duration->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_frame_duration_changed)); hbc_frame_duration->add_child(frame_duration); // Wide empty separation control. (like BoxContainer::add_spacer()) @@ -2058,12 +2062,12 @@ SpriteFramesEditor::SpriteFramesEditor() { delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect("confirmed", callable_mp(this, &SpriteFramesEditor::_animation_remove_confirmed)); + delete_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SpriteFramesEditor::_animation_remove_confirmed)); split_sheet_dialog = memnew(ConfirmationDialog); add_child(split_sheet_dialog); split_sheet_dialog->set_title(TTR("Select Frames")); - split_sheet_dialog->connect("confirmed", callable_mp(this, &SpriteFramesEditor::_sheet_add_frames)); + split_sheet_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SpriteFramesEditor::_sheet_add_frames)); HBoxContainer *split_sheet_hb = memnew(HBoxContainer); split_sheet_dialog->add_child(split_sheet_hb); @@ -2091,7 +2095,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_order->add_item(TTR("Top to Bottom, Right to Left"), FRAME_ORDER_TOP_BOTTOM_RIGHT_LEFT); split_sheet_order->add_item(TTR("Bottom to Top, Left to Right"), FRAME_ORDER_BOTTOM_TOP_LEFT_RIGHT); split_sheet_order->add_item(TTR("Bottom to Top, Right to Left"), FRAME_ORDER_BOTTOM_TOP_RIGHT_LEFT); - split_sheet_order->connect("item_selected", callable_mp(this, &SpriteFramesEditor::_sheet_order_selected)); + split_sheet_order->connect(SceneStringName(item_selected), callable_mp(this, &SpriteFramesEditor::_sheet_order_selected)); split_sheet_menu_hb->add_child(split_sheet_order); Button *select_all = memnew(Button); @@ -2183,7 +2187,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_h->set_step(1); split_sheet_h->set_select_all_on_focus(true); split_sheet_h_hb->add_child(split_sheet_h); - split_sheet_h->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_FRAME_COUNT)); + split_sheet_h->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_FRAME_COUNT)); split_sheet_settings_vb->add_child(split_sheet_h_hb); HBoxContainer *split_sheet_v_hb = memnew(HBoxContainer); @@ -2200,7 +2204,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_v->set_step(1); split_sheet_v->set_select_all_on_focus(true); split_sheet_v_hb->add_child(split_sheet_v); - split_sheet_v->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_FRAME_COUNT)); + split_sheet_v->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_FRAME_COUNT)); split_sheet_settings_vb->add_child(split_sheet_v_hb); HBoxContainer *split_sheet_size_hb = memnew(HBoxContainer); @@ -2219,7 +2223,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_size_x->set_step(1); split_sheet_size_x->set_suffix("px"); split_sheet_size_x->set_select_all_on_focus(true); - split_sheet_size_x->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_SIZE)); + split_sheet_size_x->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_SIZE)); split_sheet_size_vb->add_child(split_sheet_size_x); split_sheet_size_y = memnew(SpinBox); split_sheet_size_y->set_h_size_flags(SIZE_EXPAND_FILL); @@ -2227,7 +2231,7 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_size_y->set_step(1); split_sheet_size_y->set_suffix("px"); split_sheet_size_y->set_select_all_on_focus(true); - split_sheet_size_y->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_SIZE)); + split_sheet_size_y->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_SIZE)); split_sheet_size_vb->add_child(split_sheet_size_y); split_sheet_size_hb->add_child(split_sheet_size_vb); split_sheet_settings_vb->add_child(split_sheet_size_hb); @@ -2247,14 +2251,14 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_sep_x->set_step(1); split_sheet_sep_x->set_suffix("px"); split_sheet_sep_x->set_select_all_on_focus(true); - split_sheet_sep_x->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); + split_sheet_sep_x->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); split_sheet_sep_vb->add_child(split_sheet_sep_x); split_sheet_sep_y = memnew(SpinBox); split_sheet_sep_y->set_min(0); split_sheet_sep_y->set_step(1); split_sheet_sep_y->set_suffix("px"); split_sheet_sep_y->set_select_all_on_focus(true); - split_sheet_sep_y->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); + split_sheet_sep_y->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); split_sheet_sep_vb->add_child(split_sheet_sep_y); split_sheet_sep_hb->add_child(split_sheet_sep_vb); split_sheet_settings_vb->add_child(split_sheet_sep_hb); @@ -2274,14 +2278,14 @@ SpriteFramesEditor::SpriteFramesEditor() { split_sheet_offset_x->set_step(1); split_sheet_offset_x->set_suffix("px"); split_sheet_offset_x->set_select_all_on_focus(true); - split_sheet_offset_x->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); + split_sheet_offset_x->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); split_sheet_offset_vb->add_child(split_sheet_offset_x); split_sheet_offset_y = memnew(SpinBox); split_sheet_offset_y->set_min(0); split_sheet_offset_y->set_step(1); split_sheet_offset_y->set_suffix("px"); split_sheet_offset_y->set_select_all_on_focus(true); - split_sheet_offset_y->connect("value_changed", callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); + split_sheet_offset_y->connect(SceneStringName(value_changed), callable_mp(this, &SpriteFramesEditor::_sheet_spin_changed).bind(PARAM_USE_CURRENT)); split_sheet_offset_vb->add_child(split_sheet_offset_y); split_sheet_offset_hb->add_child(split_sheet_offset_vb); split_sheet_settings_vb->add_child(split_sheet_offset_hb); diff --git a/editor/plugins/text_shader_editor.cpp b/editor/plugins/text_shader_editor.cpp index 6c47f3aadb..276c57533f 100644 --- a/editor/plugins/text_shader_editor.cpp +++ b/editor/plugins/text_shader_editor.cpp @@ -1246,7 +1246,7 @@ TextShaderEditor::TextShaderEditor() { dl->set_text(TTR("This shader has been modified on disk.\nWhat action should be taken?")); vbc->add_child(dl); - disk_changed->connect("confirmed", callable_mp(this, &TextShaderEditor::_reload)); + disk_changed->connect(SceneStringName(confirmed), callable_mp(this, &TextShaderEditor::_reload)); disk_changed->set_ok_button_text(TTR("Reload")); disk_changed->add_button(TTR("Resave"), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "resave"); diff --git a/editor/plugins/texture_3d_editor_plugin.cpp b/editor/plugins/texture_3d_editor_plugin.cpp index dc021daaad..fa90e982fe 100644 --- a/editor/plugins/texture_3d_editor_plugin.cpp +++ b/editor/plugins/texture_3d_editor_plugin.cpp @@ -157,12 +157,12 @@ Texture3DEditor::Texture3DEditor() { add_child(layer); layer->set_anchor(SIDE_RIGHT, 1); layer->set_anchor(SIDE_LEFT, 1); - layer->connect("value_changed", callable_mp(this, &Texture3DEditor::_layer_changed)); + layer->connect(SceneStringName(value_changed), callable_mp(this, &Texture3DEditor::_layer_changed)); info = memnew(Label); info->set_h_grow_direction(GROW_DIRECTION_BEGIN); info->set_v_grow_direction(GROW_DIRECTION_BEGIN); - info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); + info->add_theme_color_override(SceneStringName(font_color), Color(1, 1, 1, 1)); info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); info->add_theme_constant_override("shadow_outline_size", 1); info->add_theme_constant_override("shadow_offset_x", 2); diff --git a/editor/plugins/texture_editor_plugin.cpp b/editor/plugins/texture_editor_plugin.cpp index 38d9bb84f4..e9d7aa9eb8 100644 --- a/editor/plugins/texture_editor_plugin.cpp +++ b/editor/plugins/texture_editor_plugin.cpp @@ -58,7 +58,7 @@ void TexturePreview::_notification(int p_what) { if (metadata_label) { Ref<Font> metadata_label_font = get_theme_font(SNAME("expression"), EditorStringName(EditorFonts)); - metadata_label->add_theme_font_override("font", metadata_label_font); + metadata_label->add_theme_font_override(SceneStringName(font), metadata_label_font); } checkerboard->set_texture(get_editor_theme_icon(SNAME("Checkerboard"))); @@ -145,10 +145,10 @@ TexturePreview::TexturePreview(Ref<Texture2D> p_texture, bool p_show_metadata) { p_texture->connect_changed(callable_mp(this, &TexturePreview::_update_metadata_label_text)); // It's okay that these colors are static since the grid color is static too. - metadata_label->add_theme_color_override("font_color", Color::named("white")); + metadata_label->add_theme_color_override(SceneStringName(font_color), Color::named("white")); metadata_label->add_theme_color_override("font_shadow_color", Color::named("black")); - metadata_label->add_theme_font_size_override("font_size", 14 * EDSCALE); + metadata_label->add_theme_font_size_override(SceneStringName(font_size), 14 * EDSCALE); metadata_label->add_theme_color_override("font_outline_color", Color::named("black")); metadata_label->add_theme_constant_override("outline_size", 8 * EDSCALE); metadata_label->set_h_size_flags(Control::SIZE_SHRINK_END); diff --git a/editor/plugins/texture_layered_editor_plugin.cpp b/editor/plugins/texture_layered_editor_plugin.cpp index 2e9040445a..4ec9c91cf9 100644 --- a/editor/plugins/texture_layered_editor_plugin.cpp +++ b/editor/plugins/texture_layered_editor_plugin.cpp @@ -233,12 +233,12 @@ TextureLayeredEditor::TextureLayeredEditor() { add_child(layer); layer->set_anchor(SIDE_RIGHT, 1); layer->set_anchor(SIDE_LEFT, 1); - layer->connect("value_changed", callable_mp(this, &TextureLayeredEditor::_layer_changed)); + layer->connect(SceneStringName(value_changed), callable_mp(this, &TextureLayeredEditor::_layer_changed)); info = memnew(Label); info->set_h_grow_direction(GROW_DIRECTION_BEGIN); info->set_v_grow_direction(GROW_DIRECTION_BEGIN); - info->add_theme_color_override("font_color", Color(1, 1, 1, 1)); + info->add_theme_color_override(SceneStringName(font_color), Color(1, 1, 1, 1)); info->add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.5)); info->add_theme_constant_override("shadow_outline_size", 1); info->add_theme_constant_override("shadow_offset_x", 2); diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 799d7c757d..a812633480 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -1138,7 +1138,7 @@ TextureRegionEditor::TextureRegionEditor() { snap_mode_button->add_item(TTR("Grid Snap"), 2); snap_mode_button->add_item(TTR("Auto Slice"), 3); snap_mode_button->select(snap_mode); - snap_mode_button->connect("item_selected", callable_mp(this, &TextureRegionEditor::_set_snap_mode)); + snap_mode_button->connect(SceneStringName(item_selected), callable_mp(this, &TextureRegionEditor::_set_snap_mode)); hb_grid = memnew(HBoxContainer); hb_tools->add_child(hb_grid); @@ -1149,13 +1149,13 @@ TextureRegionEditor::TextureRegionEditor() { sb_off_x = memnew(SpinBox); sb_off_x->set_step(1); sb_off_x->set_suffix("px"); - sb_off_x->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_off_x)); + sb_off_x->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_off_x)); hb_grid->add_child(sb_off_x); sb_off_y = memnew(SpinBox); sb_off_y->set_step(1); sb_off_y->set_suffix("px"); - sb_off_y->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_off_y)); + sb_off_y->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_off_y)); hb_grid->add_child(sb_off_y); hb_grid->add_child(memnew(VSeparator)); @@ -1165,14 +1165,14 @@ TextureRegionEditor::TextureRegionEditor() { sb_step_x->set_min(0); sb_step_x->set_step(1); sb_step_x->set_suffix("px"); - sb_step_x->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_step_x)); + sb_step_x->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_step_x)); hb_grid->add_child(sb_step_x); sb_step_y = memnew(SpinBox); sb_step_y->set_min(0); sb_step_y->set_step(1); sb_step_y->set_suffix("px"); - sb_step_y->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_step_y)); + sb_step_y->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_step_y)); hb_grid->add_child(sb_step_y); hb_grid->add_child(memnew(VSeparator)); @@ -1182,14 +1182,14 @@ TextureRegionEditor::TextureRegionEditor() { sb_sep_x->set_min(0); sb_sep_x->set_step(1); sb_sep_x->set_suffix("px"); - sb_sep_x->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_sep_x)); + sb_sep_x->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_sep_x)); hb_grid->add_child(sb_sep_x); sb_sep_y = memnew(SpinBox); sb_sep_y->set_min(0); sb_sep_y->set_step(1); sb_sep_y->set_suffix("px"); - sb_sep_y->connect("value_changed", callable_mp(this, &TextureRegionEditor::_set_snap_sep_y)); + sb_sep_y->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_set_snap_sep_y)); hb_grid->add_child(sb_sep_y); hb_grid->hide(); @@ -1246,13 +1246,13 @@ TextureRegionEditor::TextureRegionEditor() { vscroll = memnew(VScrollBar); vscroll->set_anchors_and_offsets_preset(Control::PRESET_RIGHT_WIDE); vscroll->set_step(0.001); - vscroll->connect("value_changed", callable_mp(this, &TextureRegionEditor::_scroll_changed)); + vscroll->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_scroll_changed)); texture_overlay->add_child(vscroll); hscroll = memnew(HScrollBar); hscroll->set_anchors_and_offsets_preset(Control::PRESET_BOTTOM_WIDE); hscroll->set_step(0.001); - hscroll->connect("value_changed", callable_mp(this, &TextureRegionEditor::_scroll_changed)); + hscroll->connect(SceneStringName(value_changed), callable_mp(this, &TextureRegionEditor::_scroll_changed)); texture_overlay->add_child(hscroll); } diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index b307832ff6..99635a2531 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -856,7 +856,7 @@ void ThemeItemImportTree::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { select_icons_warning_icon->set_texture(get_editor_theme_icon(SNAME("StatusWarning"))); - select_icons_warning->add_theme_color_override("font_color", get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); + select_icons_warning->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); import_items_filter->set_right_icon(get_editor_theme_icon(SNAME("Search"))); @@ -911,7 +911,7 @@ ThemeItemImportTree::ThemeItemImportTree() { import_items_filter->set_placeholder(TTR("Filter Items")); import_items_filter->set_clear_button_enabled(true); add_child(import_items_filter); - import_items_filter->connect("text_changed", callable_mp(this, &ThemeItemImportTree::_filter_text_changed)); + import_items_filter->connect(SceneStringName(text_changed), callable_mp(this, &ThemeItemImportTree::_filter_text_changed)); HBoxContainer *import_main_hb = memnew(HBoxContainer); import_main_hb->set_v_size_flags(Control::SIZE_EXPAND_FILL); @@ -1935,7 +1935,7 @@ ThemeItemEditorDialog::ThemeItemEditorDialog(ThemeTypeEditor *p_theme_type_edito edit_type_list->set_columns(1); edit_type_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); edit_dialog_side_vb->add_child(edit_type_list); - edit_type_list->connect("item_selected", callable_mp(this, &ThemeItemEditorDialog::_edited_type_selected)); + edit_type_list->connect(SceneStringName(item_selected), callable_mp(this, &ThemeItemEditorDialog::_edited_type_selected)); edit_type_list->connect("button_clicked", callable_mp(this, &ThemeItemEditorDialog::_edited_type_button_pressed)); Label *edit_add_type_label = memnew(Label); @@ -2068,7 +2068,7 @@ ThemeItemEditorDialog::ThemeItemEditorDialog(ThemeTypeEditor *p_theme_type_edito theme_item_name = memnew(LineEdit); edit_theme_item_vb->add_child(theme_item_name); theme_item_name->connect(SceneStringName(gui_input), callable_mp(this, &ThemeItemEditorDialog::_edit_theme_item_gui_input)); - edit_theme_item_dialog->connect("confirmed", callable_mp(this, &ThemeItemEditorDialog::_confirm_edit_theme_item)); + edit_theme_item_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ThemeItemEditorDialog::_confirm_edit_theme_item)); // Import Items tab. TabContainer *import_tc = memnew(TabContainer); @@ -2120,7 +2120,7 @@ ThemeItemEditorDialog::ThemeItemEditorDialog(ThemeTypeEditor *p_theme_type_edito confirm_closing_dialog = memnew(ConfirmationDialog); confirm_closing_dialog->set_autowrap(true); add_child(confirm_closing_dialog); - confirm_closing_dialog->connect("confirmed", callable_mp(this, &ThemeItemEditorDialog::_close_dialog)); + confirm_closing_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ThemeItemEditorDialog::_close_dialog)); } /////////////////////// @@ -2243,7 +2243,7 @@ ThemeTypeDialog::ThemeTypeDialog() { add_type_filter = memnew(LineEdit); add_type_vb->add_child(add_type_filter); - add_type_filter->connect("text_changed", callable_mp(this, &ThemeTypeDialog::_add_type_filter_cbk)); + add_type_filter->connect(SceneStringName(text_changed), callable_mp(this, &ThemeTypeDialog::_add_type_filter_cbk)); add_type_filter->connect("text_submitted", callable_mp(this, &ThemeTypeDialog::_add_type_dialog_entered)); Label *add_type_options_label = memnew(Label); @@ -2254,13 +2254,13 @@ ThemeTypeDialog::ThemeTypeDialog() { add_type_options->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); add_type_options->set_v_size_flags(Control::SIZE_EXPAND_FILL); add_type_vb->add_child(add_type_options); - add_type_options->connect("item_selected", callable_mp(this, &ThemeTypeDialog::_add_type_options_cbk)); + add_type_options->connect(SceneStringName(item_selected), callable_mp(this, &ThemeTypeDialog::_add_type_options_cbk)); add_type_options->connect("item_activated", callable_mp(this, &ThemeTypeDialog::_add_type_dialog_activated)); add_type_confirmation = memnew(ConfirmationDialog); add_type_confirmation->set_title(TTR("Type name is empty!")); add_type_confirmation->set_text(TTR("Are you sure you want to create an empty type?")); - add_type_confirmation->connect("confirmed", callable_mp(this, &ThemeTypeDialog::_add_type_confirmed)); + add_type_confirmation->connect(SceneStringName(confirmed), callable_mp(this, &ThemeTypeDialog::_add_type_confirmed)); add_child(add_type_confirmation); } @@ -2298,7 +2298,7 @@ VBoxContainer *ThemeTypeEditor::_create_item_list(Theme::DataType p_data_type) { item_add_hb->add_child(item_add_button); item_add_button->connect(SceneStringName(pressed), callable_mp(this, &ThemeTypeEditor::_item_add_cbk).bind(p_data_type, item_add_edit)); item_add_edit->set_meta("button", item_add_button); - item_add_edit->connect("text_changed", callable_mp(this, &ThemeTypeEditor::_update_add_button).bind(item_add_edit)); + item_add_edit->connect(SceneStringName(text_changed), callable_mp(this, &ThemeTypeEditor::_update_add_button).bind(item_add_edit)); return items_list; } @@ -2497,7 +2497,7 @@ HBoxContainer *ThemeTypeEditor::_create_property_control(Theme::DataType p_data_ item_rename_cancel_button->connect(SceneStringName(pressed), callable_mp(this, &ThemeTypeEditor::_item_rename_canceled).bind(p_data_type, p_item_name, item_name_container)); item_rename_cancel_button->hide(); } else { - item_name->add_theme_color_override("font_color", get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); + item_name->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("font_disabled_color"), EditorStringName(Editor))); Button *item_override_button = memnew(Button); item_override_button->set_icon(get_editor_theme_icon(SNAME("Add"))); @@ -2570,7 +2570,7 @@ void ThemeTypeEditor::_update_type_items() { if (E.value) { item_editor->set_value(edited_theme->get_constant(E.key, edited_type)); - item_editor->connect("value_changed", callable_mp(this, &ThemeTypeEditor::_constant_item_changed).bind(E.key)); + item_editor->connect(SceneStringName(value_changed), callable_mp(this, &ThemeTypeEditor::_constant_item_changed).bind(E.key)); } else { item_editor->set_value(ThemeDB::get_singleton()->get_default_theme()->get_constant(E.key, edited_type)); item_editor->set_editable(false); @@ -2641,7 +2641,7 @@ void ThemeTypeEditor::_update_type_items() { if (E.value) { item_editor->set_value(edited_theme->get_font_size(E.key, edited_type)); - item_editor->connect("value_changed", callable_mp(this, &ThemeTypeEditor::_font_size_item_changed).bind(E.key)); + item_editor->connect(SceneStringName(value_changed), callable_mp(this, &ThemeTypeEditor::_font_size_item_changed).bind(E.key)); } else { item_editor->set_value(ThemeDB::get_singleton()->get_default_theme()->get_font_size(E.key, edited_type)); item_editor->set_editable(false); @@ -3441,7 +3441,7 @@ ThemeTypeEditor::ThemeTypeEditor() { theme_type_list->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); theme_type_list->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); type_list_hb->add_child(theme_type_list); - theme_type_list->connect("item_selected", callable_mp(this, &ThemeTypeEditor::_list_type_selected)); + theme_type_list->connect(SceneStringName(item_selected), callable_mp(this, &ThemeTypeEditor::_list_type_selected)); add_type_button = memnew(Button); add_type_button->set_tooltip_text(TTR("Add a type from a list of available types or create a new one.")); @@ -3505,7 +3505,7 @@ ThemeTypeEditor::ThemeTypeEditor() { type_variation_edit = memnew(LineEdit); type_variation_hb->add_child(type_variation_edit); type_variation_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL); - type_variation_edit->connect("text_changed", callable_mp(this, &ThemeTypeEditor::_type_variation_changed)); + type_variation_edit->connect(SceneStringName(text_changed), callable_mp(this, &ThemeTypeEditor::_type_variation_changed)); type_variation_edit->connect(SceneStringName(focus_exited), callable_mp(this, &ThemeTypeEditor::_update_type_items)); type_variation_button = memnew(Button); type_variation_hb->add_child(type_variation_button); diff --git a/editor/plugins/tiles/tile_atlas_view.cpp b/editor/plugins/tiles/tile_atlas_view.cpp index 52b58b74a3..3942baed8a 100644 --- a/editor/plugins/tiles/tile_atlas_view.cpp +++ b/editor/plugins/tiles/tile_atlas_view.cpp @@ -311,6 +311,7 @@ RID TileAtlasView::_get_canvas_item_to_draw(const TileData *p_for_data, const Ca RID ci_rid = RS::get_singleton()->canvas_item_create(); RS::get_singleton()->canvas_item_set_parent(ci_rid, p_base_item->get_canvas_item()); RS::get_singleton()->canvas_item_set_material(ci_rid, mat->get_rid()); + RS::get_singleton()->canvas_item_set_default_texture_filter(ci_rid, RS::CanvasItemTextureFilter(p_base_item->get_texture_filter_in_tree())); p_material_map[mat] = ci_rid; return ci_rid; } diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp index df90383678..e8a7b3b514 100644 --- a/editor/plugins/tiles/tile_data_editors.cpp +++ b/editor/plugins/tiles/tile_data_editors.cpp @@ -138,6 +138,11 @@ 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. + TileData *tile_data = background_atlas_source->get_tile_data(background_atlas_coords, background_alternative_id); + ERR_FAIL_NULL(tile_data); + Rect2 background_region = background_atlas_source->get_tile_texture_region(background_atlas_coords); + // Draw the focus rectangle. if (base_control->has_focus()) { base_control->draw_style_box(focus_stylebox, Rect2(Vector2(), base_control->get_size())); @@ -145,42 +150,49 @@ 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 - tile_data->get_texture_origin(), background_region.size); + base_control->draw_rect(texture_rect, Color(1, 1, 1, 0.3)); // Draw the background. - if (background_texture.is_valid()) { + if (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); + 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()); + 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 +249,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); } } @@ -245,15 +257,15 @@ void GenericTilePolygonEditor::_base_control_draw() { // Draw the text on top of the selected point. if (tinted_polygon_index >= 0) { - Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label")); String text = multiple_polygon_mode ? vformat("%d:%d", tinted_polygon_index, tinted_point_index) : vformat("%d", tinted_point_index); Size2 text_size = font->get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size); base_control->draw_string(font, xform.xform(polygons[tinted_polygon_index][tinted_point_index]) - text_size * 0.5, text, HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1.0, 1.0, 1.0, 0.5)); } 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 +275,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 +735,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 +770,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(); } @@ -944,8 +965,8 @@ GenericTilePolygonEditor::GenericTilePolygonEditor() { base_control->set_clip_contents(true); base_control->set_focus_mode(Control::FOCUS_CLICK); root->add_child(base_control); - snap_subdivision->connect("value_changed", callable_mp((CanvasItem *)base_control, &CanvasItem::queue_redraw).unbind(1)); - snap_subdivision->connect("value_changed", callable_mp(this, &GenericTilePolygonEditor::_store_snap_options).unbind(1)); + snap_subdivision->connect(SceneStringName(value_changed), callable_mp((CanvasItem *)base_control, &CanvasItem::queue_redraw).unbind(1)); + snap_subdivision->connect(SceneStringName(value_changed), callable_mp(this, &GenericTilePolygonEditor::_store_snap_options).unbind(1)); editor_zoom_widget = memnew(EditorZoomWidget); editor_zoom_widget->setup_zoom_limits(0.125, 128.0); @@ -1457,7 +1478,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 +1487,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 +1634,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 +1653,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 +2894,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 +2903,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 6cf0bec535..d3afd25502 100644 --- a/editor/plugins/tiles/tile_map_layer_editor.cpp +++ b/editor/plugins/tiles/tile_map_layer_editor.cpp @@ -242,7 +242,7 @@ void TileMapLayerEditorTilesPlugin::_update_tile_set_sources_list() { } else { sources_list->set_current(0); } - sources_list->emit_signal(SNAME("item_selected"), sources_list->get_current()); + sources_list->emit_signal(SceneStringName(item_selected), sources_list->get_current()); } // Synchronize the lists. @@ -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; } @@ -994,8 +999,8 @@ void TileMapLayerEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p } } - Ref<Font> font = p_overlay->get_theme_font(SNAME("font"), SNAME("Label")); - int font_size = p_overlay->get_theme_font_size(SNAME("font_size"), SNAME("Label")); + Ref<Font> font = p_overlay->get_theme_font(SceneStringName(font), SNAME("Label")); + int font_size = p_overlay->get_theme_font_size(SceneStringName(font_size), SNAME("Label")); Point2 msgpos = Point2(20 * EDSCALE, p_overlay->get_size().y - 20 * EDSCALE); String text = tile_set->local_to_map(edited_layer->get_local_mouse_position()); @@ -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)) { @@ -2339,7 +2344,7 @@ TileMapLayerEditorTilesPlugin::TileMapLayerEditorTilesPlugin() { scatter_spinbox->set_step(0.001); scatter_spinbox->set_tooltip_text(TTR("Modifies the chance of painting nothing instead of a randomly selected tile.")); scatter_spinbox->get_line_edit()->add_theme_constant_override("minimum_character_width", 4); - scatter_spinbox->connect("value_changed", callable_mp(this, &TileMapLayerEditorTilesPlugin::_on_scattering_spinbox_changed)); + scatter_spinbox->connect(SceneStringName(value_changed), callable_mp(this, &TileMapLayerEditorTilesPlugin::_on_scattering_spinbox_changed)); scatter_controls_container->add_child(scatter_spinbox); tools_settings->add_child(scatter_controls_container); @@ -2405,8 +2410,8 @@ TileMapLayerEditorTilesPlugin::TileMapLayerEditorTilesPlugin() { sources_list->set_stretch_ratio(0.25); sources_list->set_custom_minimum_size(Size2(70, 0) * EDSCALE); sources_list->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST); - sources_list->connect("item_selected", callable_mp(this, &TileMapLayerEditorTilesPlugin::_update_source_display).unbind(1)); - sources_list->connect("item_selected", callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::set_sources_lists_current)); + sources_list->connect(SceneStringName(item_selected), callable_mp(this, &TileMapLayerEditorTilesPlugin::_update_source_display).unbind(1)); + sources_list->connect(SceneStringName(item_selected), callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::set_sources_lists_current)); sources_list->connect("item_activated", callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::display_tile_set_editor_panel).unbind(1)); sources_list->connect(SceneStringName(visibility_changed), callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::synchronize_sources_list).bind(sources_list, source_sort_button)); sources_list->add_user_signal(MethodInfo("sort_request")); @@ -2471,7 +2476,7 @@ TileMapLayerEditorTilesPlugin::TileMapLayerEditorTilesPlugin() { patterns_item_list->set_fixed_icon_size(Size2(thumbnail_size, thumbnail_size)); patterns_item_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); patterns_item_list->connect(SceneStringName(gui_input), callable_mp(this, &TileMapLayerEditorTilesPlugin::_patterns_item_list_gui_input)); - patterns_item_list->connect("item_selected", callable_mp(this, &TileMapLayerEditorTilesPlugin::_update_selection_pattern_from_tileset_pattern_selection).unbind(1)); + patterns_item_list->connect(SceneStringName(item_selected), callable_mp(this, &TileMapLayerEditorTilesPlugin::_update_selection_pattern_from_tileset_pattern_selection).unbind(1)); patterns_item_list->connect("item_activated", callable_mp(this, &TileMapLayerEditorTilesPlugin::_update_selection_pattern_from_tileset_pattern_selection).unbind(1)); patterns_item_list->connect("empty_clicked", callable_mp(this, &TileMapLayerEditorTilesPlugin::patterns_item_list_empty_clicked)); patterns_bottom_panel->add_child(patterns_item_list); @@ -3521,7 +3526,7 @@ TileMapLayerEditorTerrainsPlugin::TileMapLayerEditorTerrainsPlugin() { terrains_tree->set_custom_minimum_size(Size2(70, 0) * EDSCALE); terrains_tree->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST); terrains_tree->set_hide_root(true); - terrains_tree->connect("item_selected", callable_mp(this, &TileMapLayerEditorTerrainsPlugin::_update_tiles_list)); + terrains_tree->connect(SceneStringName(item_selected), callable_mp(this, &TileMapLayerEditorTerrainsPlugin::_update_tiles_list)); tilemap_tab_terrains->add_child(terrains_tree); terrains_tile_list = memnew(ItemList); @@ -4333,7 +4338,7 @@ void TileMapLayerEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { } // Draw the IDs for debug. - /*Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label")); + /*Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label")); for (int x = displayed_rect.position.x; x < (displayed_rect.position.x + displayed_rect.size.x); x++) { for (int y = displayed_rect.position.y; y < (displayed_rect.position.y + displayed_rect.size.y); y++) { p_overlay->draw_string(font, xform.xform(tile_set->map_to_local(Vector2(x, y))) + Vector2i(-tile_shape_size.x / 2, 0), vformat("%s", Vector2(x, y))); @@ -4444,7 +4449,7 @@ TileMapLayerEditor::TileMapLayerEditor() { layers_selection_button->set_custom_minimum_size(Size2(200, 0)); layers_selection_button->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); layers_selection_button->set_tooltip_text(TTR("TileMap Layers")); - layers_selection_button->connect("item_selected", callable_mp(this, &TileMapLayerEditor::_layers_selection_item_selected)); + layers_selection_button->connect(SceneStringName(item_selected), callable_mp(this, &TileMapLayerEditor::_layers_selection_item_selected)); layer_selection_hbox->add_child(layers_selection_button); select_previous_layer = memnew(Button); diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index 9774b7dcec..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 --- @@ -929,7 +929,7 @@ void TileSetAtlasSourceEditor::_tile_data_editor_dropdown_button_draw() { if (tile_data_editor_dropdown_button->has_focus()) { clr = get_theme_color(SNAME("font_focus_color")); } else { - clr = get_theme_color(SNAME("font_color")); + clr = get_theme_color(SceneStringName(font_color)); } } } @@ -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: { @@ -2595,7 +2597,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { tile_data_editors_tree->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT); tile_data_editors_tree->set_h_scroll_enabled(false); tile_data_editors_tree->set_v_scroll_enabled(false); - tile_data_editors_tree->connect("item_selected", callable_mp(this, &TileSetAtlasSourceEditor::_tile_data_editors_tree_selected)); + tile_data_editors_tree->connect(SceneStringName(item_selected), callable_mp(this, &TileSetAtlasSourceEditor::_tile_data_editors_tree_selected)); tile_data_editors_popup->add_child(tile_data_editors_tree); tile_data_painting_editor_container = memnew(VBoxContainer); @@ -2733,7 +2735,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { confirm_auto_create_tiles->set_text(TTR("The atlas's texture was modified.\nWould you like to automatically create tiles in the atlas?")); confirm_auto_create_tiles->set_ok_button_text(TTR("Yes")); confirm_auto_create_tiles->add_cancel_button()->set_text(TTR("No")); - confirm_auto_create_tiles->connect("confirmed", callable_mp(this, &TileSetAtlasSourceEditor::_auto_create_tiles)); + confirm_auto_create_tiles->connect(SceneStringName(confirmed), callable_mp(this, &TileSetAtlasSourceEditor::_auto_create_tiles)); confirm_auto_create_tiles->connect("canceled", callable_mp(this, &TileSetAtlasSourceEditor::_cancel_auto_create_tiles)); add_child(confirm_auto_create_tiles); @@ -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/tiles/tile_set_editor.cpp b/editor/plugins/tiles/tile_set_editor.cpp index a20bd51328..263e9cfa3b 100644 --- a/editor/plugins/tiles/tile_set_editor.cpp +++ b/editor/plugins/tiles/tile_set_editor.cpp @@ -218,7 +218,7 @@ void TileSetEditor::_update_sources_list(int force_selected_id) { sources_list->set_current(i); sources_list->ensure_current_is_visible(); if (old_selected != to_select) { - sources_list->emit_signal(SNAME("item_selected"), sources_list->get_current()); + sources_list->emit_signal(SceneStringName(item_selected), sources_list->get_current()); } break; } @@ -229,7 +229,7 @@ void TileSetEditor::_update_sources_list(int force_selected_id) { if (sources_list->get_current() < 0 && sources_list->get_item_count() > 0) { sources_list->set_current(0); if (old_selected != int(sources_list->get_item_metadata(0))) { - sources_list->emit_signal(SNAME("item_selected"), sources_list->get_current()); + sources_list->emit_signal(SceneStringName(item_selected), sources_list->get_current()); } } @@ -861,8 +861,8 @@ TileSetEditor::TileSetEditor() { sources_list->set_fixed_icon_size(Size2(60, 60) * EDSCALE); sources_list->set_h_size_flags(SIZE_EXPAND_FILL); sources_list->set_v_size_flags(SIZE_EXPAND_FILL); - sources_list->connect("item_selected", callable_mp(this, &TileSetEditor::_source_selected)); - sources_list->connect("item_selected", callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::set_sources_lists_current)); + sources_list->connect(SceneStringName(item_selected), callable_mp(this, &TileSetEditor::_source_selected)); + sources_list->connect(SceneStringName(item_selected), callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::set_sources_lists_current)); sources_list->connect(SceneStringName(visibility_changed), callable_mp(TilesEditorUtils::get_singleton(), &TilesEditorUtils::synchronize_sources_list).bind(sources_list, source_sort_button)); sources_list->add_user_signal(MethodInfo("sort_request")); sources_list->connect("sort_request", callable_mp(this, &TileSetEditor::_update_sources_list).bind(-1)); @@ -983,7 +983,7 @@ void TileSourceInspectorPlugin::_show_id_edit_dialog(Object *p_for_source) { vbox->add_child(id_input); id_input->set_max(INT_MAX); - id_edit_dialog->connect("confirmed", callable_mp(this, &TileSourceInspectorPlugin::_confirm_change_id)); + id_edit_dialog->connect(SceneStringName(confirmed), callable_mp(this, &TileSourceInspectorPlugin::_confirm_change_id)); } edited_source = p_for_source; id_input->set_value(p_for_source->get("id")); diff --git a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp index 88c117272c..22ef779b8d 100644 --- a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp +++ b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp @@ -562,8 +562,8 @@ TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() { scene_tiles_list->set_h_size_flags(SIZE_EXPAND_FILL); scene_tiles_list->set_v_size_flags(SIZE_EXPAND_FILL); SET_DRAG_FORWARDING_CDU(scene_tiles_list, TileSetScenesCollectionSourceEditor); - scene_tiles_list->connect("item_selected", callable_mp(this, &TileSetScenesCollectionSourceEditor::_update_tile_inspector).unbind(1)); - scene_tiles_list->connect("item_selected", callable_mp(this, &TileSetScenesCollectionSourceEditor::_update_action_buttons).unbind(1)); + scene_tiles_list->connect(SceneStringName(item_selected), callable_mp(this, &TileSetScenesCollectionSourceEditor::_update_tile_inspector).unbind(1)); + scene_tiles_list->connect(SceneStringName(item_selected), callable_mp(this, &TileSetScenesCollectionSourceEditor::_update_action_buttons).unbind(1)); scene_tiles_list->connect("item_activated", callable_mp(this, &TileSetScenesCollectionSourceEditor::_scenes_list_item_activated)); scene_tiles_list->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST); right_vbox_container->add_child(scene_tiles_list); diff --git a/editor/plugins/tiles/tiles_editor_plugin.cpp b/editor/plugins/tiles/tiles_editor_plugin.cpp index f1cc69ce18..3213c290fd 100644 --- a/editor/plugins/tiles/tiles_editor_plugin.cpp +++ b/editor/plugins/tiles/tiles_editor_plugin.cpp @@ -183,7 +183,7 @@ void TilesEditorUtils::synchronize_sources_list(Object *p_current_list, Object * } else { item_list->set_current(atlas_sources_lists_current); item_list->ensure_current_is_visible(); - item_list->emit_signal(SNAME("item_selected"), atlas_sources_lists_current); + item_list->emit_signal(SceneStringName(item_selected), atlas_sources_lists_current); } } } diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp index 1e88916672..071be13692 100644 --- a/editor/plugins/version_control_editor_plugin.cpp +++ b/editor/plugins/version_control_editor_plugin.cpp @@ -176,7 +176,7 @@ void VersionControlEditorPlugin::_update_set_up_warning(const String &p_new_text set_up_ssh_passphrase->get_text().is_empty(); if (empty_settings) { - set_up_warning_text->add_theme_color_override(SNAME("font_color"), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor))); + set_up_warning_text->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor))); set_up_warning_text->set_text(TTR("Remote settings are empty. VCS features that use the network may not work.")); } else { set_up_warning_text->set_text(""); @@ -680,7 +680,7 @@ void VersionControlEditorPlugin::_display_diff_split_view(List<EditorVCSInterfac bool has_change = diff_line.status != " "; static const Color red = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor)); static const Color green = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("success_color"), EditorStringName(Editor)); - static const Color white = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("font_color"), SNAME("Label")) * Color(1, 1, 1, 0.6); + static const Color white = EditorNode::get_singleton()->get_editor_theme()->get_color(SceneStringName(font_color), SNAME("Label")) * Color(1, 1, 1, 0.6); if (diff_line.old_line_no >= 0) { diff->push_cell(); @@ -763,7 +763,7 @@ void VersionControlEditorPlugin::_display_diff_unified_view(List<EditorVCSInterf } else if (diff_line.status == "-") { color = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor)); } else { - color = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("font_color"), SNAME("Label")); + color = EditorNode::get_singleton()->get_editor_theme()->get_color(SceneStringName(font_color), SNAME("Label")); color *= Color(1, 1, 1, 0.6); } @@ -1033,7 +1033,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_username = memnew(LineEdit); set_up_username->set_h_size_flags(Control::SIZE_EXPAND_FILL); set_up_username->set_text(EDITOR_DEF("version_control/username", "")); - set_up_username->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); + set_up_username->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); set_up_username_input->add_child(set_up_username); HBoxContainer *set_up_password_input = memnew(HBoxContainer); @@ -1048,7 +1048,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_password = memnew(LineEdit); set_up_password->set_h_size_flags(Control::SIZE_EXPAND_FILL); set_up_password->set_secret(true); - set_up_password->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); + set_up_password->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); set_up_password_input->add_child(set_up_password); const String home_dir = OS::get_singleton()->has_environment("HOME") ? OS::get_singleton()->get_environment("HOME") : OS::get_singleton()->get_system_dir(OS::SYSTEM_DIR_DOCUMENTS); @@ -1069,7 +1069,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_ssh_public_key_path = memnew(LineEdit); set_up_ssh_public_key_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); set_up_ssh_public_key_path->set_text(EDITOR_DEF("version_control/ssh_public_key_path", "")); - set_up_ssh_public_key_path->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); + set_up_ssh_public_key_path->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); set_up_ssh_public_key_input_hbc->add_child(set_up_ssh_public_key_path); set_up_ssh_public_key_file_dialog = memnew(FileDialog); @@ -1102,7 +1102,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_ssh_private_key_path = memnew(LineEdit); set_up_ssh_private_key_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); set_up_ssh_private_key_path->set_text(EDITOR_DEF("version_control/ssh_private_key_path", "")); - set_up_ssh_private_key_path->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); + set_up_ssh_private_key_path->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); set_up_ssh_private_key_input_hbc->add_child(set_up_ssh_private_key_path); set_up_ssh_private_key_file_dialog = memnew(FileDialog); @@ -1131,7 +1131,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_ssh_passphrase = memnew(LineEdit); set_up_ssh_passphrase->set_h_size_flags(Control::SIZE_EXPAND_FILL); set_up_ssh_passphrase->set_secret(true); - set_up_ssh_passphrase->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); + set_up_ssh_passphrase->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_set_up_warning)); set_up_ssh_passphrase_input->add_child(set_up_ssh_passphrase); set_up_warning_text = memnew(Label); @@ -1194,7 +1194,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { unstaged_files->set_h_size_flags(Tree::SIZE_EXPAND_FILL); unstaged_files->set_v_size_flags(Tree::SIZE_EXPAND_FILL); unstaged_files->set_select_mode(Tree::SELECT_ROW); - unstaged_files->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(unstaged_files)); + unstaged_files->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(unstaged_files)); unstaged_files->connect(SNAME("item_activated"), callable_mp(this, &VersionControlEditorPlugin::_item_activated).bind(unstaged_files)); unstaged_files->connect(SNAME("button_clicked"), callable_mp(this, &VersionControlEditorPlugin::_cell_button_pressed)); unstaged_files->create_item(); @@ -1224,7 +1224,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { staged_files->set_h_size_flags(Tree::SIZE_EXPAND_FILL); staged_files->set_v_size_flags(Tree::SIZE_EXPAND_FILL); staged_files->set_select_mode(Tree::SELECT_ROW); - staged_files->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(staged_files)); + staged_files->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(staged_files)); staged_files->connect(SNAME("button_clicked"), callable_mp(this, &VersionControlEditorPlugin::_cell_button_pressed)); staged_files->connect(SNAME("item_activated"), callable_mp(this, &VersionControlEditorPlugin::_item_activated).bind(staged_files)); staged_files->create_item(); @@ -1251,7 +1251,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_message->set_v_grow_direction(Control::GrowDirection::GROW_DIRECTION_END); commit_message->set_custom_minimum_size(Size2(200, 100)); commit_message->set_line_wrapping_mode(TextEdit::LINE_WRAPPING_BOUNDARY); - commit_message->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_commit_button)); + commit_message->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_commit_button)); commit_message->connect(SceneStringName(gui_input), callable_mp(this, &VersionControlEditorPlugin::_commit_message_gui_input)); commit_area->add_child(commit_message); @@ -1281,7 +1281,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_list_size_button->set_item_metadata(1, 20); commit_list_size_button->add_item("30"); commit_list_size_button->set_item_metadata(2, 30); - commit_list_size_button->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_set_commit_list_size)); + commit_list_size_button->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_set_commit_list_size)); commit_list_hbc->add_child(commit_list_size_button); commit_list = memnew(Tree); @@ -1294,7 +1294,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { commit_list->set_columns(2); // Commit msg, author commit_list->set_column_custom_minimum_width(0, 40); commit_list->set_column_custom_minimum_width(1, 20); - commit_list->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(commit_list)); + commit_list->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_load_diff).bind(commit_list)); version_commit_dock->add_child(commit_list); version_commit_dock->add_child(memnew(HSeparator)); @@ -1307,7 +1307,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { branch_select = memnew(OptionButton); branch_select->set_tooltip_text(TTR("Branches")); branch_select->set_h_size_flags(Control::SIZE_EXPAND_FILL); - branch_select->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_branch_item_selected)); + branch_select->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_branch_item_selected)); branch_select->connect(SceneStringName(pressed), callable_mp(this, &VersionControlEditorPlugin::_refresh_branch_list)); menu_bar->add_child(branch_select); @@ -1346,13 +1346,13 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { branch_create_name_input = memnew(LineEdit); branch_create_name_input->set_h_size_flags(Control::SIZE_EXPAND_FILL); - branch_create_name_input->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_branch_create_button)); + branch_create_name_input->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_branch_create_button)); branch_create_hbc->add_child(branch_create_name_input); remote_select = memnew(OptionButton); remote_select->set_tooltip_text(TTR("Remotes")); remote_select->set_h_size_flags(Control::SIZE_EXPAND_FILL); - remote_select->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_remote_selected)); + remote_select->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_remote_selected)); remote_select->connect(SceneStringName(pressed), callable_mp(this, &VersionControlEditorPlugin::_refresh_remote_list)); menu_bar->add_child(remote_select); @@ -1391,7 +1391,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { remote_create_name_input = memnew(LineEdit); remote_create_name_input->set_h_size_flags(Control::SIZE_EXPAND_FILL); - remote_create_name_input->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_remote_create_button)); + remote_create_name_input->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_remote_create_button)); remote_create_name_hbc->add_child(remote_create_name_input); HBoxContainer *remote_create_hbc = memnew(HBoxContainer); @@ -1405,7 +1405,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { remote_create_url_input = memnew(LineEdit); remote_create_url_input->set_h_size_flags(Control::SIZE_EXPAND_FILL); - remote_create_url_input->connect(SNAME("text_changed"), callable_mp(this, &VersionControlEditorPlugin::_update_remote_create_button)); + remote_create_url_input->connect(SceneStringName(text_changed), callable_mp(this, &VersionControlEditorPlugin::_update_remote_create_button)); remote_create_hbc->add_child(remote_create_url_input); fetch_button = memnew(Button); @@ -1461,7 +1461,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { change_type_to_color[EditorVCSInterface::CHANGE_TYPE_MODIFIED] = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor)); change_type_to_color[EditorVCSInterface::CHANGE_TYPE_RENAMED] = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor)); change_type_to_color[EditorVCSInterface::CHANGE_TYPE_DELETED] = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor)); - change_type_to_color[EditorVCSInterface::CHANGE_TYPE_TYPECHANGE] = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("font_color"), EditorStringName(Editor)); + change_type_to_color[EditorVCSInterface::CHANGE_TYPE_TYPECHANGE] = EditorNode::get_singleton()->get_editor_theme()->get_color(SceneStringName(font_color), EditorStringName(Editor)); change_type_to_color[EditorVCSInterface::CHANGE_TYPE_UNMERGED] = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("warning_color"), EditorStringName(Editor)); change_type_to_icon[EditorVCSInterface::CHANGE_TYPE_NEW] = EditorNode::get_singleton()->get_editor_theme()->get_icon(SNAME("StatusSuccess"), EditorStringName(EditorIcons)); @@ -1492,7 +1492,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { diff_view_type_select = memnew(OptionButton); diff_view_type_select->add_item(TTR("Split"), DIFF_VIEW_TYPE_SPLIT); diff_view_type_select->add_item(TTR("Unified"), DIFF_VIEW_TYPE_UNIFIED); - diff_view_type_select->connect(SNAME("item_selected"), callable_mp(this, &VersionControlEditorPlugin::_display_diff)); + diff_view_type_select->connect(SceneStringName(item_selected), callable_mp(this, &VersionControlEditorPlugin::_display_diff)); diff_heading->add_child(diff_view_type_select); diff = memnew(RichTextLabel); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 290e0a3239..607c446e1b 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -567,10 +567,10 @@ void VisualShaderGraphPlugin::update_theme() { Ref<Font> label_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_msdf", EditorStringName(EditorFonts)); Ref<Font> label_bold_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_bold_msdf", EditorStringName(EditorFonts)); - vs_msdf_fonts_theme->set_font("font", "Label", label_font); - vs_msdf_fonts_theme->set_font("font", "GraphNodeTitleLabel", label_bold_font); - vs_msdf_fonts_theme->set_font("font", "LineEdit", label_font); - vs_msdf_fonts_theme->set_font("font", "Button", label_font); + vs_msdf_fonts_theme->set_font(SceneStringName(font), "Label", label_font); + vs_msdf_fonts_theme->set_font(SceneStringName(font), "GraphNodeTitleLabel", label_bold_font); + vs_msdf_fonts_theme->set_font(SceneStringName(font), "LineEdit", label_font); + vs_msdf_fonts_theme->set_font(SceneStringName(font), "Button", label_font); } bool VisualShaderGraphPlugin::is_node_has_parameter_instances_relatively(VisualShader::Type p_type, int p_node) const { @@ -806,6 +806,11 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool parameter_ref->update_parameter_type(); } + Ref<VisualShaderNodeVarying> varying = vsnode; + if (varying.is_valid()) { + varying->set_shader_rid(visual_shader->get_rid()); + } + Ref<VisualShaderNodeParameter> parameter = vsnode; HBoxContainer *hb = nullptr; @@ -871,7 +876,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool OptionButton *op = memnew(OptionButton); hbox->add_child(op); op->set_h_size_flags(Control::SIZE_EXPAND_FILL); - op->connect("item_selected", callable_mp(editor, &VisualShaderEditor::_set_custom_node_option).bind(p_id, i), CONNECT_DEFERRED); + op->connect(SceneStringName(item_selected), callable_mp(editor, &VisualShaderEditor::_set_custom_node_option).bind(p_id, i), CONNECT_DEFERRED); for (const String &s : dp.options) { op->add_item(s); @@ -1119,7 +1124,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool type_box->add_item(TTR("Sampler")); type_box->select(group_node->get_input_port_type(j)); type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - type_box->connect("item_selected", callable_mp(editor, &VisualShaderEditor::_change_input_port_type).bind(p_id, j), CONNECT_DEFERRED); + type_box->connect(SceneStringName(item_selected), callable_mp(editor, &VisualShaderEditor::_change_input_port_type).bind(p_id, j), CONNECT_DEFERRED); LineEdit *name_box = memnew(LineEdit); hb->add_child(name_box); @@ -1144,7 +1149,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool if (vsnode->is_input_port_default(j, mode) && !port_left_used) { Label *hint_label = memnew(Label); hint_label->set_text(TTR("[default]")); - hint_label->add_theme_color_override("font_color", editor->get_theme_color(SNAME("font_readonly_color"), SNAME("TextEdit"))); + hint_label->add_theme_color_override(SceneStringName(font_color), editor->get_theme_color(SNAME("font_readonly_color"), SNAME("TextEdit"))); hint_label->add_theme_style_override(CoreStringName(normal), editor->get_theme_stylebox(SNAME("label_style"), SNAME("VShaderEditor"))); hb->add_child(hint_label); } @@ -1183,7 +1188,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool type_box->add_item(TTR("Transform")); type_box->select(group_node->get_output_port_type(i)); type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); - type_box->connect("item_selected", callable_mp(editor, &VisualShaderEditor::_change_output_port_type).bind(p_id, i), CONNECT_DEFERRED); + type_box->connect(SceneStringName(item_selected), callable_mp(editor, &VisualShaderEditor::_change_output_port_type).bind(p_id, i), CONNECT_DEFERRED); } else { Label *label = memnew(Label); label->set_auto_translate_mode(Node::AUTO_TRANSLATE_MODE_DISABLED); // TODO: Implement proper translation switch. @@ -1352,7 +1357,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool } if (!error.is_empty()) { Label *error_label = memnew(Label); - error_label->add_theme_color_override("font_color", editor->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + error_label->add_theme_color_override(SceneStringName(font_color), editor->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); error_label->set_text(error); error_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD); node->add_child(error_label); @@ -1389,9 +1394,9 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool } expression_box->begin_bulk_theme_override(); - expression_box->add_theme_font_override("font", editor->get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); - expression_box->add_theme_font_size_override("font_size", editor->get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); - expression_box->add_theme_color_override("font_color", text_color); + expression_box->add_theme_font_override(SceneStringName(font), editor->get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); + expression_box->add_theme_font_size_override(SceneStringName(font_size), editor->get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); + expression_box->add_theme_color_override(SceneStringName(font_color), text_color); expression_box->end_bulk_theme_override(); expression_syntax_highlighter->set_number_color(number_color); @@ -1540,6 +1545,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; @@ -3638,12 +3649,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); } } @@ -3743,16 +3757,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)); } } @@ -3859,13 +3876,13 @@ void VisualShaderEditor::_remove_varying(const String &p_name) { } void VisualShaderEditor::_update_varyings() { - VisualShaderNodeVarying::clear_varyings(); + VisualShaderNodeVarying::clear_varyings(visual_shader->get_rid()); for (int i = 0; i < visual_shader->get_varyings_count(); i++) { const VisualShader::Varying *var = visual_shader->get_varying_by_index(i); if (var != nullptr) { - VisualShaderNodeVarying::add_varying(var->name, var->mode, var->type); + VisualShaderNodeVarying::add_varying(visual_shader->get_rid(), var->name, var->mode, var->type); } } } @@ -4901,7 +4918,7 @@ void VisualShaderEditor::_notification(int p_what) { Color error_color = get_theme_color(SNAME("error_color"), EditorStringName(Editor)); preview_text->add_theme_color_override("background_color", background_color); - varying_error_label->add_theme_color_override("font_color", error_color); + varying_error_label->add_theme_color_override(SceneStringName(font_color), error_color); for (const String &E : keyword_list) { if (ShaderLanguage::is_control_flow_keyword(E)) { @@ -4912,9 +4929,9 @@ void VisualShaderEditor::_notification(int p_what) { } preview_text->begin_bulk_theme_override(); - preview_text->add_theme_font_override("font", get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); - preview_text->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); - preview_text->add_theme_color_override("font_color", text_color); + preview_text->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("expression"), EditorStringName(EditorFonts))); + preview_text->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("expression_size"), EditorStringName(EditorFonts))); + preview_text->add_theme_color_override(SceneStringName(font_color), text_color); preview_text->end_bulk_theme_override(); syntax_highlighter->set_number_color(number_color); @@ -4931,9 +4948,9 @@ void VisualShaderEditor::_notification(int p_what) { error_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Panel"))); error_label->begin_bulk_theme_override(); - error_label->add_theme_font_override("font", get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); - error_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); - error_label->add_theme_color_override("font_color", error_color); + error_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("status_source"), EditorStringName(EditorFonts))); + error_label->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("status_source_size"), EditorStringName(EditorFonts))); + error_label->add_theme_color_override(SceneStringName(font_color), error_color); error_label->end_bulk_theme_override(); } @@ -6145,24 +6162,24 @@ VisualShaderEditor::VisualShaderEditor() { edit_type_standard->add_item(TTR("Fragment")); edit_type_standard->add_item(TTR("Light")); edit_type_standard->select(1); - edit_type_standard->connect("item_selected", callable_mp(this, &VisualShaderEditor::_mode_selected)); + edit_type_standard->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_mode_selected)); edit_type_particles = memnew(OptionButton); edit_type_particles->add_item(TTR("Start")); edit_type_particles->add_item(TTR("Process")); edit_type_particles->add_item(TTR("Collide")); edit_type_particles->select(0); - edit_type_particles->connect("item_selected", callable_mp(this, &VisualShaderEditor::_mode_selected)); + edit_type_particles->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_mode_selected)); edit_type_sky = memnew(OptionButton); edit_type_sky->add_item(TTR("Sky")); edit_type_sky->select(0); - edit_type_sky->connect("item_selected", callable_mp(this, &VisualShaderEditor::_mode_selected)); + edit_type_sky->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_mode_selected)); edit_type_fog = memnew(OptionButton); edit_type_fog->add_item(TTR("Fog")); edit_type_fog->select(0); - edit_type_fog->connect("item_selected", callable_mp(this, &VisualShaderEditor::_mode_selected)); + edit_type_fog->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_mode_selected)); edit_type = edit_type_standard; @@ -6272,7 +6289,7 @@ VisualShaderEditor::VisualShaderEditor() { node_filter = memnew(LineEdit); filter_hb->add_child(node_filter); - node_filter->connect("text_changed", callable_mp(this, &VisualShaderEditor::_member_filter_changed)); + node_filter->connect(SceneStringName(text_changed), callable_mp(this, &VisualShaderEditor::_member_filter_changed)); node_filter->connect(SceneStringName(gui_input), callable_mp(this, &VisualShaderEditor::_sbox_input)); node_filter->set_h_size_flags(SIZE_EXPAND_FILL); node_filter->set_placeholder(TTR("Search")); @@ -6295,7 +6312,7 @@ VisualShaderEditor::VisualShaderEditor() { members->set_hide_folding(false); members->set_custom_minimum_size(Size2(180 * EDSCALE, 200 * EDSCALE)); members->connect("item_activated", callable_mp(this, &VisualShaderEditor::_member_create)); - members->connect("item_selected", callable_mp(this, &VisualShaderEditor::_member_selected)); + members->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_member_selected)); members->connect("nothing_selected", callable_mp(this, &VisualShaderEditor::_member_unselected)); HBoxContainer *desc_hbox = memnew(HBoxContainer); @@ -6362,7 +6379,7 @@ VisualShaderEditor::VisualShaderEditor() { hb->add_child(varying_name); varying_name->set_custom_minimum_size(Size2(150 * EDSCALE, 0)); varying_name->set_h_size_flags(SIZE_EXPAND_FILL); - varying_name->connect("text_changed", callable_mp(this, &VisualShaderEditor::_varying_name_changed)); + varying_name->connect(SceneStringName(text_changed), callable_mp(this, &VisualShaderEditor::_varying_name_changed)); varying_mode = memnew(OptionButton); hb->add_child(varying_mode); @@ -6398,7 +6415,7 @@ VisualShaderEditor::VisualShaderEditor() { varyings->set_hide_folding(false); varyings->set_custom_minimum_size(Size2(180 * EDSCALE, 200 * EDSCALE)); varyings->connect("item_activated", callable_mp(this, &VisualShaderEditor::_varying_deleted)); - varyings->connect("item_selected", callable_mp(this, &VisualShaderEditor::_varying_selected)); + varyings->connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderEditor::_varying_selected)); varyings->connect("nothing_selected", callable_mp(this, &VisualShaderEditor::_varying_unselected)); } @@ -6413,7 +6430,7 @@ VisualShaderEditor::VisualShaderEditor() { frame_title_change_edit = memnew(LineEdit); frame_title_change_edit->set_expand_to_text_length_enabled(true); frame_title_change_edit->set_select_all_on_focus(true); - frame_title_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_frame_title_text_changed)); + frame_title_change_edit->connect(SceneStringName(text_changed), callable_mp(this, &VisualShaderEditor::_frame_title_text_changed)); frame_title_change_edit->connect("text_submitted", callable_mp(this, &VisualShaderEditor::_frame_title_text_submitted)); frame_title_change_popup->add_child(frame_title_change_edit); frame_title_change_edit->reset_size(); @@ -7128,7 +7145,7 @@ public: void _notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - connect("item_selected", callable_mp(this, &VisualShaderNodePluginInputEditor::_item_selected)); + connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderNodePluginInputEditor::_item_selected)); } break; } } @@ -7178,7 +7195,7 @@ class VisualShaderNodePluginVaryingEditor : public OptionButton { public: void _notification(int p_what) { if (p_what == NOTIFICATION_READY) { - connect("item_selected", callable_mp(this, &VisualShaderNodePluginVaryingEditor::_item_selected)); + connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderNodePluginVaryingEditor::_item_selected)); } } @@ -7257,7 +7274,7 @@ public: void _notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: { - connect("item_selected", callable_mp(this, &VisualShaderNodePluginParameterRefEditor::_item_selected)); + connect(SceneStringName(item_selected), callable_mp(this, &VisualShaderNodePluginParameterRefEditor::_item_selected)); } break; } } @@ -7643,7 +7660,7 @@ EditorPropertyVisualShaderMode::EditorPropertyVisualShaderMode() { options->set_clip_text(true); add_child(options); add_focusable(options); - options->connect("item_selected", callable_mp(this, &EditorPropertyVisualShaderMode::_option_selected)); + options->connect(SceneStringName(item_selected), callable_mp(this, &EditorPropertyVisualShaderMode::_option_selected)); } bool EditorInspectorVisualShaderModePlugin::can_handle(Object *p_object) { 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 79066608f9..52d7b14b65 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -230,15 +230,15 @@ void ProjectManager::_update_theme(bool p_skip_creation) { // Project list. { - loading_label->add_theme_font_override("font", get_theme_font(SNAME("bold"), EditorStringName(EditorFonts))); + loading_label->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("bold"), EditorStringName(EditorFonts))); project_list_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SNAME("project_list"), SNAME("ProjectManager"))); empty_list_create_project->set_icon(get_editor_theme_icon(SNAME("Add"))); empty_list_import_project->set_icon(get_editor_theme_icon(SNAME("Load"))); empty_list_open_assetlib->set_icon(get_editor_theme_icon(SNAME("AssetLib"))); - empty_list_online_warning->add_theme_font_override("font", get_theme_font(SNAME("italic"), EditorStringName(EditorFonts))); - empty_list_online_warning->add_theme_color_override("font_color", get_theme_color(SNAME("font_placeholder_color"), EditorStringName(Editor))); + empty_list_online_warning->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("italic"), EditorStringName(EditorFonts))); + empty_list_online_warning->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("font_placeholder_color"), EditorStringName(Editor))); // Top bar. search_box->set_right_icon(get_editor_theme_icon(SNAME("Search"))); @@ -256,8 +256,8 @@ void ProjectManager::_update_theme(bool p_skip_creation) { erase_missing_btn->set_icon(get_editor_theme_icon(SNAME("Clear"))); create_tag_btn->set_icon(get_editor_theme_icon("Add")); - tag_error->add_theme_color_override("font_color", get_theme_color("error_color", EditorStringName(Editor))); - tag_edit_error->add_theme_color_override("font_color", get_theme_color("error_color", EditorStringName(Editor))); + tag_error->add_theme_color_override(SceneStringName(font_color), get_theme_color("error_color", EditorStringName(Editor))); + tag_edit_error->add_theme_color_override(SceneStringName(font_color), get_theme_color("error_color", EditorStringName(Editor))); create_btn->add_theme_constant_override("h_separation", get_theme_constant(SNAME("sidebar_button_icon_separation"), SNAME("ProjectManager"))); import_btn->add_theme_constant_override("h_separation", get_theme_constant(SNAME("sidebar_button_icon_separation"), SNAME("ProjectManager"))); @@ -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() { @@ -1240,7 +1240,7 @@ ProjectManager::ProjectManager() { search_box->set_placeholder(TTR("Filter Projects")); search_box->set_tooltip_text(TTR("This field filters projects by name and last path component.\nTo filter projects by name and full path, the query must contain at least one `/` character.")); search_box->set_clear_button_enabled(true); - search_box->connect("text_changed", callable_mp(this, &ProjectManager::_on_search_term_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &ProjectManager::_on_search_term_changed)); search_box->connect("text_submitted", callable_mp(this, &ProjectManager::_on_search_term_submitted)); search_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); hb->add_child(search_box); @@ -1253,7 +1253,7 @@ ProjectManager::ProjectManager() { filter_option->set_clip_text(true); filter_option->set_h_size_flags(Control::SIZE_EXPAND_FILL); filter_option->set_stretch_ratio(0.3); - filter_option->connect("item_selected", callable_mp(this, &ProjectManager::_on_order_option_changed)); + filter_option->connect(SceneStringName(item_selected), callable_mp(this, &ProjectManager::_on_order_option_changed)); hb->add_child(filter_option); Vector<String> sort_filter_titles; @@ -1486,7 +1486,7 @@ ProjectManager::ProjectManager() { ask_full_convert_dialog = memnew(ConfirmationDialog); ask_full_convert_dialog->set_autowrap(true); ask_full_convert_dialog->set_text(TTR("This option will perform full project conversion, updating scenes, resources and scripts from Godot 3 to work in Godot 4.\n\nNote that this is a best-effort conversion, i.e. it makes upgrading the project easier, but it will not open out-of-the-box and will still require manual adjustments.\n\nIMPORTANT: Make sure to backup your project before converting, as this operation makes it impossible to open it in older versions of Godot.")); - ask_full_convert_dialog->connect("confirmed", callable_mp(this, &ProjectManager::_perform_full_project_conversion)); + ask_full_convert_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ProjectManager::_perform_full_project_conversion)); add_child(ask_full_convert_dialog); project_dialog = memnew(ProjectDialog); @@ -1558,7 +1558,7 @@ ProjectManager::ProjectManager() { new_tag_name = memnew(LineEdit); tag_vb->add_child(new_tag_name); - new_tag_name->connect("text_changed", callable_mp(this, &ProjectManager::_set_new_tag_name)); + new_tag_name->connect(SceneStringName(text_changed), callable_mp(this, &ProjectManager::_set_new_tag_name)); new_tag_name->connect("text_submitted", callable_mp(this, &ProjectManager::_create_new_tag).unbind(1)); create_tag_dialog->connect("about_to_popup", callable_mp(new_tag_name, &LineEdit::clear)); create_tag_dialog->connect("about_to_popup", callable_mp((Control *)new_tag_name, &Control::grab_focus), CONNECT_DEFERRED); diff --git a/editor/project_manager/project_dialog.cpp b/editor/project_manager/project_dialog.cpp index 99aa83a09c..262a1ecc1a 100644 --- a/editor/project_manager/project_dialog.cpp +++ b/editor/project_manager/project_dialog.cpp @@ -54,15 +54,15 @@ void ProjectDialog::_set_message(const String &p_msg, MessageType p_type, InputT Ref<Texture2D> new_icon; switch (p_type) { case MESSAGE_ERROR: { - msg->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + msg->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("error_color"), EditorStringName(Editor))); new_icon = get_editor_theme_icon(SNAME("StatusError")); } break; case MESSAGE_WARNING: { - msg->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + msg->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); new_icon = get_editor_theme_icon(SNAME("StatusWarning")); } break; case MESSAGE_SUCCESS: { - msg->add_theme_color_override("font_color", get_theme_color(SNAME("success_color"), EditorStringName(Editor))); + msg->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("success_color"), EditorStringName(Editor))); new_icon = get_editor_theme_icon(SNAME("StatusSuccess")); } break; } @@ -975,9 +975,9 @@ ProjectDialog::ProjectDialog() { add_child(fdialog_project); add_child(fdialog_install); - project_name->connect("text_changed", callable_mp(this, &ProjectDialog::_project_name_changed).unbind(1)); - project_path->connect("text_changed", callable_mp(this, &ProjectDialog::_project_path_changed).unbind(1)); - install_path->connect("text_changed", callable_mp(this, &ProjectDialog::_install_path_changed).unbind(1)); + project_name->connect(SceneStringName(text_changed), callable_mp(this, &ProjectDialog::_project_name_changed).unbind(1)); + project_path->connect(SceneStringName(text_changed), callable_mp(this, &ProjectDialog::_project_path_changed).unbind(1)); + install_path->connect(SceneStringName(text_changed), callable_mp(this, &ProjectDialog::_install_path_changed).unbind(1)); fdialog_project->connect("dir_selected", callable_mp(this, &ProjectDialog::_project_path_selected)); fdialog_project->connect("file_selected", callable_mp(this, &ProjectDialog::_project_path_selected)); fdialog_install->connect("dir_selected", callable_mp(this, &ProjectDialog::_install_path_selected)); diff --git a/editor/project_manager/project_list.cpp b/editor/project_manager/project_list.cpp index 0480be508a..092a6a1a18 100644 --- a/editor/project_manager/project_list.cpp +++ b/editor/project_manager/project_list.cpp @@ -57,12 +57,12 @@ void ProjectListItemControl::_notification(int p_what) { } project_title->begin_bulk_theme_override(); - project_title->add_theme_font_override("font", get_theme_font(SNAME("title"), EditorStringName(EditorFonts))); - project_title->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("title_size"), EditorStringName(EditorFonts))); - project_title->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), SNAME("Tree"))); + project_title->add_theme_font_override(SceneStringName(font), get_theme_font(SNAME("title"), EditorStringName(EditorFonts))); + project_title->add_theme_font_size_override(SceneStringName(font_size), get_theme_font_size(SNAME("title_size"), EditorStringName(EditorFonts))); + project_title->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), SNAME("Tree"))); project_title->end_bulk_theme_override(); - project_path->add_theme_color_override("font_color", get_theme_color(SNAME("font_color"), SNAME("Tree"))); + project_path->add_theme_color_override(SceneStringName(font_color), get_theme_color(SceneStringName(font_color), SNAME("Tree"))); project_unsupported_features->set_texture(get_editor_theme_icon(SNAME("NodeWarning"))); favorite_button->set_texture_normal(get_editor_theme_icon(SNAME("Favorites"))); diff --git a/editor/project_manager/quick_settings_dialog.cpp b/editor/project_manager/quick_settings_dialog.cpp index c9a43f863e..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(); @@ -183,8 +203,8 @@ void QuickSettingsDialog::_notification(int p_what) { case NOTIFICATION_THEME_CHANGED: { settings_list_panel->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SNAME("Background"), EditorStringName(EditorStyles))); - restart_required_label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); - custom_theme_label->add_theme_color_override("font_color", get_theme_color(SNAME("font_placeholder_color"), EditorStringName(Editor))); + restart_required_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + custom_theme_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("font_placeholder_color"), EditorStringName(Editor))); } break; case NOTIFICATION_VISIBILITY_CHANGED: { @@ -221,7 +241,7 @@ QuickSettingsDialog::QuickSettingsDialog() { { language_option_button = memnew(OptionButton); language_option_button->set_fit_to_longest_item(false); - language_option_button->connect("item_selected", callable_mp(this, &QuickSettingsDialog::_language_selected)); + language_option_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_language_selected)); for (int i = 0; i < editor_languages.size(); i++) { const String &lang_value = editor_languages[i]; @@ -237,7 +257,7 @@ QuickSettingsDialog::QuickSettingsDialog() { { theme_option_button = memnew(OptionButton); theme_option_button->set_fit_to_longest_item(false); - theme_option_button->connect("item_selected", callable_mp(this, &QuickSettingsDialog::_theme_selected)); + theme_option_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_theme_selected)); for (int i = 0; i < editor_themes.size(); i++) { const String &theme_value = editor_themes[i]; @@ -260,7 +280,7 @@ QuickSettingsDialog::QuickSettingsDialog() { { scale_option_button = memnew(OptionButton); scale_option_button->set_fit_to_longest_item(false); - scale_option_button->connect("item_selected", callable_mp(this, &QuickSettingsDialog::_scale_selected)); + scale_option_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_scale_selected)); for (int i = 0; i < editor_scales.size(); i++) { const String &scale_value = editor_scales[i]; @@ -274,7 +294,7 @@ QuickSettingsDialog::QuickSettingsDialog() { { network_mode_option_button = memnew(OptionButton); network_mode_option_button->set_fit_to_longest_item(false); - network_mode_option_button->connect("item_selected", callable_mp(this, &QuickSettingsDialog::_network_mode_selected)); + network_mode_option_button->connect(SceneStringName(item_selected), callable_mp(this, &QuickSettingsDialog::_network_mode_selected)); for (int i = 0; i < editor_network_modes.size(); i++) { const String &network_mode_value = editor_network_modes[i]; @@ -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 6a6e2b83ab..943e345e97 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(); } @@ -589,7 +593,7 @@ void ProjectSettingsEditor::_update_theme() { restart_close_button->set_icon(get_editor_theme_icon(SNAME("Close"))); restart_container->add_theme_style_override(SceneStringName(panel), get_theme_stylebox(SceneStringName(panel), SNAME("Tree"))); restart_icon->set_texture(get_editor_theme_icon(SNAME("StatusWarning"))); - restart_label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + restart_label->add_theme_color_override(SceneStringName(font_color), get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); type_box->clear(); for (int i = 0; i < Variant::VARIANT_MAX; i++) { @@ -668,12 +672,12 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { property_box = memnew(LineEdit); property_box->set_placeholder(TTR("Select a Setting or Type its Name")); property_box->set_h_size_flags(Control::SIZE_EXPAND_FILL); - property_box->connect("text_changed", callable_mp(this, &ProjectSettingsEditor::_property_box_changed)); + property_box->connect(SceneStringName(text_changed), callable_mp(this, &ProjectSettingsEditor::_property_box_changed)); custom_properties->add_child(property_box); feature_box = memnew(OptionButton); feature_box->set_custom_minimum_size(Size2(120, 0) * EDSCALE); - feature_box->connect("item_selected", callable_mp(this, &ProjectSettingsEditor::_feature_selected)); + feature_box->connect(SceneStringName(item_selected), callable_mp(this, &ProjectSettingsEditor::_feature_selected)); custom_properties->add_child(feature_box); type_box = memnew(OptionButton); 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/property_selector.cpp b/editor/property_selector.cpp index a5157bd394..0394c9e249 100644 --- a/editor/property_selector.cpp +++ b/editor/property_selector.cpp @@ -410,11 +410,11 @@ void PropertySelector::_hide_requested() { void PropertySelector::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &PropertySelector::_confirmed)); + connect(SceneStringName(confirmed), callable_mp(this, &PropertySelector::_confirmed)); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &PropertySelector::_confirmed)); + disconnect(SceneStringName(confirmed), callable_mp(this, &PropertySelector::_confirmed)); } break; } } @@ -564,7 +564,7 @@ PropertySelector::PropertySelector() { //set_child_rect(vbc); search_box = memnew(LineEdit); vbc->add_margin_child(TTR("Search:"), search_box); - search_box->connect("text_changed", callable_mp(this, &PropertySelector::_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &PropertySelector::_text_changed)); search_box->connect(SceneStringName(gui_input), callable_mp(this, &PropertySelector::_sbox_input)); search_options = memnew(Tree); search_options->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp index edefaa61a8..71d2ccf124 100644 --- a/editor/rename_dialog.cpp +++ b/editor/rename_dialog.cpp @@ -319,15 +319,15 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor) { // Preview - lne_prefix->connect("text_changed", callable_mp(this, &RenameDialog::_update_preview)); - lne_suffix->connect("text_changed", callable_mp(this, &RenameDialog::_update_preview)); - lne_search->connect("text_changed", callable_mp(this, &RenameDialog::_update_preview)); - lne_replace->connect("text_changed", callable_mp(this, &RenameDialog::_update_preview)); - spn_count_start->connect("value_changed", callable_mp(this, &RenameDialog::_update_preview_int)); - spn_count_step->connect("value_changed", callable_mp(this, &RenameDialog::_update_preview_int)); - spn_count_padding->connect("value_changed", callable_mp(this, &RenameDialog::_update_preview_int)); - opt_style->connect("item_selected", callable_mp(this, &RenameDialog::_update_preview_int)); - opt_case->connect("item_selected", callable_mp(this, &RenameDialog::_update_preview_int)); + lne_prefix->connect(SceneStringName(text_changed), callable_mp(this, &RenameDialog::_update_preview)); + lne_suffix->connect(SceneStringName(text_changed), callable_mp(this, &RenameDialog::_update_preview)); + lne_search->connect(SceneStringName(text_changed), callable_mp(this, &RenameDialog::_update_preview)); + lne_replace->connect(SceneStringName(text_changed), callable_mp(this, &RenameDialog::_update_preview)); + spn_count_start->connect(SceneStringName(value_changed), callable_mp(this, &RenameDialog::_update_preview_int)); + spn_count_step->connect(SceneStringName(value_changed), callable_mp(this, &RenameDialog::_update_preview_int)); + spn_count_padding->connect(SceneStringName(value_changed), callable_mp(this, &RenameDialog::_update_preview_int)); + opt_style->connect(SceneStringName(item_selected), callable_mp(this, &RenameDialog::_update_preview_int)); + opt_case->connect(SceneStringName(item_selected), callable_mp(this, &RenameDialog::_update_preview_int)); cbut_substitute->connect(SceneStringName(pressed), callable_mp(this, &RenameDialog::_update_preview).bind("")); cbut_regex->connect(SceneStringName(pressed), callable_mp(this, &RenameDialog::_update_preview).bind("")); cbut_process->connect(SceneStringName(pressed), callable_mp(this, &RenameDialog::_update_preview).bind("")); @@ -399,9 +399,9 @@ void RenameDialog::_update_preview(const String &new_text) { // New name is identical to the old one. Don't color it as much to avoid distracting the user. const Color accent_color = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("accent_color"), EditorStringName(Editor)); const Color text_color = EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("default_color"), SNAME("RichTextLabel")); - lbl_preview->add_theme_color_override("font_color", accent_color.lerp(text_color, 0.5)); + lbl_preview->add_theme_color_override(SceneStringName(font_color), accent_color.lerp(text_color, 0.5)); } else { - lbl_preview->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("success_color"), EditorStringName(Editor))); + lbl_preview->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("success_color"), EditorStringName(Editor))); } } @@ -487,7 +487,7 @@ void RenameDialog::_error_handler(void *p_self, const char *p_func, const char * self->has_errors = true; self->lbl_preview_title->set_text(TTR("Regular Expression Error:")); - self->lbl_preview->add_theme_color_override("font_color", EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); + self->lbl_preview->add_theme_color_override(SceneStringName(font_color), EditorNode::get_singleton()->get_editor_theme()->get_color(SNAME("error_color"), EditorStringName(Editor))); self->lbl_preview->set_text(vformat(TTR("At character %s"), err_str)); } diff --git a/editor/reparent_dialog.cpp b/editor/reparent_dialog.cpp index a139d180f0..a725508bc4 100644 --- a/editor/reparent_dialog.cpp +++ b/editor/reparent_dialog.cpp @@ -38,11 +38,11 @@ void ReparentDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - connect("confirmed", callable_mp(this, &ReparentDialog::_reparent)); + connect(SceneStringName(confirmed), callable_mp(this, &ReparentDialog::_reparent)); } break; case NOTIFICATION_EXIT_TREE: { - disconnect("confirmed", callable_mp(this, &ReparentDialog::_reparent)); + disconnect(SceneStringName(confirmed), callable_mp(this, &ReparentDialog::_reparent)); } break; } } diff --git a/editor/run_instances_dialog.cpp b/editor/run_instances_dialog.cpp index e15d578cb5..d617c899ad 100644 --- a/editor/run_instances_dialog.cpp +++ b/editor/run_instances_dialog.cpp @@ -302,8 +302,8 @@ RunInstancesDialog::RunInstancesDialog() { instance_count->set_max(20); instance_count->set_value(stored_data.size()); args_gc->add_child(instance_count); - instance_count->connect("value_changed", callable_mp(this, &RunInstancesDialog::_start_instance_timer).unbind(1)); - instance_count->connect("value_changed", callable_mp(this, &RunInstancesDialog::_refresh_argument_count).unbind(1)); + instance_count->connect(SceneStringName(value_changed), callable_mp(this, &RunInstancesDialog::_start_instance_timer).unbind(1)); + instance_count->connect(SceneStringName(value_changed), callable_mp(this, &RunInstancesDialog::_refresh_argument_count).unbind(1)); enable_multiple_instances_checkbox->connect("toggled", callable_mp(instance_count, &SpinBox::set_editable)); instance_count->set_editable(enable_multiple_instances_checkbox->is_pressed()); @@ -313,14 +313,14 @@ RunInstancesDialog::RunInstancesDialog() { args_gc->add_child(main_args_edit); _fetch_main_args(); ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &RunInstancesDialog::_fetch_main_args)); - main_args_edit->connect("text_changed", callable_mp(this, &RunInstancesDialog::_start_main_timer).unbind(1)); + main_args_edit->connect(SceneStringName(text_changed), callable_mp(this, &RunInstancesDialog::_start_main_timer).unbind(1)); main_features_edit = memnew(LineEdit); main_features_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL); main_features_edit->set_placeholder(TTR("Comma-separated tags, example: demo, steam, event")); main_features_edit->set_text(EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_main_feature_tags", "")); args_gc->add_child(main_features_edit); - main_features_edit->connect("text_changed", callable_mp(this, &RunInstancesDialog::_start_main_timer).unbind(1)); + main_features_edit->connect(SceneStringName(text_changed), callable_mp(this, &RunInstancesDialog::_start_main_timer).unbind(1)); { Label *l = memnew(Label); diff --git a/editor/scene_create_dialog.cpp b/editor/scene_create_dialog.cpp index fe773378b0..90e4d74fcb 100644 --- a/editor/scene_create_dialog.cpp +++ b/editor/scene_create_dialog.cpp @@ -72,7 +72,7 @@ void SceneCreateDialog::config(const String &p_dir) { void SceneCreateDialog::accept_create() { if (!get_ok_button()->is_disabled()) { hide(); - emit_signal(SNAME("confirmed")); + emit_signal(SceneStringName(confirmed)); } } @@ -292,8 +292,8 @@ SceneCreateDialog::SceneCreateDialog() { validation_panel->set_accept_button(get_ok_button()); node_type_group->connect(SceneStringName(pressed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); - scene_name_edit->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); - root_name_edit->connect("text_changed", callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + scene_name_edit->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); + root_name_edit->connect(SceneStringName(text_changed), callable_mp(validation_panel, &EditorValidationPanel::update).unbind(1)); set_title(TTR("Create New Scene")); set_min_size(Size2i(400 * EDSCALE, 0)); diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 11e477e044..94bd3e16d3 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(); } @@ -1597,12 +1598,12 @@ void SceneTreeDock::_notification(int p_what) { } break; case NOTIFICATION_ENTER_TREE: { - clear_inherit_confirm->connect("confirmed", callable_mp(this, &SceneTreeDock::_tool_selected).bind(TOOL_SCENE_CLEAR_INHERITANCE_CONFIRM, false)); + clear_inherit_confirm->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_tool_selected).bind(TOOL_SCENE_CLEAR_INHERITANCE_CONFIRM, false)); scene_tree->set_auto_expand_selected(EDITOR_GET("docks/scene_tree/auto_expand_to_selected"), false); } break; case NOTIFICATION_EXIT_TREE: { - clear_inherit_confirm->disconnect("confirmed", callable_mp(this, &SceneTreeDock::_tool_selected)); + clear_inherit_confirm->disconnect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_tool_selected)); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { @@ -2453,13 +2454,13 @@ void SceneTreeDock::_shader_created(Ref<Shader> p_shader) { void SceneTreeDock::_script_creation_closed() { script_create_dialog->disconnect("script_created", callable_mp(this, &SceneTreeDock::_script_created)); - script_create_dialog->disconnect("confirmed", callable_mp(this, &SceneTreeDock::_script_creation_closed)); + script_create_dialog->disconnect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_script_creation_closed)); script_create_dialog->disconnect("canceled", callable_mp(this, &SceneTreeDock::_script_creation_closed)); } void SceneTreeDock::_shader_creation_closed() { shader_create_dialog->disconnect("shader_created", callable_mp(this, &SceneTreeDock::_shader_created)); - shader_create_dialog->disconnect("confirmed", callable_mp(this, &SceneTreeDock::_shader_creation_closed)); + shader_create_dialog->disconnect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_shader_creation_closed)); shader_create_dialog->disconnect("canceled", callable_mp(this, &SceneTreeDock::_shader_creation_closed)); } @@ -2696,6 +2697,7 @@ void SceneTreeDock::_delete_confirm(bool p_cut) { editor_history->cleanup_history(); InspectorDock::get_singleton()->call("_prepare_history"); InspectorDock::get_singleton()->update(nullptr); + NodeDock::get_singleton()->set_node(nullptr); } void SceneTreeDock::_update_script_button() { @@ -3860,7 +3862,7 @@ void SceneTreeDock::attach_script_to_selected(bool p_extend) { } script_create_dialog->connect("script_created", callable_mp(this, &SceneTreeDock::_script_created)); - script_create_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_script_creation_closed)); + script_create_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_script_creation_closed)); script_create_dialog->connect("canceled", callable_mp(this, &SceneTreeDock::_script_creation_closed)); script_create_dialog->set_inheritance_base_type("Node"); script_create_dialog->config(inherits, path); @@ -3902,7 +3904,7 @@ void SceneTreeDock::attach_shader_to_selected(int p_preferred_mode) { } shader_create_dialog->connect("shader_created", callable_mp(this, &SceneTreeDock::_shader_created)); - shader_create_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_shader_creation_closed)); + shader_create_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_shader_creation_closed)); shader_create_dialog->connect("canceled", callable_mp(this, &SceneTreeDock::_shader_creation_closed)); shader_create_dialog->config(path, true, true, -1, p_preferred_mode); shader_create_dialog->popup_centered(); @@ -4423,7 +4425,7 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec filter->set_tooltip_text(TTR("Filter nodes by entering a part of their name, type (if prefixed with \"type:\" or \"t:\")\nor group (if prefixed with \"group:\" or \"g:\"). Filtering is case-insensitive.")); filter_hbc->add_child(filter); filter->add_theme_constant_override("minimum_character_width", 0); - filter->connect("text_changed", callable_mp(this, &SceneTreeDock::_filter_changed)); + filter->connect(SceneStringName(text_changed), callable_mp(this, &SceneTreeDock::_filter_changed)); filter->connect(SceneStringName(gui_input), callable_mp(this, &SceneTreeDock::_filter_gui_input)); filter->get_menu()->connect(SceneStringName(id_pressed), callable_mp(this, &SceneTreeDock::_filter_option_selected)); _append_filter_options_to(filter->get_menu()); @@ -4494,6 +4496,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)); @@ -4550,7 +4553,7 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec delete_dialog = memnew(ConfirmationDialog); add_child(delete_dialog); - delete_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_delete_confirm).bind(false)); + delete_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_delete_confirm).bind(false)); VBoxContainer *vb = memnew(VBoxContainer); delete_dialog->add_child(vb); @@ -4564,11 +4567,11 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec editable_instance_remove_dialog = memnew(ConfirmationDialog); add_child(editable_instance_remove_dialog); - editable_instance_remove_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_toggle_editable_children_from_selection)); + editable_instance_remove_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_toggle_editable_children_from_selection)); placeholder_editable_instance_remove_dialog = memnew(ConfirmationDialog); add_child(placeholder_editable_instance_remove_dialog); - placeholder_editable_instance_remove_dialog->connect("confirmed", callable_mp(this, &SceneTreeDock::_toggle_placeholder_from_selection)); + placeholder_editable_instance_remove_dialog->connect(SceneStringName(confirmed), callable_mp(this, &SceneTreeDock::_toggle_placeholder_from_selection)); new_scene_from_dialog = memnew(EditorFileDialog); new_scene_from_dialog->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 13fc5413b3..64c97e1641 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -871,7 +871,7 @@ ScriptCreateDialog::ScriptCreateDialog() { language_menu->select(default_language); } - language_menu->connect("item_selected", callable_mp(this, &ScriptCreateDialog::_language_changed)); + language_menu->connect(SceneStringName(item_selected), callable_mp(this, &ScriptCreateDialog::_language_changed)); /* Inherits */ @@ -880,7 +880,7 @@ ScriptCreateDialog::ScriptCreateDialog() { HBoxContainer *hb = memnew(HBoxContainer); hb->set_h_size_flags(Control::SIZE_EXPAND_FILL); parent_name = memnew(LineEdit); - parent_name->connect("text_changed", callable_mp(this, &ScriptCreateDialog::_parent_name_changed)); + parent_name->connect(SceneStringName(text_changed), callable_mp(this, &ScriptCreateDialog::_parent_name_changed)); parent_name->set_h_size_flags(Control::SIZE_EXPAND_FILL); hb->add_child(parent_name); register_text_enter(parent_name); @@ -907,7 +907,7 @@ ScriptCreateDialog::ScriptCreateDialog() { template_menu = memnew(OptionButton); template_menu->set_h_size_flags(Control::SIZE_EXPAND_FILL); - template_menu->connect("item_selected", callable_mp(this, &ScriptCreateDialog::_template_changed)); + template_menu->connect(SceneStringName(item_selected), callable_mp(this, &ScriptCreateDialog::_template_changed)); template_hb->add_child(template_menu); gc->add_child(template_hb); @@ -925,7 +925,7 @@ ScriptCreateDialog::ScriptCreateDialog() { hb = memnew(HBoxContainer); hb->connect(SceneStringName(sort_children), callable_mp(this, &ScriptCreateDialog::_path_hbox_sorted)); file_path = memnew(LineEdit); - file_path->connect("text_changed", callable_mp(this, &ScriptCreateDialog::_path_changed)); + file_path->connect(SceneStringName(text_changed), callable_mp(this, &ScriptCreateDialog::_path_changed)); file_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); hb->add_child(file_path); register_text_enter(file_path); diff --git a/editor/shader_create_dialog.cpp b/editor/shader_create_dialog.cpp index 6657aa6121..fd9d5bc127 100644 --- a/editor/shader_create_dialog.cpp +++ b/editor/shader_create_dialog.cpp @@ -606,7 +606,7 @@ ShaderCreateDialog::ShaderCreateDialog() { type_menu->select(default_type); } current_type = default_type; - type_menu->connect("item_selected", callable_mp(this, &ShaderCreateDialog::_type_changed)); + type_menu->connect(SceneStringName(item_selected), callable_mp(this, &ShaderCreateDialog::_type_changed)); // Modes. @@ -616,14 +616,14 @@ ShaderCreateDialog::ShaderCreateDialog() { } gc->add_child(memnew(Label(TTR("Mode:")))); gc->add_child(mode_menu); - mode_menu->connect("item_selected", callable_mp(this, &ShaderCreateDialog::_mode_changed)); + mode_menu->connect(SceneStringName(item_selected), callable_mp(this, &ShaderCreateDialog::_mode_changed)); // Templates. template_menu = memnew(OptionButton); gc->add_child(memnew(Label(TTR("Template:")))); gc->add_child(template_menu); - template_menu->connect("item_selected", callable_mp(this, &ShaderCreateDialog::_template_changed)); + template_menu->connect(SceneStringName(item_selected), callable_mp(this, &ShaderCreateDialog::_template_changed)); // Built-in Shader. @@ -639,7 +639,7 @@ ShaderCreateDialog::ShaderCreateDialog() { hb->set_h_size_flags(Control::SIZE_EXPAND_FILL); hb->connect(SceneStringName(sort_children), callable_mp(this, &ShaderCreateDialog::_path_hbox_sorted)); file_path = memnew(LineEdit); - file_path->connect("text_changed", callable_mp(this, &ShaderCreateDialog::_path_changed)); + file_path->connect(SceneStringName(text_changed), callable_mp(this, &ShaderCreateDialog::_path_changed)); file_path->set_h_size_flags(Control::SIZE_EXPAND_FILL); hb->add_child(file_path); register_text_enter(file_path); diff --git a/editor/shader_globals_editor.cpp b/editor/shader_globals_editor.cpp index bd9b80590e..0582c598a1 100644 --- a/editor/shader_globals_editor.cpp +++ b/editor/shader_globals_editor.cpp @@ -456,7 +456,7 @@ ShaderGlobalsEditor::ShaderGlobalsEditor() { variable_name = memnew(LineEdit); variable_name->set_h_size_flags(SIZE_EXPAND_FILL); variable_name->set_clear_button_enabled(true); - variable_name->connect("text_changed", callable_mp(this, &ShaderGlobalsEditor::_variable_name_text_changed)); + variable_name->connect(SceneStringName(text_changed), callable_mp(this, &ShaderGlobalsEditor::_variable_name_text_changed)); variable_name->connect("text_submitted", callable_mp(this, &ShaderGlobalsEditor::_variable_added).unbind(1)); add_menu_hb->add_child(variable_name); diff --git a/editor/surface_upgrade_tool.cpp b/editor/surface_upgrade_tool.cpp index 6865985e43..f532535034 100644 --- a/editor/surface_upgrade_tool.cpp +++ b/editor/surface_upgrade_tool.cpp @@ -190,7 +190,7 @@ void SurfaceUpgradeDialog::_notification(int p_what) { switch (p_what) { case NOTIFICATION_READY: // Can't do it in the constructor because it doesn't know that the signal exists. - connect("confirmed", callable_mp(SurfaceUpgradeTool::get_singleton(), &SurfaceUpgradeTool::prepare_upgrade)); + connect(SceneStringName(confirmed), callable_mp(SurfaceUpgradeTool::get_singleton(), &SurfaceUpgradeTool::prepare_upgrade)); break; } } 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 3f43d3e25b..fc994a17d1 100644 --- a/editor/themes/editor_fonts.cpp +++ b/editor/themes/editor_fonts.cpp @@ -36,6 +36,7 @@ #include "editor/themes/builtin_fonts.gen.h" #include "editor/themes/editor_scale.h" #include "scene/resources/font.h" +#include "scene/scene_string_names.h" Ref<FontFile> load_external_font(const String &p_path, TextServer::Hinting p_hinting, TextServer::FontAntialiasing p_aa, bool p_autohint, TextServer::SubpixelPositioning p_font_subpixel_positioning, bool p_font_disable_embedded_bitmaps, bool p_msdf = false, TypedArray<Font> *r_fallbacks = nullptr) { Ref<FontFile> font; @@ -401,24 +402,24 @@ void editor_register_fonts(const Ref<Theme> &p_theme) { p_theme->set_font_size("title_size", EditorStringName(EditorFonts), default_font_size + 1 * EDSCALE); p_theme->set_type_variation("MainScreenButton", "Button"); - p_theme->set_font("font", "MainScreenButton", bold_fc); - p_theme->set_font_size("font_size", "MainScreenButton", default_font_size + 2 * EDSCALE); + p_theme->set_font(SceneStringName(font), "MainScreenButton", bold_fc); + p_theme->set_font_size(SceneStringName(font_size), "MainScreenButton", default_font_size + 2 * EDSCALE); // Labels. - p_theme->set_font("font", "Label", default_fc); + p_theme->set_font(SceneStringName(font), "Label", default_fc); p_theme->set_type_variation("HeaderSmall", "Label"); - p_theme->set_font("font", "HeaderSmall", bold_fc); - p_theme->set_font_size("font_size", "HeaderSmall", default_font_size); + p_theme->set_font(SceneStringName(font), "HeaderSmall", bold_fc); + p_theme->set_font_size(SceneStringName(font_size), "HeaderSmall", default_font_size); p_theme->set_type_variation("HeaderMedium", "Label"); - p_theme->set_font("font", "HeaderMedium", bold_fc); - p_theme->set_font_size("font_size", "HeaderMedium", default_font_size + 1 * EDSCALE); + p_theme->set_font(SceneStringName(font), "HeaderMedium", bold_fc); + p_theme->set_font_size(SceneStringName(font_size), "HeaderMedium", default_font_size + 1 * EDSCALE); p_theme->set_type_variation("HeaderLarge", "Label"); - p_theme->set_font("font", "HeaderLarge", bold_fc); - p_theme->set_font_size("font_size", "HeaderLarge", default_font_size + 3 * EDSCALE); + p_theme->set_font(SceneStringName(font), "HeaderLarge", bold_fc); + p_theme->set_font_size(SceneStringName(font_size), "HeaderLarge", default_font_size + 3 * EDSCALE); p_theme->set_font("normal_font", "RichTextLabel", default_fc); p_theme->set_font("bold_font", "RichTextLabel", bold_fc); @@ -442,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 10b7c64999..9f0865d950 100644 --- a/editor/themes/editor_theme_manager.cpp +++ b/editor/themes/editor_theme_manager.cpp @@ -393,7 +393,7 @@ EditorThemeManager::ThemeConfiguration EditorThemeManager::_create_theme_config( config.base_margin = config.base_spacing; config.increased_margin = config.base_spacing + config.extra_spacing; config.separation_margin = (config.base_spacing + config.extra_spacing / 2) * EDSCALE; - config.popup_margin = config.base_margin * 3 * EDSCALE; + config.popup_margin = config.base_margin * 2.4 * EDSCALE; // Make sure content doesn't stick to window decorations; this can be fixed in future with layout changes. config.window_border_margin = MAX(1, config.base_margin * 2); config.top_bar_separation = config.base_margin * 2 * EDSCALE; @@ -474,7 +474,7 @@ void EditorThemeManager::_create_shared_styles(const Ref<EditorTheme> &p_theme, p_config.font_placeholder_color = Color(p_config.mono_color.r, p_config.mono_color.g, p_config.mono_color.b, 0.6); p_config.font_outline_color = Color(0, 0, 0, 0); - p_theme->set_color("font_color", EditorStringName(Editor), p_config.font_color); + p_theme->set_color(SceneStringName(font_color), EditorStringName(Editor), p_config.font_color); p_theme->set_color("font_focus_color", EditorStringName(Editor), p_config.font_focus_color); p_theme->set_color("font_hover_color", EditorStringName(Editor), p_config.font_hover_color); p_theme->set_color("font_pressed_color", EditorStringName(Editor), p_config.font_pressed_color); @@ -642,6 +642,7 @@ void EditorThemeManager::_create_shared_styles(const Ref<EditorTheme> &p_theme, p_config.dialog_style = p_config.base_style->duplicate(); p_config.dialog_style->set_corner_radius(CORNER_TOP_LEFT, 0); p_config.dialog_style->set_corner_radius(CORNER_TOP_RIGHT, 0); + p_config.dialog_style->set_content_margin_all(p_config.popup_margin); // Prevent visible line between window title and body. p_config.dialog_style->set_expand_margin(SIDE_BOTTOM, 2 * EDSCALE); } @@ -694,7 +695,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the // TooltipPanel is also used for custom tooltips, while TooltipLabel // is only relevant for default tooltips. - p_theme->set_color("font_color", "TooltipLabel", p_config.font_hover_color); + p_theme->set_color(SceneStringName(font_color), "TooltipLabel", p_config.font_hover_color); p_theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0)); Ref<StyleBoxFlat> style_tooltip = p_config.popup_style->duplicate(); @@ -719,7 +720,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("focus", "Button", p_config.button_style_focus); p_theme->set_stylebox("disabled", "Button", p_config.button_style_disabled); - p_theme->set_color("font_color", "Button", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "Button", p_config.font_color); p_theme->set_color("font_hover_color", "Button", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "Button", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "Button", p_config.font_focus_color); @@ -747,7 +748,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("focus", "MenuButton", p_config.panel_container_style); p_theme->set_stylebox("disabled", "MenuButton", p_config.panel_container_style); - p_theme->set_color("font_color", "MenuButton", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "MenuButton", p_config.font_color); p_theme->set_color("font_hover_color", "MenuButton", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "MenuButton", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "MenuButton", p_config.font_focus_color); @@ -762,7 +763,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox(SceneStringName(pressed), "MenuBar", p_config.button_style_pressed); p_theme->set_stylebox("disabled", "MenuBar", p_config.button_style_disabled); - p_theme->set_color("font_color", "MenuBar", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "MenuBar", p_config.font_color); p_theme->set_color("font_hover_color", "MenuBar", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "MenuBar", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "MenuBar", p_config.font_focus_color); @@ -804,7 +805,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("pressed_mirrored", "OptionButton", option_button_pressed_style); p_theme->set_stylebox("disabled_mirrored", "OptionButton", option_button_disabled_style); - p_theme->set_color("font_color", "OptionButton", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "OptionButton", p_config.font_color); p_theme->set_color("font_hover_color", "OptionButton", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "OptionButton", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "OptionButton", p_config.font_focus_color); @@ -843,7 +844,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_icon("unchecked_mirrored", "CheckButton", p_theme->get_icon(SNAME("GuiToggleOffMirrored"), EditorStringName(EditorIcons))); p_theme->set_icon("unchecked_disabled_mirrored", "CheckButton", p_theme->get_icon(SNAME("GuiToggleOffDisabledMirrored"), EditorStringName(EditorIcons))); - p_theme->set_color("font_color", "CheckButton", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "CheckButton", p_config.font_color); p_theme->set_color("font_hover_color", "CheckButton", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "CheckButton", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "CheckButton", p_config.font_focus_color); @@ -880,7 +881,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_icon("radio_checked_disabled", "CheckBox", p_theme->get_icon(SNAME("GuiRadioCheckedDisabled"), EditorStringName(EditorIcons))); p_theme->set_icon("radio_unchecked_disabled", "CheckBox", p_theme->get_icon(SNAME("GuiRadioUncheckedDisabled"), EditorStringName(EditorIcons))); - p_theme->set_color("font_color", "CheckBox", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "CheckBox", p_config.font_color); p_theme->set_color("font_hover_color", "CheckBox", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "CheckBox", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "CheckBox", p_config.font_focus_color); @@ -902,7 +903,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the // LinkButton. p_theme->set_stylebox("focus", "LinkButton", p_config.base_empty_style); - p_theme->set_color("font_color", "LinkButton", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "LinkButton", p_config.font_color); p_theme->set_color("font_hover_color", "LinkButton", p_config.font_hover_color); p_theme->set_color("font_hover_pressed_color", "LinkButton", p_config.font_hover_pressed_color); p_theme->set_color("font_focus_color", "LinkButton", p_config.font_focus_color); @@ -944,7 +945,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("custom_button_hover", "Tree", p_config.button_style); p_theme->set_color("custom_button_font_highlight", "Tree", p_config.font_hover_color); - p_theme->set_color("font_color", "Tree", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "Tree", p_config.font_color); p_theme->set_color("font_selected_color", "Tree", p_config.mono_color); p_theme->set_color("font_disabled_color", "Tree", p_config.font_disabled_color); p_theme->set_color("font_outline_color", "Tree", p_config.font_outline_color); @@ -1047,7 +1048,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("selected_focus", "ItemList", style_tree_focus); p_theme->set_stylebox("selected", "ItemList", style_tree_selected); p_theme->set_stylebox("hovered", "ItemList", style_itemlist_hover); - p_theme->set_color("font_color", "ItemList", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "ItemList", p_config.font_color); p_theme->set_color("font_hovered_color", "ItemList", p_config.mono_color); p_theme->set_color("font_selected_color", "ItemList", p_config.mono_color); p_theme->set_color("font_outline_color", "ItemList", p_config.font_outline_color); @@ -1194,7 +1195,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_icon("clear", "LineEdit", p_theme->get_icon(SNAME("GuiClose"), EditorStringName(EditorIcons))); - p_theme->set_color("font_color", "LineEdit", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "LineEdit", p_config.font_color); p_theme->set_color("font_selected_color", "LineEdit", p_config.mono_color); p_theme->set_color("font_uneditable_color", "LineEdit", p_config.font_readonly_color); p_theme->set_color("font_placeholder_color", "LineEdit", p_config.font_placeholder_color); @@ -1217,7 +1218,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_icon("tab", "TextEdit", p_theme->get_icon(SNAME("GuiTab"), EditorStringName(EditorIcons))); p_theme->set_icon("space", "TextEdit", p_theme->get_icon(SNAME("GuiSpace"), EditorStringName(EditorIcons))); - p_theme->set_color("font_color", "TextEdit", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "TextEdit", p_config.font_color); p_theme->set_color("font_readonly_color", "TextEdit", p_config.font_readonly_color); p_theme->set_color("font_placeholder_color", "TextEdit", p_config.font_placeholder_color); p_theme->set_color("font_outline_color", "TextEdit", p_config.font_outline_color); @@ -1348,7 +1349,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox("labeled_separator_left", "PopupMenu", style_popup_labeled_separator_left); p_theme->set_stylebox("labeled_separator_right", "PopupMenu", style_popup_labeled_separator_right); - p_theme->set_color("font_color", "PopupMenu", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "PopupMenu", p_config.font_color); p_theme->set_color("font_hover_color", "PopupMenu", p_config.font_hover_color); p_theme->set_color("font_accelerator_color", "PopupMenu", p_config.font_disabled_color); p_theme->set_color("font_disabled_color", "PopupMenu", p_config.font_disabled_color); @@ -1458,7 +1459,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the p_theme->set_stylebox(CoreStringName(normal), "Label", p_config.base_empty_style); - p_theme->set_color("font_color", "Label", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "Label", p_config.font_color); p_theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0)); p_theme->set_color("font_outline_color", "Label", p_config.font_outline_color); @@ -1476,7 +1477,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the // ProgressBar. p_theme->set_stylebox("background", "ProgressBar", make_stylebox(p_theme->get_icon(SNAME("GuiProgressBar"), EditorStringName(EditorIcons)), 4, 4, 4, 4, 0, 0, 0, 0)); p_theme->set_stylebox("fill", "ProgressBar", make_stylebox(p_theme->get_icon(SNAME("GuiProgressFill"), EditorStringName(EditorIcons)), 6, 6, 6, 6, 2, 1, 2, 1)); - p_theme->set_color("font_color", "ProgressBar", p_config.font_color); + p_theme->set_color(SceneStringName(font_color), "ProgressBar", p_config.font_color); p_theme->set_color("font_outline_color", "ProgressBar", p_config.font_outline_color); p_theme->set_constant("outline_size", "ProgressBar", 0); @@ -1632,7 +1633,7 @@ void EditorThemeManager::_populate_standard_styles(const Ref<EditorTheme> &p_the // GraphNode's title Label. p_theme->set_type_variation("GraphNodeTitleLabel", "Label"); p_theme->set_stylebox(CoreStringName(normal), "GraphNodeTitleLabel", make_empty_stylebox(0, 0, 0, 0)); - p_theme->set_color("font_color", "GraphNodeTitleLabel", p_config.dark_theme ? p_config.font_color : Color(1, 1, 1)); // Also use a bright font color for light themes. + p_theme->set_color(SceneStringName(font_color), "GraphNodeTitleLabel", p_config.dark_theme ? p_config.font_color : Color(1, 1, 1)); // Also use a bright font color for light themes. p_theme->set_color("font_shadow_color", "GraphNodeTitleLabel", Color(0, 0, 0, 0.35)); p_theme->set_constant("shadow_outline_size", "GraphNodeTitleLabel", 4); p_theme->set_constant("shadow_offset_x", "GraphNodeTitleLabel", 0); @@ -1664,8 +1665,8 @@ 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("font_size", "GraphFrameTitleLabel", 22); - p_theme->set_color("font_color", "GraphFrameTitleLabel", Color(1, 1, 1)); + p_theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22); + 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)); p_theme->set_constant("shadow_offset_x", "GraphFrameTitleLabel", 1 * EDSCALE); @@ -1781,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)); @@ -1821,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); @@ -1858,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); @@ -1878,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. @@ -1891,8 +1897,8 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme // Header LinkButton variation. p_theme->set_type_variation("HeaderSmallLink", "LinkButton"); - p_theme->set_font("font", "HeaderSmallLink", p_theme->get_font(SNAME("font"), SNAME("HeaderSmall"))); - p_theme->set_font_size("font_size", "HeaderSmallLink", p_theme->get_font_size(SNAME("font_size"), SNAME("HeaderSmall"))); + p_theme->set_font(SceneStringName(font), "HeaderSmallLink", p_theme->get_font(SceneStringName(font), SNAME("HeaderSmall"))); + p_theme->set_font_size(SceneStringName(font_size), "HeaderSmallLink", p_theme->get_font_size(SceneStringName(font_size), SNAME("HeaderSmall"))); // Flat button variations. { @@ -1971,8 +1977,8 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme // Top bar selectors. { p_theme->set_type_variation("TopBarOptionButton", "OptionButton"); - p_theme->set_font("font", "TopBarOptionButton", p_theme->get_font(SNAME("bold"), EditorStringName(EditorFonts))); - p_theme->set_font_size("font_size", "TopBarOptionButton", p_theme->get_font_size(SNAME("bold_size"), EditorStringName(EditorFonts))); + p_theme->set_font(SceneStringName(font), "TopBarOptionButton", p_theme->get_font(SNAME("bold"), EditorStringName(EditorFonts))); + p_theme->set_font_size(SceneStringName(font_size), "TopBarOptionButton", p_theme->get_font_size(SNAME("bold_size"), EditorStringName(EditorFonts))); } // Complex editor windows. @@ -1999,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. @@ -2068,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(); @@ -2102,13 +2128,14 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme // EditorInspectorSection. Color inspector_section_color = p_config.font_color.lerp(Color(0.5, 0.5, 0.5), 0.35); - p_theme->set_color("font_color", "EditorInspectorSection", inspector_section_color); + p_theme->set_color(SceneStringName(font_color), "EditorInspectorSection", inspector_section_color); Color inspector_indent_color = p_config.accent_color; inspector_indent_color.a = 0.2; 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); @@ -2126,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); @@ -2358,8 +2386,8 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme sm_node_end_style->set_border_color(p_config.error_color); p_theme->set_stylebox("node_frame_end", "GraphStateMachine", sm_node_end_style); - p_theme->set_font("node_title_font", "GraphStateMachine", p_theme->get_font(SNAME("font"), SNAME("Label"))); - p_theme->set_font_size("node_title_font_size", "GraphStateMachine", p_theme->get_font_size(SNAME("font_size"), SNAME("Label"))); + p_theme->set_font("node_title_font", "GraphStateMachine", p_theme->get_font(SceneStringName(font), SNAME("Label"))); + p_theme->set_font_size("node_title_font_size", "GraphStateMachine", p_theme->get_font_size(SceneStringName(font_size), SNAME("Label"))); p_theme->set_color("node_title_font_color", "GraphStateMachine", p_config.font_color); p_theme->set_color("transition_color", "GraphStateMachine", p_config.font_color); @@ -2482,8 +2510,8 @@ void EditorThemeManager::_populate_text_editor_styles(const Ref<EditorTheme> &p_ } // Now theme is loaded, apply it to CodeEdit. - p_theme->set_font("font", "CodeEdit", p_theme->get_font(SNAME("source"), EditorStringName(EditorFonts))); - p_theme->set_font_size("font_size", "CodeEdit", p_theme->get_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); + p_theme->set_font(SceneStringName(font), "CodeEdit", p_theme->get_font(SNAME("source"), EditorStringName(EditorFonts))); + p_theme->set_font_size(SceneStringName(font_size), "CodeEdit", p_theme->get_font_size(SNAME("source_size"), EditorStringName(EditorFonts))); /* clang-format off */ p_theme->set_icon("tab", "CodeEdit", p_theme->get_icon(SNAME("GuiTab"), EditorStringName(EditorIcons))); @@ -2512,7 +2540,7 @@ void EditorThemeManager::_populate_text_editor_styles(const Ref<EditorTheme> &p_ p_theme->set_color("completion_existing_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/completion_existing_color")); p_theme->set_color("completion_scroll_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/completion_scroll_color")); p_theme->set_color("completion_scroll_hovered_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/completion_scroll_hovered_color")); - p_theme->set_color("font_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/text_color")); + p_theme->set_color(SceneStringName(font_color), "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/text_color")); p_theme->set_color("line_number_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/line_number_color")); p_theme->set_color("caret_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/caret_color")); p_theme->set_color("font_selected_color", "CodeEdit", EDITOR_GET("text_editor/theme/highlighting/text_selected_color")); diff --git a/editor/window_wrapper.cpp b/editor/window_wrapper.cpp index b75d641509..9496ba016c 100644 --- a/editor/window_wrapper.cpp +++ b/editor/window_wrapper.cpp @@ -348,7 +348,7 @@ void ScreenSelect::_build_advanced_menu() { } // Populate screen list. - const real_t height = real_t(get_theme_font_size("font_size")) * 1.5; + const real_t height = real_t(get_theme_font_size(SceneStringName(font_size))) * 1.5; int current_screen = get_window()->get_current_screen(); for (int i = 0; i < DisplayServer::get_singleton()->get_screen_count(); i++) { @@ -365,7 +365,7 @@ void ScreenSelect::_build_advanced_menu() { if (i == current_screen) { Color accent_color = get_theme_color("accent_color", EditorStringName(Editor)); - button->add_theme_color_override("font_color", accent_color); + button->add_theme_color_override(SceneStringName(font_color), accent_color); } button->connect(SceneStringName(pressed), callable_mp(this, &ScreenSelect::_emit_screen_signal).bind(i)); @@ -393,7 +393,7 @@ void ScreenSelect::_notification(int p_what) { set_icon(get_editor_theme_icon("MakeFloating")); popup_background->add_theme_style_override(SceneStringName(panel), get_theme_stylebox("PanelForeground", EditorStringName(EditorStyles))); - const real_t popup_height = real_t(get_theme_font_size("font_size")) * 2.0; + const real_t popup_height = real_t(get_theme_font_size(SceneStringName(font_size))) * 2.0; popup->set_min_size(Size2(0, popup_height * 3)); } break; } @@ -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/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/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 b8f244ca02..7b93df70fa 100644 --- a/misc/extension_api_validation/4.2-stable.expected +++ b/misc/extension_api_validation/4.2-stable.expected @@ -365,3 +365,10 @@ Validate extension JSON: Error: Field 'classes/Animation/methods/track_find_key/ Added optional arguments to avoid finding keys out of the animation range (GH-86661), and to handle backward seeking. Compatibility method registered. + + +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. diff --git a/misc/scripts/clang_tidy.sh b/misc/scripts/clang_tidy.sh deleted file mode 100755 index 0c6998b491..0000000000 --- a/misc/scripts/clang_tidy.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# This script runs clang-tidy on all relevant files in the repo. -# This is more thorough than clang-format and thus slower; it should only be run manually. - -set -uo pipefail - -# Loops through all code files tracked by Git. -git ls-files -- '*.c' '*.h' '*.cpp' '*.hpp' '*.cc' '*.hh' '*.cxx' '*.m' '*.mm' '*.inc' '*.java' '*.glsl' \ - ':!:.git/*' ':!:thirdparty/*' ':!:platform/android/java/lib/src/com/google/*' ':!:*-so_wrap.*' | -while read -r f; do - # Run clang-tidy. - clang-tidy --quiet --fix "$f" &> /dev/null - - # Run clang-format. This also fixes the output of clang-tidy. - clang-format --Wno-error=unknown -i "$f" -done - -diff=$(git diff --color) - -# If no diff has been generated all is OK, clean up, and exit. -if [ -z "$diff" ] ; then - printf "\e[1;32m*** Files in this commit comply with the clang-tidy style rules.\e[0m\n" - exit 0 -fi - -# A diff has been created, notify the user, clean up, and exit. -printf "\n\e[1;33m*** The following changes must be made to comply with the formatting rules:\e[0m\n\n" -# Perl commands replace trailing spaces with `·` and tabs with `<TAB>`. -printf "%s\n" "$diff" | perl -pe 's/(.*[^ ])( +)(\e\[m)$/my $spaces="·" x length($2); sprintf("$1$spaces$3")/ge' | perl -pe 's/(.*[^\t])(\t+)(\e\[m)$/my $tabs="<TAB>" x length($2); sprintf("$1$tabs$3")/ge' - -printf "\n\e[1;91m*** Please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\e[0m\n" -exit 1 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/csg_shape.cpp b/modules/csg/csg_shape.cpp index 8d2847ab1a..296cda627a 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -141,7 +141,12 @@ bool CSGShape3D::is_root_shape() const { } void CSGShape3D::set_snap(float p_snap) { + if (snap == p_snap) { + return; + } + snap = p_snap; + _make_dirty(); } float CSGShape3D::get_snap() const { diff --git a/modules/csg/doc_classes/CSGShape3D.xml b/modules/csg/doc_classes/CSGShape3D.xml index 0414aa362d..f9017e47c7 100644 --- a/modules/csg/doc_classes/CSGShape3D.xml +++ b/modules/csg/doc_classes/CSGShape3D.xml @@ -73,7 +73,7 @@ The operation that is performed on this shape. This is ignored for the first CSG child node as the operation is between this node and the previous child of this nodes parent. </member> <member name="snap" type="float" setter="set_snap" getter="get_snap" default="0.001"> - Snap makes the mesh vertices snap to a given distance so that the faces of two meshes can be perfectly aligned. A lower value results in greater precision but may be harder to adjust. + Snap makes the mesh vertices snap to a given distance so that the faces of two meshes can be perfectly aligned. A lower value results in greater precision but may be harder to adjust. The top-level CSG shape's snap value is used for the entire CSG tree. </member> <member name="use_collision" type="bool" setter="set_use_collision" getter="is_using_collision" default="false"> Adds a collision shape to the physics engine for our CSG shape. This will always act like a static body. Note that the collision shape is still active even if the CSG shape itself is hidden. See also [member collision_mask] and [member collision_priority]. 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/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/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index f83b784f85..eecce70202 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -690,7 +690,7 @@ void GDScriptSyntaxHighlighter::_update_cache() { color_regions.clear(); color_region_cache.clear(); - font_color = text_edit->get_theme_color(SNAME("font_color")); + font_color = text_edit->get_theme_color(SceneStringName(font_color)); symbol_color = EDITOR_GET("text_editor/theme/highlighting/symbol_color"); function_color = EDITOR_GET("text_editor/theme/highlighting/function_color"); number_color = EDITOR_GET("text_editor/theme/highlighting/number_color"); diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 0c58b41fcb..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; @@ -771,8 +775,16 @@ Error GDScript::reload(bool p_keep_state) { if (GDScriptCache::has_parser(source_path)) { Error err = OK; Ref<GDScriptParserRef> parser_ref = GDScriptCache::get_parser(source_path, GDScriptParserRef::EMPTY, err); - if (parser_ref.is_valid() && parser_ref->get_source_hash() != source.hash()) { - GDScriptCache::remove_parser(source_path); + if (parser_ref.is_valid()) { + uint32_t source_hash; + if (!binary_tokens.is_empty()) { + source_hash = hash_djb2_buffer(binary_tokens.ptr(), binary_tokens.size()); + } else { + source_hash = source.hash(); + } + if (parser_ref->get_source_hash() != source_hash) { + GDScriptCache::remove_parser(source_path); + } } } } @@ -865,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 @@ -904,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; } @@ -931,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) { { @@ -948,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; @@ -958,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)) { @@ -987,14 +989,10 @@ bool GDScript::_get(const StringName &p_name, Variant &r_ret) const { bool GDScript::_set(const StringName &p_name, const Variant &p_value) { if (p_name == GDScriptLanguage::get_singleton()->strings._script_source) { set_source_code(p_value); - reload(); + reload(true); return true; } - if (unlikely(!valid)) { - return false; - } - GDScript *top = this; while (top) { HashMap<StringName, MemberInfo>::ConstIterator E = top->static_variables_indices.find(p_name); @@ -1009,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); @@ -1029,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) { @@ -1649,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) { @@ -1666,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); @@ -1693,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); @@ -1705,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; @@ -1726,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) { @@ -1758,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; @@ -1776,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)) { @@ -1796,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; @@ -1836,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; @@ -1850,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); + } } } } @@ -1932,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; @@ -1956,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; @@ -2027,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(); } @@ -2075,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 + } } } } @@ -2751,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 fcabb7c4a8..f557727718 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -2787,9 +2787,9 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c if (opt.is_quoted()) { opt = opt.unquote().quote(quote_style); if (use_string_names && info.arguments.get(p_argidx).type == Variant::STRING_NAME) { - opt = opt.indent("&"); + opt = "&" + opt; } else if (use_node_paths && info.arguments.get(p_argidx).type == Variant::NODE_PATH) { - opt = opt.indent("^"); + opt = "^" + opt; } } ScriptLanguage::CodeCompletionOption option(opt, ScriptLanguage::CODE_COMPLETION_KIND_FUNCTION); @@ -2824,7 +2824,11 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c if (E.usage & (PROPERTY_USAGE_SUBGROUP | PROPERTY_USAGE_GROUP | PROPERTY_USAGE_CATEGORY | PROPERTY_USAGE_INTERNAL)) { continue; } - ScriptLanguage::CodeCompletionOption option(E.name.quote(quote_style), ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, ScriptLanguage::CodeCompletionLocation::LOCATION_LOCAL + n); + String name = E.name.quote(quote_style); + if (use_node_paths) { + name = "^" + name; + } + ScriptLanguage::CodeCompletionOption option(name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, ScriptLanguage::CodeCompletionLocation::LOCATION_LOCAL + n); r_result.insert(option.display, option); } script = script->get_base_script(); @@ -2838,7 +2842,11 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c while (clss) { for (GDScriptParser::ClassNode::Member member : clss->members) { if (member.type == GDScriptParser::ClassNode::Member::VARIABLE) { - ScriptLanguage::CodeCompletionOption option(member.get_name().quote(quote_style), ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, ScriptLanguage::CodeCompletionLocation::LOCATION_LOCAL + n); + String name = member.get_name().quote(quote_style); + if (use_node_paths) { + name = "^" + name; + } + ScriptLanguage::CodeCompletionOption option(name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, ScriptLanguage::CodeCompletionLocation::LOCATION_LOCAL + n); r_result.insert(option.display, option); } } @@ -2861,7 +2869,11 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c if (E.usage & (PROPERTY_USAGE_SUBGROUP | PROPERTY_USAGE_GROUP | PROPERTY_USAGE_CATEGORY | PROPERTY_USAGE_INTERNAL)) { continue; } - ScriptLanguage::CodeCompletionOption option(E.name.quote(quote_style), ScriptLanguage::CODE_COMPLETION_KIND_MEMBER); + String name = E.name.quote(quote_style); + if (use_node_paths) { + name = "^" + name; + } + ScriptLanguage::CodeCompletionOption option(name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER); r_result.insert(option.display, option); } } @@ -2877,8 +2889,11 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c continue; } String name = s.get_slice("/", 1); - ScriptLanguage::CodeCompletionOption option("/root/" + name, ScriptLanguage::CODE_COMPLETION_KIND_NODE_PATH); - option.insert_text = option.display.quote(quote_style); + String path = ("/root/" + name).quote(quote_style); + if (use_node_paths) { + path = "^" + path; + } + ScriptLanguage::CodeCompletionOption option(path, ScriptLanguage::CODE_COMPLETION_KIND_NODE_PATH); r_result.insert(option.display, option); } } @@ -2892,9 +2907,11 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c if (!s.begins_with("input/")) { continue; } - String name = s.get_slice("/", 1); + String name = s.get_slice("/", 1).quote(quote_style); + if (use_string_names) { + name = "&" + name; + } ScriptLanguage::CodeCompletionOption option(name, ScriptLanguage::CODE_COMPLETION_KIND_CONSTANT); - option.insert_text = option.display.quote(quote_style); r_result.insert(option.display, option); } } @@ -3640,11 +3657,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; } @@ -3718,6 +3745,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_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/README.md b/modules/gdscript/tests/README.md index 714e38397f..4dc706f8d1 100644 --- a/modules/gdscript/tests/README.md +++ b/modules/gdscript/tests/README.md @@ -25,6 +25,8 @@ The config file contains two section: - `cs: boolean = false`: If `true`, the test will be skipped when running a non C# build. - `use_single_quotes: boolean = false`: Configures the corresponding editor setting for the test. +- `add_node_path_literals: boolean = false`: Configures the corresponding editor setting for the test. +- `add_string_name_literals: boolean = false`: Configures the corresponding editor setting for the test. - `scene: String`: Allows to specify a scene which is opened while autocompletion is performed. If this is not set the test runner will search for a `.tscn` file with the same basename as the GDScript file. If that isn't found either, autocompletion will behave as if no scene was opened. - `node_path: String`: The node path of the node which holds the current script inside of the scene. Defaults to the scene root node. 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/argument_options/string_literals/add_node_path_tween.cfg b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_node_path_tween.cfg new file mode 100644 index 0000000000..a8f26d83f9 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_node_path_tween.cfg @@ -0,0 +1,11 @@ +[input] +add_node_path_literals=true +[output] +include=[ + {"insert_text": "^\"property_of_a\""}, + {"insert_text": "^\"name\""}, +] +exclude=[ + {"insert_text": "\"property_of_a\""}, + {"insert_text": "\"name\""}, +] diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_node_path_tween.gd b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_node_path_tween.gd new file mode 100644 index 0000000000..bfdb5c7995 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_node_path_tween.gd @@ -0,0 +1,8 @@ +extends Node + +const A = preload("res://completion/class_a.notest.gd") + +func _ready() -> void: + var a := A.new() + var tween := get_tree().create_tween() + tween.tween_property(a, ➡) diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.cfg b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.cfg new file mode 100644 index 0000000000..309fa8ed38 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.cfg @@ -0,0 +1,9 @@ +[input] +add_string_name_literals=true +[output] +include=[ + {"insert_text": "&\"test_input_action\""}, +] +exclude=[ + {"insert_text": "\"test_input_action\""}, +] diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.gd b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.gd new file mode 100644 index 0000000000..9b325e632d --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/add_string_name_input_event.gd @@ -0,0 +1,3 @@ +func _input(event: InputEvent) -> void: + event.is_action_pressed(➡) + pass diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.cfg b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.cfg new file mode 100644 index 0000000000..45d0ad0f3b --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.cfg @@ -0,0 +1,11 @@ +[input] +add_node_path_literals=false +[output] +include=[ + {"insert_text": "\"property_of_a\""}, + {"insert_text": "\"name\""}, +] +exclude=[ + {"insert_text": "^\"property_of_a\""}, + {"insert_text": "^\"name\""}, +] diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.gd b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.gd new file mode 100644 index 0000000000..bfdb5c7995 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_node_path_tween.gd @@ -0,0 +1,8 @@ +extends Node + +const A = preload("res://completion/class_a.notest.gd") + +func _ready() -> void: + var a := A.new() + var tween := get_tree().create_tween() + tween.tween_property(a, ➡) diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.cfg b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.cfg new file mode 100644 index 0000000000..7a388d54e1 --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.cfg @@ -0,0 +1,9 @@ +[input] +add_string_name_literals=false +[output] +include=[ + {"insert_text": "\"test_input_action\""}, +] +exclude=[ + {"insert_text": "&\"test_input_action\""}, +] diff --git a/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.gd b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.gd new file mode 100644 index 0000000000..9b325e632d --- /dev/null +++ b/modules/gdscript/tests/scripts/completion/argument_options/string_literals/dont_add_string_name_input_event.gd @@ -0,0 +1,3 @@ +func _input(event: InputEvent) -> void: + event.is_action_pressed(➡) + pass 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/project.godot b/modules/gdscript/tests/scripts/project.godot index c500ef443d..c9035ecab9 100644 --- a/modules/gdscript/tests/scripts/project.godot +++ b/modules/gdscript/tests/scripts/project.godot @@ -8,3 +8,10 @@ config_version=5 [application] config/name="GDScript Integration Test Suite" + +[input] + +test_input_action={ +"deadzone": 0.5, +"events": [] +} diff --git a/modules/gdscript/tests/test_completion.h b/modules/gdscript/tests/test_completion.h index 327446acee..387358934d 100644 --- a/modules/gdscript/tests/test_completion.h +++ b/modules/gdscript/tests/test_completion.h @@ -130,6 +130,8 @@ static void test_directory(const String &p_dir) { #endif EditorSettings::get_singleton()->set_setting("text_editor/completion/use_single_quotes", conf.get_value("input", "use_single_quotes", false)); + EditorSettings::get_singleton()->set_setting("text_editor/completion/add_node_path_literals", conf.get_value("input", "add_node_path_literals", false)); + EditorSettings::get_singleton()->set_setting("text_editor/completion/add_string_name_literals", conf.get_value("input", "add_string_name_literals", false)); List<Dictionary> include; to_dict_list(conf.get_value("output", "include", Array()), include); 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/editor/editor_scene_importer_blend.cpp b/modules/gltf/editor/editor_scene_importer_blend.cpp index 822e11ea4b..79a2184745 100644 --- a/modules/gltf/editor/editor_scene_importer_blend.cpp +++ b/modules/gltf/editor/editor_scene_importer_blend.cpp @@ -395,10 +395,10 @@ void EditorFileSystemImportFormatSupportQueryBlend::_validate_path(String p_path path_status->set_text(error); if (success) { - path_status->add_theme_color_override("font_color", path_status->get_theme_color(SNAME("success_color"), EditorStringName(Editor))); + path_status->add_theme_color_override(SceneStringName(font_color), path_status->get_theme_color(SNAME("success_color"), EditorStringName(Editor))); configure_blender_dialog->get_ok_button()->set_disabled(false); } else { - path_status->add_theme_color_override("font_color", path_status->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + path_status->add_theme_color_override(SceneStringName(font_color), path_status->get_theme_color(SNAME("error_color"), EditorStringName(Editor))); configure_blender_dialog->get_ok_button()->set_disabled(true); } } @@ -510,14 +510,14 @@ bool EditorFileSystemImportFormatSupportQueryBlend::query() { configure_blender_dialog->add_child(vb); - blender_path->connect("text_changed", callable_mp(this, &EditorFileSystemImportFormatSupportQueryBlend::_validate_path)); + blender_path->connect(SceneStringName(text_changed), callable_mp(this, &EditorFileSystemImportFormatSupportQueryBlend::_validate_path)); EditorNode::get_singleton()->get_gui_base()->add_child(configure_blender_dialog); configure_blender_dialog->set_ok_button_text(TTR("Confirm Path")); configure_blender_dialog->set_cancel_button_text(TTR("Disable '.blend' Import")); configure_blender_dialog->get_cancel_button()->set_tooltip_text(TTR("Disables Blender '.blend' files import for this project. Can be re-enabled in Project Settings.")); - configure_blender_dialog->connect("confirmed", callable_mp(this, &EditorFileSystemImportFormatSupportQueryBlend::_path_confirmed)); + configure_blender_dialog->connect(SceneStringName(confirmed), callable_mp(this, &EditorFileSystemImportFormatSupportQueryBlend::_path_confirmed)); browse_dialog = memnew(EditorFileDialog); browse_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); diff --git a/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.cpp b/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.cpp index 1e64a6daa4..07faee3dfc 100644 --- a/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.cpp +++ b/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.cpp @@ -37,6 +37,15 @@ void GLTFDocumentExtensionConvertImporterMesh::_bind_methods() { } +void GLTFDocumentExtensionConvertImporterMesh::_copy_meta(Object *p_src_object, Object *p_dst_object) { + List<StringName> meta_list; + p_src_object->get_meta_list(&meta_list); + for (const StringName &meta_key : meta_list) { + Variant meta_value = p_src_object->get_meta(meta_key); + p_dst_object->set_meta(meta_key, meta_value); + } +} + Error GLTFDocumentExtensionConvertImporterMesh::import_post(Ref<GLTFState> p_state, Node *p_root) { ERR_FAIL_NULL_V(p_root, ERR_INVALID_PARAMETER); ERR_FAIL_NULL_V(p_state, ERR_INVALID_PARAMETER); @@ -58,6 +67,8 @@ Error GLTFDocumentExtensionConvertImporterMesh::import_post(Ref<GLTFState> p_sta mesh_instance_node_3d->set_skin(mesh_3d->get_skin()); mesh_instance_node_3d->set_skeleton_path(mesh_3d->get_skeleton_path()); node->replace_by(mesh_instance_node_3d); + _copy_meta(mesh_3d, mesh_instance_node_3d); + _copy_meta(mesh.ptr(), array_mesh.ptr()); delete_queue.push_back(node); node = mesh_instance_node_3d; } else { diff --git a/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.h b/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.h index 1147c2af38..ca10444eb5 100644 --- a/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.h +++ b/modules/gltf/extensions/gltf_document_extension_convert_importer_mesh.h @@ -38,6 +38,7 @@ class GLTFDocumentExtensionConvertImporterMesh : public GLTFDocumentExtension { protected: static void _bind_methods(); + static void _copy_meta(Object *p_src_object, Object *p_dst_object); public: Error import_post(Ref<GLTFState> p_state, Node *p_root) override; diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index 32fe37d9af..e0bdd4cf33 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -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/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp index 226cb48eb8..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; - } - } } } @@ -1069,7 +1064,7 @@ void GridMapEditor::_update_theme() { void GridMapEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { - mesh_library_palette->connect("item_selected", callable_mp(this, &GridMapEditor::_item_selected_cbk)); + mesh_library_palette->connect(SceneStringName(item_selected), callable_mp(this, &GridMapEditor::_item_selected_cbk)); for (int i = 0; i < 3; i++) { grid[i] = RS::get_singleton()->mesh_create(); grid_instance[i] = RS::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world_3d()->get_scenario()); @@ -1223,7 +1218,7 @@ GridMapEditor::GridMapEditor() { floor->get_line_edit()->add_theme_constant_override("minimum_character_width", 16); spatial_editor_hb->add_child(floor); - floor->connect("value_changed", callable_mp(this, &GridMapEditor::_floor_changed)); + floor->connect(SceneStringName(value_changed), callable_mp(this, &GridMapEditor::_floor_changed)); floor->connect(SceneStringName(mouse_exited), callable_mp(this, &GridMapEditor::_floor_mouse_exited)); floor->get_line_edit()->connect(SceneStringName(mouse_exited), callable_mp(this, &GridMapEditor::_floor_mouse_exited)); @@ -1286,7 +1281,7 @@ GridMapEditor::GridMapEditor() { search_box->set_placeholder(TTR("Filter Meshes")); search_box->set_clear_button_enabled(true); hb->add_child(search_box); - search_box->connect("text_changed", callable_mp(this, &GridMapEditor::_text_changed)); + search_box->connect(SceneStringName(text_changed), callable_mp(this, &GridMapEditor::_text_changed)); search_box->connect(SceneStringName(gui_input), callable_mp(this, &GridMapEditor::_sbox_input)); mode_thumbnail = memnew(Button); @@ -1309,7 +1304,7 @@ GridMapEditor::GridMapEditor() { size_slider->set_max(4.0f); size_slider->set_step(0.1f); size_slider->set_value(1.0f); - size_slider->connect("value_changed", callable_mp(this, &GridMapEditor::_icon_size_changed)); + size_slider->connect(SceneStringName(value_changed), callable_mp(this, &GridMapEditor::_icon_size_changed)); add_child(size_slider); EDITOR_DEF("editors/grid_map/preview_size", 64); 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/interactive_music/editor/audio_stream_interactive_editor_plugin.cpp b/modules/interactive_music/editor/audio_stream_interactive_editor_plugin.cpp index cd3814879a..e29cc753c9 100644 --- a/modules/interactive_music/editor/audio_stream_interactive_editor_plugin.cpp +++ b/modules/interactive_music/editor/audio_stream_interactive_editor_plugin.cpp @@ -161,7 +161,7 @@ void AudioStreamInteractiveTransitionEditor::_update_transitions() { return; } int clip_count = audio_stream_interactive->get_clip_count(); - Color font_color = tree->get_theme_color("font_color", "Tree"); + Color font_color = tree->get_theme_color(SceneStringName(font_color), "Tree"); Color font_color_default = font_color; font_color_default.a *= 0.5; Ref<Texture> fade_icons[5] = { @@ -351,29 +351,29 @@ AudioStreamInteractiveTransitionEditor::AudioStreamInteractiveTransitionEditor() transition_from->add_item(TTR("Next Bar"), AudioStreamInteractive::TRANSITION_FROM_TIME_NEXT_BAR); transition_from->add_item(TTR("Clip End"), AudioStreamInteractive::TRANSITION_FROM_TIME_END); - transition_from->connect("item_selected", callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); + transition_from->connect(SceneStringName(item_selected), callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); transition_to = memnew(OptionButton); edit_vb->add_margin_child(TTR("Transition To:"), transition_to); transition_to->add_item(TTR("Same Position"), AudioStreamInteractive::TRANSITION_TO_TIME_SAME_POSITION); transition_to->add_item(TTR("Clip Start"), AudioStreamInteractive::TRANSITION_TO_TIME_START); transition_to->add_item(TTR("Prev Position"), AudioStreamInteractive::TRANSITION_TO_TIME_PREVIOUS_POSITION); - transition_to->connect("item_selected", callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); + transition_to->connect(SceneStringName(item_selected), callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); fade_mode = memnew(OptionButton); edit_vb->add_margin_child(TTR("Fade Mode:"), fade_mode); - fade_mode->connect("item_selected", callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); + fade_mode->connect(SceneStringName(item_selected), callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); fade_beats = memnew(SpinBox); edit_vb->add_margin_child(TTR("Fade Beats:"), fade_beats); fade_beats->set_max(16); fade_beats->set_step(0.1); - fade_beats->connect("value_changed", callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); + fade_beats->connect(SceneStringName(value_changed), callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); filler_clip = memnew(OptionButton); edit_vb->add_margin_child(TTR("Filler Clip:"), filler_clip); filler_clip->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); - filler_clip->connect("item_selected", callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); + filler_clip->connect(SceneStringName(item_selected), callable_mp(this, &AudioStreamInteractiveTransitionEditor::_edited).unbind(1)); hold_previous = memnew(CheckBox); hold_previous->set_text(TTR("Enabled")); diff --git a/modules/mbedtls/tls_context_mbedtls.cpp b/modules/mbedtls/tls_context_mbedtls.cpp index aab082f488..eaea7b9293 100644 --- a/modules/mbedtls/tls_context_mbedtls.cpp +++ b/modules/mbedtls/tls_context_mbedtls.cpp @@ -152,21 +152,23 @@ Error TLSContextMbedTLS::init_client(int p_transport, const String &p_hostname, ERR_FAIL_COND_V(p_options.is_null() || p_options->is_server(), ERR_INVALID_PARAMETER); int authmode = MBEDTLS_SSL_VERIFY_REQUIRED; - if (p_options->get_verify_mode() == TLSOptions::TLS_VERIFY_NONE) { + bool unsafe = p_options->is_unsafe_client(); + if (unsafe && p_options->get_trusted_ca_chain().is_valid()) { authmode = MBEDTLS_SSL_VERIFY_NONE; } Error err = _setup(MBEDTLS_SSL_IS_CLIENT, p_transport, authmode); ERR_FAIL_COND_V(err != OK, err); - if (p_options->get_verify_mode() == TLSOptions::TLS_VERIFY_FULL) { - String cn = p_options->get_common_name(); + if (unsafe) { + // No hostname verification for unsafe clients. + mbedtls_ssl_set_hostname(&tls, nullptr); + } else { + String cn = p_options->get_common_name_override(); if (cn.is_empty()) { cn = p_hostname; } mbedtls_ssl_set_hostname(&tls, cn.utf8().get_data()); - } else { - mbedtls_ssl_set_hostname(&tls, nullptr); } X509CertificateMbedTLS *cas = nullptr; diff --git a/modules/minimp3/audio_stream_mp3.cpp b/modules/minimp3/audio_stream_mp3.cpp index a46a1c93b5..5720f844bb 100644 --- a/modules/minimp3/audio_stream_mp3.cpp +++ b/modules/minimp3/audio_stream_mp3.cpp @@ -145,6 +145,22 @@ void AudioStreamPlaybackMP3::tag_used_streams() { mp3_stream->tag_used(get_playback_position()); } +void AudioStreamPlaybackMP3::set_is_sample(bool p_is_sample) { + _is_sample = p_is_sample; +} + +bool AudioStreamPlaybackMP3::get_is_sample() const { + return _is_sample; +} + +Ref<AudioSamplePlayback> AudioStreamPlaybackMP3::get_sample_playback() const { + return sample_playback; +} + +void AudioStreamPlaybackMP3::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + sample_playback = p_playback; +} + void AudioStreamPlaybackMP3::set_parameter(const StringName &p_name, const Variant &p_value) { if (p_name == SNAME("looping")) { if (p_value == Variant()) { @@ -287,6 +303,18 @@ int AudioStreamMP3::get_bar_beats() const { return bar_beats; } +Ref<AudioSample> AudioStreamMP3::generate_sample() const { + Ref<AudioSample> sample; + sample.instantiate(); + sample->stream = this; + sample->loop_mode = loop + ? AudioSample::LoopMode::LOOP_FORWARD + : AudioSample::LoopMode::LOOP_DISABLED; + sample->loop_begin = loop_offset; + sample->loop_end = 0; + return sample; +} + void AudioStreamMP3::_bind_methods() { ClassDB::bind_method(D_METHOD("set_data", "data"), &AudioStreamMP3::set_data); ClassDB::bind_method(D_METHOD("get_data"), &AudioStreamMP3::get_data); diff --git a/modules/minimp3/audio_stream_mp3.h b/modules/minimp3/audio_stream_mp3.h index 7d85e0a321..81e8f8633c 100644 --- a/modules/minimp3/audio_stream_mp3.h +++ b/modules/minimp3/audio_stream_mp3.h @@ -58,6 +58,9 @@ class AudioStreamPlaybackMP3 : public AudioStreamPlaybackResampled { Ref<AudioStreamMP3> mp3_stream; + bool _is_sample = false; + Ref<AudioSamplePlayback> sample_playback; + protected: virtual int _mix_internal(AudioFrame *p_buffer, int p_frames) override; virtual float get_stream_sampling_rate() override; @@ -74,6 +77,11 @@ public: virtual void tag_used_streams() override; + virtual void set_is_sample(bool p_is_sample) override; + virtual bool get_is_sample() const override; + virtual Ref<AudioSamplePlayback> get_sample_playback() const override; + virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + virtual void set_parameter(const StringName &p_name, const Variant &p_value) override; virtual Variant get_parameter(const StringName &p_name) const override; @@ -131,6 +139,11 @@ public: virtual bool is_monophonic() const override; + virtual bool can_be_sampled() const override { + return true; + } + virtual Ref<AudioSample> generate_sample() const override; + virtual void get_parameter_list(List<Parameter> *r_parameters) override; AudioStreamMP3(); 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/editor/editor_network_profiler.cpp b/modules/multiplayer/editor/editor_network_profiler.cpp index 75941207c7..d5d4b465d8 100644 --- a/modules/multiplayer/editor/editor_network_profiler.cpp +++ b/modules/multiplayer/editor/editor_network_profiler.cpp @@ -74,8 +74,8 @@ void EditorNetworkProfiler::_update_theme_item_cache() { theme_cache.incoming_bandwidth_icon = get_theme_icon(SNAME("ArrowDown"), EditorStringName(EditorIcons)); theme_cache.outgoing_bandwidth_icon = get_theme_icon(SNAME("ArrowUp"), EditorStringName(EditorIcons)); - theme_cache.incoming_bandwidth_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); - theme_cache.outgoing_bandwidth_color = get_theme_color(SNAME("font_color"), EditorStringName(Editor)); + theme_cache.incoming_bandwidth_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); + theme_cache.outgoing_bandwidth_color = get_theme_color(SceneStringName(font_color), EditorStringName(Editor)); } void EditorNetworkProfiler::_refresh() { diff --git a/modules/multiplayer/editor/replication_editor.cpp b/modules/multiplayer/editor/replication_editor.cpp index b28572cf72..d242b06c29 100644 --- a/modules/multiplayer/editor/replication_editor.cpp +++ b/modules/multiplayer/editor/replication_editor.cpp @@ -175,7 +175,7 @@ ReplicationEditor::ReplicationEditor() { delete_dialog = memnew(ConfirmationDialog); delete_dialog->connect("canceled", callable_mp(this, &ReplicationEditor::_dialog_closed).bind(false)); - delete_dialog->connect("confirmed", callable_mp(this, &ReplicationEditor::_dialog_closed).bind(true)); + delete_dialog->connect(SceneStringName(confirmed), callable_mp(this, &ReplicationEditor::_dialog_closed).bind(true)); add_child(delete_dialog); VBoxContainer *vb = memnew(VBoxContainer); @@ -187,7 +187,7 @@ ReplicationEditor::ReplicationEditor() { pick_node->register_text_enter(pick_node->get_filter_line_edit()); pick_node->set_title(TTR("Pick a node to synchronize:")); pick_node->connect("selected", callable_mp(this, &ReplicationEditor::_pick_node_selected)); - pick_node->get_filter_line_edit()->connect("text_changed", callable_mp(this, &ReplicationEditor::_pick_node_filter_text_changed)); + pick_node->get_filter_line_edit()->connect(SceneStringName(text_changed), callable_mp(this, &ReplicationEditor::_pick_node_filter_text_changed)); pick_node->get_filter_line_edit()->connect("gui_input", callable_mp(this, &ReplicationEditor::_pick_node_filter_input)); prop_selector = memnew(PropertySelector); 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 1779be2cc2..f917c988ea 100644 --- a/modules/navigation/nav_map.cpp +++ b/modules/navigation/nav_map.cpp @@ -627,9 +627,25 @@ Vector3 NavMap::get_closest_point_to_segment(const Vector3 &p_from, const Vector closest_point_d = d; } } - } + // If segment does not itersect face, check the distance from segment's endpoints. + else if (!use_collision) { + const Vector3 p_from_closest = f.get_closest_point_to(p_from); + const real_t d_p_from = p_from.distance_to(p_from_closest); + if (closest_point_d > d_p_from) { + closest_point = p_from_closest; + closest_point_d = d_p_from; + } - if (use_collision == false) { + const Vector3 p_to_closest = f.get_closest_point_to(p_to); + const real_t d_p_to = p_to.distance_to(p_to_closest); + if (closest_point_d > d_p_to) { + closest_point = p_to_closest; + closest_point_d = d_p_to; + } + } + } + // 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; @@ -1131,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/editor/openxr_action_editor.cpp b/modules/openxr/editor/openxr_action_editor.cpp index 06d2e8dcc9..63162ba3dc 100644 --- a/modules/openxr/editor/openxr_action_editor.cpp +++ b/modules/openxr/editor/openxr_action_editor.cpp @@ -134,14 +134,14 @@ OpenXRActionEditor::OpenXRActionEditor(Ref<OpenXRAction> p_action) { action_name = memnew(LineEdit); action_name->set_text(action->get_name()); action_name->set_custom_minimum_size(Size2(150.0, 0.0)); - action_name->connect("text_changed", callable_mp(this, &OpenXRActionEditor::_on_action_name_changed)); + action_name->connect(SceneStringName(text_changed), callable_mp(this, &OpenXRActionEditor::_on_action_name_changed)); add_child(action_name); action_localized_name = memnew(LineEdit); action_localized_name->set_text(action->get_localized_name()); action_localized_name->set_custom_minimum_size(Size2(150.0, 0.0)); action_localized_name->set_h_size_flags(Control::SIZE_EXPAND_FILL); - action_localized_name->connect("text_changed", callable_mp(this, &OpenXRActionEditor::_on_action_localized_name_changed)); + action_localized_name->connect(SceneStringName(text_changed), callable_mp(this, &OpenXRActionEditor::_on_action_localized_name_changed)); add_child(action_localized_name); action_type_button = memnew(OptionButton); @@ -152,7 +152,7 @@ OpenXRActionEditor::OpenXRActionEditor(Ref<OpenXRAction> p_action) { action_type_button->add_item("Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC); action_type_button->select(int(action->get_action_type())); action_type_button->set_custom_minimum_size(Size2(100.0, 0.0)); - action_type_button->connect("item_selected", callable_mp(this, &OpenXRActionEditor::_on_item_selected)); + action_type_button->connect(SceneStringName(item_selected), callable_mp(this, &OpenXRActionEditor::_on_item_selected)); add_child(action_type_button); // maybe add dropdown to edit our toplevel paths, or do we deduce them from our suggested bindings? diff --git a/modules/openxr/editor/openxr_action_set_editor.cpp b/modules/openxr/editor/openxr_action_set_editor.cpp index e2a843a051..0c55592707 100644 --- a/modules/openxr/editor/openxr_action_set_editor.cpp +++ b/modules/openxr/editor/openxr_action_set_editor.cpp @@ -244,20 +244,20 @@ OpenXRActionSetEditor::OpenXRActionSetEditor(Ref<OpenXRActionMap> p_action_map, action_set_name = memnew(LineEdit); action_set_name->set_text(action_set->get_name()); action_set_name->set_custom_minimum_size(Size2(150.0, 0.0)); - action_set_name->connect("text_changed", callable_mp(this, &OpenXRActionSetEditor::_on_action_set_name_changed)); + action_set_name->connect(SceneStringName(text_changed), callable_mp(this, &OpenXRActionSetEditor::_on_action_set_name_changed)); action_set_hb->add_child(action_set_name); action_set_localized_name = memnew(LineEdit); action_set_localized_name->set_text(action_set->get_localized_name()); action_set_localized_name->set_custom_minimum_size(Size2(150.0, 0.0)); action_set_localized_name->set_h_size_flags(Control::SIZE_EXPAND_FILL); - action_set_localized_name->connect("text_changed", callable_mp(this, &OpenXRActionSetEditor::_on_action_set_localized_name_changed)); + action_set_localized_name->connect(SceneStringName(text_changed), callable_mp(this, &OpenXRActionSetEditor::_on_action_set_localized_name_changed)); action_set_hb->add_child(action_set_localized_name); action_set_priority = memnew(TextEdit); action_set_priority->set_text(itos(action_set->get_priority())); action_set_priority->set_custom_minimum_size(Size2(50.0, 0.0)); - action_set_priority->connect("text_changed", callable_mp(this, &OpenXRActionSetEditor::_on_action_set_priority_changed)); + action_set_priority->connect(SceneStringName(text_changed), callable_mp(this, &OpenXRActionSetEditor::_on_action_set_priority_changed)); action_set_hb->add_child(action_set_priority); add_action = memnew(Button); diff --git a/modules/openxr/editor/openxr_select_runtime.cpp b/modules/openxr/editor/openxr_select_runtime.cpp index f6aa157907..026797c6e0 100644 --- a/modules/openxr/editor/openxr_select_runtime.cpp +++ b/modules/openxr/editor/openxr_select_runtime.cpp @@ -98,11 +98,11 @@ void OpenXRSelectRuntime::_notification(int p_notification) { _update_items(); // Connect signal - connect("item_selected", callable_mp(this, &OpenXRSelectRuntime::_item_selected)); + connect(SceneStringName(item_selected), callable_mp(this, &OpenXRSelectRuntime::_item_selected)); } break; case NOTIFICATION_EXIT_TREE: { // Disconnect signal - disconnect("item_selected", callable_mp(this, &OpenXRSelectRuntime::_item_selected)); + disconnect(SceneStringName(item_selected), callable_mp(this, &OpenXRSelectRuntime::_item_selected)); } break; } } 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 361d88af90..0c87199635 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -6052,6 +6052,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star unsigned int last_cluster_index = 0; bool last_cluster_valid = true; + double adv_rem = 0.0; for (unsigned int i = 0; i < glyph_count; i++) { if ((i > 0) && (last_cluster_id != glyph_info[i].cluster)) { if (p_direction == HB_DIRECTION_RTL || p_direction == HB_DIRECTION_BTT) { @@ -6097,21 +6098,31 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star gl.index = glyph_info[i].codepoint; if (gl.index != 0) { _ensure_glyph(fd, fss, gl.index | mod); + if (subpos) { + gl.x_off = (double)glyph_pos[i].x_offset / (64.0 / scale); + } else if (p_sd->orientation == ORIENTATION_HORIZONTAL) { + gl.x_off = Math::round(adv_rem + ((double)glyph_pos[i].x_offset / (64.0 / scale))); + } else { + gl.x_off = Math::round((double)glyph_pos[i].x_offset / (64.0 / scale)); + } + if (p_sd->orientation == ORIENTATION_HORIZONTAL) { + gl.y_off = -Math::round((double)glyph_pos[i].y_offset / (64.0 / scale)); + } else { + gl.y_off = -Math::round(adv_rem + ((double)glyph_pos[i].y_offset / (64.0 / scale))); + } if (p_sd->orientation == ORIENTATION_HORIZONTAL) { if (subpos) { gl.advance = (double)glyph_pos[i].x_advance / (64.0 / scale) + ea; } else { - gl.advance = Math::round((double)glyph_pos[i].x_advance / (64.0 / scale) + ea); + double full_adv = adv_rem + ((double)glyph_pos[i].x_advance / (64.0 / scale) + ea); + gl.advance = Math::round(full_adv); + adv_rem = full_adv - gl.advance; } } else { - gl.advance = -Math::round((double)glyph_pos[i].y_advance / (64.0 / scale)); + double full_adv = adv_rem + ((double)glyph_pos[i].y_advance / (64.0 / scale)); + gl.advance = -Math::round(full_adv); + adv_rem = full_adv + gl.advance; } - if (subpos) { - gl.x_off = (double)glyph_pos[i].x_offset / (64.0 / scale); - } else { - gl.x_off = Math::round((double)glyph_pos[i].x_offset / (64.0 / scale)); - } - gl.y_off = -Math::round((double)glyph_pos[i].y_offset / (64.0 / scale)); if (p_sd->orientation == ORIENTATION_HORIZONTAL) { gl.y_off += _font_get_baseline_offset(gl.font_rid) * (double)(_font_get_ascent(gl.font_rid, gl.font_size) + _font_get_descent(gl.font_rid, gl.font_size)); } else { @@ -7037,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); } @@ -7050,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..6cf6b236ed 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -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/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp index b235b6f96c..ff032c88c6 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.cpp +++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp @@ -376,6 +376,22 @@ void AudioStreamPlaybackOggVorbis::seek(double p_time) { } } +void AudioStreamPlaybackOggVorbis::set_is_sample(bool p_is_sample) { + _is_sample = p_is_sample; +} + +bool AudioStreamPlaybackOggVorbis::get_is_sample() const { + return _is_sample; +} + +Ref<AudioSamplePlayback> AudioStreamPlaybackOggVorbis::get_sample_playback() const { + return sample_playback; +} + +void AudioStreamPlaybackOggVorbis::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + sample_playback = p_playback; +} + AudioStreamPlaybackOggVorbis::~AudioStreamPlaybackOggVorbis() { if (block_is_allocated) { vorbis_block_clear(&block); @@ -517,6 +533,18 @@ void AudioStreamOggVorbis::get_parameter_list(List<Parameter> *r_parameters) { r_parameters->push_back(Parameter(PropertyInfo(Variant::BOOL, "looping", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_CHECKABLE), Variant())); } +Ref<AudioSample> AudioStreamOggVorbis::generate_sample() const { + Ref<AudioSample> sample; + sample.instantiate(); + sample->stream = this; + sample->loop_mode = loop + ? AudioSample::LoopMode::LOOP_FORWARD + : AudioSample::LoopMode::LOOP_DISABLED; + sample->loop_begin = loop_offset; + sample->loop_end = 0; + return sample; +} + void AudioStreamOggVorbis::_bind_methods() { ClassDB::bind_static_method("AudioStreamOggVorbis", D_METHOD("load_from_buffer", "buffer"), &AudioStreamOggVorbis::load_from_buffer); ClassDB::bind_static_method("AudioStreamOggVorbis", D_METHOD("load_from_file", "path"), &AudioStreamOggVorbis::load_from_file); diff --git a/modules/vorbis/audio_stream_ogg_vorbis.h b/modules/vorbis/audio_stream_ogg_vorbis.h index 64a7815b57..6293951f8d 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.h +++ b/modules/vorbis/audio_stream_ogg_vorbis.h @@ -75,6 +75,9 @@ class AudioStreamPlaybackOggVorbis : public AudioStreamPlaybackResampled { Ref<OggPacketSequencePlayback> vorbis_data_playback; Ref<AudioStreamOggVorbis> vorbis_stream; + bool _is_sample = false; + Ref<AudioSamplePlayback> sample_playback; + int _mix_frames(AudioFrame *p_buffer, int p_frames); int _mix_frames_vorbis(AudioFrame *p_buffer, int p_frames); @@ -100,6 +103,11 @@ public: virtual void set_parameter(const StringName &p_name, const Variant &p_value) override; virtual Variant get_parameter(const StringName &p_name) const override; + virtual void set_is_sample(bool p_is_sample) override; + virtual bool get_is_sample() const override; + virtual Ref<AudioSamplePlayback> get_sample_playback() const override; + virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + AudioStreamPlaybackOggVorbis() {} ~AudioStreamPlaybackOggVorbis(); }; @@ -159,6 +167,11 @@ public: virtual void get_parameter_list(List<Parameter> *r_parameters) override; + virtual bool can_be_sampled() const override { + return true; + } + virtual Ref<AudioSample> generate_sample() const override; + AudioStreamOggVorbis(); virtual ~AudioStreamOggVorbis(); }; 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/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/SCsub b/platform/linuxbsd/wayland/SCsub index add5bdb504..89b586845c 100644 --- a/platform/linuxbsd/wayland/SCsub +++ b/platform/linuxbsd/wayland/SCsub @@ -152,6 +152,16 @@ env.WAYLAND_API_CODE( ) env.WAYLAND_API_HEADER( + target="protocol/text_input.gen.h", + source="#thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml", +) + +env.WAYLAND_API_CODE( + target="protocol/text_input.gen.c", + source="#thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml", +) + +env.WAYLAND_API_HEADER( target="protocol/xdg_foreign.gen.h", source="#thirdparty/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml", ) @@ -175,6 +185,7 @@ source_files = [ "protocol/primary_selection.gen.c", "protocol/idle_inhibit.gen.c", "protocol/tablet.gen.c", + "protocol/text_input.gen.c", "display_server_wayland.cpp", "wayland_thread.cpp", "key_mapping_xkb.cpp", diff --git a/platform/linuxbsd/wayland/display_server_wayland.cpp b/platform/linuxbsd/wayland/display_server_wayland.cpp index c231dc0f90..adc9beed66 100644 --- a/platform/linuxbsd/wayland/display_server_wayland.cpp +++ b/platform/linuxbsd/wayland/display_server_wayland.cpp @@ -208,6 +208,7 @@ bool DisplayServerWayland::has_feature(Feature p_feature) const { case FEATURE_HIDPI: case FEATURE_SWAP_BUFFERS: case FEATURE_KEEP_SCREEN_ON: + case FEATURE_IME: case FEATURE_CLIPBOARD_PRIMARY: { return true; } break; @@ -903,13 +904,23 @@ bool DisplayServerWayland::can_any_window_draw() const { } void DisplayServerWayland::window_set_ime_active(const bool p_active, DisplayServer::WindowID p_window_id) { - // TODO - DEBUG_LOG_WAYLAND(vformat("wayland stub window_set_ime_active active %s", p_active ? "true" : "false")); + MutexLock mutex_lock(wayland_thread.mutex); + + wayland_thread.window_set_ime_active(p_active, MAIN_WINDOW_ID); } void DisplayServerWayland::window_set_ime_position(const Point2i &p_pos, DisplayServer::WindowID p_window_id) { - // TODO - DEBUG_LOG_WAYLAND(vformat("wayland stub window_set_ime_position pos %s window %d", p_pos, p_window_id)); + MutexLock mutex_lock(wayland_thread.mutex); + + wayland_thread.window_set_ime_position(p_pos, MAIN_WINDOW_ID); +} + +Point2i DisplayServerWayland::ime_get_selection() const { + return ime_selection; +} + +String DisplayServerWayland::ime_get_text() const { + return ime_text; } // NOTE: While Wayland is supposed to be tear-free, wayland-protocols version @@ -1100,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(); @@ -1146,35 +1179,68 @@ void DisplayServerWayland::process_events() { } } } + + Ref<WaylandThread::IMECommitEventMessage> ime_commit_msg = msg; + if (ime_commit_msg.is_valid()) { + for (int i = 0; i < ime_commit_msg->text.length(); i++) { + const char32_t codepoint = ime_commit_msg->text[i]; + + Ref<InputEventKey> ke; + ke.instantiate(); + ke->set_window_id(MAIN_WINDOW_ID); + ke->set_pressed(true); + ke->set_echo(false); + ke->set_keycode(Key::NONE); + ke->set_physical_keycode(Key::NONE); + ke->set_key_label(Key::NONE); + ke->set_unicode(codepoint); + + Input::get_singleton()->parse_input_event(ke); + } + ime_text = String(); + ime_selection = Vector2i(); + + OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_IME_UPDATE); + } + + Ref<WaylandThread::IMEUpdateEventMessage> ime_update_msg = msg; + if (ime_update_msg.is_valid()) { + ime_text = ime_update_msg->text; + ime_selection = ime_update_msg->selection; + + OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_IME_UPDATE); + } } 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 @@ -1403,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 c24eb0ee62..e611533664 100644 --- a/platform/linuxbsd/wayland/display_server_wayland.h +++ b/platform/linuxbsd/wayland/display_server_wayland.h @@ -115,6 +115,9 @@ class DisplayServerWayland : public DisplayServer { Context context; + String ime_text; + Vector2i ime_selection; + bool suspended = false; bool emulate_vsync = false; @@ -151,6 +154,8 @@ class DisplayServerWayland : public DisplayServer { virtual void _show_window(); + void try_suspend(); + public: virtual bool has_feature(Feature p_feature) const override; @@ -259,6 +264,9 @@ public: virtual void window_set_ime_active(const bool p_active, WindowID p_window_id = MAIN_WINDOW_ID) override; virtual void window_set_ime_position(const Point2i &p_pos, WindowID p_window_id = MAIN_WINDOW_ID) override; + virtual Point2i ime_get_selection() const override; + virtual String ime_get_text() const override; + virtual void window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window_id = MAIN_WINDOW_ID) override; virtual DisplayServer::VSyncMode window_get_vsync_mode(WindowID p_window_id) const override; diff --git a/platform/linuxbsd/wayland/wayland_thread.cpp b/platform/linuxbsd/wayland/wayland_thread.cpp index aabf1abdda..341cc517e3 100644 --- a/platform/linuxbsd/wayland/wayland_thread.cpp +++ b/platform/linuxbsd/wayland/wayland_thread.cpp @@ -448,6 +448,12 @@ void WaylandThread::_wl_registry_on_global(void *data, struct wl_registry *wl_re zwp_tablet_seat_v2_add_listener(ss->wp_tablet_seat, &wp_tablet_seat_listener, ss); } + if (!ss->wp_text_input && registry->wp_text_input_manager) { + // IME. + ss->wp_text_input = zwp_text_input_manager_v3_get_text_input(registry->wp_text_input_manager, wl_seat); + zwp_text_input_v3_add_listener(ss->wp_text_input, &wp_text_input_listener, ss); + } + registry->wl_seats.push_back(wl_seat); wl_seat_add_listener(wl_seat, &wl_seat_listener, ss); @@ -547,6 +553,22 @@ void WaylandThread::_wl_registry_on_global(void *data, struct wl_registry *wl_re return; } + + if (strcmp(interface, zwp_text_input_manager_v3_interface.name) == 0) { + registry->wp_text_input_manager = (struct zwp_text_input_manager_v3 *)wl_registry_bind(wl_registry, name, &zwp_text_input_manager_v3_interface, 1); + registry->wp_text_input_manager_name = name; + + // This global creates some seat data. Let's do that for the ones already available. + for (struct wl_seat *wl_seat : registry->wl_seats) { + SeatState *ss = wl_seat_get_seat_state(wl_seat); + ERR_FAIL_NULL(ss); + + ss->wp_text_input = zwp_text_input_manager_v3_get_text_input(registry->wp_text_input_manager, wl_seat); + zwp_text_input_v3_add_listener(ss->wp_text_input, &wp_text_input_listener, ss); + } + + return; + } } void WaylandThread::_wl_registry_on_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name) { @@ -825,6 +847,25 @@ void WaylandThread::_wl_registry_on_global_remove(void *data, struct wl_registry return; } + if (name == registry->wp_text_input_manager_name) { + if (registry->wp_text_input_manager) { + zwp_text_input_manager_v3_destroy(registry->wp_text_input_manager); + registry->wp_text_input_manager = nullptr; + } + + registry->wp_text_input_manager_name = 0; + + for (struct wl_seat *wl_seat : registry->wl_seats) { + SeatState *ss = wl_seat_get_seat_state(wl_seat); + ERR_FAIL_NULL(ss); + + zwp_text_input_v3_destroy(ss->wp_text_input); + ss->wp_text_input = nullptr; + } + + return; + } + { // Iterate through all of the seats to find if any got removed. List<struct wl_seat *>::Element *E = registry->wl_seats.front(); @@ -927,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 @@ -939,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) { @@ -2535,6 +2570,118 @@ void WaylandThread::_wp_tablet_tool_on_frame(void *data, struct zwp_tablet_tool_ old_td = td; } +void WaylandThread::_wp_text_input_on_enter(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface) { + SeatState *ss = (SeatState *)data; + if (!ss) { + return; + } + + ss->ime_enabled = true; +} + +void WaylandThread::_wp_text_input_on_leave(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface) { + SeatState *ss = (SeatState *)data; + if (!ss) { + return; + } + + ss->ime_enabled = false; + ss->ime_active = false; + ss->ime_text = String(); + ss->ime_text_commit = String(); + ss->ime_cursor = Vector2i(); + + Ref<IMEUpdateEventMessage> msg; + msg.instantiate(); + msg->text = String(); + msg->selection = Vector2i(); + ss->wayland_thread->push_message(msg); +} + +void WaylandThread::_wp_text_input_on_preedit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text, int32_t cursor_begin, int32_t cursor_end) { + SeatState *ss = (SeatState *)data; + if (!ss) { + return; + } + + ss->ime_text = String::utf8(text); + + // Convert cursor positions from UTF-8 to UTF-32 offset. + int32_t cursor_begin_utf32 = 0; + int32_t cursor_end_utf32 = 0; + for (int i = 0; i < ss->ime_text.length(); i++) { + uint32_t c = ss->ime_text[i]; + if (c <= 0x7f) { // 7 bits. + cursor_begin -= 1; + cursor_end -= 1; + } else if (c <= 0x7ff) { // 11 bits + cursor_begin -= 2; + cursor_end -= 2; + } else if (c <= 0xffff) { // 16 bits + cursor_begin -= 3; + cursor_end -= 3; + } else if (c <= 0x001fffff) { // 21 bits + cursor_begin -= 4; + cursor_end -= 4; + } else if (c <= 0x03ffffff) { // 26 bits + cursor_begin -= 5; + cursor_end -= 5; + } else if (c <= 0x7fffffff) { // 31 bits + cursor_begin -= 6; + cursor_end -= 6; + } else { + cursor_begin -= 1; + cursor_end -= 1; + } + if (cursor_begin == 0) { + cursor_begin_utf32 = i + 1; + } + if (cursor_end == 0) { + cursor_end_utf32 = i + 1; + } + if (cursor_begin <= 0 && cursor_end <= 0) { + break; + } + } + ss->ime_cursor = Vector2i(cursor_begin_utf32, cursor_end_utf32 - cursor_begin_utf32); +} + +void WaylandThread::_wp_text_input_on_commit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text) { + SeatState *ss = (SeatState *)data; + if (!ss) { + return; + } + + ss->ime_text_commit = String::utf8(text); +} + +void WaylandThread::_wp_text_input_on_delete_surrounding_text(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t before_length, uint32_t after_length) { + // Not implemented. +} + +void WaylandThread::_wp_text_input_on_done(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t serial) { + SeatState *ss = (SeatState *)data; + if (!ss) { + return; + } + + if (!ss->ime_text_commit.is_empty()) { + Ref<IMECommitEventMessage> msg; + msg.instantiate(); + msg->text = ss->ime_text_commit; + ss->wayland_thread->push_message(msg); + } else if (!ss->ime_text.is_empty()) { + Ref<IMEUpdateEventMessage> msg; + msg.instantiate(); + msg->text = ss->ime_text; + msg->selection = ss->ime_cursor; + ss->wayland_thread->push_message(msg); + } + ss->ime_text = String(); + ss->ime_text_commit = String(); + ss->ime_cursor = Vector2i(); +} + void WaylandThread::_xdg_activation_token_on_done(void *data, struct xdg_activation_token_v1 *xdg_activation_token, const char *token) { WindowState *ws = (WindowState *)data; ERR_FAIL_NULL(ws); @@ -3088,10 +3235,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); @@ -3729,6 +3872,35 @@ void WaylandThread::cursor_shape_clear_custom_image(DisplayServer::CursorShape p } } +void WaylandThread::window_set_ime_active(const bool p_active, DisplayServer::WindowID p_window_id) { + SeatState *ss = wl_seat_get_seat_state(wl_seat_current); + + if (ss && ss->wp_text_input && ss->ime_enabled) { + if (p_active) { + ss->ime_active = true; + zwp_text_input_v3_enable(ss->wp_text_input); + zwp_text_input_v3_set_cursor_rectangle(ss->wp_text_input, ss->ime_rect.position.x, ss->ime_rect.position.y, ss->ime_rect.size.x, ss->ime_rect.size.y); + } else { + ss->ime_active = false; + ss->ime_text = String(); + ss->ime_text_commit = String(); + ss->ime_cursor = Vector2i(); + zwp_text_input_v3_disable(ss->wp_text_input); + } + zwp_text_input_v3_commit(ss->wp_text_input); + } +} + +void WaylandThread::window_set_ime_position(const Point2i &p_pos, DisplayServer::WindowID p_window_id) { + SeatState *ss = wl_seat_get_seat_state(wl_seat_current); + + if (ss && ss->wp_text_input && ss->ime_enabled) { + ss->ime_rect = Rect2i(p_pos, Size2i(1, 10)); + zwp_text_input_v3_set_cursor_rectangle(ss->wp_text_input, ss->ime_rect.position.x, ss->ime_rect.position.y, ss->ime_rect.size.x, ss->ime_rect.size.y); + zwp_text_input_v3_commit(ss->wp_text_input); + } +} + int WaylandThread::keyboard_get_layout_count() const { SeatState *ss = wl_seat_get_seat_state(wl_seat_current); @@ -3938,6 +4110,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 0756b6b0ea..775ca71346 100644 --- a/platform/linuxbsd/wayland/wayland_thread.h +++ b/platform/linuxbsd/wayland/wayland_thread.h @@ -62,6 +62,7 @@ #undef pointer #include "wayland/protocol/fractional_scale.gen.h" #include "wayland/protocol/tablet.gen.h" +#include "wayland/protocol/text_input.gen.h" #include "wayland/protocol/viewporter.gen.h" #include "wayland/protocol/wayland.gen.h" #include "wayland/protocol/xdg_activation.gen.h" @@ -112,6 +113,17 @@ public: Vector<String> files; }; + class IMEUpdateEventMessage : public Message { + public: + String text; + Vector2i selection; + }; + + class IMECommitEventMessage : public Message { + public: + String text; + }; + struct RegistryState { WaylandThread *wayland_thread; @@ -170,6 +182,9 @@ public: struct zwp_tablet_manager_v2 *wp_tablet_manager = nullptr; uint32_t wp_tablet_manager_name = 0; + + struct zwp_text_input_manager_v3 *wp_text_input_manager = nullptr; + uint32_t wp_text_input_manager_name = 0; }; // General Wayland-specific states. Shouldn't be accessed directly. @@ -438,6 +453,15 @@ public: struct zwp_tablet_seat_v2 *wp_tablet_seat = nullptr; List<struct zwp_tablet_tool_v2 *> tablet_tools; + + // IME. + struct zwp_text_input_v3 *wp_text_input = nullptr; + bool ime_enabled = false; + bool ime_active = false; + String ime_text; + String ime_text_commit; + Vector2i ime_cursor; + Rect2i ime_rect; }; struct CustomCursor { @@ -618,6 +642,13 @@ private: static void _wp_tablet_tool_on_button(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t serial, uint32_t button, uint32_t state); static void _wp_tablet_tool_on_frame(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t time); + static void _wp_text_input_on_enter(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface); + static void _wp_text_input_on_leave(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface); + static void _wp_text_input_on_preedit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text, int32_t cursor_begin, int32_t cursor_end); + static void _wp_text_input_on_commit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text); + static void _wp_text_input_on_delete_surrounding_text(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t before_length, uint32_t after_length); + static void _wp_text_input_on_done(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t serial); + static void _xdg_toplevel_decoration_on_configure(void *data, struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration, uint32_t mode); static void _xdg_exported_on_exported(void *data, zxdg_exported_v1 *exported, const char *handle); @@ -779,6 +810,15 @@ private: .frame = _wp_tablet_tool_on_frame, }; + static constexpr struct zwp_text_input_v3_listener wp_text_input_listener = { + .enter = _wp_text_input_on_enter, + .leave = _wp_text_input_on_leave, + .preedit_string = _wp_text_input_on_preedit_string, + .commit_string = _wp_text_input_on_commit_string, + .delete_surrounding_text = _wp_text_input_on_delete_surrounding_text, + .done = _wp_text_input_on_done, + }; + static constexpr struct zxdg_exported_v1_listener xdg_exported_listener = { .handle = _xdg_exported_on_exported }; @@ -929,6 +969,9 @@ public: void cursor_shape_set_custom_image(DisplayServer::CursorShape p_cursor_shape, Ref<Image> p_image, const Point2i &p_hotspot); void cursor_shape_clear_custom_image(DisplayServer::CursorShape p_cursor_shape); + void window_set_ime_active(const bool p_active, DisplayServer::WindowID p_window_id); + void window_set_ime_position(const Point2i &p_pos, DisplayServer::WindowID p_window_id); + int keyboard_get_layout_count() const; int keyboard_get_current_layout_index() const; void keyboard_set_current_layout_index(int p_index); @@ -949,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/linuxbsd/x11/gl_manager_x11.cpp b/platform/linuxbsd/x11/gl_manager_x11.cpp index febb7ae584..738ebffa02 100644 --- a/platform/linuxbsd/x11/gl_manager_x11.cpp +++ b/platform/linuxbsd/x11/gl_manager_x11.cpp @@ -357,7 +357,7 @@ void GLManager_X11::set_use_vsync(bool p_use) { GLXDrawable drawable = glXGetCurrentDrawable(); glXSwapIntervalEXT(disp.x11_display, drawable, val); } else { - WARN_PRINT("Could not set V-Sync mode. V-Sync is not supported."); + WARN_PRINT_ONCE("Could not set V-Sync mode, as changing V-Sync mode is not supported by the graphics driver."); return; } use_vsync = p_use; 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/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/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 ec3c22bf7c..dd986e650c 100644 --- a/platform/web/audio_driver_web.cpp +++ b/platform/web/audio_driver_web.cpp @@ -33,6 +33,7 @@ #include "godot_audio.h" #include "core/config/project_settings.h" +#include "servers/audio/audio_stream.h" #include <emscripten.h> @@ -186,6 +187,181 @@ Error AudioDriverWeb::input_stop() { return OK; } +bool AudioDriverWeb::is_stream_registered_as_sample(const Ref<AudioStream> &p_stream) const { + ERR_FAIL_COND_V_MSG(p_stream.is_null(), false, "Parameter p_stream is null."); + return godot_audio_sample_stream_is_registered(itos(p_stream->get_instance_id()).utf8().get_data()) != 0; +} + +void AudioDriverWeb::register_sample(const Ref<AudioSample> &p_sample) { + ERR_FAIL_COND_MSG(p_sample.is_null(), "Parameter p_sample is null."); + ERR_FAIL_COND_MSG(p_sample->stream.is_null(), "Parameter p_sample->stream is null."); + + String loop_mode; + switch (p_sample->loop_mode) { + case AudioSample::LoopMode::LOOP_DISABLED: { + loop_mode = "disabled"; + } break; + + case AudioSample::LoopMode::LOOP_FORWARD: { + loop_mode = "forward"; + } break; + + case AudioSample::LoopMode::LOOP_PINGPONG: { + loop_mode = "pingpong"; + } break; + + case AudioSample::LoopMode::LOOP_BACKWARD: { + loop_mode = "backward"; + } break; + } + + double length = p_sample->stream->get_length(); + + Vector<AudioFrame> frames; + int frames_total = mix_rate * length; + { + Ref<AudioStreamPlayback> stream_playback = p_sample->stream->instantiate_playback(); + frames.resize(frames_total); + AudioFrame *frames_ptr = frames.ptrw(); + stream_playback->start(); + stream_playback->mix(frames_ptr, 1.0f, frames_total); + } + + PackedFloat32Array data; + data.resize(frames_total * 2); + float *data_ptrw = data.ptrw(); + for (int i = 0; i < frames_total; i++) { + data_ptrw[i] = frames[i].left; + data_ptrw[i + frames_total] = frames[i].right; + } + + godot_audio_sample_register_stream( + itos(p_sample->stream->get_instance_id()).utf8().get_data(), + data_ptrw, + frames_total, + loop_mode.utf8().get_data(), + p_sample->loop_begin, + p_sample->loop_end); +} + +void AudioDriverWeb::unregister_sample(const Ref<AudioSample> &p_sample) { + ERR_FAIL_COND_MSG(p_sample.is_null(), "Parameter p_sample is null."); + ERR_FAIL_COND_MSG(p_sample->stream.is_null(), "Parameter p_sample->stream is null."); + + godot_audio_sample_unregister_stream(itos(p_sample->stream->get_instance_id()).utf8().get_data()); +} + +void AudioDriverWeb::start_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + ERR_FAIL_COND_MSG(p_playback->stream.is_null(), "Parameter p_playback->stream is null."); + + constexpr int real_max_channels = AudioServer::MAX_CHANNELS_PER_BUS * 2; + PackedFloat32Array volume; + volume.resize(real_max_channels); + float *volume_ptrw = volume.ptrw(); + for (int i = 0; i < real_max_channels; i += 2) { + if (p_playback->volume_vector.is_empty()) { + volume_ptrw[i] = 0; + volume_ptrw[i + 1] = 0; + } else { + const AudioFrame &frame = p_playback->volume_vector[i / 2]; + volume_ptrw[i] = frame.left; + volume_ptrw[i + 1] = frame.right; + } + } + godot_audio_sample_start( + itos(p_playback->get_instance_id()).utf8().get_data(), + itos(p_playback->stream->get_instance_id()).utf8().get_data(), + AudioServer::get_singleton()->get_bus_index(p_playback->bus), + p_playback->offset, + volume_ptrw); +} + +void AudioDriverWeb::stop_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + godot_audio_sample_stop(itos(p_playback->get_instance_id()).utf8().get_data()); +} + +void AudioDriverWeb::set_sample_playback_pause(const Ref<AudioSamplePlayback> &p_playback, bool p_paused) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + godot_audio_sample_set_pause(itos(p_playback->get_instance_id()).utf8().get_data(), p_paused); +} + +bool AudioDriverWeb::is_sample_playback_active(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_V_MSG(p_playback.is_null(), false, "Parameter p_playback is null."); + return godot_audio_sample_is_active(itos(p_playback->get_instance_id()).utf8().get_data()) != 0; +} + +void AudioDriverWeb::update_sample_playback_pitch_scale(const Ref<AudioSamplePlayback> &p_playback, float p_pitch_scale) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + godot_audio_sample_update_pitch_scale( + itos(p_playback->get_instance_id()).utf8().get_data(), + p_pitch_scale); +} + +void AudioDriverWeb::set_sample_playback_bus_volumes_linear(const Ref<AudioSamplePlayback> &p_playback, const HashMap<StringName, Vector<AudioFrame>> &p_bus_volumes) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + + constexpr int real_max_channels = AudioServer::MAX_CHANNELS_PER_BUS * 2; + + PackedInt32Array buses; + buses.resize(p_bus_volumes.size()); + int32_t *buses_ptrw = buses.ptrw(); + PackedFloat32Array values; + values.resize(p_bus_volumes.size() * AudioServer::MAX_CHANNELS_PER_BUS * 2); + float *values_ptrw = values.ptrw(); + int idx = 0; + for (KeyValue<StringName, Vector<AudioFrame>> pair : p_bus_volumes) { + int bus_index = AudioServer::get_singleton()->get_bus_index(pair.key); + buses_ptrw[idx] = bus_index; + ERR_FAIL_COND(pair.value.size() != AudioServer::MAX_CHANNELS_PER_BUS); + for (int i = 0; i < real_max_channels; i += 2) { + const AudioFrame &frame = pair.value[i / 2]; + values_ptrw[(idx * real_max_channels) + i] = frame.left; + values_ptrw[(idx * real_max_channels) + i + 1] = frame.right; + } + idx++; + } + godot_audio_sample_set_volumes_linear( + itos(p_playback->get_instance_id()).utf8().get_data(), + buses_ptrw, + buses.size(), + values_ptrw, + values.size()); +} + +void AudioDriverWeb::set_sample_bus_count(int p_count) { + godot_audio_sample_bus_set_count(p_count); +} + +void AudioDriverWeb::remove_sample_bus(int p_index) { + godot_audio_sample_bus_remove(p_index); +} + +void AudioDriverWeb::add_sample_bus(int p_at_pos) { + godot_audio_sample_bus_add(p_at_pos); +} + +void AudioDriverWeb::move_sample_bus(int p_bus, int p_to_pos) { + godot_audio_sample_bus_move(p_bus, p_to_pos); +} + +void AudioDriverWeb::set_sample_bus_send(int p_bus, const StringName &p_send) { + godot_audio_sample_bus_set_send(p_bus, AudioServer::get_singleton()->get_bus_index(p_send)); +} + +void AudioDriverWeb::set_sample_bus_volume_db(int p_bus, float p_volume_db) { + godot_audio_sample_bus_set_volume_db(p_bus, p_volume_db); +} + +void AudioDriverWeb::set_sample_bus_solo(int p_bus, bool p_enable) { + godot_audio_sample_bus_set_solo(p_bus, p_enable); +} + +void AudioDriverWeb::set_sample_bus_mute(int p_bus, bool p_enable) { + godot_audio_sample_bus_set_mute(p_bus, p_enable); +} + #ifdef THREADS_ENABLED /// AudioWorkletNode implementation (threads) diff --git a/platform/web/audio_driver_web.h b/platform/web/audio_driver_web.h index df88d0a94c..298ad90fae 100644 --- a/platform/web/audio_driver_web.h +++ b/platform/web/audio_driver_web.h @@ -87,6 +87,26 @@ public: static void resume(); + // Samples. + virtual bool is_stream_registered_as_sample(const Ref<AudioStream> &p_stream) const override; + virtual void register_sample(const Ref<AudioSample> &p_sample) override; + virtual void unregister_sample(const Ref<AudioSample> &p_sample) override; + virtual void start_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + virtual void stop_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + virtual void set_sample_playback_pause(const Ref<AudioSamplePlayback> &p_playback, bool p_paused) override; + virtual bool is_sample_playback_active(const Ref<AudioSamplePlayback> &p_playback) override; + virtual void update_sample_playback_pitch_scale(const Ref<AudioSamplePlayback> &p_playback, float p_pitch_scale = 0.0f) override; + virtual void set_sample_playback_bus_volumes_linear(const Ref<AudioSamplePlayback> &p_playback, const HashMap<StringName, Vector<AudioFrame>> &p_bus_volumes) override; + + virtual void set_sample_bus_count(int p_count) override; + virtual void remove_sample_bus(int p_index) override; + virtual void add_sample_bus(int p_at_pos = -1) override; + virtual void move_sample_bus(int p_bus, int p_to_pos) override; + virtual void set_sample_bus_send(int p_bus, const StringName &p_send) override; + virtual void set_sample_bus_volume_db(int p_bus, float p_volume_db) override; + virtual void set_sample_bus_solo(int p_bus, bool p_enable) override; + virtual void set_sample_bus_mute(int p_bus, bool p_enable) override; + AudioDriverWeb() {} }; diff --git a/platform/web/detect.py b/platform/web/detect.py index 1b15ff8e2e..cb4dac1125 100644 --- a/platform/web/detect.py +++ b/platform/web/detect.py @@ -207,11 +207,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/eslint.config.cjs b/platform/web/eslint.config.cjs index 65ade096a7..8913a738f6 100644 --- a/platform/web/eslint.config.cjs +++ b/platform/web/eslint.config.cjs @@ -147,6 +147,7 @@ module.exports = [ 'GodotEventListeners': true, 'GodotFS': true, 'GodotOS': true, + 'GodotAudio': true, 'GodotRuntime': true, 'IDHandler': true, 'XRWebGLLayer': true, diff --git a/platform/web/export/export_plugin.cpp b/platform/web/export/export_plugin.cpp index 06dfe7d646..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,8 +349,8 @@ 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/thread_support"), true)); // Thread support (i.e. run with or without COEP/COOP headers). + 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 a32d5acd97..8bebbcf7de 100644 --- a/platform/web/godot_audio.h +++ b/platform/web/godot_audio.h @@ -47,6 +47,26 @@ extern void godot_audio_resume(); extern int godot_audio_input_start(); extern void godot_audio_input_stop(); +// Samples +extern int godot_audio_sample_stream_is_registered(const char *p_stream_object_id); +extern void godot_audio_sample_register_stream(const char *p_stream_object_id, float *p_frames_buf, int p_frames_total, const char *p_loop_mode, int p_loop_begin, int p_loop_end); +extern void godot_audio_sample_unregister_stream(const char *p_stream_object_id); +extern void godot_audio_sample_start(const char *p_playback_object_id, const char *p_stream_object_id, int p_bus_index, float p_offset, float *p_volume_ptr); +extern void godot_audio_sample_stop(const char *p_playback_object_id); +extern void godot_audio_sample_set_pause(const char *p_playback_object_id, bool p_pause); +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_bus_set_count(int p_count); +extern void godot_audio_sample_bus_remove(int p_index); +extern void godot_audio_sample_bus_add(int p_at_pos = -1); +extern void godot_audio_sample_bus_move(int p_bus, int p_to_pos); +extern void godot_audio_sample_bus_set_send(int p_bus, int p_send_index); +extern void godot_audio_sample_bus_set_volume_db(int p_bus, float p_volume_db); +extern void godot_audio_sample_bus_set_solo(int p_bus, bool p_enable); +extern void godot_audio_sample_bus_set_mute(int p_bus, bool p_enable); + // Worklet typedef int32_t GodotAudioState[4]; extern int godot_audio_worklet_create(int p_channels); diff --git a/platform/web/js/engine/features.js b/platform/web/js/engine/features.js index 601fa4a117..c366683dfa 100644 --- a/platform/web/js/engine/features.js +++ b/platform/web/js/engine/features.js @@ -76,7 +76,8 @@ const Features = { */ getMissingFeatures: function (supportedFeatures = {}) { const { - threads: supportsThreads = true, + // Quotes are needed for the Closure compiler. + 'threads': supportsThreads = true, } = supportedFeatures; const missing = []; diff --git a/platform/web/js/libs/library_godot_audio.js b/platform/web/js/libs/library_godot_audio.js index b54c5cac85..531dbdaeab 100644 --- a/platform/web/js/libs/library_godot_audio.js +++ b/platform/web/js/libs/library_godot_audio.js @@ -28,18 +28,1104 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /**************************************************************************/ -const GodotAudio = { +/** + * @typedef { "disabled" | "forward" | "backward" | "pingpong" } LoopMode + */ + +/** + * @typedef {{ + * id: string + * audioBuffer: AudioBuffer + * }} SampleParams + * @typedef {{ + * numberOfChannels?: number + * sampleRate?: number + * loopMode?: LoopMode + * loopBegin?: number + * loopEnd?: number + * }} SampleOptions + */ + +/** + * Represents a sample, memory-wise. + * @class + */ +class Sample { + /** + * Returns a `Sample`. + * @param {string} id Id of the `Sample` to get. + * @returns {Sample} + * @throws {ReferenceError} When no `Sample` is found + */ + static getSample(id) { + if (!GodotAudio.samples.has(id)) { + throw new ReferenceError(`Could not find sample "${id}"`); + } + return GodotAudio.samples.get(id); + } + + /** + * Returns a `Sample` or `null`, if it doesn't exist. + * @param {string} id Id of the `Sample` to get. + * @returns {Sample?} + */ + static getSampleOrNull(id) { + return GodotAudio.samples.get(id) ?? null; + } + + /** + * Creates a `Sample` based on the params. Will register it to the + * `GodotAudio.samples` registry. + * @param {SampleParams} params Base params + * @param {SampleOptions} [options={}] Optional params + * @returns {Sample} + */ + static create(params, options = {}) { + const sample = new GodotAudio.Sample(params, options); + GodotAudio.samples.set(params.id, sample); + return sample; + } + + /** + * Deletes a `Sample` based on the id. + * @param {string} id `Sample` id to delete + * @returns {void} + */ + static delete(id) { + GodotAudio.samples.delete(id); + } + + /** + * `Sample` constructor. + * @param {SampleParams} params Base params + * @param {SampleOptions} [options={}] Optional params + * @constructor + */ + constructor(params, options = {}) { + /** @type {string} */ + this.id = params.id; + /** @type {AudioBuffer} */ + this._audioBuffer = null; + /** @type {number} */ + this.numberOfChannels = options.numberOfChannels ?? 2; + /** @type {number} */ + this.sampleRate = options.sampleRate ?? 44100; + /** @type {LoopMode} */ + this.loopMode = options.loopMode ?? 'disabled'; + /** @type {number} */ + this.loopBegin = options.loopBegin ?? 0; + /** @type {number} */ + this.loopEnd = options.loopEnd ?? 0; + + this.setAudioBuffer(params.audioBuffer); + } + + /** + * Gets the audio buffer of the sample. + * @returns {AudioBuffer} + */ + getAudioBuffer() { + return this._duplicateAudioBuffer(); + } + + /** + * Sets the audio buffer of the sample. + * @param {AudioBuffer} val The audio buffer to set. + * @returns {void} + */ + setAudioBuffer(val) { + this._audioBuffer = val; + } + + /** + * Clears the current sample. + * @returns {void} + */ + clear() { + this.setAudioBuffer(null); + GodotAudio.Sample.delete(this.id); + } + + /** + * Returns a duplicate of the stored audio buffer. + * @returns {AudioBuffer} + */ + _duplicateAudioBuffer() { + if (this._audioBuffer == null) { + throw new Error('couldn\'t duplicate a null audioBuffer'); + } + /** @type {Float32Array[]} */ + const channels = new Array(this._audioBuffer.numberOfChannels); + for (let i = 0; i < this._audioBuffer.numberOfChannels; i++) { + const channel = new Float32Array(this._audioBuffer.getChannelData(i)); + channels[i] = channel; + } + const buffer = GodotAudio.ctx.createBuffer( + this.numberOfChannels, + this._audioBuffer.length, + this._audioBuffer.sampleRate + ); + for (let i = 0; i < channels.length; i++) { + buffer.copyToChannel(channels[i], i, 0); + } + return buffer; + } +} + +/** + * Represents a `SampleNode` linked to a `Bus`. + * @class + */ +class SampleNodeBus { + /** + * Creates a new `SampleNodeBus`. + * @param {Bus} bus The bus related to the new `SampleNodeBus`. + * @returns {SampleNodeBus} + */ + static create(bus) { + return new GodotAudio.SampleNodeBus(bus); + } + + /** + * `SampleNodeBus` constructor. + * @param {Bus} bus The bus related to the new `SampleNodeBus`. + * @constructor + */ + constructor(bus) { + const NUMBER_OF_WEB_CHANNELS = 6; + + /** @type {Bus} */ + this._bus = bus; + + /** @type {ChannelSplitterNode} */ + this._channelSplitter = GodotAudio.ctx.createChannelSplitter(NUMBER_OF_WEB_CHANNELS); + /** @type {GainNode} */ + this._l = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._r = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._sl = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._sr = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._c = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._lfe = GodotAudio.ctx.createGain(); + /** @type {ChannelMergerNode} */ + this._channelMerger = GodotAudio.ctx.createChannelMerger(NUMBER_OF_WEB_CHANNELS); + + this._channelSplitter + .connect(this._l, GodotAudio.WebChannel.CHANNEL_L) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_L + ); + this._channelSplitter + .connect(this._r, GodotAudio.WebChannel.CHANNEL_R) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_R + ); + this._channelSplitter + .connect(this._sl, GodotAudio.WebChannel.CHANNEL_SL) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_SL + ); + this._channelSplitter + .connect(this._sr, GodotAudio.WebChannel.CHANNEL_SR) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_SR + ); + this._channelSplitter + .connect(this._c, GodotAudio.WebChannel.CHANNEL_C) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_C + ); + this._channelSplitter + .connect(this._lfe, GodotAudio.WebChannel.CHANNEL_L) + .connect( + this._channelMerger, + GodotAudio.WebChannel.CHANNEL_L, + GodotAudio.WebChannel.CHANNEL_LFE + ); + + this._channelMerger.connect(this._bus.getInputNode()); + } + + /** + * Returns the input node. + * @returns {AudioNode} + */ + getInputNode() { + return this._channelSplitter; + } + + /** + * Returns the output node. + * @returns {AudioNode} + */ + getOutputNode() { + return this._channelMerger; + } + + /** + * Sets the volume for each (split) channel. + * @param {Float32Array} volume Volume array from the engine for each channel. + * @returns {void} + */ + setVolume(volume) { + if (volume.length !== GodotAudio.MAX_VOLUME_CHANNELS) { + throw new Error( + `Volume length isn't "${GodotAudio.MAX_VOLUME_CHANNELS}", is ${volume.length} instead` + ); + } + this._l.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_L] ?? 0; + this._r.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_R] ?? 0; + this._sl.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_SL] ?? 0; + this._sr.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_SR] ?? 0; + this._c.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_C] ?? 0; + this._lfe.gain.value = volume[GodotAudio.GodotChannel.CHANNEL_LFE] ?? 0; + } + + /** + * Clears the current `SampleNodeBus` instance. + * @returns {void} + */ + clear() { + this._bus = null; + this._channelSplitter.disconnect(); + this._channelSplitter = null; + this._l.disconnect(); + this._l = null; + this._r.disconnect(); + this._r = null; + this._sl.disconnect(); + this._sl = null; + this._sr.disconnect(); + this._sr = null; + this._c.disconnect(); + this._c = null; + this._lfe.disconnect(); + this._lfe = null; + this._channelMerger.disconnect(); + this._channelMerger = null; + } +} + +/** + * @typedef {{ + * id: string + * streamObjectId: string + * busIndex: number + * }} SampleNodeParams + * @typedef {{ + * offset?: number + * playbackRate?: number + * startTime?: number + * loopMode?: LoopMode + * volume?: Float32Array + * }} SampleNodeOptions + */ + +/** + * Represents an `AudioNode` of a `Sample`. + * @class + */ +class SampleNode { + /** + * Returns a `SampleNode`. + * @param {string} id Id of the `SampleNode`. + * @returns {SampleNode} + * @throws {ReferenceError} When no `SampleNode` is not found + */ + static getSampleNode(id) { + if (!GodotAudio.sampleNodes.has(id)) { + throw new ReferenceError(`Could not find sample node "${id}"`); + } + return GodotAudio.sampleNodes.get(id); + } + + /** + * Returns a `SampleNode`, returns null if not found. + * @param {string} id Id of the SampleNode. + * @returns {SampleNode?} + */ + static getSampleNodeOrNull(id) { + return GodotAudio.sampleNodes.get(id) ?? null; + } + + /** + * Stops a `SampleNode` by id. + * @param {string} id Id of the `SampleNode` to stop. + * @returns {void} + */ + static stopSampleNode(id) { + const sampleNode = GodotAudio.SampleNode.getSampleNodeOrNull(id); + if (sampleNode == null) { + return; + } + sampleNode.stop(); + } + + /** + * Pauses the `SampleNode` by id. + * @param {string} id Id of the `SampleNode` to pause. + * @param {boolean} enable State of the pause + * @returns {void} + */ + static pauseSampleNode(id, enable) { + const sampleNode = GodotAudio.SampleNode.getSampleNodeOrNull(id); + if (sampleNode == null) { + return; + } + sampleNode.pause(enable); + } + + /** + * Creates a `SampleNode` based on the params. Will register the `SampleNode` to + * the `GodotAudio.sampleNodes` regisery. + * @param {SampleNodeParams} params Base params. + * @param {SampleNodeOptions} options Optional params. + * @returns {SampleNode} + */ + static create(params, options = {}) { + const sampleNode = new GodotAudio.SampleNode(params, options); + GodotAudio.sampleNodes.set(params.id, sampleNode); + return sampleNode; + } + + /** + * Deletes a `SampleNode` based on the id. + * @param {string} id Id of the `SampleNode` to delete. + * @returns {void} + */ + static delete(id) { + GodotAudio.sampleNodes.delete(id); + } + + /** + * @param {SampleNodeParams} params Base params + * @param {SampleNodeOptions} [options={}] Optional params + * @constructor + */ + constructor(params, options = {}) { + /** @type {string} */ + this.id = params.id; + /** @type {string} */ + this.streamObjectId = params.streamObjectId; + /** @type {number} */ + this.offset = options.offset ?? 0; + /** @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 = 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 | null} */ + this._source = GodotAudio.ctx.createBufferSource(); + /** @type {AudioBufferSourceNode["onended"]} */ + this._onended = null; + + this.setPlaybackRate(options.playbackRate ?? 44100); + this._source.buffer = this.getSample().getAudioBuffer(); + + this._addEndedListener(); + + const bus = GodotAudio.Bus.getBus(params.busIndex); + const sampleNodeBus = this.getSampleNodeBus(bus); + sampleNodeBus.setVolume(options.volume); + } + + /** + * Gets the playback rate. + * @returns {number} + */ + getPlaybackRate() { + return this._playbackRate; + } + + /** + * Sets the playback rate. + * @param {number} val Value to set. + * @returns {void} + */ + setPlaybackRate(val) { + this._playbackRate = val; + this._syncPlaybackRate(); + } + + /** + * Gets the pitch scale. + * @returns {number} + */ + getPitchScale() { + return this._pitchScale; + } + + /** + * Sets the pitch scale. + * @param {number} val Value to set. + * @returns {void} + */ + setPitchScale(val) { + this._pitchScale = val; + this._syncPlaybackRate(); + } + + /** + * Returns the linked `Sample`. + * @returns {Sample} + */ + getSample() { + return GodotAudio.Sample.getSample(this.streamObjectId); + } + + /** + * Returns the output node. + * @returns {AudioNode} + */ + getOutputNode() { + return this._source; + } + + /** + * Starts the `SampleNode`. + * @returns {void} + */ + start() { + this._resetSourceStartTime(); + this._source.start(this.startTime, this.offset); + } + + /** + * Stops the `SampleNode`. + * @returns {void} + */ + 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._pause(); + return; + } + + this._unpause(); + } + + /** + * Connects an AudioNode to the output node of this `SampleNode`. + * @param {AudioNode} node AudioNode to connect. + * @returns {void} + */ + connect(node) { + return this.getOutputNode().connect(node); + } + + /** + * Sets the volumes of the `SampleNode` for each buses passed in parameters. + * @param {Bus[]} buses + * @param {Float32Array} volumes + */ + setVolumes(buses, volumes) { + for (let busIdx = 0; busIdx < buses.length; busIdx++) { + const sampleNodeBus = this.getSampleNodeBus(buses[busIdx]); + sampleNodeBus.setVolume( + volumes.slice( + busIdx * GodotAudio.MAX_VOLUME_CHANNELS, + (busIdx * GodotAudio.MAX_VOLUME_CHANNELS) + GodotAudio.MAX_VOLUME_CHANNELS + ) + ); + } + } + + /** + * Returns the SampleNodeBus based on the bus in parameters. + * @param {Bus} bus Bus to get the SampleNodeBus from. + * @returns {SampleNodeBus} + */ + getSampleNodeBus(bus) { + if (!this._sampleNodeBuses.has(bus)) { + const sampleNodeBus = GodotAudio.SampleNodeBus.create(bus); + this._sampleNodeBuses.set(bus, sampleNodeBus); + this._source.connect(sampleNodeBus.getInputNode()); + } + return this._sampleNodeBuses.get(bus); + } + + /** + * Clears the `SampleNode`. + * @returns {void} + */ + clear() { + 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(); + + 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': + self.stop(); + break; + case 'forward': + case 'backward': + self.restart(); + break; + default: + // do nothing + } + }; + this._source.addEventListener('ended', this._onended); + } +} + +/** + * Collection of nodes to represents a Godot Engine audio bus. + * @class + */ +class Bus { + /** + * Returns the number of registered buses. + * @returns {number} + */ + static getCount() { + return GodotAudio.buses.length; + } + + /** + * Sets the number of registered buses. + * Will delete buses if lower than the current number. + * @param {number} val Count of registered buses. + * @returns {void} + */ + static setCount(val) { + const buses = GodotAudio.buses; + if (val === buses.length) { + return; + } + + if (val < buses.length) { + // TODO: what to do with nodes connected to the deleted buses? + const deletedBuses = buses.slice(val); + for (let i = 0; i < deletedBuses.length; i++) { + const deletedBus = deletedBuses[i]; + deletedBus.clear(); + } + GodotAudio.buses = buses.slice(0, val); + return; + } + + for (let i = GodotAudio.buses.length; i < val; i++) { + GodotAudio.Bus.create(); + } + } + + /** + * Returns a `Bus` based on it's index number. + * @param {number} index + * @returns {Bus} + * @throws {ReferenceError} If the index value is outside the registry. + */ + static getBus(index) { + if (index < 0 || index >= GodotAudio.buses.length) { + throw new ReferenceError(`invalid bus index "${index}"`); + } + return GodotAudio.buses[index]; + } + + /** + * Returns a `Bus` based on it's index number. Returns null if it doesn't exist. + * @param {number} index + * @returns {Bus?} + */ + static getBusOrNull(index) { + if (index < 0 || index >= GodotAudio.buses.length) { + return null; + } + return GodotAudio.buses[index]; + } + + /** + * Move a bus from an index to another. + * @param {number} fromIndex From index + * @param {number} toIndex To index + * @returns {void} + */ + static move(fromIndex, toIndex) { + const movedBus = GodotAudio.Bus.getBus(fromIndex); + const buses = GodotAudio.buses.filter((_, i) => i !== fromIndex); + // Inserts at index. + buses.splice(toIndex - 1, 0, movedBus); + GodotAudio.buses = buses; + } + + /** + * Adds a new bus at the specified index. + * @param {number} index Index to add a new bus. + * @returns {void} + */ + static addAt(index) { + const newBus = GodotAudio.Bus.create(); + if (index !== newBus.getId()) { + GodotAudio.Bus.move(newBus.getId(), index); + } + } + + /** + * Creates a `Bus` and registers it. + * @returns {Bus} + */ + static create() { + const newBus = new GodotAudio.Bus(); + const isFirstBus = GodotAudio.buses.length === 0; + GodotAudio.buses.push(newBus); + if (isFirstBus) { + newBus.setSend(null); + } else { + newBus.setSend(GodotAudio.Bus.getBus(0)); + } + return newBus; + } + + /** + * `Bus` constructor. + * @constructor + */ + constructor() { + /** @type {Set<SampleNode>} */ + this._sampleNodes = new Set(); + /** @type {boolean} */ + this.isSolo = false; + /** @type {Bus?} */ + this._send = null; + + /** @type {GainNode} */ + this._gainNode = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._soloNode = GodotAudio.ctx.createGain(); + /** @type {GainNode} */ + this._muteNode = GodotAudio.ctx.createGain(); + + this._gainNode + .connect(this._soloNode) + .connect(this._muteNode); + } + + /** + * Returns the current id of the bus (its index). + * @returns {number} + */ + getId() { + return GodotAudio.buses.indexOf(this); + } + + /** + * Returns the bus volume db value. + * @returns {number} + */ + getVolumeDb() { + return GodotAudio.linear_to_db(this._gainNode.gain.value); + } + + /** + * Sets the bus volume db value. + * @param {number} val Value to set + * @returns {void} + */ + setVolumeDb(val) { + this._gainNode.gain.value = GodotAudio.db_to_linear(val); + } + + /** + * Returns the "send" bus. + * If null, this bus sends its contents directly to the output. + * If not null, this bus sends its contents to another bus. + * @returns {Bus?} + */ + getSend() { + return this._send; + } + + /** + * Sets the "send" bus. + * If null, this bus sends its contents directly to the output. + * If not null, this bus sends its contents to another bus. + * + * **Note:** if null, `getId()` must be equal to 0. Otherwise, it will throw. + * @param {Bus?} val + * @returns {void} + * @throws {Error} When val is `null` and `getId()` isn't equal to 0 + */ + setSend(val) { + this._send = val; + if (val == null) { + if (this.getId() == 0) { + this.getOutputNode().connect(GodotAudio.ctx.destination); + return; + } + throw new Error( + `Cannot send to "${val}" without the bus being at index 0 (current index: ${this.getId()})` + ); + } + this.connect(val); + } + + /** + * Returns the input node of the bus. + * @returns {AudioNode} + */ + getInputNode() { + return this._gainNode; + } + + /** + * Returns the output node of the bus. + * @returns {AudioNode} + */ + getOutputNode() { + return this._muteNode; + } + + /** + * Sets the mute status of the bus. + * @param {boolean} enable + */ + mute(enable) { + this._muteNode.gain.value = enable ? 0 : 1; + } + + /** + * Sets the solo status of the bus. + * @param {boolean} enable + */ + solo(enable) { + if (this.isSolo === enable) { + return; + } + + if (enable) { + if (GodotAudio.busSolo != null && GodotAudio.busSolo !== this) { + GodotAudio.busSolo._disableSolo(); + } + this._enableSolo(); + return; + } + + this._disableSolo(); + } + + /** + * Wrapper to simply add a sample node to the bus. + * @param {SampleNode} sampleNode `SampleNode` to remove + * @returns {void} + */ + addSampleNode(sampleNode) { + this._sampleNodes.add(sampleNode); + sampleNode.getOutputNode().connect(this.getInputNode()); + } + + /** + * Wrapper to simply remove a sample node from the bus. + * @param {SampleNode} sampleNode `SampleNode` to remove + * @returns {void} + */ + removeSampleNode(sampleNode) { + this._sampleNodes.delete(sampleNode); + sampleNode.getOutputNode().disconnect(); + } + + /** + * Wrapper to simply connect to another bus. + * @param {Bus} bus + * @returns {void} + */ + connect(bus) { + if (bus == null) { + throw new Error('cannot connect to null bus'); + } + this.getOutputNode().disconnect(); + this.getOutputNode().connect(bus.getInputNode()); + return bus; + } + + /** + * Clears the current bus. + * @returns {void} + */ + clear() { + GodotAudio.buses = GodotAudio.buses.filter((v) => v !== this); + } + + /** @type {Bus["prototype"]["_syncSampleNodes"]} */ + _syncSampleNodes() { + const sampleNodes = Array.from(this._sampleNodes); + for (let i = 0; i < sampleNodes.length; i++) { + const sampleNode = sampleNodes[i]; + sampleNode.getOutputNode().disconnect(); + sampleNode.getOutputNode().connect(this.getInputNode()); + } + } + + /** + * Process to enable solo. + * @returns {void} + */ + _enableSolo() { + this.isSolo = true; + GodotAudio.busSolo = this; + this._soloNode.gain.value = 1; + const otherBuses = GodotAudio.buses.filter( + (otherBus) => otherBus !== this + ); + for (let i = 0; i < otherBuses.length; i++) { + const otherBus = otherBuses[i]; + otherBus._soloNode.gain.value = 0; + } + } + + /** + * Process to disable solo. + * @returns {void} + */ + _disableSolo() { + this.isSolo = false; + GodotAudio.busSolo = null; + this._soloNode.gain.value = 1; + const otherBuses = GodotAudio.buses.filter( + (otherBus) => otherBus !== this + ); + for (let i = 0; i < otherBuses.length; i++) { + const otherBus = otherBuses[i]; + otherBus._soloNode.gain.value = 1; + } + } +} + +const _GodotAudio = { $GodotAudio__deps: ['$GodotRuntime', '$GodotOS'], $GodotAudio: { + /** + * Max number of volume channels. + */ + MAX_VOLUME_CHANNELS: 8, + + /** + * Represents the index of each sound channel relative to the engine. + */ + GodotChannel: Object.freeze({ + CHANNEL_L: 0, + CHANNEL_R: 1, + CHANNEL_C: 3, + CHANNEL_LFE: 4, + CHANNEL_RL: 5, + CHANNEL_RR: 6, + CHANNEL_SL: 7, + CHANNEL_SR: 8, + }), + + /** + * Represents the index of each sound channel relative to the Web Audio API. + */ + WebChannel: Object.freeze({ + CHANNEL_L: 0, + CHANNEL_R: 1, + CHANNEL_SL: 2, + CHANNEL_SR: 3, + CHANNEL_C: 4, + CHANNEL_LFE: 5, + }), + + // `Sample` class + /** + * Registry of `Sample`s. + * @type {Map<string, Sample>} + */ + samples: null, + Sample, + + // `SampleNodeBus` class + SampleNodeBus, + + // `SampleNode` class + /** + * Registry of `SampleNode`s. + * @type {Map<string, SampleNode>} + */ + sampleNodes: null, + SampleNode, + + // `Bus` class + /** + * Registry of `Bus`es. + * @type {Bus[]} + */ + buses: null, + /** + * Reference to the current bus in solo mode. + * @type {Bus | null} + */ + busSolo: null, + Bus, + + /** @type {AudioContext} */ ctx: null, input: null, driver: null, interval: 0, + /** + * Converts linear volume to Db. + * @param {number} linear Linear value to convert. + * @returns {number} + */ + linear_to_db: function (linear) { + // eslint-disable-next-line no-loss-of-precision + return Math.log(linear) * 8.6858896380650365530225783783321; + }, + /** + * Converts Db volume to linear. + * @param {number} db Db value to convert. + * @returns {number} + */ + db_to_linear: function (db) { + // eslint-disable-next-line no-loss-of-precision + return Math.exp(db * 0.11512925464970228420089957273422); + }, + init: function (mix_rate, latency, onstatechange, onlatencyupdate) { + // Initialize classes static values. + GodotAudio.samples = new Map(); + GodotAudio.sampleNodes = new Map(); + GodotAudio.buses = []; + GodotAudio.busSolo = null; + const opts = {}; // If mix_rate is 0, let the browser choose. if (mix_rate) { + GodotAudio.sampleRate = mix_rate; opts['sampleRate'] = mix_rate; } // Do not specify, leave 'interactive' for good performance. @@ -58,8 +1144,8 @@ const GodotAudio = { case 'closed': state = 2; break; - - // no default + default: + // Do nothing. } onstatechange(state); }; @@ -148,6 +1234,163 @@ const GodotAudio = { resolve(); }); }, + + /** + * Triggered when a sample node needs to start. + * @param {string} playbackObjectId The unique id of the sample playback + * @param {string} streamObjectId The unique id of the stream + * @param {number} busIndex Index of the bus currently binded to the sample playback + * @param {SampleNodeOptions} startOptions Optional params + * @returns {void} + */ + start_sample: function ( + playbackObjectId, + streamObjectId, + busIndex, + startOptions + ) { + GodotAudio.SampleNode.stopSampleNode(playbackObjectId); + const sampleNode = GodotAudio.SampleNode.create( + { + busIndex, + id: playbackObjectId, + streamObjectId, + }, + startOptions + ); + sampleNode.start(); + }, + + /** + * Triggered when a sample node needs to be stopped. + * @param {string} playbackObjectId Id of the sample playback + * @returns {void} + */ + stop_sample: function (playbackObjectId) { + GodotAudio.SampleNode.stopSampleNode(playbackObjectId); + }, + + /** + * Triggered when a sample node needs to be paused or unpaused. + * @param {string} playbackObjectId Id of the sample playback + * @param {boolean} pause State of the pause + * @returns {void} + */ + sample_set_pause: function (playbackObjectId, pause) { + GodotAudio.SampleNode.pauseSampleNode(playbackObjectId, pause); + }, + + /** + * Triggered when a sample node needs its pitch scale to be updated. + * @param {string} playbackObjectId Id of the sample playback + * @param {number} pitchScale Pitch scale of the sample playback + * @returns {void} + */ + update_sample_pitch_scale: function (playbackObjectId, pitchScale) { + const sampleNode = GodotAudio.SampleNode.getSampleNodeOrNull(playbackObjectId); + if (sampleNode == null) { + return; + } + sampleNode.setPitchScale(pitchScale); + }, + + /** + * Triggered when a sample node volumes need to be updated. + * @param {string} playbackObjectId Id of the sample playback + * @param {number[]} busIndexes Indexes of the buses that need to be updated + * @param {Float32Array} volumes Array of the volumes + * @returns {void} + */ + sample_set_volumes_linear: function (playbackObjectId, busIndexes, volumes) { + const sampleNode = GodotAudio.SampleNode.getSampleNodeOrNull(playbackObjectId); + if (sampleNode == null) { + return; + } + const buses = busIndexes.map((busIndex) => GodotAudio.Bus.getBus(busIndex)); + sampleNode.setVolumes(buses, volumes); + }, + + /** + * Triggered when the bus count changes. + * @param {number} count Number of buses + * @returns {void} + */ + set_sample_bus_count: function (count) { + GodotAudio.Bus.setCount(count); + }, + + /** + * Triggered when a bus needs to be removed. + * @param {number} index Bus index + * @returns {void} + */ + remove_sample_bus: function (index) { + const bus = GodotAudio.Bus.getBus(index); + bus.clear(); + }, + + /** + * Triggered when a bus needs to be at the desired position. + * @param {number} atPos Position to add the bus + * @returns {void} + */ + add_sample_bus: function (atPos) { + GodotAudio.Bus.addAt(atPos); + }, + + /** + * Triggered when a bus needs to be moved. + * @param {number} busIndex Index of the bus to move + * @param {number} toPos Index of the new position of the bus + * @returns {void} + */ + move_sample_bus: function (busIndex, toPos) { + GodotAudio.Bus.move(busIndex, toPos); + }, + + /** + * Triggered when the "send" value of a bus changes. + * @param {number} busIndex Index of the bus to update the "send" value + * @param {number} sendIndex Index of the bus that is the new "send" + * @returns {void} + */ + set_sample_bus_send: function (busIndex, sendIndex) { + const bus = GodotAudio.Bus.getBus(busIndex); + bus.setSend(GodotAudio.Bus.getBus(sendIndex)); + }, + + /** + * Triggered when a bus needs its volume db to be updated. + * @param {number} busIndex Index of the bus to update its volume db + * @param {number} volumeDb Volume of the bus + * @returns {void} + */ + set_sample_bus_volume_db: function (busIndex, volumeDb) { + const bus = GodotAudio.Bus.getBus(busIndex); + bus.setVolumeDb(volumeDb); + }, + + /** + * Triggered when a bus needs to update its solo status + * @param {number} busIndex Index of the bus to update its solo status + * @param {boolean} enable Status of the solo + * @returns {void} + */ + set_sample_bus_solo: function (busIndex, enable) { + const bus = GodotAudio.Bus.getBus(busIndex); + bus.solo(enable); + }, + + /** + * Triggered when a bus needs to update its mute status + * @param {number} busIndex Index of the bus to update its mute status + * @param {boolean} enable Status of the mute + * @returns {void} + */ + set_sample_bus_mute: function (busIndex, enable) { + const bus = GodotAudio.Bus.getBus(busIndex); + bus.mute(enable); + }, }, godot_audio_is_available__sig: 'i', @@ -162,22 +1405,32 @@ const GodotAudio = { godot_audio_has_worklet__proxy: 'sync', godot_audio_has_worklet__sig: 'i', godot_audio_has_worklet: function () { - return (GodotAudio.ctx && GodotAudio.ctx.audioWorklet) ? 1 : 0; + return GodotAudio.ctx && GodotAudio.ctx.audioWorklet ? 1 : 0; }, godot_audio_has_script_processor__proxy: 'sync', godot_audio_has_script_processor__sig: 'i', godot_audio_has_script_processor: function () { - return (GodotAudio.ctx && GodotAudio.ctx.createScriptProcessor) ? 1 : 0; + return GodotAudio.ctx && GodotAudio.ctx.createScriptProcessor ? 1 : 0; }, godot_audio_init__proxy: 'sync', godot_audio_init__sig: 'iiiii', - godot_audio_init: function (p_mix_rate, p_latency, p_state_change, p_latency_update) { + godot_audio_init: function ( + p_mix_rate, + p_latency, + p_state_change, + p_latency_update + ) { const statechange = GodotRuntime.get_func(p_state_change); const latencyupdate = GodotRuntime.get_func(p_latency_update); const mix_rate = GodotRuntime.getHeapValue(p_mix_rate, 'i32'); - const channels = GodotAudio.init(mix_rate, p_latency, statechange, latencyupdate); + const channels = GodotAudio.init( + mix_rate, + p_latency, + statechange, + latencyupdate + ); GodotRuntime.setHeapValue(p_mix_rate, GodotAudio.ctx.sampleRate, 'i32'); return channels; }, @@ -210,10 +1463,311 @@ const GodotAudio = { GodotAudio.input = null; } }, + + godot_audio_sample_stream_is_registered__proxy: 'sync', + godot_audio_sample_stream_is_registered__sig: 'ii', + /** + * Returns if the sample stream is registered + * @param {number} streamObjectIdStrPtr Pointer of the streamObjectId + * @returns {number} + */ + godot_audio_sample_stream_is_registered: function (streamObjectIdStrPtr) { + const streamObjectId = GodotRuntime.parseString(streamObjectIdStrPtr); + return Number(GodotAudio.Sample.getSampleOrNull(streamObjectId) != null); + }, + + godot_audio_sample_register_stream__proxy: 'sync', + godot_audio_sample_register_stream__sig: 'viiiiiii', + /** + * Registers a stream. + * @param {number} streamObjectIdStrPtr StreamObjectId pointer + * @param {number} framesPtr Frames pointer + * @param {number} framesTotal Frames total value + * @param {number} loopModeStrPtr Loop mode pointer + * @param {number} loopBegin Loop begin value + * @param {number} loopEnd Loop end value + * @returns {void} + */ + godot_audio_sample_register_stream: function ( + streamObjectIdStrPtr, + framesPtr, + framesTotal, + loopModeStrPtr, + loopBegin, + loopEnd + ) { + const BYTES_PER_FLOAT32 = 4; + const streamObjectId = GodotRuntime.parseString(streamObjectIdStrPtr); + const loopMode = GodotRuntime.parseString(loopModeStrPtr); + const numberOfChannels = 2; + const sampleRate = GodotAudio.ctx.sampleRate; + + /** @type {Float32Array} */ + const subLeft = GodotRuntime.heapSub(HEAPF32, framesPtr, framesTotal); + /** @type {Float32Array} */ + const subRight = GodotRuntime.heapSub( + HEAPF32, + framesPtr + framesTotal * BYTES_PER_FLOAT32, + framesTotal + ); + + const audioBuffer = GodotAudio.ctx.createBuffer( + numberOfChannels, + framesTotal, + sampleRate + ); + audioBuffer.copyToChannel(new Float32Array(subLeft), 0, 0); + audioBuffer.copyToChannel(new Float32Array(subRight), 1, 0); + + GodotAudio.Sample.create( + { + id: streamObjectId, + audioBuffer, + }, + { + loopBegin, + loopEnd, + loopMode, + numberOfChannels, + sampleRate, + } + ); + }, + + godot_audio_sample_unregister_stream__proxy: 'sync', + godot_audio_sample_unregister_stream__sig: 'vi', + /** + * Unregisters a stream. + * @param {number} streamObjectIdStrPtr StreamObjectId pointer + * @returns {void} + */ + godot_audio_sample_unregister_stream: function (streamObjectIdStrPtr) { + const streamObjectId = GodotRuntime.parseString(streamObjectIdStrPtr); + const sample = GodotAudio.Sample.getSampleOrNull(streamObjectId); + if (sample != null) { + sample.clear(); + } + }, + + godot_audio_sample_start__proxy: 'sync', + godot_audio_sample_start__sig: 'viiiii', + /** + * Starts a sample. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @param {number} streamObjectIdStrPtr Stream object id pointer + * @param {number} busIndex Bus index + * @param {number} offset Sample offset + * @param {number} volumePtr Volume pointer + * @returns {void} + */ + godot_audio_sample_start: function ( + playbackObjectIdStrPtr, + streamObjectIdStrPtr, + busIndex, + offset, + volumePtr + ) { + /** @type {string} */ + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + /** @type {string} */ + const streamObjectId = GodotRuntime.parseString(streamObjectIdStrPtr); + /** @type {Float32Array} */ + const volume = GodotRuntime.heapSub(HEAPF32, volumePtr, 8); + /** @type {SampleNodeConstructorOptions} */ + const startOptions = { + offset, + volume, + playbackRate: 1, + }; + GodotAudio.start_sample( + playbackObjectId, + streamObjectId, + busIndex, + startOptions + ); + }, + + godot_audio_sample_stop__proxy: 'sync', + godot_audio_sample_stop__sig: 'vi', + /** + * Stops a sample from playing. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @returns {void} + */ + godot_audio_sample_stop: function (playbackObjectIdStrPtr) { + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + GodotAudio.stop_sample(playbackObjectId); + }, + + godot_audio_sample_set_pause__proxy: 'sync', + godot_audio_sample_set_pause__sig: 'vii', + /** + * Sets the pause state of a sample. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @param {number} pause Pause state + */ + godot_audio_sample_set_pause: function (playbackObjectIdStrPtr, pause) { + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + GodotAudio.sample_set_pause(playbackObjectId, Boolean(pause)); + }, + + godot_audio_sample_is_active__proxy: 'sync', + godot_audio_sample_is_active__sig: 'ii', + /** + * Returns if the sample is active. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @returns {number} + */ + godot_audio_sample_is_active: function (playbackObjectIdStrPtr) { + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + return Number(GodotAudio.sampleNodes.has(playbackObjectId)); + }, + + godot_audio_sample_update_pitch_scale__proxy: 'sync', + godot_audio_sample_update_pitch_scale__sig: 'vii', + /** + * Updates the pitch scale of a sample. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @param {number} pitchScale Pitch scale value + * @returns {void} + */ + godot_audio_sample_update_pitch_scale: function ( + playbackObjectIdStrPtr, + pitchScale + ) { + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + GodotAudio.update_sample_pitch_scale(playbackObjectId, pitchScale); + }, + + godot_audio_sample_set_volumes_linear__proxy: 'sync', + godot_audio_sample_set_volumes_linear__sig: 'vii', + /** + * Sets the volumes linear of each mentioned bus for the sample. + * @param {number} playbackObjectIdStrPtr Playback object id pointer + * @param {number} busesPtr Buses array pointer + * @param {number} busesSize Buses array size + * @param {number} volumesPtr Volumes array pointer + * @param {number} volumesSize Volumes array size + * @returns {void} + */ + godot_audio_sample_set_volumes_linear: function ( + playbackObjectIdStrPtr, + busesPtr, + busesSize, + volumesPtr, + volumesSize + ) { + /** @type {string} */ + const playbackObjectId = GodotRuntime.parseString(playbackObjectIdStrPtr); + + /** @type {Uint32Array} */ + const buses = GodotRuntime.heapSub(HEAP32, busesPtr, busesSize); + /** @type {Float32Array} */ + const volumes = GodotRuntime.heapSub(HEAPF32, volumesPtr, volumesSize); + + GodotAudio.sample_set_volumes_linear( + playbackObjectId, + Array.from(buses), + volumes + ); + }, + + godot_audio_sample_bus_set_count__proxy: 'sync', + godot_audio_sample_bus_set_count__sig: 'vi', + /** + * Sets the bus count. + * @param {number} count Bus count + * @returns {void} + */ + godot_audio_sample_bus_set_count: function (count) { + GodotAudio.set_sample_bus_count(count); + }, + + godot_audio_sample_bus_remove__proxy: 'sync', + godot_audio_sample_bus_remove__sig: 'vi', + /** + * Removes a bus. + * @param {number} index Index of the bus to remove + * @returns {void} + */ + godot_audio_sample_bus_remove: function (index) { + GodotAudio.remove_sample_bus(index); + }, + + godot_audio_sample_bus_add__proxy: 'sync', + godot_audio_sample_bus_add__sig: 'vi', + /** + * Adds a bus at the defined position. + * @param {number} atPos Position to add the bus + * @returns {void} + */ + godot_audio_sample_bus_add: function (atPos) { + GodotAudio.add_sample_bus(atPos); + }, + + godot_audio_sample_bus_move__proxy: 'sync', + godot_audio_sample_bus_move__sig: 'vii', + /** + * Moves the bus from a position to another. + * @param {number} fromPos Position of the bus to move + * @param {number} toPos Final position of the bus + * @returns {void} + */ + godot_audio_sample_bus_move: function (fromPos, toPos) { + GodotAudio.move_sample_bus(fromPos, toPos); + }, + + godot_audio_sample_bus_set_send__proxy: 'sync', + godot_audio_sample_bus_set_send__sig: 'vii', + /** + * Sets the "send" of a bus. + * @param {number} bus Position of the bus to set the send + * @param {number} sendIndex Position of the "send" bus + * @returns {void} + */ + godot_audio_sample_bus_set_send: function (bus, sendIndex) { + GodotAudio.set_sample_bus_send(bus, sendIndex); + }, + + godot_audio_sample_bus_set_volume_db__proxy: 'sync', + godot_audio_sample_bus_set_volume_db__sig: 'vii', + /** + * Sets the volume db of a bus. + * @param {number} bus Position of the bus to set the volume db + * @param {number} volumeDb Volume db to set + * @returns {void} + */ + godot_audio_sample_bus_set_volume_db: function (bus, volumeDb) { + GodotAudio.set_sample_bus_volume_db(bus, volumeDb); + }, + + godot_audio_sample_bus_set_solo__proxy: 'sync', + godot_audio_sample_bus_set_solo__sig: 'vii', + /** + * Sets the state of solo for a bus + * @param {number} bus Position of the bus to set the solo state + * @param {number} enable State of the solo + * @returns {void} + */ + godot_audio_sample_bus_set_solo: function (bus, enable) { + GodotAudio.set_sample_bus_solo(bus, Boolean(enable)); + }, + + godot_audio_sample_bus_set_mute__proxy: 'sync', + godot_audio_sample_bus_set_mute__sig: 'vii', + /** + * Sets the state of mute for a bus + * @param {number} bus Position of the bus to set the mute state + * @param {number} enable State of the mute + * @returns {void} + */ + godot_audio_sample_bus_set_mute: function (bus, enable) { + GodotAudio.set_sample_bus_mute(bus, Boolean(enable)); + }, }; -autoAddDeps(GodotAudio, '$GodotAudio'); -mergeInto(LibraryManager.library, GodotAudio); +autoAddDeps(_GodotAudio, '$GodotAudio'); +mergeInto(LibraryManager.library, _GodotAudio); /** * The AudioWorklet API driver, used when threads are available. @@ -227,16 +1781,18 @@ const GodotAudioWorklet = { create: function (channels) { const path = GodotConfig.locate_file('godot.audio.worklet.js'); - GodotAudioWorklet.promise = GodotAudio.ctx.audioWorklet.addModule(path).then(function () { - GodotAudioWorklet.worklet = new AudioWorkletNode( - GodotAudio.ctx, - 'godot-processor', - { - 'outputChannelCount': [channels], - } - ); - return Promise.resolve(); - }); + GodotAudioWorklet.promise = GodotAudio.ctx.audioWorklet + .addModule(path) + .then(function () { + GodotAudioWorklet.worklet = new AudioWorkletNode( + GodotAudio.ctx, + 'godot-processor', + { + outputChannelCount: [channels], + } + ); + return Promise.resolve(); + }); GodotAudio.driver = GodotAudioWorklet; }, @@ -254,7 +1810,14 @@ const GodotAudioWorklet = { }); }, - start_no_threads: function (p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback) { + start_no_threads: function ( + p_out_buf, + p_out_size, + out_callback, + p_in_buf, + p_in_size, + in_callback + ) { function RingBuffer() { let wpos = 0; let rpos = 0; @@ -276,7 +1839,10 @@ const GodotAudioWorklet = { wpos = 0; } if (pending_samples > 0) { - wbuf.set(buffer.subarray(wpos, wpos + pending_samples), tot_sent - pending_samples); + wbuf.set( + buffer.subarray(wpos, wpos + pending_samples), + tot_sent - pending_samples + ); } port.postMessage({ 'cmd': 'chunk', 'data': wbuf.subarray(0, tot_sent) }); wpos += pending_samples; @@ -319,7 +1885,10 @@ const GodotAudioWorklet = { } if (event.data['cmd'] === 'read') { const read = event.data['data']; - GodotAudioWorklet.ring_buffer.consumed(read, GodotAudioWorklet.worklet.port); + GodotAudioWorklet.ring_buffer.consumed( + read, + GodotAudioWorklet.worklet.port + ); } else if (event.data['cmd'] === 'input') { const buf = event.data['data']; if (buf.length > p_in_size) { @@ -376,7 +1945,13 @@ const GodotAudioWorklet = { godot_audio_worklet_start__proxy: 'sync', godot_audio_worklet_start__sig: 'viiiii', - godot_audio_worklet_start: function (p_in_buf, p_in_size, p_out_buf, p_out_size, p_state) { + godot_audio_worklet_start: function ( + p_in_buf, + p_in_size, + p_out_buf, + p_out_size, + p_state + ) { const out_buffer = GodotRuntime.heapSub(HEAPF32, p_out_buf, p_out_size); const in_buffer = GodotRuntime.heapSub(HEAPF32, p_in_buf, p_in_size); const state = GodotRuntime.heapSub(HEAP32, p_state, 4); @@ -385,14 +1960,33 @@ const GodotAudioWorklet = { godot_audio_worklet_start_no_threads__proxy: 'sync', godot_audio_worklet_start_no_threads__sig: 'viiiiii', - godot_audio_worklet_start_no_threads: function (p_out_buf, p_out_size, p_out_callback, p_in_buf, p_in_size, p_in_callback) { + godot_audio_worklet_start_no_threads: function ( + p_out_buf, + p_out_size, + p_out_callback, + p_in_buf, + p_in_size, + p_in_callback + ) { const out_callback = GodotRuntime.get_func(p_out_callback); const in_callback = GodotRuntime.get_func(p_in_callback); - GodotAudioWorklet.start_no_threads(p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback); + GodotAudioWorklet.start_no_threads( + p_out_buf, + p_out_size, + out_callback, + p_in_buf, + p_in_size, + in_callback + ); }, godot_audio_worklet_state_wait__sig: 'iiii', - godot_audio_worklet_state_wait: function (p_state, p_idx, p_expected, p_timeout) { + godot_audio_worklet_state_wait: function ( + p_state, + p_idx, + p_expected, + p_timeout + ) { Atomics.wait(HEAP32, (p_state >> 2) + p_idx, p_expected, p_timeout); return Atomics.load(HEAP32, (p_state >> 2) + p_idx); }, @@ -412,7 +2006,7 @@ autoAddDeps(GodotAudioWorklet, '$GodotAudioWorklet'); mergeInto(LibraryManager.library, GodotAudioWorklet); /* - * The deprecated ScriptProcessorNode API, used when threads are disabled. + * The ScriptProcessorNode API, used when threads are disabled. */ const GodotAudioScript = { $GodotAudioScript__deps: ['$GodotAudio'], @@ -420,7 +2014,11 @@ const GodotAudioScript = { script: null, create: function (buffer_length, channel_count) { - GodotAudioScript.script = GodotAudio.ctx.createScriptProcessor(buffer_length, 2, channel_count); + GodotAudioScript.script = GodotAudio.ctx.createScriptProcessor( + buffer_length, + 2, + channel_count + ); GodotAudio.driver = GodotAudioScript; return GodotAudioScript.script.bufferSize; }, @@ -488,9 +2086,21 @@ const GodotAudioScript = { godot_audio_script_start__proxy: 'sync', godot_audio_script_start__sig: 'viiiii', - godot_audio_script_start: function (p_in_buf, p_in_size, p_out_buf, p_out_size, p_cb) { + godot_audio_script_start: function ( + p_in_buf, + p_in_size, + p_out_buf, + p_out_size, + p_cb + ) { const onprocess = GodotRuntime.get_func(p_cb); - GodotAudioScript.start(p_in_buf, p_in_size, p_out_buf, p_out_size, onprocess); + GodotAudioScript.start( + p_in_buf, + p_in_size, + p_out_buf, + p_out_size, + onprocess + ); }, }; 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/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..8d26a705a9 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -5873,7 +5873,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/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/gl_manager_windows_native.cpp b/platform/windows/gl_manager_windows_native.cpp index b45d254fc6..c8d7534e26 100644 --- a/platform/windows/gl_manager_windows_native.cpp +++ b/platform/windows/gl_manager_windows_native.cpp @@ -510,10 +510,10 @@ void GLManagerNative_Windows::set_use_vsync(DisplayServer::WindowID p_window_id, win.use_vsync = p_use; if (!wglSwapIntervalEXT(p_use ? 1 : 0)) { - WARN_PRINT("Could not set V-Sync mode."); + WARN_PRINT_ONCE("Could not set V-Sync mode, as changing V-Sync mode is not supported by the graphics driver."); } } else { - WARN_PRINT("Could not set V-Sync mode. V-Sync is not supported."); + WARN_PRINT_ONCE("Could not set V-Sync mode, as changing V-Sync mode is not supported by the graphics driver."); } } 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/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index f88db0e3f4..8e91dce425 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -128,6 +128,8 @@ void AudioStreamPlayer2D::_update_panning() { volume_vector.write[2] = AudioFrame(0, 0); volume_vector.write[3] = AudioFrame(0, 0); + StringName actual_bus = _get_actual_bus(); + for (Viewport *vp : viewports) { if (!vp->is_audio_listener_2d()) { continue; @@ -172,15 +174,20 @@ void AudioStreamPlayer2D::_update_panning() { const AudioFrame &prev_sample = volume_vector[0]; AudioFrame new_sample = AudioFrame(l, r) * multiplier; + volume_vector.write[0] = AudioFrame(MAX(prev_sample[0], new_sample[0]), MAX(prev_sample[1], new_sample[1])); } for (const Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { - AudioServer::get_singleton()->set_playback_bus_exclusive(playback, _get_actual_bus(), volume_vector); + AudioServer::get_singleton()->set_playback_bus_exclusive(playback, actual_bus, volume_vector); } - for (Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { + for (const Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { AudioServer::get_singleton()->set_playback_pitch_scale(playback, internal->pitch_scale); + if (playback->get_is_sample() && playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = playback->get_sample_playback(); + AudioServer::get_singleton()->update_sample_playback_pitch_scale(sample_playback, internal->pitch_scale); + } } last_mix_count = AudioServer::get_singleton()->get_mix_count(); @@ -218,6 +225,15 @@ void AudioStreamPlayer2D::play(float p_from_pos) { } setplayback = stream_playback; setplay.set(p_from_pos); + + // Sample handling. + if (stream_playback->get_is_sample() && stream_playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = stream_playback->get_sample_playback(); + sample_playback->offset = p_from_pos; + sample_playback->bus = _get_actual_bus(); + + AudioServer::get_singleton()->start_sample_playback(sample_playback); + } } void AudioStreamPlayer2D::seek(float p_seconds) { @@ -326,6 +342,14 @@ float AudioStreamPlayer2D::get_panning_strength() const { return panning_strength; } +AudioServer::PlaybackType AudioStreamPlayer2D::get_playback_type() const { + return internal->get_playback_type(); +} + +void AudioStreamPlayer2D::set_playback_type(AudioServer::PlaybackType p_playback_type) { + internal->set_playback_type(p_playback_type); +} + bool AudioStreamPlayer2D::_set(const StringName &p_name, const Variant &p_value) { return internal->set(p_name, p_value); } @@ -385,6 +409,9 @@ void AudioStreamPlayer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("has_stream_playback"), &AudioStreamPlayer2D::has_stream_playback); ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer2D::get_stream_playback); + ClassDB::bind_method(D_METHOD("set_playback_type", "playback_type"), &AudioStreamPlayer2D::set_playback_type); + ClassDB::bind_method(D_METHOD("get_playback_type"), &AudioStreamPlayer2D::get_playback_type); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,24,suffix:dB"), "set_volume_db", "get_volume_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pitch_scale", PROPERTY_HINT_RANGE, "0.01,4,0.01,or_greater"), "set_pitch_scale", "get_pitch_scale"); @@ -397,6 +424,7 @@ void AudioStreamPlayer2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_type", PROPERTY_HINT_ENUM, "Default,Stream,Sample"), "set_playback_type", "get_playback_type"); ADD_SIGNAL(MethodInfo("finished")); } diff --git a/scene/2d/audio_stream_player_2d.h b/scene/2d/audio_stream_player_2d.h index 3a3e6510c8..309e206fe4 100644 --- a/scene/2d/audio_stream_player_2d.h +++ b/scene/2d/audio_stream_player_2d.h @@ -32,6 +32,7 @@ #define AUDIO_STREAM_PLAYER_2D_H #include "scene/2d/node_2d.h" +#include "servers/audio_server.h" struct AudioFrame; class AudioStream; @@ -64,6 +65,8 @@ private: uint64_t last_mix_count = -1; bool force_update_panning = false; + AudioServer::PlaybackType playback_type = AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT; + void _set_playing(bool p_enable); bool _is_active() const; @@ -137,6 +140,9 @@ public: bool has_stream_playback(); Ref<AudioStreamPlayback> get_stream_playback(); + AudioServer::PlaybackType get_playback_type() const; + void set_playback_type(AudioServer::PlaybackType p_playback_type); + AudioStreamPlayer2D(); ~AudioStreamPlayer2D(); }; diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp index e2a7e9e154..dfe321a435 100644 --- a/scene/2d/parallax_layer.cpp +++ b/scene/2d/parallax_layer.cpp @@ -71,8 +71,8 @@ void ParallaxLayer::_update_mirroring() { if (pb) { RID c = pb->get_canvas(); RID ci = get_canvas_item(); - Point2 mirrorScale = mirroring * get_scale(); - RenderingServer::get_singleton()->canvas_set_item_mirroring(c, ci, mirrorScale); + Point2 mirror_scale = mirroring * orig_scale; + RenderingServer::get_singleton()->canvas_set_item_mirroring(c, ci, mirror_scale); RenderingServer::get_singleton()->canvas_item_set_interpolated(ci, false); } } 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 cdd7b15110..437790bb99 100644 --- a/scene/2d/tile_map_layer.cpp +++ b/scene/2d/tile_map_layer.cpp @@ -96,6 +96,7 @@ void TileMapLayer::_debug_update(bool p_force_cleanup) { } // Update those quadrants. + bool needs_set_not_interpolated = is_inside_tree() && get_tree()->is_physics_interpolation_enabled() && !is_physics_interpolated(); for (SelfList<DebugQuadrant> *quadrant_list_element = dirty_debug_quadrant_list.first(); quadrant_list_element;) { SelfList<DebugQuadrant> *next_quadrant_list_element = quadrant_list_element->next(); // "Hack" to clear the list while iterating. @@ -118,6 +119,9 @@ void TileMapLayer::_debug_update(bool p_force_cleanup) { rs->canvas_item_clear(ci); } else { ci = rs->canvas_item_create(); + if (needs_set_not_interpolated) { + rs->canvas_item_set_interpolated(ci, false); + } rs->canvas_item_set_z_index(ci, RS::CANVAS_ITEM_Z_MAX - 1); rs->canvas_item_set_parent(ci, get_canvas_item()); } @@ -240,6 +244,7 @@ void TileMapLayer::_rendering_update(bool p_force_cleanup) { } // Update all dirty quadrants. + bool needs_set_not_interpolated = is_inside_tree() && get_tree()->is_physics_interpolation_enabled() && !is_physics_interpolated(); for (SelfList<RenderingQuadrant> *quadrant_list_element = dirty_rendering_quadrant_list.first(); quadrant_list_element;) { SelfList<RenderingQuadrant> *next_quadrant_list_element = quadrant_list_element->next(); // "Hack" to clear the list while iterating. @@ -301,6 +306,9 @@ void TileMapLayer::_rendering_update(bool p_force_cleanup) { if (prev_ci == RID() || prev_material != mat || prev_z_index != tile_z_index) { // If so, create a new CanvasItem. ci = rs->canvas_item_create(); + if (needs_set_not_interpolated) { + rs->canvas_item_set_interpolated(ci, false); + } if (mat.is_valid()) { rs->canvas_item_set_material(ci, mat->get_rid()); } @@ -446,12 +454,13 @@ void TileMapLayer::_rendering_notification(int p_what) { } } } else if (p_what == NOTIFICATION_RESET_PHYSICS_INTERPOLATION) { - for (const KeyValue<Vector2i, Ref<RenderingQuadrant>> &kv : rendering_quadrant_map) { - for (const RID &ci : kv.value->canvas_items) { - if (ci.is_null()) { - continue; + if (is_physics_interpolated_and_enabled() && is_visible_in_tree()) { + for (const KeyValue<Vector2i, Ref<RenderingQuadrant>> &kv : rendering_quadrant_map) { + for (const RID &ci : kv.value->canvas_items) { + if (ci.is_valid()) { + rs->canvas_item_reset_physics_interpolation(ci); + } } - rs->canvas_item_reset_physics_interpolation(ci); } } } @@ -587,6 +596,7 @@ void TileMapLayer::_rendering_occluders_update_cell(CellData &r_cell_data) { bool transpose = (r_cell_data.cell.alternative_tile & TileSetAtlasSource::TRANSFORM_TRANSPOSE); // Create, update or clear occluders. + bool needs_set_not_interpolated = is_inside_tree() && get_tree()->is_physics_interpolation_enabled() && !is_physics_interpolated(); for (uint32_t occlusion_layer_index = 0; occlusion_layer_index < r_cell_data.occluders.size(); occlusion_layer_index++) { Ref<OccluderPolygon2D> occluder_polygon = tile_data->get_occluder(occlusion_layer_index); @@ -598,6 +608,9 @@ void TileMapLayer::_rendering_occluders_update_cell(CellData &r_cell_data) { xform.set_origin(tile_set->map_to_local(r_cell_data.coords)); if (!occluder.is_valid()) { occluder = rs->canvas_light_occluder_create(); + if (needs_set_not_interpolated) { + rs->canvas_light_occluder_set_interpolated(occluder, false); + } } rs->canvas_light_occluder_set_transform(occluder, get_global_transform() * xform); rs->canvas_light_occluder_set_polygon(occluder, tile_data->get_occluder(occlusion_layer_index, flip_h, flip_v, transpose)->get_rid()); @@ -1678,6 +1691,35 @@ void TileMapLayer::_internal_update(bool p_force_cleanup) { pending_update = false; } +void TileMapLayer::_physics_interpolated_changed() { + RenderingServer *rs = RenderingServer::get_singleton(); + + bool interpolated = is_physics_interpolated(); + bool needs_reset = interpolated && is_visible_in_tree(); + + for (const KeyValue<Vector2i, Ref<RenderingQuadrant>> &kv : rendering_quadrant_map) { + for (const RID &ci : kv.value->canvas_items) { + if (ci.is_valid()) { + rs->canvas_item_set_interpolated(ci, interpolated); + if (needs_reset) { + rs->canvas_item_reset_physics_interpolation(ci); + } + } + } + } + + for (const KeyValue<Vector2i, CellData> &E : tile_map_layer_data) { + for (const RID &occluder : E.value.occluders) { + if (occluder.is_valid()) { + rs->canvas_light_occluder_set_interpolated(occluder, interpolated); + if (needs_reset) { + rs->canvas_light_occluder_reset_physics_interpolation(occluder); + } + } + } + } +} + void TileMapLayer::_notification(int p_what) { switch (p_what) { case NOTIFICATION_POSTINITIALIZE: { @@ -1845,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 19c6fc128b..c71f13d7be 100644 --- a/scene/2d/tile_map_layer.h +++ b/scene/2d/tile_map_layer.h @@ -381,6 +381,8 @@ private: void _deferred_internal_update(); void _internal_update(bool p_force_cleanup); + virtual void _physics_interpolated_changed() override; + protected: void _notification(int p_what); @@ -391,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/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 0cef56dbf2..6888462876 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -482,6 +482,12 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() { } for (Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { AudioServer::get_singleton()->set_playback_pitch_scale(playback, actual_pitch_scale); + if (playback->get_is_sample()) { + Ref<AudioSamplePlayback> sample_playback = playback->get_sample_playback(); + if (sample_playback.is_valid()) { + AudioServer::get_singleton()->update_sample_playback_pitch_scale(sample_playback, actual_pitch_scale); + } + } } } return output_volume_vector; @@ -536,6 +542,15 @@ void AudioStreamPlayer3D::play(float p_from_pos) { } setplayback = stream_playback; setplay.set(p_from_pos); + + // Sample handling. + if (stream_playback->get_is_sample()) { + Ref<AudioSamplePlayback> sample_playback = stream_playback->get_sample_playback(); + sample_playback->offset = p_from_pos; + sample_playback->bus = _get_actual_bus(); + + AudioServer::get_singleton()->start_sample_playback(sample_playback); + } } void AudioStreamPlayer3D::seek(float p_seconds) { @@ -715,6 +730,14 @@ float AudioStreamPlayer3D::get_panning_strength() const { return panning_strength; } +AudioServer::PlaybackType AudioStreamPlayer3D::get_playback_type() const { + return internal->get_playback_type(); +} + +void AudioStreamPlayer3D::set_playback_type(AudioServer::PlaybackType p_playback_type) { + internal->set_playback_type(p_playback_type); +} + bool AudioStreamPlayer3D::_set(const StringName &p_name, const Variant &p_value) { return internal->set(p_name, p_value); } @@ -798,6 +821,9 @@ void AudioStreamPlayer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("has_stream_playback"), &AudioStreamPlayer3D::has_stream_playback); ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer3D::get_stream_playback); + ClassDB::bind_method(D_METHOD("set_playback_type", "playback_type"), &AudioStreamPlayer3D::set_playback_type); + ClassDB::bind_method(D_METHOD("get_playback_type"), &AudioStreamPlayer3D::get_playback_type); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::INT, "attenuation_model", PROPERTY_HINT_ENUM, "Inverse,Inverse Square,Logarithmic,Disabled"), "set_attenuation_model", "get_attenuation_model"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,80,suffix:dB"), "set_volume_db", "get_volume_db"); @@ -812,6 +838,7 @@ void AudioStreamPlayer3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_type", PROPERTY_HINT_ENUM, "Default,Stream,Sample"), "set_playback_type", "get_playback_type"); ADD_GROUP("Emission Angle", "emission_angle"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "emission_angle_enabled"), "set_emission_angle_enabled", "is_emission_angle_enabled"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "emission_angle_degrees", PROPERTY_HINT_RANGE, "0.1,90,0.1,degrees"), "set_emission_angle", "get_emission_angle"); diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h index 61005dc249..72356faad7 100644 --- a/scene/3d/audio_stream_player_3d.h +++ b/scene/3d/audio_stream_player_3d.h @@ -32,6 +32,7 @@ #define AUDIO_STREAM_PLAYER_3D_H #include "scene/3d/node_3d.h" +#include "servers/audio_server.h" class Area3D; struct AudioFrame; @@ -93,6 +94,8 @@ private: uint32_t area_mask = 1; + AudioServer::PlaybackType playback_type = AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT; + bool emission_angle_enabled = false; float emission_angle = 45.0; float emission_angle_filter_attenuation_db = -12.0; @@ -193,6 +196,9 @@ public: bool has_stream_playback(); Ref<AudioStreamPlayback> get_stream_playback(); + AudioServer::PlaybackType get_playback_type() const; + void set_playback_type(AudioServer::PlaybackType p_playback_type); + AudioStreamPlayer3D(); ~AudioStreamPlayer3D(); }; 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/label_3d.cpp b/scene/3d/label_3d.cpp index 0f2ce829eb..54adafbefb 100644 --- a/scene/3d/label_3d.cpp +++ b/scene/3d/label_3d.cpp @@ -796,7 +796,7 @@ Ref<Font> Label3D::_get_font_or_default() const { return font_override; } - const StringName theme_name = "font"; + const StringName theme_name = SceneStringName(font); List<StringName> theme_types; ThemeDB::get_singleton()->get_native_type_dependencies(get_class_name(), &theme_types); 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/physical_bone_simulator_3d.cpp b/scene/3d/physical_bone_simulator_3d.cpp index ef3c51b032..ffe79e0892 100644 --- a/scene/3d/physical_bone_simulator_3d.cpp +++ b/scene/3d/physical_bone_simulator_3d.cpp @@ -367,6 +367,20 @@ void PhysicalBoneSimulator3D::_process_modification() { } } else { ERR_FAIL_COND(skeleton->get_bone_count() != bones.size()); + for (int i = 0; i < skeleton->get_bone_count(); i++) { + if (!bones[i].physical_bone) { + continue; + } + skeleton->set_bone_global_pose(i, bones[i].global_pose); + } + + // TODO: + // The above method is performance heavy and needs to be improved. + // Ideally, the processing of set_bone_global_pose within Skeleton3D should be improved, + // but the workaround available now is to convert the global pose to a local pose on the SkeletonModifier side. + // However, the follow method needs recursive processing for deformations within PhysicalBoneSimulator3D to account for update order. + /* + ERR_FAIL_COND(skeleton->get_bone_count() != bones.size()); LocalVector<Transform3D> local_poses; for (int i = 0; i < skeleton->get_bone_count(); i++) { Transform3D pt; @@ -376,10 +390,14 @@ void PhysicalBoneSimulator3D::_process_modification() { local_poses.push_back(pt.affine_inverse() * bones[i].global_pose); } for (int i = 0; i < skeleton->get_bone_count(); i++) { + if (!bones[i].physical_bone) { + continue; + } skeleton->set_bone_pose_position(i, local_poses[i].origin); skeleton->set_bone_pose_rotation(i, local_poses[i].basis.get_rotation_quaternion()); skeleton->set_bone_pose_scale(i, local_poses[i].basis.get_scale()); } + */ } } 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..d08aeb1de2 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -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_blend_space_1d.cpp b/scene/animation/animation_blend_space_1d.cpp index 36343edd11..ff19eb8c12 100644 --- a/scene/animation/animation_blend_space_1d.cpp +++ b/scene/animation/animation_blend_space_1d.cpp @@ -278,7 +278,7 @@ void AnimationNodeBlendSpace1D::_add_blend_point(int p_index, const Ref<Animatio } AnimationNode::NodeTimeInfo AnimationNodeBlendSpace1D::_process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only) { - if (blend_points_used == 0) { + if (!blend_points_used) { return NodeTimeInfo(); } diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp index 9c5787b97c..0a6546f7da 100644 --- a/scene/animation/animation_blend_space_2d.cpp +++ b/scene/animation/animation_blend_space_2d.cpp @@ -448,6 +448,10 @@ void AnimationNodeBlendSpace2D::_blend_triangle(const Vector2 &p_pos, const Vect AnimationNode::NodeTimeInfo AnimationNodeBlendSpace2D::_process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only) { _update_triangles(); + if (!blend_points_used) { + return NodeTimeInfo(); + } + Vector2 blend_pos = get_parameter(blend_position); int cur_closest = get_parameter(closest); NodeTimeInfo mind; //time of min distance point @@ -455,7 +459,7 @@ AnimationNode::NodeTimeInfo AnimationNodeBlendSpace2D::_process(const AnimationM AnimationMixer::PlaybackInfo pi = p_playback_info; if (blend_mode == BLEND_MODE_INTERPOLATED) { - if (triangles.size() == 0) { + if (triangles.is_empty()) { return NodeTimeInfo(); } diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index 5074145168..e7626b3c2d 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -33,11 +33,15 @@ #include "core/config/engine.h" #include "core/config/project_settings.h" +#include "scene/2d/audio_stream_player_2d.h" #include "scene/animation/animation_player.h" +#include "scene/audio/audio_stream_player.h" #include "scene/resources/animation.h" #include "servers/audio/audio_stream.h" +#include "servers/audio_server.h" #ifndef _3D_DISABLED +#include "scene/3d/audio_stream_player_3d.h" #include "scene/3d/mesh_instance_3d.h" #include "scene/3d/node_3d.h" #include "scene/3d/skeleton_3d.h" @@ -146,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) { @@ -602,8 +607,8 @@ bool AnimationMixer::_update_caches() { root_motion_cache.rot = Quaternion(0, 0, 0, 1); root_motion_cache.scale = Vector3(1, 1, 1); - List<StringName> sname; - get_animation_list(&sname); + List<StringName> sname_list; + get_animation_list(&sname_list); bool check_path = GLOBAL_GET("animation/warnings/check_invalid_track_paths"); bool check_angle_interpolation = GLOBAL_GET("animation/warnings/check_angle_interpolation_type_conflicting"); @@ -632,7 +637,7 @@ bool AnimationMixer::_update_caches() { if (has_reset_anim) { reset_anim = get_animation(SceneStringName(RESET)); } - for (const StringName &E : sname) { + for (const StringName &E : sname_list) { Ref<Animation> anim = get_animation(E); for (int i = 0; i < anim->get_track_count(); i++) { NodePath path = anim->track_get_path(i); @@ -686,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; @@ -698,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); } @@ -833,6 +840,8 @@ bool AnimationMixer::_update_caches() { track_audio->object_id = child->get_instance_id(); track_audio->audio_stream.instantiate(); track_audio->audio_stream->set_polyphony(audio_max_polyphony); + track_audio->playback_type = (AudioServer::PlaybackType)(int)(child->call(SNAME("get_playback_type"))); + track_audio->bus = (StringName)(child->call(SNAME("get_bus"))); track = track_audio; @@ -1426,13 +1435,32 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { bool is_value = ttype == Animation::TYPE_VALUE; bool is_discrete = is_value && a->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE; bool force_continuous = callback_mode_discrete == ANIMATION_CALLBACK_MODE_DISCRETE_FORCE_CONTINUOUS; - if (t->is_variant_interpolatable && (!is_discrete || force_continuous)) { + if (!is_discrete || force_continuous) { t->use_continuous = true; - Variant value = is_value ? a->value_track_interpolate(i, time, is_discrete && force_continuous ? backward : false) : Variant(a->bezier_track_interpolate(i, time)); - value = post_process_key_value(a, i, value, t->object_id); - if (value == Variant()) { + + Variant value; + if (t->is_variant_interpolatable) { + value = is_value ? a->value_track_interpolate(i, time, is_discrete && force_continuous ? backward : false) : Variant(a->bezier_track_interpolate(i, time)); + value = post_process_key_value(a, i, value, t->object_id); + if (value == Variant()) { + continue; + } + } else { + // Discrete track sets the value in the current _blend_process() function, + // but Force Continuous track does not set the value here because the value must be set in the _blend_apply() function later. + int idx = a->track_find_key(i, time, Animation::FIND_MODE_NEAREST, false, backward); + if (idx < 0) { + continue; + } + value = a->track_get_key_value(i, idx); + value = post_process_key_value(a, i, value, t->object_id); + if (value == Variant()) { + continue; + } + t->value = value; continue; } + // Special case for angle interpolation. if (t->is_using_angle) { // For blending consistency, it prevents rotation of more than 180 degrees from init_value. @@ -1566,6 +1594,7 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { if (idx < 0) { continue; } + // Play stream. Ref<AudioStream> stream = a->audio_track_get_key_stream(i, idx); if (stream.is_valid()) { @@ -1575,6 +1604,7 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { if (seeked) { start_ofs += time - a->track_get_key_time(i, idx); } + if (t_obj->call(SNAME("get_stream")) != t->audio_stream) { t_obj->call(SNAME("set_stream"), t->audio_stream); t->audio_stream_playback.unref(); @@ -1592,8 +1622,18 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { if (t->audio_stream_playback.is_null()) { t->audio_stream_playback = t_obj->call(SNAME("get_stream_playback")); } + + if (t_obj->call(SNAME("get_is_sample"))) { + Ref<AudioSamplePlayback> sample_playback; + sample_playback.instantiate(); + sample_playback->stream = stream; + t->audio_stream_playback->set_sample_playback(sample_playback); + AudioServer::get_singleton()->start_sample_playback(sample_playback); + continue; + } + PlayingAudioStreamInfo pasi; - pasi.index = t->audio_stream_playback->play_stream(stream, start_ofs); + pasi.index = t->audio_stream_playback->play_stream(stream, start_ofs, 0, 1.0, t->playback_type, t->bus); pasi.start = time; if (len && end_ofs > 0) { // Force an end at a time. pasi.len = len - start_ofs - end_ofs; @@ -2236,6 +2276,7 @@ void AnimationMixer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_callback_mode_discrete", "mode"), &AnimationMixer::set_callback_mode_discrete); ClassDB::bind_method(D_METHOD("get_callback_mode_discrete"), &AnimationMixer::get_callback_mode_discrete); + /* ---- Audio ---- */ ClassDB::bind_method(D_METHOD("set_audio_max_polyphony", "max_polyphony"), &AnimationMixer::set_audio_max_polyphony); ClassDB::bind_method(D_METHOD("get_audio_max_polyphony"), &AnimationMixer::get_audio_max_polyphony); diff --git a/scene/animation/animation_mixer.h b/scene/animation/animation_mixer.h index 089a210193..c029c68ae1 100644 --- a/scene/animation/animation_mixer.h +++ b/scene/animation/animation_mixer.h @@ -279,12 +279,15 @@ protected: Ref<AudioStreamPolyphonic> audio_stream; Ref<AudioStreamPlaybackPolyphonic> audio_stream_playback; HashMap<ObjectID, PlayingAudioTrackInfo> playing_streams; // Key is Animation resource ObjectID. + AudioServer::PlaybackType playback_type; + StringName bus; TrackCacheAudio(const TrackCacheAudio &p_other) : TrackCache(p_other), audio_stream(p_other.audio_stream), audio_stream_playback(p_other.audio_stream_playback), - playing_streams(p_other.playing_streams) {} + playing_streams(p_other.playing_streams), + playback_type(p_other.playback_type) {} TrackCacheAudio() { type = Animation::TYPE_AUDIO; @@ -313,6 +316,9 @@ protected: void _init_root_motion_cache(); bool _update_caches(); + /* ---- Audio ---- */ + AudioServer::PlaybackType playback_type; + /* ---- Blending processor ---- */ LocalVector<AnimationInstance> animation_instances; HashMap<NodePath, int> track_map; @@ -425,6 +431,7 @@ public: void set_callback_mode_discrete(AnimationCallbackModeDiscrete p_mode); AnimationCallbackModeDiscrete get_callback_mode_discrete() const; + /* ---- Audio ---- */ void set_audio_max_polyphony(int p_audio_max_polyphony); int get_audio_max_polyphony() const; diff --git a/scene/audio/audio_stream_player.cpp b/scene/audio/audio_stream_player.cpp index 0c2bd64e84..e90c1aa245 100644 --- a/scene/audio/audio_stream_player.cpp +++ b/scene/audio/audio_stream_player.cpp @@ -95,6 +95,16 @@ void AudioStreamPlayer::play(float p_from_pos) { } AudioServer::get_singleton()->start_playback_stream(stream_playback, internal->bus, _get_volume_vector(), p_from_pos, internal->pitch_scale); internal->ensure_playback_limit(); + + // Sample handling. + if (stream_playback->get_is_sample() && stream_playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = stream_playback->get_sample_playback(); + sample_playback->offset = p_from_pos; + sample_playback->volume_vector = _get_volume_vector(); + sample_playback->bus = get_bus(); + + AudioServer::get_singleton()->start_sample_playback(sample_playback); + } } void AudioStreamPlayer::seek(float p_seconds) { @@ -205,6 +215,14 @@ Ref<AudioStreamPlayback> AudioStreamPlayer::get_stream_playback() { return internal->get_stream_playback(); } +AudioServer::PlaybackType AudioStreamPlayer::get_playback_type() const { + return internal->get_playback_type(); +} + +void AudioStreamPlayer::set_playback_type(AudioServer::PlaybackType p_playback_type) { + internal->set_playback_type(p_playback_type); +} + void AudioStreamPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer::set_stream); ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer::get_stream); @@ -243,6 +261,9 @@ void AudioStreamPlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("has_stream_playback"), &AudioStreamPlayer::has_stream_playback); ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer::get_stream_playback); + ClassDB::bind_method(D_METHOD("set_playback_type", "playback_type"), &AudioStreamPlayer::set_playback_type); + ClassDB::bind_method(D_METHOD("get_playback_type"), &AudioStreamPlayer::get_playback_type); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,24,suffix:dB"), "set_volume_db", "get_volume_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pitch_scale", PROPERTY_HINT_RANGE, "0.01,4,0.01,or_greater"), "set_pitch_scale", "get_pitch_scale"); @@ -252,6 +273,7 @@ void AudioStreamPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_target", PROPERTY_HINT_ENUM, "Stereo,Surround,Center"), "set_mix_target", "get_mix_target"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_type", PROPERTY_HINT_ENUM, "Default,Stream,Sample"), "set_playback_type", "get_playback_type"); ADD_SIGNAL(MethodInfo("finished")); diff --git a/scene/audio/audio_stream_player.h b/scene/audio/audio_stream_player.h index ab3266f247..8eaf7f9c73 100644 --- a/scene/audio/audio_stream_player.h +++ b/scene/audio/audio_stream_player.h @@ -32,6 +32,7 @@ #define AUDIO_STREAM_PLAYER_H #include "scene/main/node.h" +#include "servers/audio_server.h" struct AudioFrame; class AudioStream; @@ -106,6 +107,9 @@ public: bool has_stream_playback(); Ref<AudioStreamPlayback> get_stream_playback(); + AudioServer::PlaybackType get_playback_type() const; + void set_playback_type(AudioServer::PlaybackType p_playback_type); + AudioStreamPlayer(); ~AudioStreamPlayer(); }; diff --git a/scene/audio/audio_stream_player_internal.cpp b/scene/audio/audio_stream_player_internal.cpp index a7b8faaaae..b3a55ddee0 100644 --- a/scene/audio/audio_stream_player_internal.cpp +++ b/scene/audio/audio_stream_player_internal.cpp @@ -141,6 +141,24 @@ Ref<AudioStreamPlayback> AudioStreamPlayerInternal::play_basic() { stream_playback->set_parameter(K.value.path, K.value.value); } + // Sample handling. + if (_is_sample()) { + if (stream->can_be_sampled()) { + stream_playback->set_is_sample(true); + if (stream_playback->get_is_sample() && stream_playback->get_sample_playback().is_null()) { + if (!AudioServer::get_singleton()->is_stream_registered_as_sample(stream)) { + AudioServer::get_singleton()->register_stream_as_sample(stream); + } + Ref<AudioSamplePlayback> sample_playback; + sample_playback.instantiate(); + sample_playback->stream = stream; + stream_playback->set_sample_playback(sample_playback); + } + } else if (!stream->is_meta_stream()) { + WARN_PRINT(vformat(R"(%s is trying to play a sample from a stream that cannot be sampled.)", node->get_path())); + } + } + stream_playbacks.push_back(stream_playback); active.set(); _set_process(true); @@ -151,6 +169,9 @@ void AudioStreamPlayerInternal::set_stream_paused(bool p_pause) { // TODO this does not have perfect recall, fix that maybe? If there are zero playbacks registered with the AudioServer, this bool isn't persisted. for (Ref<AudioStreamPlayback> &playback : stream_playbacks) { AudioServer::get_singleton()->set_playback_paused(playback, p_pause); + if (_is_sample() && playback->get_sample_playback().is_valid()) { + AudioServer::get_singleton()->set_sample_playback_pause(playback->get_sample_playback(), p_pause); + } } } @@ -240,8 +261,12 @@ void AudioStreamPlayerInternal::seek(float p_seconds) { void AudioStreamPlayerInternal::stop() { for (Ref<AudioStreamPlayback> &playback : stream_playbacks) { AudioServer::get_singleton()->stop_playback_stream(playback); + if (_is_sample() && playback->get_sample_playback().is_valid()) { + AudioServer::get_singleton()->stop_sample_playback(playback->get_sample_playback()); + } } stream_playbacks.clear(); + active.clear(); _set_process(false); } @@ -299,6 +324,14 @@ Ref<AudioStreamPlayback> AudioStreamPlayerInternal::get_stream_playback() { return stream_playbacks[stream_playbacks.size() - 1]; } +void AudioStreamPlayerInternal::set_playback_type(AudioServer::PlaybackType p_playback_type) { + playback_type = p_playback_type; +} + +AudioServer::PlaybackType AudioStreamPlayerInternal::get_playback_type() const { + return playback_type; +} + StringName AudioStreamPlayerInternal::get_bus() const { const String bus_name = bus; for (int i = 0; i < AudioServer::get_singleton()->get_bus_count(); i++) { diff --git a/scene/audio/audio_stream_player_internal.h b/scene/audio/audio_stream_player_internal.h index 3662752441..ec4489067e 100644 --- a/scene/audio/audio_stream_player_internal.h +++ b/scene/audio/audio_stream_player_internal.h @@ -33,14 +33,17 @@ #include "core/object/ref_counted.h" #include "core/templates/safe_refcount.h" +#include "servers/audio_server.h" class AudioStream; class AudioStreamPlayback; +class AudioSamplePlayback; class Node; class AudioStreamPlayerInternal : public Object { GDCLASS(AudioStreamPlayerInternal, Object); +private: struct ParameterData { StringName path; Variant value; @@ -51,12 +54,17 @@ class AudioStreamPlayerInternal : public Object { Node *node = nullptr; Callable play_callable; bool physical = false; + AudioServer::PlaybackType playback_type = AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT; HashMap<StringName, ParameterData> playback_parameters; void _set_process(bool p_enabled); void _update_stream_parameters(); + _FORCE_INLINE_ bool _is_sample() { + return (AudioServer::get_singleton()->get_default_playback_type() == AudioServer::PlaybackType::PLAYBACK_TYPE_SAMPLE && get_playback_type() == AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT) || get_playback_type() == AudioServer::PlaybackType::PLAYBACK_TYPE_SAMPLE; + } + public: Vector<Ref<AudioStreamPlayback>> stream_playbacks; Ref<AudioStream> stream; @@ -99,6 +107,9 @@ public: bool has_stream_playback(); Ref<AudioStreamPlayback> get_stream_playback(); + void set_playback_type(AudioServer::PlaybackType p_playback_type); + AudioServer::PlaybackType get_playback_type() const; + AudioStreamPlayerInternal(Node *p_node, const Callable &p_play_callable, bool p_physical); }; diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index c843bb8c44..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(); @@ -3645,7 +3657,7 @@ CodeEdit::CodeEdit() { connect("lines_edited_from", callable_mp(this, &CodeEdit::_lines_edited_from)); connect("text_set", callable_mp(this, &CodeEdit::_text_set)); - connect("text_changed", callable_mp(this, &CodeEdit::_text_changed)); + connect(SceneStringName(text_changed), callable_mp(this, &CodeEdit::_text_changed)); connect("gutter_clicked", callable_mp(this, &CodeEdit::_gutter_clicked)); connect("gutter_added", callable_mp(this, &CodeEdit::_update_gutter_indexes)); diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 8913650689..a2aee353f9 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -419,7 +419,7 @@ void ColorPicker::create_slider(GridContainer *gc, int idx) { gc->add_child(val); LineEdit *vle = val->get_line_edit(); - vle->connect("text_changed", callable_mp(this, &ColorPicker::_text_changed)); + vle->connect(SceneStringName(text_changed), callable_mp(this, &ColorPicker::_text_changed)); vle->connect(SceneStringName(gui_input), callable_mp(this, &ColorPicker::_line_edit_input)); vle->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_RIGHT); @@ -428,7 +428,7 @@ void ColorPicker::create_slider(GridContainer *gc, int idx) { slider->set_h_size_flags(SIZE_EXPAND_FILL); slider->connect("drag_started", callable_mp(this, &ColorPicker::_slider_drag_started)); - slider->connect("value_changed", callable_mp(this, &ColorPicker::_slider_value_changed).unbind(1)); + slider->connect(SceneStringName(value_changed), callable_mp(this, &ColorPicker::_slider_value_changed).unbind(1)); slider->connect("drag_ended", callable_mp(this, &ColorPicker::_slider_drag_ended).unbind(1)); slider->connect(SceneStringName(draw), callable_mp(this, &ColorPicker::_slider_draw).bind(idx)); slider->connect(SceneStringName(gui_input), callable_mp(this, &ColorPicker::_slider_or_spin_input)); @@ -1949,7 +1949,7 @@ ColorPicker::ColorPicker() { c_text->set_tooltip_text(ETR("Enter a hex code (\"#ff0000\") or named color (\"red\").")); c_text->set_placeholder(ETR("Hex code or named color")); c_text->connect("text_submitted", callable_mp(this, &ColorPicker::_html_submitted)); - c_text->connect("text_changed", callable_mp(this, &ColorPicker::_text_changed)); + c_text->connect(SceneStringName(text_changed), callable_mp(this, &ColorPicker::_text_changed)); c_text->connect(SceneStringName(focus_exited), callable_mp(this, &ColorPicker::_html_focus_exit)); wheel_edit = memnew(AspectRatioContainer); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 088c8fca26..7801c39ce6 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -134,7 +134,7 @@ void AcceptDialog::_ok_pressed() { set_visible(false); } ok_pressed(); - emit_signal(SNAME("confirmed")); + emit_signal(SceneStringName(confirmed)); set_input_as_handled(); } diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index a23ee6db71..c9372525bd 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -1152,7 +1152,7 @@ void FileDialog::_update_option_controls() { } ob->select(opt.default_idx); grid_options->add_child(ob); - ob->connect("item_selected", callable_mp(this, &FileDialog::_option_changed_item_selected).bind(opt.name)); + ob->connect(SceneStringName(item_selected), callable_mp(this, &FileDialog::_option_changed_item_selected).bind(opt.name)); selected_options[opt.name] = opt.default_idx; } } @@ -1421,7 +1421,7 @@ FileDialog::FileDialog() { hbc->add_child(drives_container); drives = memnew(OptionButton); - drives->connect("item_selected", callable_mp(this, &FileDialog::_select_drive)); + drives->connect(SceneStringName(item_selected), callable_mp(this, &FileDialog::_select_drive)); hbc->add_child(drives); dir = memnew(LineEdit); @@ -1486,19 +1486,19 @@ FileDialog::FileDialog() { dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); _update_drives(); - connect("confirmed", callable_mp(this, &FileDialog::_action_pressed)); + connect(SceneStringName(confirmed), callable_mp(this, &FileDialog::_action_pressed)); tree->connect("multi_selected", callable_mp(this, &FileDialog::_tree_multi_selected), CONNECT_DEFERRED); tree->connect("cell_selected", callable_mp(this, &FileDialog::_tree_selected), CONNECT_DEFERRED); tree->connect("item_activated", callable_mp(this, &FileDialog::_tree_item_activated)); tree->connect("nothing_selected", callable_mp(this, &FileDialog::deselect_all)); dir->connect("text_submitted", callable_mp(this, &FileDialog::_dir_submitted)); file->connect("text_submitted", callable_mp(this, &FileDialog::_file_submitted)); - filter->connect("item_selected", callable_mp(this, &FileDialog::_filter_selected)); + filter->connect(SceneStringName(item_selected), callable_mp(this, &FileDialog::_filter_selected)); confirm_save = memnew(ConfirmationDialog); add_child(confirm_save, false, INTERNAL_MODE_FRONT); - confirm_save->connect("confirmed", callable_mp(this, &FileDialog::_save_confirm_pressed)); + confirm_save->connect(SceneStringName(confirmed), callable_mp(this, &FileDialog::_save_confirm_pressed)); makedialog = memnew(ConfirmationDialog); makedialog->set_title(ETR("Create Folder")); @@ -1510,7 +1510,7 @@ FileDialog::FileDialog() { makevb->add_margin_child(ETR("Name:"), makedirname); add_child(makedialog, false, INTERNAL_MODE_FRONT); makedialog->register_text_enter(makedirname); - makedialog->connect("confirmed", callable_mp(this, &FileDialog::_make_dir_confirm)); + makedialog->connect(SceneStringName(confirmed), callable_mp(this, &FileDialog::_make_dir_confirm)); mkdirerr = memnew(AcceptDialog); mkdirerr->set_text(ETR("Could not create folder.")); add_child(mkdirerr, false, INTERNAL_MODE_FRONT); 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 e725bb5ba5..33756dc1fd 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -2816,8 +2816,8 @@ GraphEdit::GraphEdit() { v_scrollbar->set_min(-10000); v_scrollbar->set_max(10000); - h_scrollbar->connect("value_changed", callable_mp(this, &GraphEdit::_scroll_moved)); - v_scrollbar->connect("value_changed", callable_mp(this, &GraphEdit::_scroll_moved)); + h_scrollbar->connect(SceneStringName(value_changed), callable_mp(this, &GraphEdit::_scroll_moved)); + v_scrollbar->connect(SceneStringName(value_changed), callable_mp(this, &GraphEdit::_scroll_moved)); // Toolbar menu. @@ -2893,7 +2893,7 @@ GraphEdit::GraphEdit() { snapping_distance_spinbox->set_value(snapping_distance); snapping_distance_spinbox->set_tooltip_text(ETR("Change the snapping distance.")); menu_hbox->add_child(snapping_distance_spinbox); - snapping_distance_spinbox->connect("value_changed", callable_mp(this, &GraphEdit::_snapping_distance_changed)); + snapping_distance_spinbox->connect(SceneStringName(value_changed), callable_mp(this, &GraphEdit::_snapping_distance_changed)); // Extra controls. 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/item_list.cpp b/scene/gui/item_list.cpp index 40c694184c..933b4df6e3 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -733,7 +733,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { select(i, select_mode == SELECT_SINGLE || !mb->is_command_or_control_pressed()); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), i); + emit_signal(SceneStringName(item_selected), i); } else { emit_signal(SNAME("multi_selected"), i, true); } @@ -775,7 +775,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(i); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } break; @@ -798,7 +798,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(next); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); } @@ -813,7 +813,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(i); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } break; } @@ -835,7 +835,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(next); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); } @@ -848,7 +848,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(index); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); break; @@ -863,7 +863,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(index); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); @@ -886,7 +886,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(next); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); } @@ -906,7 +906,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(next); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } accept_event(); } @@ -962,7 +962,7 @@ void ItemList::gui_input(const Ref<InputEvent> &p_event) { set_current(i); ensure_current_is_visible(); if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } break; } @@ -1910,7 +1910,7 @@ void ItemList::_bind_methods() { ItemList::ItemList() { scroll_bar = memnew(VScrollBar); add_child(scroll_bar, false, INTERNAL_MODE_FRONT); - scroll_bar->connect("value_changed", callable_mp(this, &ItemList::_scroll_changed)); + scroll_bar->connect(SceneStringName(value_changed), callable_mp(this, &ItemList::_scroll_changed)); connect(SceneStringName(mouse_exited), callable_mp(this, &ItemList::_mouse_exited)); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 2d978fe54a..218153e011 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -2305,7 +2305,7 @@ void LineEdit::_text_changed() { } void LineEdit::_emit_text_change() { - emit_signal(SNAME("text_changed"), text); + emit_signal(SceneStringName(text_changed), text); text_changed_dirty = false; } PackedStringArray LineEdit::get_configuration_warnings() const { diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp index 68e72ea996..da15b44bdc 100644 --- a/scene/gui/option_button.cpp +++ b/scene/gui/option_button.cpp @@ -395,7 +395,7 @@ void OptionButton::_select(int p_which, bool p_emit) { } if (is_inside_tree() && p_emit) { - emit_signal(SNAME("item_selected"), current); + emit_signal(SceneStringName(item_selected), current); } } diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 00f4a1089a..83359653f1 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -45,7 +45,7 @@ void Range::_value_changed(double p_value) { } void Range::_value_changed_notify() { _value_changed(shared->val); - emit_signal(SNAME("value_changed"), shared->val); + emit_signal(SceneStringName(value_changed), shared->val); queue_redraw(); } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index d69fa78d9d..8ffa0f8c63 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -408,7 +408,7 @@ float RichTextLabel::_resize_line(ItemFrame *p_frame, int p_line, const Ref<Font _set_table_size(table, available_width); int row_idx = (table->align_to_row < 0) ? table->rows_baseline.size() - 1 : table->align_to_row; - if (table->rows_baseline.size() != 0 && row_idx < (int)table->rows_baseline.size() - 1) { + if (table->rows_baseline.size() != 0 && row_idx < (int)table->rows_baseline.size()) { l.text_buf->resize_object(it->rid, Size2(table->total_width, table->total_height), table->inline_align, Math::round(table->rows_baseline[row_idx])); } else { l.text_buf->resize_object(it->rid, Size2(table->total_width, table->total_height), table->inline_align); @@ -632,7 +632,7 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> _set_table_size(table, available_width); int row_idx = (table->align_to_row < 0) ? table->rows_baseline.size() - 1 : table->align_to_row; - if (table->rows_baseline.size() != 0 && row_idx < (int)table->rows_baseline.size() - 1) { + if (table->rows_baseline.size() != 0 && row_idx < (int)table->rows_baseline.size()) { l.text_buf->add_object(it->rid, Size2(table->total_width, table->total_height), table->inline_align, t_char_count, Math::round(table->rows_baseline[row_idx])); } else { l.text_buf->add_object(it->rid, Size2(table->total_width, table->total_height), table->inline_align, t_char_count); @@ -724,7 +724,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { p_table->rows.clear(); p_table->rows_baseline.clear(); - Vector2 offset; + Vector2 offset = Vector2(theme_cache.table_h_separation * 0.5, theme_cache.table_v_separation * 0.5).floor(); float row_height = 0.0; for (const List<Item *>::Element *E = p_table->subitems.front(); E; E = E->next()) { @@ -767,12 +767,12 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { row_height = MAX(yofs, row_height); // Add row height after last column of the row or last cell of the table. if (column == col_count - 1 || E->next() == nullptr) { - offset.x = 0; + offset.x = Math::floor(theme_cache.table_h_separation * 0.5); row_height += theme_cache.table_v_separation; p_table->total_height += row_height; offset.y += row_height; p_table->rows.push_back(row_height); - p_table->rows_baseline.push_back(p_table->total_height - row_height + row_baseline); + p_table->rows_baseline.push_back(p_table->total_height - row_height + row_baseline + Math::floor(theme_cache.table_v_separation * 0.5)); row_height = 0; } idx++; @@ -942,7 +942,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o Color odd_row_bg = theme_cache.table_odd_row_bg; Color even_row_bg = theme_cache.table_even_row_bg; Color border = theme_cache.table_border; - int h_separation = theme_cache.table_h_separation; + float h_separation = theme_cache.table_h_separation; + float v_separation = theme_cache.table_v_separation; int col_count = table->columns.size(); int row_count = table->rows.size(); @@ -962,17 +963,17 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o if (row % 2 == 0) { Color c = frame->odd_row_bg != Color(0, 0, 0, 0) ? frame->odd_row_bg : odd_row_bg; if (c.a > 0.0) { - draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), c, true); + draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position - Vector2(h_separation * 0.5, v_separation * 0.5).floor(), Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), c, true); } } else { Color c = frame->even_row_bg != Color(0, 0, 0, 0) ? frame->even_row_bg : even_row_bg; if (c.a > 0.0) { - draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), c, true); + draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position - Vector2(h_separation * 0.5, v_separation * 0.5).floor(), Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), c, true); } } Color bc = frame->border != Color(0, 0, 0, 0) ? frame->border : border; if (bc.a > 0.0) { - draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position, Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), bc, false); + draw_rect(Rect2(p_ofs + rect.position + off + coff - frame->padding.position - Vector2(h_separation * 0.5, v_separation * 0.5).floor(), Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row])), bc, false); } } @@ -1248,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(); @@ -1534,7 +1535,7 @@ float RichTextLabel::_find_click_in_line(ItemFrame *p_frame, int p_line, const V if (rtl) { coff.x = rect.size.width - table->columns[col].width - coff.x; } - Rect2 crect = Rect2(rect.position + coff - frame->padding.position, Size2(table->columns[col].width + theme_cache.table_h_separation, table->rows[row] + theme_cache.table_v_separation) + frame->padding.position + frame->padding.size); + Rect2 crect = Rect2(rect.position + coff - frame->padding.position - Vector2(theme_cache.table_h_separation * 0.5, theme_cache.table_h_separation * 0.5).floor(), Size2(table->columns[col].width + theme_cache.table_h_separation, table->rows[row] + theme_cache.table_v_separation) + frame->padding.position + frame->padding.size); if (col == col_count - 1) { if (rtl) { crect.size.x = crect.position.x + crect.size.x; @@ -6442,7 +6443,7 @@ RichTextLabel::RichTextLabel(const String &p_text) { vscroll->set_anchor_and_offset(SIDE_TOP, ANCHOR_BEGIN, 0); vscroll->set_anchor_and_offset(SIDE_BOTTOM, ANCHOR_END, 0); vscroll->set_anchor_and_offset(SIDE_RIGHT, ANCHOR_END, 0); - vscroll->connect("value_changed", callable_mp(this, &RichTextLabel::_scroll_changed)); + vscroll->connect(SceneStringName(value_changed), callable_mp(this, &RichTextLabel::_scroll_changed)); vscroll->set_step(1); vscroll->hide(); diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 824bb77694..66f18f1c14 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -621,12 +621,12 @@ ScrollContainer::ScrollContainer() { h_scroll = memnew(HScrollBar); h_scroll->set_name("_h_scroll"); add_child(h_scroll, false, INTERNAL_MODE_BACK); - h_scroll->connect("value_changed", callable_mp(this, &ScrollContainer::_scroll_moved)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &ScrollContainer::_scroll_moved)); v_scroll = memnew(VScrollBar); v_scroll->set_name("_v_scroll"); add_child(v_scroll, false, INTERNAL_MODE_BACK); - v_scroll->connect("value_changed", callable_mp(this, &ScrollContainer::_scroll_moved)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &ScrollContainer::_scroll_moved)); deadzone = GLOBAL_GET("gui/common/default_scroll_deadzone"); diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index bfea7b0fbe..2c08d36e7e 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -333,9 +333,9 @@ void SpinBox::set_update_on_text_changed(bool p_enabled) { update_on_text_changed = p_enabled; if (p_enabled) { - line_edit->connect("text_changed", callable_mp(this, &SpinBox::_text_changed), CONNECT_DEFERRED); + line_edit->connect(SceneStringName(text_changed), callable_mp(this, &SpinBox::_text_changed), CONNECT_DEFERRED); } else { - line_edit->disconnect("text_changed", callable_mp(this, &SpinBox::_text_changed)); + line_edit->disconnect(SceneStringName(text_changed), callable_mp(this, &SpinBox::_text_changed)); } } diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 58724cf4e9..23b99d1e53 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -243,8 +243,8 @@ void TabContainer::_on_theme_changed() { tab_bar->add_theme_color_override(SNAME("font_disabled_color"), theme_cache.font_disabled_color); tab_bar->add_theme_color_override(SNAME("font_outline_color"), theme_cache.font_outline_color); - tab_bar->add_theme_font_override(SNAME("font"), theme_cache.tab_font); - tab_bar->add_theme_font_size_override(SNAME("font_size"), theme_cache.tab_font_size); + tab_bar->add_theme_font_override(SceneStringName(font), theme_cache.tab_font); + tab_bar->add_theme_font_size_override(SceneStringName(font_size), theme_cache.tab_font_size); tab_bar->add_theme_constant_override(SNAME("h_separation"), theme_cache.icon_separation); tab_bar->add_theme_constant_override(SNAME("icon_max_width"), theme_cache.icon_max_width); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 5a64dabb0e..7b682daa83 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 /// /////////////////////////////////////////////////////////////////////////////// @@ -6277,6 +6332,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 +6644,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 +6875,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"); @@ -8076,7 +8181,7 @@ void TextEdit::_text_changed() { } void TextEdit::_emit_text_changed() { - emit_signal(SNAME("text_changed")); + emit_signal(SceneStringName(text_changed)); text_changed_dirty = false; } @@ -8273,8 +8378,8 @@ TextEdit::TextEdit(const String &p_placeholder) { add_child(h_scroll, false, INTERNAL_MODE_FRONT); add_child(v_scroll, false, INTERNAL_MODE_FRONT); - h_scroll->connect("value_changed", callable_mp(this, &TextEdit::_scroll_moved)); - v_scroll->connect("value_changed", callable_mp(this, &TextEdit::_scroll_moved)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &TextEdit::_scroll_moved)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &TextEdit::_scroll_moved)); v_scroll->connect("scrolling", callable_mp(this, &TextEdit::_v_scroll_input)); diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index efade39876..6ed5cf4bdc 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); @@ -1068,6 +1083,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 56be6b90a2..b0dfdacad0 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2693,7 +2693,7 @@ void Tree::select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_c c.selected = true; selected_item = p_selected; if (!emitted_row) { - emit_signal(SNAME("item_selected")); + emit_signal(SceneStringName(item_selected)); emitted_row = true; } } else if (c.selected) { @@ -2717,7 +2717,7 @@ void Tree::select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_c if (select_mode == SELECT_MULTI) { emit_signal(SNAME("multi_selected"), p_current, i, true); } else if (select_mode == SELECT_SINGLE) { - emit_signal(SNAME("item_selected")); + emit_signal(SceneStringName(item_selected)); } } else if (select_mode == SELECT_MULTI && (selected_item != p_selected || selected_col != i)) { @@ -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; @@ -5816,13 +5817,13 @@ Tree::Tree() { range_click_timer->connect("timeout", callable_mp(this, &Tree::_range_click_timeout)); add_child(range_click_timer, false, INTERNAL_MODE_FRONT); - h_scroll->connect("value_changed", callable_mp(this, &Tree::_scroll_moved)); - v_scroll->connect("value_changed", callable_mp(this, &Tree::_scroll_moved)); + h_scroll->connect(SceneStringName(value_changed), callable_mp(this, &Tree::_scroll_moved)); + v_scroll->connect(SceneStringName(value_changed), callable_mp(this, &Tree::_scroll_moved)); line_editor->connect("text_submitted", callable_mp(this, &Tree::_line_editor_submit)); text_editor->connect(SceneStringName(gui_input), callable_mp(this, &Tree::_text_editor_gui_input)); popup_editor->connect("popup_hide", callable_mp(this, &Tree::_text_editor_popup_modal_close)); popup_menu->connect(SceneStringName(id_pressed), callable_mp(this, &Tree::popup_select)); - value_editor->connect("value_changed", callable_mp(this, &Tree::value_editor_changed)); + value_editor->connect(SceneStringName(value_changed), callable_mp(this, &Tree::value_editor_changed)); set_notify_transform(true); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index c6e5a4603e..5bbf8ebff4 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2777,12 +2777,12 @@ Node *Node::duplicate(int p_flags) const { ERR_THREAD_GUARD_V(nullptr); Node *dupe = _duplicate(p_flags); + _duplicate_properties(this, this, dupe, p_flags); + if (dupe && (p_flags & DUPLICATE_SIGNALS)) { _duplicate_signals(this, dupe); } - _duplicate_properties(this, this, dupe, p_flags); - return dupe; } @@ -2795,6 +2795,8 @@ Node *Node::duplicate_from_editor(HashMap<const Node *, Node *> &r_duplimap, con int flags = DUPLICATE_SIGNALS | DUPLICATE_GROUPS | DUPLICATE_SCRIPTS | DUPLICATE_USE_INSTANTIATION | DUPLICATE_FROM_EDITOR; Node *dupe = _duplicate(flags, &r_duplimap); + _duplicate_properties(this, this, dupe, flags); + // This is used by SceneTreeDock's paste functionality. When pasting to foreign scene, resources are duplicated. if (!p_resource_remap.is_empty()) { remap_node_resources(dupe, p_resource_remap); @@ -2805,8 +2807,6 @@ Node *Node::duplicate_from_editor(HashMap<const Node *, Node *> &r_duplimap, con // if the emitter node comes later in tree order than the receiver _duplicate_signals(this, dupe); - _duplicate_properties(this, this, dupe, flags); - return dupe; } @@ -2907,9 +2907,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/animated_texture.cpp b/scene/resources/animated_texture.cpp index 842a398327..f13f15539d 100644 --- a/scene/resources/animated_texture.cpp +++ b/scene/resources/animated_texture.cpp @@ -270,13 +270,18 @@ void AnimatedTexture::_bind_methods() { BIND_CONSTANT(MAX_FRAMES); } +void AnimatedTexture::_finish_non_thread_safe_setup() { + RenderingServer::get_singleton()->connect("frame_pre_draw", callable_mp(this, &AnimatedTexture::_update_proxy)); +} + AnimatedTexture::AnimatedTexture() { //proxy = RS::get_singleton()->texture_create(); proxy_ph = RS::get_singleton()->texture_2d_placeholder_create(); proxy = RS::get_singleton()->texture_proxy_create(proxy_ph); RenderingServer::get_singleton()->texture_set_force_redraw_if_visible(proxy, true); - RenderingServer::get_singleton()->connect("frame_pre_draw", callable_mp(this, &AnimatedTexture::_update_proxy)); + + MessageQueue::get_main_singleton()->push_callable(callable_mp(this, &AnimatedTexture::_finish_non_thread_safe_setup)); } AnimatedTexture::~AnimatedTexture() { diff --git a/scene/resources/animated_texture.h b/scene/resources/animated_texture.h index 844959c810..3238466665 100644 --- a/scene/resources/animated_texture.h +++ b/scene/resources/animated_texture.h @@ -65,6 +65,7 @@ private: uint64_t prev_ticks = 0; void _update_proxy(); + void _finish_non_thread_safe_setup(); protected: static void _bind_methods(); 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/audio_stream_polyphonic.compat.inc b/scene/resources/audio_stream_polyphonic.compat.inc new file mode 100644 index 0000000000..31074218e1 --- /dev/null +++ b/scene/resources/audio_stream_polyphonic.compat.inc @@ -0,0 +1,41 @@ +/**************************************************************************/ +/* audio_stream_polyphonic.compat.inc */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef DISABLE_DEPRECATED + +AudioStreamPlaybackPolyphonic::ID AudioStreamPlaybackPolyphonic::_play_stream_bind_compat_91382(const Ref<AudioStream> &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale) { + return play_stream(p_stream, p_from_offset, p_volume_db, p_pitch_scale, AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT, SceneStringName(Master)); +} + +void AudioStreamPlaybackPolyphonic::_bind_compatibility_methods() { + ClassDB::bind_compatibility_method(D_METHOD("play_stream", "stream", "from_offset", "volume_db", "pitch_scale"), &AudioStreamPlaybackPolyphonic::_play_stream_bind_compat_91382, DEFVAL(0), DEFVAL(0), DEFVAL(1.0)); +} + +#endif diff --git a/scene/resources/audio_stream_polyphonic.cpp b/scene/resources/audio_stream_polyphonic.cpp index f7299b0789..45546d8dc7 100644 --- a/scene/resources/audio_stream_polyphonic.cpp +++ b/scene/resources/audio_stream_polyphonic.cpp @@ -29,7 +29,10 @@ /**************************************************************************/ #include "audio_stream_polyphonic.h" +#include "audio_stream_polyphonic.compat.inc" + #include "scene/main/scene_tree.h" +#include "servers/audio_server.h" Ref<AudioStreamPlayback> AudioStreamPolyphonic::instantiate_playback() { Ref<AudioStreamPlaybackPolyphonic> playback; @@ -136,6 +139,10 @@ int AudioStreamPlaybackPolyphonic::mix(AudioFrame *p_buffer, float p_rate_scale, continue; } + if (s.stream_playback->get_is_sample()) { + continue; + } + float volume_db = s.volume_db; // Copy because it can be overridden at any time. float next_volume = Math::db_to_linear(volume_db); s.prev_volume_db = volume_db; @@ -195,8 +202,13 @@ int AudioStreamPlaybackPolyphonic::mix(AudioFrame *p_buffer, float p_rate_scale, return p_frames; } -AudioStreamPlaybackPolyphonic::ID AudioStreamPlaybackPolyphonic::play_stream(const Ref<AudioStream> &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale) { +AudioStreamPlaybackPolyphonic::ID AudioStreamPlaybackPolyphonic::play_stream(const Ref<AudioStream> &p_stream, float p_from_offset, float p_volume_db, float p_pitch_scale, AudioServer::PlaybackType p_playback_type, const StringName &p_bus) { ERR_FAIL_COND_V(p_stream.is_null(), INVALID_ID); + + AudioServer::PlaybackType playback_type = p_playback_type == AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT + ? AudioServer::get_singleton()->get_default_playback_type() + : p_playback_type; + for (uint32_t i = 0; i < streams.size(); i++) { if (!streams[i].active.is_set()) { // Can use this stream, as it's not active. @@ -210,6 +222,28 @@ AudioStreamPlaybackPolyphonic::ID AudioStreamPlaybackPolyphonic::play_stream(con streams[i].finish_request.clear(); streams[i].pending_play.set(); streams[i].active.set(); + + // Sample playback. + if (playback_type == AudioServer::PlaybackType::PLAYBACK_TYPE_SAMPLE && p_stream->can_be_sampled()) { + streams[i].stream_playback->set_is_sample(true); + if (!AudioServer::get_singleton()->is_stream_registered_as_sample(p_stream)) { + AudioServer::get_singleton()->register_stream_as_sample(p_stream); + } + float linear_volume = Math::db_to_linear(p_volume_db); + Ref<AudioSamplePlayback> sp; + sp.instantiate(); + sp->stream = streams[i].stream; + sp->offset = p_from_offset; + sp->volume_vector.resize(4); + sp->volume_vector.write[0] = AudioFrame(linear_volume, linear_volume); + sp->volume_vector.write[1] = AudioFrame(linear_volume, /* LFE= */ 1.0f); + sp->volume_vector.write[2] = AudioFrame(linear_volume, linear_volume); + sp->volume_vector.write[3] = AudioFrame(linear_volume, linear_volume); + sp->bus = p_bus; + streams[i].stream_playback->set_sample_playback(sp); + AudioServer::get_singleton()->start_sample_playback(sp); + } + return (ID(i) << INDEX_SHIFT) | ID(streams[i].id); } } @@ -260,8 +294,24 @@ void AudioStreamPlaybackPolyphonic::stop_stream(ID p_stream_id) { s->finish_request.set(); } +void AudioStreamPlaybackPolyphonic::set_is_sample(bool p_is_sample) { + _is_sample = p_is_sample; +} + +bool AudioStreamPlaybackPolyphonic::get_is_sample() const { + return _is_sample; +} + +Ref<AudioSamplePlayback> AudioStreamPlaybackPolyphonic::get_sample_playback() const { + return sample_playback; +} + +void AudioStreamPlaybackPolyphonic::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + sample_playback = p_playback; +} + void AudioStreamPlaybackPolyphonic::_bind_methods() { - ClassDB::bind_method(D_METHOD("play_stream", "stream", "from_offset", "volume_db", "pitch_scale"), &AudioStreamPlaybackPolyphonic::play_stream, DEFVAL(0), DEFVAL(0), DEFVAL(1.0)); + ClassDB::bind_method(D_METHOD("play_stream", "stream", "from_offset", "volume_db", "pitch_scale", "playback_type", "bus"), &AudioStreamPlaybackPolyphonic::play_stream, DEFVAL(0), DEFVAL(0), DEFVAL(1.0), DEFVAL(0), DEFVAL(SceneStringName(Master))); ClassDB::bind_method(D_METHOD("set_stream_volume", "stream", "volume_db"), &AudioStreamPlaybackPolyphonic::set_stream_volume); ClassDB::bind_method(D_METHOD("set_stream_pitch_scale", "stream", "pitch_scale"), &AudioStreamPlaybackPolyphonic::set_stream_pitch_scale); ClassDB::bind_method(D_METHOD("is_stream_playing", "stream"), &AudioStreamPlaybackPolyphonic::is_stream_playing); diff --git a/scene/resources/audio_stream_polyphonic.h b/scene/resources/audio_stream_polyphonic.h index e414401b6f..01d0176c44 100644 --- a/scene/resources/audio_stream_polyphonic.h +++ b/scene/resources/audio_stream_polyphonic.h @@ -32,12 +32,16 @@ #define AUDIO_STREAM_POLYPHONIC_H #include "core/templates/local_vector.h" +#include "scene/scene_string_names.h" #include "servers/audio/audio_stream.h" +#include "servers/audio_server.h" class AudioStreamPolyphonic : public AudioStream { GDCLASS(AudioStreamPolyphonic, AudioStream) int polyphony = 32; + AudioServer::PlaybackType playback_type; + static void _bind_methods(); public: @@ -48,6 +52,8 @@ public: void set_polyphony(int p_voices); int get_polyphony() const; + virtual bool is_meta_stream() const override { return true; } + AudioStreamPolyphonic(); }; @@ -81,6 +87,9 @@ class AudioStreamPlaybackPolyphonic : public AudioStreamPlayback { bool active = false; uint32_t id_counter = 1; + bool _is_sample = false; + Ref<AudioSamplePlayback> sample_playback; + _FORCE_INLINE_ Stream *_find_stream(int64_t p_id); friend class AudioStreamPolyphonic; @@ -107,12 +116,24 @@ public: virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) override; - ID play_stream(const Ref<AudioStream> &p_stream, float p_from_offset = 0, float p_volume_db = 0, float p_pitch_scale = 1.0); + ID play_stream(const Ref<AudioStream> &p_stream, float p_from_offset = 0, float p_volume_db = 0, float p_pitch_scale = 1.0, AudioServer::PlaybackType p_playback_type = AudioServer::PlaybackType::PLAYBACK_TYPE_DEFAULT, const StringName &p_bus = SceneStringName(Master)); void set_stream_volume(ID p_stream_id, float p_volume_db); void set_stream_pitch_scale(ID p_stream_id, float p_pitch_scale); bool is_stream_playing(ID p_stream_id) const; void stop_stream(ID p_stream_id); + virtual void set_is_sample(bool p_is_sample) override; + virtual bool get_is_sample() const override; + virtual Ref<AudioSamplePlayback> get_sample_playback() const override; + virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + +private: +#ifndef DISABLE_DEPRECATED + ID _play_stream_bind_compat_91382(const Ref<AudioStream> &p_stream, float p_from_offset = 0, float p_volume_db = 0, float p_pitch_scale = 1.0); + static void _bind_compatibility_methods(); +#endif // DISABLE_DEPRECATED + +public: AudioStreamPlaybackPolyphonic(); }; diff --git a/scene/resources/audio_stream_wav.cpp b/scene/resources/audio_stream_wav.cpp index db2564af22..e2ac0e6d26 100644 --- a/scene/resources/audio_stream_wav.cpp +++ b/scene/resources/audio_stream_wav.cpp @@ -465,6 +465,22 @@ void AudioStreamPlaybackWAV::tag_used_streams() { base->tag_used(get_playback_position()); } +void AudioStreamPlaybackWAV::set_is_sample(bool p_is_sample) { + _is_sample = p_is_sample; +} + +bool AudioStreamPlaybackWAV::get_is_sample() const { + return _is_sample; +} + +Ref<AudioSamplePlayback> AudioStreamPlaybackWAV::get_sample_playback() const { + return sample_playback; +} + +void AudioStreamPlaybackWAV::set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + sample_playback = p_playback; +} + AudioStreamPlaybackWAV::AudioStreamPlaybackWAV() {} AudioStreamPlaybackWAV::~AudioStreamPlaybackWAV() { @@ -696,6 +712,33 @@ String AudioStreamWAV::get_stream_name() const { return ""; } +Ref<AudioSample> AudioStreamWAV::generate_sample() const { + Ref<AudioSample> sample; + sample.instantiate(); + sample->stream = this; + switch (loop_mode) { + case AudioStreamWAV::LoopMode::LOOP_DISABLED: { + sample->loop_mode = AudioSample::LoopMode::LOOP_DISABLED; + } break; + + case AudioStreamWAV::LoopMode::LOOP_FORWARD: { + sample->loop_mode = AudioSample::LoopMode::LOOP_FORWARD; + } break; + + case AudioStreamWAV::LoopMode::LOOP_PINGPONG: { + sample->loop_mode = AudioSample::LoopMode::LOOP_PINGPONG; + } break; + + case AudioStreamWAV::LoopMode::LOOP_BACKWARD: { + sample->loop_mode = AudioSample::LoopMode::LOOP_BACKWARD; + } break; + } + sample->loop_begin = loop_begin; + sample->loop_end = loop_end; + sample->sample_rate = mix_rate; + return sample; +} + void AudioStreamWAV::_bind_methods() { ClassDB::bind_method(D_METHOD("set_data", "data"), &AudioStreamWAV::set_data); ClassDB::bind_method(D_METHOD("get_data"), &AudioStreamWAV::get_data); diff --git a/scene/resources/audio_stream_wav.h b/scene/resources/audio_stream_wav.h index 146142d8a4..806db675b6 100644 --- a/scene/resources/audio_stream_wav.h +++ b/scene/resources/audio_stream_wav.h @@ -78,6 +78,9 @@ class AudioStreamPlaybackWAV : public AudioStreamPlayback { template <typename Depth, bool is_stereo, bool is_ima_adpcm, bool is_qoa> void do_resample(const Depth *p_src, AudioFrame *p_dst, int64_t &p_offset, int32_t &p_increment, uint32_t p_amount, IMA_ADPCM_State *p_ima_adpcm, QOA_State *p_qoa); + bool _is_sample = false; + Ref<AudioSamplePlayback> sample_playback; + public: virtual void start(double p_from_pos = 0.0) override; virtual void stop() override; @@ -92,6 +95,11 @@ public: virtual void tag_used_streams() override; + virtual void set_is_sample(bool p_is_sample) override; + virtual bool get_is_sample() const override; + virtual Ref<AudioSamplePlayback> get_sample_playback() const override; + virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) override; + AudioStreamPlaybackWAV(); ~AudioStreamPlaybackWAV(); }; @@ -166,6 +174,11 @@ public: virtual Ref<AudioStreamPlayback> instantiate_playback() override; virtual String get_stream_name() const override; + virtual bool can_be_sampled() const override { + return true; + } + virtual Ref<AudioSample> generate_sample() const override; + AudioStreamWAV(); ~AudioStreamWAV(); }; 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/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/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index a54f1d376c..bedac4e933 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -1861,7 +1861,7 @@ void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const { } for (const KeyValue<String, Varying> &E : varyings) { - p_list->push_back(PropertyInfo(Variant::STRING, vformat("%s/%s", PNAME("varyings"), E.key))); + p_list->push_back(PropertyInfo(Variant::STRING, vformat("%s/%s", PNAME("varyings"), E.key), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); } for (int i = 0; i < TYPE_MAX; i++) { @@ -2620,7 +2620,7 @@ void VisualShader::_update_shader() const { default: break; } - global_code += E.key + ";\n"; + global_code += vformat("var_%s;\n", E.key); } global_code += "\n"; @@ -2689,7 +2689,7 @@ void VisualShader::_update_shader() const { default: break; } - varying_code += vformat(" %s = %s;\n", E.key, code2); + varying_code += vformat(" var_%s = %s;\n", E.key, code2); } is_empty_func = false; } @@ -5048,18 +5048,18 @@ VisualShaderNodeGlobalExpression::VisualShaderNodeGlobalExpression() { ////////////// Varying -List<VisualShaderNodeVarying::Varying> varyings; +RBMap<RID, List<VisualShaderNodeVarying::Varying>> varyings; -void VisualShaderNodeVarying::add_varying(const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type) { // static - varyings.push_back({ p_name, p_mode, p_type }); +void VisualShaderNodeVarying::add_varying(RID p_shader_rid, const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type) { // static + varyings[p_shader_rid].push_back({ p_name, p_mode, p_type }); } -void VisualShaderNodeVarying::clear_varyings() { // static - varyings.clear(); +void VisualShaderNodeVarying::clear_varyings(RID p_shader_rid) { // static + varyings[p_shader_rid].clear(); } -bool VisualShaderNodeVarying::has_varying(const String &p_name) { // static - for (const VisualShaderNodeVarying::Varying &E : varyings) { +bool VisualShaderNodeVarying::has_varying(RID p_shader_rid, const String &p_name) { // static + for (const VisualShaderNodeVarying::Varying &E : varyings[p_shader_rid]) { if (E.name == p_name) { return true; } @@ -5067,19 +5067,23 @@ bool VisualShaderNodeVarying::has_varying(const String &p_name) { // static return false; } +void VisualShaderNodeVarying::set_shader_rid(const RID &p_shader_rid) { + shader_rid = p_shader_rid; +} + int VisualShaderNodeVarying::get_varyings_count() const { - return varyings.size(); + return varyings[shader_rid].size(); } String VisualShaderNodeVarying::get_varying_name_by_index(int p_idx) const { - if (p_idx >= 0 && p_idx < varyings.size()) { - return varyings.get(p_idx).name; + if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) { + return varyings[shader_rid].get(p_idx).name; } return ""; } VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_name(const String &p_name) const { - for (const VisualShaderNodeVarying::Varying &varying : varyings) { + for (const VisualShaderNodeVarying::Varying &varying : varyings[shader_rid]) { if (varying.name == p_name) { return varying.type; } @@ -5088,14 +5092,14 @@ VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_name(cons } VisualShader::VaryingType VisualShaderNodeVarying::get_varying_type_by_index(int p_idx) const { - if (p_idx >= 0 && p_idx < varyings.size()) { - return varyings.get(p_idx).type; + if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) { + return varyings[shader_rid].get(p_idx).type; } return VisualShader::VARYING_TYPE_FLOAT; } VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_name(const String &p_name) const { - for (const VisualShaderNodeVarying::Varying &varying : varyings) { + for (const VisualShaderNodeVarying::Varying &varying : varyings[shader_rid]) { if (varying.name == p_name) { return varying.mode; } @@ -5104,15 +5108,15 @@ VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_name(cons } VisualShader::VaryingMode VisualShaderNodeVarying::get_varying_mode_by_index(int p_idx) const { - if (p_idx >= 0 && p_idx < varyings.size()) { - return varyings.get(p_idx).mode; + if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) { + return varyings[shader_rid].get(p_idx).mode; } return VisualShader::VARYING_MODE_VERTEX_TO_FRAG_LIGHT; } VisualShaderNodeVarying::PortType VisualShaderNodeVarying::get_port_type_by_index(int p_idx) const { - if (p_idx >= 0 && p_idx < varyings.size()) { - return get_port_type(varyings.get(p_idx).type, 0); + if (p_idx >= 0 && p_idx < varyings[shader_rid].size()) { + return get_port_type(varyings[shader_rid].get(p_idx).type, 0); } return PORT_TYPE_SCALAR; } @@ -5239,7 +5243,7 @@ String VisualShaderNodeVaryingSetter::generate_code(Shader::Mode p_mode, VisualS if (varying_name == "[None]") { return code; } - code += vformat(" %s = %s;\n", varying_name, p_input_vars[0]); + code += vformat(" var_%s = %s;\n", varying_name, p_input_vars[0]); return code; } @@ -5284,7 +5288,7 @@ String VisualShaderNodeVaryingGetter::generate_code(Shader::Mode p_mode, VisualS String from = varying_name; String from2; - if (varying_name == "[None]") { + if (varying_name == "[None]" || p_for_preview) { switch (varying_type) { case VisualShader::VARYING_TYPE_FLOAT: from = "0.0"; @@ -5313,8 +5317,9 @@ String VisualShaderNodeVaryingGetter::generate_code(Shader::Mode p_mode, VisualS default: break; } + return vformat(" %s = %s;\n", p_output_vars[0], from); } - return vformat(" %s = %s;\n", p_output_vars[0], from); + return vformat(" %s = var_%s;\n", p_output_vars[0], from); } VisualShaderNodeVaryingGetter::VisualShaderNodeVaryingGetter() { diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index 18cdc8342b..9cd8f86d0f 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -910,13 +910,16 @@ public: }; protected: + RID shader_rid; VisualShader::VaryingType varying_type = VisualShader::VARYING_TYPE_FLOAT; String varying_name = "[None]"; public: // internal - static void add_varying(const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type); - static void clear_varyings(); - static bool has_varying(const String &p_name); + static void add_varying(RID p_shader_rid, const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type); + static void clear_varyings(RID p_shader_rid); + static bool has_varying(RID p_shader_rid, const String &p_name); + + void set_shader_rid(const RID &p_shader); int get_varyings_count() const; String get_varying_name_by_index(int p_idx) const; diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp index c6a2151de5..40f3ddf048 100644 --- a/scene/scene_string_names.cpp +++ b/scene/scene_string_names.cpp @@ -101,6 +101,9 @@ SceneStringNames::SceneStringNames() { area_exited = StaticCString::create("area_exited"); line_separation = StaticCString::create("line_separation"); + font = StaticCString::create("font"); + font_size = StaticCString::create("font_size"); + font_color = StaticCString::create("font_color"); frame_changed = StaticCString::create("frame_changed"); texture_changed = StaticCString::create("texture_changed"); @@ -131,4 +134,11 @@ SceneStringNames::SceneStringNames() { id_pressed = StaticCString::create("id_pressed"); panel = StaticCString::create("panel"); + + item_selected = StaticCString::create("item_selected"); + + confirmed = StaticCString::create("confirmed"); + + text_changed = StaticCString::create("text_changed"); + value_changed = StaticCString::create("value_changed"); } diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h index 9af5422391..7893d213e4 100644 --- a/scene/scene_string_names.h +++ b/scene/scene_string_names.h @@ -70,6 +70,9 @@ public: StringName updated; StringName line_separation; + StringName font; + StringName font_size; + StringName font_color; StringName mouse_entered; StringName mouse_exited; @@ -144,6 +147,13 @@ public: StringName id_pressed; StringName panel; + + StringName item_selected; + + StringName confirmed; + + StringName text_changed; + StringName value_changed; }; #define SceneStringName(m_name) SceneStringNames::get_singleton()->m_name diff --git a/scene/theme/default_theme.cpp b/scene/theme/default_theme.cpp index 5315b0acc9..b2a3843b02 100644 --- a/scene/theme/default_theme.cpp +++ b/scene/theme/default_theme.cpp @@ -165,11 +165,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("disabled", "Button", button_disabled); theme->set_stylebox("focus", "Button", focus); - theme->set_font("font", "Button", Ref<Font>()); - theme->set_font_size("font_size", "Button", -1); + theme->set_font(SceneStringName(font), "Button", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "Button", -1); theme->set_constant("outline_size", "Button", 0); - theme->set_color("font_color", "Button", control_font_color); + theme->set_color(SceneStringName(font_color), "Button", control_font_color); theme->set_color("font_pressed_color", "Button", control_font_pressed_color); theme->set_color("font_hover_color", "Button", control_font_hover_color); theme->set_color("font_focus_color", "Button", control_font_focus_color); @@ -195,11 +195,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox(SceneStringName(pressed), "MenuBar", button_pressed); theme->set_stylebox("disabled", "MenuBar", button_disabled); - theme->set_font("font", "MenuBar", Ref<Font>()); - theme->set_font_size("font_size", "MenuBar", -1); + theme->set_font(SceneStringName(font), "MenuBar", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "MenuBar", -1); theme->set_constant("outline_size", "MenuBar", 0); - theme->set_color("font_color", "MenuBar", control_font_color); + theme->set_color(SceneStringName(font_color), "MenuBar", control_font_color); theme->set_color("font_pressed_color", "MenuBar", control_font_pressed_color); theme->set_color("font_hover_color", "MenuBar", control_font_hover_color); theme->set_color("font_focus_color", "MenuBar", control_font_focus_color); @@ -213,10 +213,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("focus", "LinkButton", focus); - theme->set_font("font", "LinkButton", Ref<Font>()); - theme->set_font_size("font_size", "LinkButton", -1); + theme->set_font(SceneStringName(font), "LinkButton", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "LinkButton", -1); - theme->set_color("font_color", "LinkButton", control_font_color); + theme->set_color(SceneStringName(font_color), "LinkButton", control_font_color); theme->set_color("font_pressed_color", "LinkButton", control_font_pressed_color); theme->set_color("font_hover_color", "LinkButton", control_font_hover_color); theme->set_color("font_focus_color", "LinkButton", control_font_focus_color); @@ -250,10 +250,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("arrow", "OptionButton", icons["option_button_arrow"]); - theme->set_font("font", "OptionButton", Ref<Font>()); - theme->set_font_size("font_size", "OptionButton", -1); + theme->set_font(SceneStringName(font), "OptionButton", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "OptionButton", -1); - theme->set_color("font_color", "OptionButton", control_font_color); + theme->set_color(SceneStringName(font_color), "OptionButton", control_font_color); theme->set_color("font_pressed_color", "OptionButton", control_font_pressed_color); theme->set_color("font_hover_color", "OptionButton", control_font_hover_color); theme->set_color("font_hover_pressed_color", "OptionButton", control_font_pressed_color); @@ -274,10 +274,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("disabled", "MenuButton", button_disabled); theme->set_stylebox("focus", "MenuButton", focus); - theme->set_font("font", "MenuButton", Ref<Font>()); - theme->set_font_size("font_size", "MenuButton", -1); + theme->set_font(SceneStringName(font), "MenuButton", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "MenuButton", -1); - theme->set_color("font_color", "MenuButton", control_font_color); + theme->set_color(SceneStringName(font_color), "MenuButton", control_font_color); theme->set_color("font_pressed_color", "MenuButton", control_font_pressed_color); theme->set_color("font_hover_color", "MenuButton", control_font_hover_color); theme->set_color("font_focus_color", "MenuButton", control_font_focus_color); @@ -310,10 +310,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("radio_unchecked", "CheckBox", icons["radio_unchecked"]); theme->set_icon("radio_unchecked_disabled", "CheckBox", icons["radio_unchecked_disabled"]); - theme->set_font("font", "CheckBox", Ref<Font>()); - theme->set_font_size("font_size", "CheckBox", -1); + theme->set_font(SceneStringName(font), "CheckBox", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "CheckBox", -1); - theme->set_color("font_color", "CheckBox", control_font_color); + theme->set_color(SceneStringName(font_color), "CheckBox", control_font_color); theme->set_color("font_pressed_color", "CheckBox", control_font_pressed_color); theme->set_color("font_hover_color", "CheckBox", control_font_hover_color); theme->set_color("font_hover_pressed_color", "CheckBox", control_font_pressed_color); @@ -347,10 +347,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("unchecked_mirrored", "CheckButton", icons["toggle_off_mirrored"]); theme->set_icon("unchecked_disabled_mirrored", "CheckButton", icons["toggle_off_disabled_mirrored"]); - theme->set_font("font", "CheckButton", Ref<Font>()); - theme->set_font_size("font_size", "CheckButton", -1); + theme->set_font(SceneStringName(font), "CheckButton", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "CheckButton", -1); - theme->set_color("font_color", "CheckButton", control_font_color); + theme->set_color(SceneStringName(font_color), "CheckButton", control_font_color); theme->set_color("font_pressed_color", "CheckButton", control_font_pressed_color); theme->set_color("font_hover_color", "CheckButton", control_font_hover_color); theme->set_color("font_hover_pressed_color", "CheckButton", control_font_pressed_color); @@ -387,10 +387,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // Label theme->set_stylebox(CoreStringName(normal), "Label", memnew(StyleBoxEmpty)); - theme->set_font("font", "Label", Ref<Font>()); - theme->set_font_size("font_size", "Label", -1); + theme->set_font(SceneStringName(font), "Label", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "Label", -1); - theme->set_color("font_color", "Label", Color(1, 1, 1)); + theme->set_color(SceneStringName(font_color), "Label", Color(1, 1, 1)); theme->set_color("font_shadow_color", "Label", Color(0, 0, 0, 0)); theme->set_color("font_outline_color", "Label", Color(0, 0, 0)); @@ -401,13 +401,13 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_constant("line_spacing", "Label", Math::round(3 * scale)); theme->set_type_variation("HeaderSmall", "Label"); - theme->set_font_size("font_size", "HeaderSmall", default_font_size + 4); + theme->set_font_size(SceneStringName(font_size), "HeaderSmall", default_font_size + 4); theme->set_type_variation("HeaderMedium", "Label"); - theme->set_font_size("font_size", "HeaderMedium", default_font_size + 8); + theme->set_font_size(SceneStringName(font_size), "HeaderMedium", default_font_size + 8); theme->set_type_variation("HeaderLarge", "Label"); - theme->set_font_size("font_size", "HeaderLarge", default_font_size + 12); + theme->set_font_size(SceneStringName(font_size), "HeaderLarge", default_font_size + 12); // LineEdit @@ -425,10 +425,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const style_line_edit_read_only->set_border_color(style_pressed_color * Color(1, 1, 1, 0.5)); theme->set_stylebox("read_only", "LineEdit", style_line_edit_read_only); - theme->set_font("font", "LineEdit", Ref<Font>()); - theme->set_font_size("font_size", "LineEdit", -1); + theme->set_font(SceneStringName(font), "LineEdit", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "LineEdit", -1); - theme->set_color("font_color", "LineEdit", control_font_color); + theme->set_color(SceneStringName(font_color), "LineEdit", control_font_color); theme->set_color("font_selected_color", "LineEdit", control_font_pressed_color); theme->set_color("font_uneditable_color", "LineEdit", control_font_disabled_color); theme->set_color("font_placeholder_color", "LineEdit", control_font_placeholder_color); @@ -449,10 +449,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("background", "ProgressBar", make_flat_stylebox(style_disabled_color, 2, 2, 2, 2, 6)); theme->set_stylebox("fill", "ProgressBar", make_flat_stylebox(style_progress_color, 2, 2, 2, 2, 6)); - theme->set_font("font", "ProgressBar", Ref<Font>()); - theme->set_font_size("font_size", "ProgressBar", -1); + theme->set_font(SceneStringName(font), "ProgressBar", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "ProgressBar", -1); - theme->set_color("font_color", "ProgressBar", control_font_hover_color); + theme->set_color(SceneStringName(font_color), "ProgressBar", control_font_hover_color); theme->set_color("font_outline_color", "ProgressBar", Color(0, 0, 0)); theme->set_constant("outline_size", "ProgressBar", 0); @@ -466,11 +466,11 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("tab", "TextEdit", icons["text_edit_tab"]); theme->set_icon("space", "TextEdit", icons["text_edit_space"]); - theme->set_font("font", "TextEdit", Ref<Font>()); - theme->set_font_size("font_size", "TextEdit", -1); + theme->set_font(SceneStringName(font), "TextEdit", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "TextEdit", -1); theme->set_color("background_color", "TextEdit", Color(0, 0, 0, 0)); - theme->set_color("font_color", "TextEdit", control_font_color); + theme->set_color(SceneStringName(font_color), "TextEdit", control_font_color); theme->set_color("font_selected_color", "TextEdit", Color(0, 0, 0, 0)); theme->set_color("font_readonly_color", "TextEdit", control_font_disabled_color); theme->set_color("font_placeholder_color", "TextEdit", control_font_placeholder_color); @@ -505,8 +505,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("folded_code_region", "CodeEdit", icons["region_folded"]); theme->set_icon("folded_eol_icon", "CodeEdit", icons["text_edit_ellipsis"]); - theme->set_font("font", "CodeEdit", Ref<Font>()); - theme->set_font_size("font_size", "CodeEdit", -1); + theme->set_font(SceneStringName(font), "CodeEdit", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "CodeEdit", -1); theme->set_color("background_color", "CodeEdit", Color(0, 0, 0, 0)); theme->set_color("completion_background_color", "CodeEdit", Color(0.17, 0.16, 0.2)); @@ -514,7 +514,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_color("completion_existing_color", "CodeEdit", Color(0.87, 0.87, 0.87, 0.13)); theme->set_color("completion_scroll_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.29)); theme->set_color("completion_scroll_hovered_color", "CodeEdit", control_font_pressed_color * Color(1, 1, 1, 0.4)); - theme->set_color("font_color", "CodeEdit", control_font_color); + theme->set_color(SceneStringName(font_color), "CodeEdit", control_font_color); theme->set_color("font_selected_color", "CodeEdit", Color(0, 0, 0, 0)); theme->set_color("font_readonly_color", "CodeEdit", Color(control_font_color.r, control_font_color.g, control_font_color.b, 0.5f)); theme->set_color("font_placeholder_color", "CodeEdit", control_font_placeholder_color); @@ -699,12 +699,12 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("submenu", "PopupMenu", icons["popup_menu_arrow_right"]); theme->set_icon("submenu_mirrored", "PopupMenu", icons["popup_menu_arrow_left"]); - theme->set_font("font", "PopupMenu", Ref<Font>()); + theme->set_font(SceneStringName(font), "PopupMenu", Ref<Font>()); theme->set_font("font_separator", "PopupMenu", Ref<Font>()); - theme->set_font_size("font_size", "PopupMenu", -1); + theme->set_font_size(SceneStringName(font_size), "PopupMenu", -1); theme->set_font_size("font_separator_size", "PopupMenu", -1); - theme->set_color("font_color", "PopupMenu", control_font_color); + theme->set_color(SceneStringName(font_color), "PopupMenu", control_font_color); theme->set_color("font_accelerator_color", "PopupMenu", Color(0.7, 0.7, 0.7, 0.8)); theme->set_color("font_disabled_color", "PopupMenu", Color(0.4, 0.4, 0.4, 0.8)); theme->set_color("font_hover_color", "PopupMenu", control_font_color); @@ -749,9 +749,9 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_type_variation("GraphNodeTitleLabel", "Label"); theme->set_stylebox(CoreStringName(normal), "GraphNodeTitleLabel", make_empty_stylebox(0, 0, 0, 0)); - theme->set_font("font", "GraphNodeTitleLabel", Ref<Font>()); - theme->set_font_size("font_size", "GraphNodeTitleLabel", -1); - theme->set_color("font_color", "GraphNodeTitleLabel", control_font_color); + theme->set_font(SceneStringName(font), "GraphNodeTitleLabel", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "GraphNodeTitleLabel", -1); + theme->set_color(SceneStringName(font_color), "GraphNodeTitleLabel", control_font_color); theme->set_color("font_shadow_color", "GraphNodeTitleLabel", Color(0, 0, 0, 0)); theme->set_color("font_outline_color", "GraphNodeTitleLabel", Color(0, 0, 0)); theme->set_constant("shadow_offset_x", "GraphNodeTitleLabel", Math::round(1 * scale)); @@ -780,8 +780,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_type_variation("GraphFrameTitleLabel", "Label"); theme->set_stylebox(CoreStringName(normal), "GraphFrameTitleLabel", memnew(StyleBoxEmpty)); - theme->set_font_size("font_size", "GraphFrameTitleLabel", 22); - theme->set_color("font_color", "GraphFrameTitleLabel", Color(1, 1, 1)); + theme->set_font_size(SceneStringName(font_size), "GraphFrameTitleLabel", 22); + theme->set_color(SceneStringName(font_color), "GraphFrameTitleLabel", Color(1, 1, 1)); theme->set_color("font_shadow_color", "GraphFrameTitleLabel", Color(0, 0, 0, 0)); theme->set_color("font_outline_color", "GraphFrameTitleLabel", Color(1, 1, 1)); theme->set_constant("shadow_offset_x", "GraphFrameTitleLabel", 1 * scale); @@ -819,12 +819,12 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("arrow_collapsed_mirrored", "Tree", icons["arrow_left"]); theme->set_font("title_button_font", "Tree", Ref<Font>()); - theme->set_font("font", "Tree", Ref<Font>()); - theme->set_font_size("font_size", "Tree", -1); + theme->set_font(SceneStringName(font), "Tree", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "Tree", -1); theme->set_font_size("title_button_font_size", "Tree", -1); theme->set_color("title_button_color", "Tree", control_font_color); - theme->set_color("font_color", "Tree", control_font_low_color); + theme->set_color(SceneStringName(font_color), "Tree", control_font_low_color); theme->set_color("font_selected_color", "Tree", control_font_pressed_color); theme->set_color("font_disabled_color", "Tree", control_font_disabled_color); theme->set_color("font_outline_color", "Tree", Color(0, 0, 0)); @@ -869,10 +869,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_constant("icon_margin", "ItemList", Math::round(4 * scale)); theme->set_constant(SceneStringName(line_separation), "ItemList", Math::round(2 * scale)); - theme->set_font("font", "ItemList", Ref<Font>()); - theme->set_font_size("font_size", "ItemList", -1); + theme->set_font(SceneStringName(font), "ItemList", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "ItemList", -1); - theme->set_color("font_color", "ItemList", control_font_lower_color); + theme->set_color(SceneStringName(font_color), "ItemList", control_font_lower_color); theme->set_color("font_hovered_color", "ItemList", control_font_hover_color); theme->set_color("font_selected_color", "ItemList", control_font_pressed_color); theme->set_color("font_outline_color", "ItemList", Color(0, 0, 0)); @@ -917,8 +917,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("menu", "TabContainer", icons["tabs_menu"]); theme->set_icon("menu_highlight", "TabContainer", icons["tabs_menu_hl"]); - theme->set_font("font", "TabContainer", Ref<Font>()); - theme->set_font_size("font_size", "TabContainer", -1); + theme->set_font(SceneStringName(font), "TabContainer", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "TabContainer", -1); theme->set_color("font_selected_color", "TabContainer", control_font_hover_color); theme->set_color("font_hovered_color", "TabContainer", control_font_hover_color); @@ -949,8 +949,8 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("drop_mark", "TabBar", icons["tabs_drop_mark"]); theme->set_icon("close", "TabBar", icons["close"]); - theme->set_font("font", "TabBar", Ref<Font>()); - theme->set_font_size("font_size", "TabBar", -1); + theme->set_font(SceneStringName(font), "TabBar", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "TabBar", -1); theme->set_color("font_selected_color", "TabBar", control_font_hover_color); theme->set_color("font_hovered_color", "TabBar", control_font_hover_color); @@ -1058,10 +1058,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("disabled", "ColorPickerButton", button_disabled); theme->set_stylebox("focus", "ColorPickerButton", focus); - theme->set_font("font", "ColorPickerButton", Ref<Font>()); - theme->set_font_size("font_size", "ColorPickerButton", -1); + theme->set_font(SceneStringName(font), "ColorPickerButton", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "ColorPickerButton", -1); - theme->set_color("font_color", "ColorPickerButton", Color(1, 1, 1, 1)); + theme->set_color(SceneStringName(font_color), "ColorPickerButton", Color(1, 1, 1, 1)); theme->set_color("font_pressed_color", "ColorPickerButton", Color(0.8, 0.8, 0.8, 1)); theme->set_color("font_hover_color", "ColorPickerButton", Color(1, 1, 1, 1)); theme->set_color("font_focus_color", "ColorPickerButton", Color(1, 1, 1, 1)); @@ -1089,10 +1089,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const make_flat_stylebox(Color(0, 0, 0, 0.5), 2 * default_margin, 0.5 * default_margin, 2 * default_margin, 0.5 * default_margin)); theme->set_type_variation("TooltipLabel", "Label"); - theme->set_font_size("font_size", "TooltipLabel", -1); - theme->set_font("font", "TooltipLabel", Ref<Font>()); + theme->set_font_size(SceneStringName(font_size), "TooltipLabel", -1); + theme->set_font(SceneStringName(font), "TooltipLabel", Ref<Font>()); - theme->set_color("font_color", "TooltipLabel", control_font_color); + theme->set_color(SceneStringName(font_color), "TooltipLabel", control_font_color); theme->set_color("font_shadow_color", "TooltipLabel", Color(0, 0, 0, 0)); theme->set_color("font_outline_color", "TooltipLabel", Color(0, 0, 0)); 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.cpp b/servers/audio/audio_stream.cpp index dc54e01ec8..0dc6d16050 100644 --- a/servers/audio/audio_stream.cpp +++ b/servers/audio/audio_stream.cpp @@ -90,6 +90,10 @@ Variant AudioStreamPlayback::get_parameter(const StringName &p_name) const { return ret; } +Ref<AudioSamplePlayback> AudioStreamPlayback::get_sample_playback() const { + return nullptr; +} + void AudioStreamPlayback::_bind_methods() { GDVIRTUAL_BIND(_start, "from_pos") GDVIRTUAL_BIND(_stop) @@ -101,6 +105,17 @@ void AudioStreamPlayback::_bind_methods() { GDVIRTUAL_BIND(_tag_used_streams); GDVIRTUAL_BIND(_set_parameter, "name", "value"); GDVIRTUAL_BIND(_get_parameter, "name"); + + ClassDB::bind_method(D_METHOD("set_sample_playback", "playback_sample"), &AudioStreamPlayback::set_sample_playback); + ClassDB::bind_method(D_METHOD("get_sample_playback"), &AudioStreamPlayback::get_sample_playback); +} + +AudioStreamPlayback::AudioStreamPlayback() {} + +AudioStreamPlayback::~AudioStreamPlayback() { + if (get_sample_playback().is_valid() && likely(AudioServer::get_singleton() != nullptr)) { + AudioServer::get_singleton()->stop_sample_playback(get_sample_playback()); + } } ////////////////////////////// @@ -271,10 +286,22 @@ void AudioStream::get_parameter_list(List<Parameter> *r_parameters) { } } +Ref<AudioSample> AudioStream::generate_sample() const { + ERR_FAIL_COND_V_MSG(!can_be_sampled(), nullptr, "Cannot generate a sample for a stream that cannot be sampled."); + Ref<AudioSample> sample; + sample.instantiate(); + sample->stream = this; + return sample; +} + void AudioStream::_bind_methods() { ClassDB::bind_method(D_METHOD("get_length"), &AudioStream::get_length); ClassDB::bind_method(D_METHOD("is_monophonic"), &AudioStream::is_monophonic); ClassDB::bind_method(D_METHOD("instantiate_playback"), &AudioStream::instantiate_playback); + ClassDB::bind_method(D_METHOD("can_be_sampled"), &AudioStream::can_be_sampled); + ClassDB::bind_method(D_METHOD("generate_sample"), &AudioStream::generate_sample); + ClassDB::bind_method(D_METHOD("is_meta_stream"), &AudioStream::is_meta_stream); + GDVIRTUAL_BIND(_instantiate_playback); GDVIRTUAL_BIND(_get_stream_name); GDVIRTUAL_BIND(_get_length); diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h index aa1ad4cc3a..0ca4777d5c 100644 --- a/servers/audio/audio_stream.h +++ b/servers/audio/audio_stream.h @@ -43,6 +43,39 @@ class AudioStream; +class AudioSamplePlayback : public RefCounted { + GDCLASS(AudioSamplePlayback, RefCounted); + +public: + Ref<AudioStream> stream; + + float offset = 0.0f; + Vector<AudioFrame> volume_vector; + StringName bus; +}; + +class AudioSample : public RefCounted { + GDCLASS(AudioSample, RefCounted) + +public: + enum LoopMode { + LOOP_DISABLED, + LOOP_FORWARD, + LOOP_PINGPONG, + LOOP_BACKWARD, + }; + + Ref<AudioStream> stream; + Vector<AudioFrame> data; + int num_channels = 1; + int sample_rate = 44100; + LoopMode loop_mode = LOOP_DISABLED; + int loop_begin = 0; + int loop_end = 0; +}; + +/////////// + class AudioStreamPlayback : public RefCounted { GDCLASS(AudioStreamPlayback, RefCounted); @@ -75,6 +108,14 @@ public: virtual Variant get_parameter(const StringName &p_name) const; virtual int mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames); + + virtual void set_is_sample(bool p_is_sample) {} + virtual bool get_is_sample() const { return false; } + virtual Ref<AudioSamplePlayback> get_sample_playback() const; + virtual void set_sample_playback(const Ref<AudioSamplePlayback> &p_playback) {} + + AudioStreamPlayback(); + ~AudioStreamPlayback(); }; class AudioStreamPlaybackResampled : public AudioStreamPlayback { @@ -161,6 +202,11 @@ public: }; virtual void get_parameter_list(List<Parameter> *r_parameters); + + virtual bool can_be_sampled() const { return false; } + virtual Ref<AudioSample> generate_sample() const; + + virtual bool is_meta_stream() const { return false; } }; // Microphone @@ -292,6 +338,8 @@ public: virtual double get_length() const override; //if supported, otherwise return 0 virtual bool is_monophonic() const override; + virtual bool is_meta_stream() const override { return true; } + AudioStreamRandomizer(); }; diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index d37836ed96..fefb8bfd41 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -120,16 +120,18 @@ int AudioDriver::_get_configured_mix_rate() { StringName audio_driver_setting = "audio/driver/mix_rate"; int mix_rate = GLOBAL_GET(audio_driver_setting); +#ifdef WEB_ENABLED + // `0` is an acceptable value (resorts to the browser's default). + return MAX(0, mix_rate); +#else // !WEB_ENABLED // In the case of invalid mix rate, let's default to a sensible value.. if (mix_rate <= 0) { -#ifndef WEB_ENABLED WARN_PRINT(vformat("Invalid mix rate of %d, consider reassigning setting \'%s\'. \nDefaulting mix rate to value %d.", mix_rate, audio_driver_setting, AudioDriverManager::DEFAULT_MIX_RATE)); -#endif mix_rate = AudioDriverManager::DEFAULT_MIX_RATE; } - return mix_rate; +#endif } AudioDriver::SpeakerMode AudioDriver::get_speaker_mode_by_total_channels(int p_channels) const { @@ -181,6 +183,18 @@ PackedStringArray AudioDriver::get_input_device_list() { return list; } +void AudioDriver::start_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + if (p_playback.is_valid()) { + if (p_playback->stream.is_valid()) { + WARN_PRINT_ED(vformat(R"(Trying to play stream (%s) as a sample (%s), but the driver doesn't support sample playback.)", p_playback->get_instance_id(), p_playback->stream->get_instance_id())); + } else { + WARN_PRINT_ED(vformat(R"(Trying to play stream (%s) as a null sample, but the driver doesn't support sample playback.)", p_playback->get_instance_id())); + } + } else { + WARN_PRINT_ED("Trying to play a null sample playback from a driver that don't support sample playback."); + } +} + AudioDriverDummy AudioDriverManager::dummy_driver; AudioDriver *AudioDriverManager::drivers[MAX_DRIVERS] = { &AudioDriverManager::dummy_driver, @@ -367,6 +381,10 @@ void AudioServer::_mix_step() { continue; } + if (playback->stream_playback->get_is_sample()) { + continue; + } + bool fading_out = playback->state.load() == AudioStreamPlaybackListNode::FADE_OUT_TO_DELETION || playback->state.load() == AudioStreamPlaybackListNode::FADE_OUT_TO_PAUSE; AudioFrame *buf = mix_buffer.ptrw(); @@ -770,6 +788,8 @@ void AudioServer::set_bus_count(int p_count) { unlock(); + AudioDriver::get_singleton()->set_sample_bus_count(p_count); + emit_signal(SNAME("bus_layout_changed")); } @@ -785,6 +805,8 @@ void AudioServer::remove_bus(int p_index) { buses.remove_at(p_index); unlock(); + AudioDriver::get_singleton()->remove_sample_bus(p_index); + emit_signal(SNAME("bus_layout_changed")); } @@ -839,6 +861,8 @@ void AudioServer::add_bus(int p_at_pos) { buses.insert(p_at_pos, bus); } + AudioDriver::get_singleton()->add_sample_bus(p_at_pos); + emit_signal(SNAME("bus_layout_changed")); } @@ -863,6 +887,8 @@ void AudioServer::move_bus(int p_bus, int p_to_pos) { buses.insert(p_to_pos - 1, bus); } + AudioDriver::get_singleton()->move_sample_bus(p_bus, p_to_pos); + emit_signal(SNAME("bus_layout_changed")); } @@ -934,6 +960,8 @@ void AudioServer::set_bus_volume_db(int p_bus, float p_volume_db) { MARK_EDITED buses[p_bus]->volume_db = p_volume_db; + + AudioDriver::get_singleton()->set_sample_bus_volume_db(p_bus, p_volume_db); } float AudioServer::get_bus_volume_db(int p_bus) const { @@ -952,6 +980,8 @@ void AudioServer::set_bus_send(int p_bus, const StringName &p_send) { MARK_EDITED buses[p_bus]->send = p_send; + + AudioDriver::get_singleton()->set_sample_bus_send(p_bus, p_send); } StringName AudioServer::get_bus_send(int p_bus) const { @@ -965,6 +995,8 @@ void AudioServer::set_bus_solo(int p_bus, bool p_enable) { MARK_EDITED buses[p_bus]->solo = p_enable; + + AudioDriver::get_singleton()->set_sample_bus_solo(p_bus, p_enable); } bool AudioServer::is_bus_solo(int p_bus) const { @@ -979,6 +1011,8 @@ void AudioServer::set_bus_mute(int p_bus, bool p_enable) { MARK_EDITED buses[p_bus]->mute = p_enable; + + AudioDriver::get_singleton()->set_sample_bus_mute(p_bus, p_enable); } bool AudioServer::is_bus_mute(int p_bus) const { @@ -1214,6 +1248,13 @@ void AudioServer::set_playback_bus_exclusive(Ref<AudioStreamPlayback> p_playback void AudioServer::set_playback_bus_volumes_linear(Ref<AudioStreamPlayback> p_playback, const HashMap<StringName, Vector<AudioFrame>> &p_bus_volumes) { ERR_FAIL_COND(p_bus_volumes.size() > MAX_BUSES_PER_PLAYBACK); + // Samples. + if (p_playback->get_is_sample() && p_playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = p_playback->get_sample_playback(); + AudioDriver::get_singleton()->set_sample_playback_bus_volumes_linear(sample_playback, p_bus_volumes); + return; + } + AudioStreamPlaybackListNode *playback_node = _find_playback_list_node(p_playback); if (!playback_node) { return; @@ -1265,6 +1306,13 @@ void AudioServer::set_playback_all_bus_volumes_linear(Ref<AudioStreamPlayback> p void AudioServer::set_playback_pitch_scale(Ref<AudioStreamPlayback> p_playback, float p_pitch_scale) { ERR_FAIL_COND(p_playback.is_null()); + // Samples. + if (p_playback->get_is_sample() && p_playback->get_sample_playback().is_valid()) { + Ref<AudioSamplePlayback> sample_playback = p_playback->get_sample_playback(); + AudioServer::get_singleton()->update_sample_playback_pitch_scale(sample_playback, p_pitch_scale); + return; + } + AudioStreamPlaybackListNode *playback_node = _find_playback_list_node(p_playback); if (!playback_node) { return; @@ -1385,6 +1433,7 @@ void AudioServer::init() { if (AudioDriver::get_singleton()) { AudioDriver::get_singleton()->start(); + AudioDriver::get_singleton()->set_sample_bus_count(1); } #ifdef TOOLS_ENABLED @@ -1597,6 +1646,9 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { } buses.resize(p_bus_layout->buses.size()); bus_map.clear(); + + AudioDriver::get_singleton()->set_sample_bus_count(buses.size()); + for (int i = 0; i < p_bus_layout->buses.size(); i++) { Bus *bus = memnew(Bus); if (i == 0) { @@ -1604,6 +1656,7 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { } else { bus->name = p_bus_layout->buses[i].name; bus->send = p_bus_layout->buses[i].send; + AudioDriver::get_singleton()->set_sample_bus_send(i, bus->send); } bus->solo = p_bus_layout->buses[i].solo; @@ -1611,6 +1664,10 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { bus->bypass = p_bus_layout->buses[i].bypass; bus->volume_db = p_bus_layout->buses[i].volume_db; + AudioDriver::get_singleton()->set_sample_bus_solo(i, bus->solo); + AudioDriver::get_singleton()->set_sample_bus_mute(i, bus->mute); + AudioDriver::get_singleton()->set_sample_bus_volume_db(i, bus->volume_db); + for (int j = 0; j < p_bus_layout->buses[i].effects.size(); j++) { Ref<AudioEffect> fx = p_bus_layout->buses[i].effects[j].effect; @@ -1638,6 +1695,8 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { set_edited(false); #endif unlock(); + + // Samples bus sync. } Ref<AudioBusLayout> AudioServer::generate_bus_layout() const { @@ -1705,6 +1764,82 @@ void AudioServer::get_argument_options(const StringName &p_function, int p_idx, } #endif +AudioServer::PlaybackType AudioServer::get_default_playback_type() const { + int playback_type = GLOBAL_GET("audio/general/default_playback_type"); + ERR_FAIL_COND_V_MSG( + playback_type < 0 || playback_type >= PlaybackType::PLAYBACK_TYPE_MAX, + PlaybackType::PLAYBACK_TYPE_STREAM, + vformat(R"(Project settings value (%s) for "audio/general/default_playback_type" is not supported)", playback_type)); + + switch (playback_type) { + case 1: { + return PlaybackType::PLAYBACK_TYPE_SAMPLE; + } break; + + case 0: + default: { + return PlaybackType::PLAYBACK_TYPE_STREAM; + } break; + } +} + +bool AudioServer::is_stream_registered_as_sample(const Ref<AudioStream> &p_stream) { + ERR_FAIL_COND_V_MSG(p_stream.is_null(), false, "Parameter p_stream is null."); + return AudioDriver::get_singleton()->is_stream_registered_as_sample(p_stream); +} + +void AudioServer::register_stream_as_sample(const Ref<AudioStream> &p_stream) { + ERR_FAIL_COND_MSG(p_stream.is_null(), "Parameter p_stream is null."); + ERR_FAIL_COND_MSG(!(p_stream->can_be_sampled()), "Parameter p_stream cannot be sampled."); + Ref<AudioSample> sample = p_stream->generate_sample(); + register_sample(sample); +} + +void AudioServer::unregister_stream_as_sample(const Ref<AudioStream> &p_stream) { + ERR_FAIL_COND_MSG(p_stream.is_null(), "Parameter p_stream is null."); + ERR_FAIL_COND_MSG(!(p_stream->can_be_sampled()), "Parameter p_stream cannot be sampled."); + Ref<AudioSample> sample = p_stream->generate_sample(); + unregister_sample(sample); +} + +void AudioServer::register_sample(const Ref<AudioSample> &p_sample) { + ERR_FAIL_COND_MSG(p_sample.is_null(), "Parameter p_sample is null."); + ERR_FAIL_COND_MSG(p_sample->stream.is_null(), "Parameter p_sample->stream is null."); + ERR_FAIL_COND_MSG(!(p_sample->stream->can_be_sampled()), "Parameter p_stream cannot be sampled."); + AudioDriver::get_singleton()->register_sample(p_sample); +} + +void AudioServer::unregister_sample(const Ref<AudioSample> &p_sample) { + ERR_FAIL_COND_MSG(p_sample.is_null(), "Parameter p_sample is null."); + ERR_FAIL_COND_MSG(p_sample->stream.is_null(), "Parameter p_sample->stream is null."); + AudioDriver::get_singleton()->unregister_sample(p_sample); +} + +void AudioServer::start_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + AudioDriver::get_singleton()->start_sample_playback(p_playback); +} + +void AudioServer::stop_sample_playback(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + AudioDriver::get_singleton()->stop_sample_playback(p_playback); +} + +void AudioServer::set_sample_playback_pause(const Ref<AudioSamplePlayback> &p_playback, bool p_paused) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + AudioDriver::get_singleton()->set_sample_playback_pause(p_playback, p_paused); +} + +bool AudioServer::is_sample_playback_active(const Ref<AudioSamplePlayback> &p_playback) { + ERR_FAIL_COND_V_MSG(p_playback.is_null(), false, "Parameter p_playback is null."); + return AudioDriver::get_singleton()->is_sample_playback_active(p_playback); +} + +void AudioServer::update_sample_playback_pitch_scale(const Ref<AudioSamplePlayback> &p_playback, float p_pitch_scale) { + ERR_FAIL_COND_MSG(p_playback.is_null(), "Parameter p_playback is null."); + return AudioDriver::get_singleton()->update_sample_playback_pitch_scale(p_playback, p_pitch_scale); +} + void AudioServer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_bus_count", "amount"), &AudioServer::set_bus_count); ClassDB::bind_method(D_METHOD("get_bus_count"), &AudioServer::get_bus_count); @@ -1774,6 +1909,9 @@ void AudioServer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_enable_tagging_used_audio_streams", "enable"), &AudioServer::set_enable_tagging_used_audio_streams); + ClassDB::bind_method(D_METHOD("is_stream_registered_as_sample", "stream"), &AudioServer::is_stream_registered_as_sample); + ClassDB::bind_method(D_METHOD("register_stream_as_sample", "stream"), &AudioServer::register_stream_as_sample); + ADD_PROPERTY(PropertyInfo(Variant::INT, "bus_count"), "set_bus_count", "get_bus_count"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "output_device"), "set_output_device", "get_output_device"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "input_device"), "set_input_device", "get_input_device"); @@ -1789,6 +1927,11 @@ void AudioServer::_bind_methods() { BIND_ENUM_CONSTANT(SPEAKER_SURROUND_31); BIND_ENUM_CONSTANT(SPEAKER_SURROUND_51); BIND_ENUM_CONSTANT(SPEAKER_SURROUND_71); + + BIND_ENUM_CONSTANT(PLAYBACK_TYPE_DEFAULT); + BIND_ENUM_CONSTANT(PLAYBACK_TYPE_STREAM); + BIND_ENUM_CONSTANT(PLAYBACK_TYPE_SAMPLE); + BIND_ENUM_CONSTANT(PLAYBACK_TYPE_MAX); } AudioServer::AudioServer() { diff --git a/servers/audio_server.h b/servers/audio_server.h index 7dd81beabe..4825e24336 100644 --- a/servers/audio_server.h +++ b/servers/audio_server.h @@ -42,9 +42,11 @@ #include <atomic> class AudioDriverDummy; +class AudioSample; class AudioStream; class AudioStreamWAV; class AudioStreamPlayback; +class AudioSamplePlayback; class AudioDriver { static AudioDriver *singleton; @@ -129,6 +131,28 @@ public: void reset_profiling_time() { prof_time.set(0); } #endif + // Samples handling. + virtual bool is_stream_registered_as_sample(const Ref<AudioStream> &p_stream) const { + return false; + } + virtual void register_sample(const Ref<AudioSample> &p_sample) {} + virtual void unregister_sample(const Ref<AudioSample> &p_sample) {} + virtual void start_sample_playback(const Ref<AudioSamplePlayback> &p_playback); + virtual void stop_sample_playback(const Ref<AudioSamplePlayback> &p_playback) {} + virtual void set_sample_playback_pause(const Ref<AudioSamplePlayback> &p_playback, bool p_paused) {} + virtual bool is_sample_playback_active(const Ref<AudioSamplePlayback> &p_playback) { return false; } + virtual void update_sample_playback_pitch_scale(const Ref<AudioSamplePlayback> &p_playback, float p_pitch_scale = 0.0f) {} + virtual void set_sample_playback_bus_volumes_linear(const Ref<AudioSamplePlayback> &p_playback, const HashMap<StringName, Vector<AudioFrame>> &p_bus_volumes) {} + + virtual void set_sample_bus_count(int p_count) {} + virtual void remove_sample_bus(int p_bus) {} + virtual void add_sample_bus(int p_at_pos = -1) {} + virtual void move_sample_bus(int p_bus, int p_to_pos) {} + virtual void set_sample_bus_send(int p_bus, const StringName &p_send) {} + virtual void set_sample_bus_volume_db(int p_bus, float p_volume_db) {} + virtual void set_sample_bus_solo(int p_bus, bool p_enable) {} + virtual void set_sample_bus_mute(int p_bus, bool p_enable) {} + AudioDriver() {} virtual ~AudioDriver() {} }; @@ -166,6 +190,13 @@ public: SPEAKER_SURROUND_71, }; + enum PlaybackType { + PLAYBACK_TYPE_DEFAULT, + PLAYBACK_TYPE_STREAM, + PLAYBACK_TYPE_SAMPLE, + PLAYBACK_TYPE_MAX + }; + enum { AUDIO_DATA_INVALID_ID = -1, MAX_CHANNELS_PER_BUS = 4, @@ -440,11 +471,25 @@ public: virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override; #endif + PlaybackType get_default_playback_type() const; + + bool is_stream_registered_as_sample(const Ref<AudioStream> &p_stream); + void register_stream_as_sample(const Ref<AudioStream> &p_stream); + void unregister_stream_as_sample(const Ref<AudioStream> &p_stream); + void register_sample(const Ref<AudioSample> &p_sample); + void unregister_sample(const Ref<AudioSample> &p_sample); + void start_sample_playback(const Ref<AudioSamplePlayback> &p_playback); + void stop_sample_playback(const Ref<AudioSamplePlayback> &p_playback); + void set_sample_playback_pause(const Ref<AudioSamplePlayback> &p_playback, bool p_paused); + bool is_sample_playback_active(const Ref<AudioSamplePlayback> &p_playback); + void update_sample_playback_pitch_scale(const Ref<AudioSamplePlayback> &p_playback, float p_pitch_scale = 0.0f); + AudioServer(); virtual ~AudioServer(); }; VARIANT_ENUM_CAST(AudioServer::SpeakerMode) +VARIANT_ENUM_CAST(AudioServer::PlaybackType) class AudioBusLayout : public Resource { GDCLASS(AudioBusLayout, Resource); 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/physics_2d/godot_body_2d.cpp b/servers/physics_2d/godot_body_2d.cpp index 01996dc43c..c401e6eee7 100644 --- a/servers/physics_2d/godot_body_2d.cpp +++ b/servers/physics_2d/godot_body_2d.cpp @@ -616,6 +616,8 @@ void GodotBody2D::integrate_velocities(real_t p_step) { return; } + ERR_FAIL_NULL(get_space()); + if (fi_callback_data || body_state_callback.is_valid()) { get_space()->body_add_to_state_query_list(&direct_state_query_list); } @@ -705,6 +707,8 @@ bool GodotBody2D::sleep_test(real_t p_step) { return false; } + ERR_FAIL_NULL_V(get_space(), true); + if (Math::abs(angular_velocity) < get_space()->get_body_angular_velocity_sleep_threshold() && Math::abs(linear_velocity.length_squared()) < get_space()->get_body_linear_velocity_sleep_threshold() * get_space()->get_body_linear_velocity_sleep_threshold()) { still_time += p_step; diff --git a/servers/physics_3d/godot_body_3d.cpp b/servers/physics_3d/godot_body_3d.cpp index 407957b904..669c4b985b 100644 --- a/servers/physics_3d/godot_body_3d.cpp +++ b/servers/physics_3d/godot_body_3d.cpp @@ -675,6 +675,8 @@ void GodotBody3D::integrate_velocities(real_t p_step) { return; } + ERR_FAIL_NULL(get_space()); + if (fi_callback_data || body_state_callback.is_valid()) { get_space()->body_add_to_state_query_list(&direct_state_query_list); } @@ -784,6 +786,8 @@ bool GodotBody3D::sleep_test(real_t p_step) { return false; } + ERR_FAIL_NULL_V(get_space(), true); + if (Math::abs(angular_velocity.length()) < get_space()->get_body_angular_velocity_sleep_threshold() && Math::abs(linear_velocity.length_squared()) < get_space()->get_body_linear_velocity_sleep_threshold() * get_space()->get_body_linear_velocity_sleep_threshold()) { still_time += p_step; diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 7a15d202a3..fc2aae10c7 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -176,6 +176,8 @@ void register_server_types() { GDREGISTER_VIRTUAL_CLASS(AudioStreamPlaybackResampled); GDREGISTER_CLASS(AudioStreamMicrophone); GDREGISTER_CLASS(AudioStreamRandomizer); + GDREGISTER_CLASS(AudioSample); + GDREGISTER_CLASS(AudioSamplePlayback); GDREGISTER_VIRTUAL_CLASS(AudioEffect); GDREGISTER_VIRTUAL_CLASS(AudioEffectInstance); GDREGISTER_CLASS(AudioEffectEQ); diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp index f872219425..c4286dcc0c 100644 --- a/servers/rendering/renderer_canvas_cull.cpp +++ b/servers/rendering/renderer_canvas_cull.cpp @@ -79,7 +79,7 @@ void RendererCanvasCull::_render_canvas_item_tree(RID p_to_render_target, Canvas } } -void _collect_ysort_children(RendererCanvasCull::Item *p_canvas_item, Transform2D p_transform, RendererCanvasCull::Item *p_material_owner, const Color &p_modulate, RendererCanvasCull::Item **r_items, int &r_index, int p_z) { +void _collect_ysort_children(RendererCanvasCull::Item *p_canvas_item, const Transform2D &p_transform, RendererCanvasCull::Item *p_material_owner, const Color &p_modulate, RendererCanvasCull::Item **r_items, int &r_index, int p_z) { int child_item_count = p_canvas_item->child_items.size(); RendererCanvasCull::Item **child_items = p_canvas_item->child_items.ptrw(); for (int i = 0; i < child_item_count; i++) { @@ -94,6 +94,11 @@ void _collect_ysort_children(RendererCanvasCull::Item *p_canvas_item, Transform2 child_items[i]->ysort_index = r_index; child_items[i]->ysort_parent_abs_z_index = p_z; + if (!child_items[i]->repeat_source) { + child_items[i]->repeat_size = p_canvas_item->repeat_size; + child_items[i]->repeat_times = p_canvas_item->repeat_times; + } + // Y sorted canvas items are flattened into r_items. Calculate their absolute z index to use when rendering r_items. if (child_items[i]->z_relative) { abs_z = CLAMP(p_z + child_items[i]->z_index, RS::CANVAS_ITEM_Z_MIN, RS::CANVAS_ITEM_Z_MAX); @@ -270,17 +275,17 @@ void RendererCanvasCull::_cull_canvas_item(Item *p_canvas_item, const Transform2 } else { ci->repeat_size = repeat_size; ci->repeat_times = repeat_times; + } - if (repeat_size.x || repeat_size.y) { - Size2 scale = final_xform.get_scale(); - rect.size += repeat_size * repeat_times / scale; - rect.position -= repeat_size / scale * (repeat_times / 2); - } + if (repeat_size.x || repeat_size.y) { + Size2 scale = final_xform.get_scale(); + rect.size += repeat_size * repeat_times / scale; + rect.position -= repeat_size / scale * (repeat_times / 2); } 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; @@ -352,7 +357,7 @@ void RendererCanvasCull::_cull_canvas_item(Item *p_canvas_item, const Transform2 sorter.sort(child_items, child_item_count); for (i = 0; i < child_item_count; i++) { - _cull_canvas_item(child_items[i], final_xform * child_items[i]->ysort_xform, p_clip_rect, modulate * child_items[i]->ysort_modulate, child_items[i]->ysort_parent_abs_z_index, r_z_list, r_z_last_list, (Item *)ci->final_clip_owner, (Item *)child_items[i]->material_owner, false, p_canvas_cull_mask, repeat_size, repeat_times); + _cull_canvas_item(child_items[i], final_xform * child_items[i]->ysort_xform, p_clip_rect, modulate * child_items[i]->ysort_modulate, child_items[i]->ysort_parent_abs_z_index, r_z_list, r_z_last_list, (Item *)ci->final_clip_owner, (Item *)child_items[i]->material_owner, false, p_canvas_cull_mask, child_items[i]->repeat_size, child_items[i]->repeat_times); } } else { RendererCanvasRender::Item *canvas_group_from = nullptr; diff --git a/servers/rendering/renderer_canvas_render.h b/servers/rendering/renderer_canvas_render.h index 4a56548932..cb8180f989 100644 --- a/servers/rendering/renderer_canvas_render.h +++ b/servers/rendering/renderer_canvas_render.h @@ -545,8 +545,13 @@ public: virtual void set_debug_redraw(bool p_enabled, double p_time, const Color &p_color) = 0; - RendererCanvasRender() { singleton = this; } - virtual ~RendererCanvasRender() {} + RendererCanvasRender() { + ERR_FAIL_COND_MSG(singleton != nullptr, "A RendererCanvasRender singleton already exists."); + singleton = this; + } + virtual ~RendererCanvasRender() { + singleton = nullptr; + } }; #endif // RENDERER_CANVAS_RENDER_H diff --git a/servers/rendering/renderer_compositor.cpp b/servers/rendering/renderer_compositor.cpp index d364de5633..428cecead1 100644 --- a/servers/rendering/renderer_compositor.cpp +++ b/servers/rendering/renderer_compositor.cpp @@ -47,6 +47,7 @@ bool RendererCompositor::is_xr_enabled() const { } RendererCompositor::RendererCompositor() { + ERR_FAIL_COND_MSG(singleton != nullptr, "A RendererCompositor singleton already exists."); singleton = this; #ifndef _3D_DISABLED @@ -57,3 +58,7 @@ RendererCompositor::RendererCompositor() { } #endif // _3D_DISABLED } + +RendererCompositor::~RendererCompositor() { + singleton = nullptr; +} diff --git a/servers/rendering/renderer_compositor.h b/servers/rendering/renderer_compositor.h index 3c49e31516..ab789d5b4d 100644 --- a/servers/rendering/renderer_compositor.h +++ b/servers/rendering/renderer_compositor.h @@ -110,7 +110,7 @@ public: static RendererCompositor *get_singleton() { return singleton; } RendererCompositor(); - virtual ~RendererCompositor() {} + virtual ~RendererCompositor(); }; #endif // RENDERER_COMPOSITOR_H 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..536fc7a04a 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -3585,22 +3585,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/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_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp index 14d138181f..84ea6a5da2 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp @@ -299,6 +299,7 @@ RendererCompositorRD::RendererCompositorRD() { } } + ERR_FAIL_COND_MSG(singleton != nullptr, "A RendererCompositorRD singleton already exists."); singleton = this; utilities = memnew(RendererRD::Utilities); @@ -330,6 +331,7 @@ RendererCompositorRD::RendererCompositorRD() { } RendererCompositorRD::~RendererCompositorRD() { + singleton = nullptr; memdelete(uniform_set_cache); memdelete(framebuffer_cache); ShaderRD::set_shader_cache_dir(String()); diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index 1e4880e67a..96bcd72099 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(); 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/rendering_device.cpp b/servers/rendering/rendering_device.cpp index 38f1fe57bd..59f7b3d9e1 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -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; 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/shader_types.cpp b/servers/rendering/shader_types.cpp index ab9cf666ec..de396cd18b 100644 --- a/servers/rendering/shader_types.cpp +++ b/servers/rendering/shader_types.cpp @@ -77,12 +77,12 @@ ShaderTypes::ShaderTypes() { shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["INSTANCE_CUSTOM"] = constt(ShaderLanguage::TYPE_VEC4); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["VERTEX_ID"] = constt(ShaderLanguage::TYPE_INT); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["ROUGHNESS"] = ShaderLanguage::TYPE_FLOAT; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["BONE_INDICES"] = ShaderLanguage::TYPE_UVEC4; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["BONE_WEIGHTS"] = ShaderLanguage::TYPE_VEC4; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM0"] = ShaderLanguage::TYPE_VEC4; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM1"] = ShaderLanguage::TYPE_VEC4; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM2"] = ShaderLanguage::TYPE_VEC4; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM3"] = ShaderLanguage::TYPE_VEC4; + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["BONE_INDICES"] = constt(ShaderLanguage::TYPE_UVEC4); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["BONE_WEIGHTS"] = constt(ShaderLanguage::TYPE_VEC4); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM0"] = constt(ShaderLanguage::TYPE_VEC4); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM1"] = constt(ShaderLanguage::TYPE_VEC4); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM2"] = constt(ShaderLanguage::TYPE_VEC4); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CUSTOM3"] = constt(ShaderLanguage::TYPE_VEC4); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].can_discard = false; shader_modes[RS::SHADER_SPATIAL].functions["vertex"].main_function = true; @@ -99,11 +99,11 @@ ShaderTypes::ShaderTypes() { shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["OUTPUT_IS_SRGB"] = constt(ShaderLanguage::TYPE_BOOL); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["MAIN_CAM_INV_VIEW_MATRIX"] = constt(ShaderLanguage::TYPE_MAT4); - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["NODE_POSITION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_POSITION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_DIRECTION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_VISIBLE_LAYERS"] = ShaderLanguage::TYPE_UINT; - shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["NODE_POSITION_VIEW"] = ShaderLanguage::TYPE_VEC3; + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["NODE_POSITION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_POSITION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_DIRECTION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["CAMERA_VISIBLE_LAYERS"] = constt(ShaderLanguage::TYPE_UINT); + shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["NODE_POSITION_VIEW"] = constt(ShaderLanguage::TYPE_VEC3); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["VIEW_INDEX"] = constt(ShaderLanguage::TYPE_INT); shader_modes[RS::SHADER_SPATIAL].functions["vertex"].built_ins["VIEW_MONO_LEFT"] = constt(ShaderLanguage::TYPE_INT); @@ -147,11 +147,11 @@ ShaderTypes::ShaderTypes() { shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["SCREEN_UV"] = constt(ShaderLanguage::TYPE_VEC2); shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["POINT_COORD"] = constt(ShaderLanguage::TYPE_VEC2); - shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["NODE_POSITION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_POSITION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_DIRECTION_WORLD"] = ShaderLanguage::TYPE_VEC3; - shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_VISIBLE_LAYERS"] = ShaderLanguage::TYPE_UINT; - shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["NODE_POSITION_VIEW"] = ShaderLanguage::TYPE_VEC3; + shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["NODE_POSITION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_POSITION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_DIRECTION_WORLD"] = constt(ShaderLanguage::TYPE_VEC3); + shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CAMERA_VISIBLE_LAYERS"] = constt(ShaderLanguage::TYPE_UINT); + shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["NODE_POSITION_VIEW"] = constt(ShaderLanguage::TYPE_VEC3); shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["VIEW_INDEX"] = constt(ShaderLanguage::TYPE_INT); shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["VIEW_MONO_LEFT"] = constt(ShaderLanguage::TYPE_INT); diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index 7637d4e7da..dd3491f62c 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -3610,7 +3610,7 @@ void RenderingServer::init() { GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "rendering/environment/subsurface_scattering/subsurface_scattering_scale", PROPERTY_HINT_RANGE, "0.001,1,0.001"), 0.05); GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "rendering/environment/subsurface_scattering/subsurface_scattering_depth_scale", PROPERTY_HINT_RANGE, "0.001,1,0.001"), 0.01); - GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/limits/global_shader_variables/buffer_size", PROPERTY_HINT_RANGE, "1,1048576,1"), 65536); + GLOBAL_DEF(PropertyInfo(Variant::INT, "rendering/limits/global_shader_variables/buffer_size", PROPERTY_HINT_RANGE, "16,1048576,1"), 65536); GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "rendering/lightmapping/probe_capture/update_speed", PROPERTY_HINT_RANGE, "0.001,256,0.001"), 15); GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "rendering/lightmapping/primitive_meshes/texel_size", PROPERTY_HINT_RANGE, "0.001,100,0.001"), 0.2); 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 2b48e19143..4572687be2 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.0 (ae4e9d003c93325f1eba64319fa9852a0d764b4c, 2024) - License: MIT Files extracted from upstream source: @@ -1004,6 +1004,8 @@ Files extracted from upstream source: - `unstable/relative-pointer/relative-pointer-unstable-v1.xml` - `unstable/tablet/README` - `unstable/tablet/tablet-unstable-v2.xml` +- `unstable/text-input/README` +- `unstable/text-input/text-input-unstable-v3.xml` - `unstable/xdg-decoration/README` - `unstable/xdg-decoration/xdg-decoration-unstable-v1.xml` - `unstable/xdg-foreign/README` 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..6218c18e68 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.0" #endif diff --git a/thirdparty/thorvg/inc/thorvg.h b/thirdparty/thorvg/inc/thorvg.h index 8285aa1c4c..0b7e9771b9 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,6 @@ 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. * @see Canvas::draw() */ virtual Result sync() noexcept; @@ -713,8 +664,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 +679,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 +722,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 +735,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 +780,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 +791,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 +802,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 +819,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 +828,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 +852,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 +870,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 +886,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 +902,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 +911,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 +922,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 +930,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 +940,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 +952,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 +962,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 +970,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 +986,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 +1000,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 +1012,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 +1020,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 +1028,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 +1091,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 +1139,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 +1188,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 +1197,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 +1232,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 +1241,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 +1251,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 +1275,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 +1341,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 +1369,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 +1418,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 +1432,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 +1443,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 +1458,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 +1468,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 +1476,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 +1486,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 +1593,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 +1616,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 +1645,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 +1662,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 +1678,7 @@ public: * * @return A new GlCanvas object. * - * @note Experimental API + * @since 0.14 */ static std::unique_ptr<GlCanvas> gen() noexcept; @@ -1811,14 +1701,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 +1750,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 +1762,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 +1794,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 +1865,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 +1881,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 +1942,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 +1963,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 +1983,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/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 f59994aae6..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]; @@ -709,8 +709,8 @@ 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; - const char *content, *hue, *satuation, *brightness; + float th, ts, tb; + 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..231410cdac 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwCommon.h @@ -26,18 +26,6 @@ #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/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..0a3f5ef7e7 100644 --- a/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp +++ b/thirdparty/thorvg/src/renderer/sw_engine/tvgSwRenderer.cpp @@ -86,7 +86,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(); } float validStrokeWidth() @@ -147,7 +147,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 +160,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 +718,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 +766,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 +780,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 +790,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 +799,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..9d216e2f30 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,7 +122,7 @@ 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; @@ -141,7 +134,8 @@ struct Canvas::Impl 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/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..c45995a64d 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) 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..d08158bfe7 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.0 cd thirdparty/thorvg/ || true rm -rf AUTHORS LICENSE inc/ src/ *.zip *.tar.gz tmp/ diff --git a/thirdparty/wayland-protocols/unstable/text-input/README b/thirdparty/wayland-protocols/unstable/text-input/README new file mode 100644 index 0000000000..afa4bacf52 --- /dev/null +++ b/thirdparty/wayland-protocols/unstable/text-input/README @@ -0,0 +1,4 @@ +Text input protocol + +Maintainers: +Jan Arne Petersen <janarne@gmail.com> diff --git a/thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml b/thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml new file mode 100644 index 0000000000..1fae54d7ba --- /dev/null +++ b/thirdparty/wayland-protocols/unstable/text-input/text-input-unstable-v3.xml @@ -0,0 +1,457 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<protocol name="text_input_unstable_v3"> + <copyright> + Copyright © 2012, 2013 Intel Corporation + Copyright © 2015, 2016 Jan Arne Petersen + Copyright © 2017, 2018 Red Hat, Inc. + Copyright © 2018 Purism SPC + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + the copyright holders not be used in advertising or publicity + pertaining to distribution of the software without specific, + written prior permission. The copyright holders make no + representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied + warranty. + + THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + </copyright> + + <description summary="Protocol for composing text"> + This protocol allows compositors to act as input methods and to send text + to applications. A text input object is used to manage state of what are + typically text entry fields in the application. + + This document adheres to the RFC 2119 when using words like "must", + "should", "may", etc. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + </description> + + <interface name="zwp_text_input_v3" version="1"> + <description summary="text input"> + The zwp_text_input_v3 interface represents text input and input methods + associated with a seat. It provides enter/leave events to follow the + text input focus for a seat. + + Requests are used to enable/disable the text-input object and set + state information like surrounding and selected text or the content type. + The information about the entered text is sent to the text-input object + via the preedit_string and commit_string events. + + Text is valid UTF-8 encoded, indices and lengths are in bytes. Indices + must not point to middle bytes inside a code point: they must either + point to the first byte of a code point or to the end of the buffer. + Lengths must be measured between two valid indices. + + Focus moving throughout surfaces will result in the emission of + zwp_text_input_v3.enter and zwp_text_input_v3.leave events. The focused + surface must commit zwp_text_input_v3.enable and + zwp_text_input_v3.disable requests as the keyboard focus moves across + editable and non-editable elements of the UI. Those two requests are not + expected to be paired with each other, the compositor must be able to + handle consecutive series of the same request. + + State is sent by the state requests (set_surrounding_text, + set_content_type and set_cursor_rectangle) and a commit request. After an + enter event or disable request all state information is invalidated and + needs to be resent by the client. + </description> + + <request name="destroy" type="destructor"> + <description summary="Destroy the wp_text_input"> + Destroy the wp_text_input object. Also disables all surfaces enabled + through this wp_text_input object. + </description> + </request> + + <request name="enable"> + <description summary="Request text input to be enabled"> + Requests text input on the surface previously obtained from the enter + event. + + This request must be issued every time the active text input changes + to a new one, including within the current surface. Use + zwp_text_input_v3.disable when there is no longer any input focus on + the current surface. + + Clients must not enable more than one text input on the single seat + and should disable the current text input before enabling the new one. + At most one instance of text input may be in enabled state per instance, + Requests to enable the another text input when some text input is active + must be ignored by compositor. + + This request resets all state associated with previous enable, disable, + set_surrounding_text, set_text_change_cause, set_content_type, and + set_cursor_rectangle requests, as well as the state associated with + preedit_string, commit_string, and delete_surrounding_text events. + + The set_surrounding_text, set_content_type and set_cursor_rectangle + requests must follow if the text input supports the necessary + functionality. + + State set with this request is double-buffered. It will get applied on + the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The changes must be applied by the compositor after issuing a + zwp_text_input_v3.commit request. + </description> + </request> + + <request name="disable"> + <description summary="Disable text input on a surface"> + Explicitly disable text input on the current surface (typically when + there is no focus on any text entry inside the surface). + + State set with this request is double-buffered. It will get applied on + the next zwp_text_input_v3.commit request. + </description> + </request> + + <request name="set_surrounding_text"> + <description summary="sets the surrounding text"> + Sets the surrounding plain text around the input, excluding the preedit + text. + + The client should notify the compositor of any changes in any of the + values carried with this request, including changes caused by handling + incoming text-input events as well as changes caused by other + mechanisms like keyboard typing. + + If the client is unaware of the text around the cursor, it should not + issue this request, to signify lack of support to the compositor. + + Text is UTF-8 encoded, and should include the cursor position, the + complete selection and additional characters before and after them. + There is a maximum length of wayland messages, so text can not be + longer than 4000 bytes. + + Cursor is the byte offset of the cursor within text buffer. + + Anchor is the byte offset of the selection anchor within text buffer. + If there is no selected text, anchor is the same as cursor. + + If any preedit text is present, it is replaced with a cursor for the + purpose of this event. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The initial state for affected fields is empty, meaning that the text + input does not support sending surrounding text. If the empty values + get applied, subsequent attempts to change them may have no effect. + </description> + <arg name="text" type="string"/> + <arg name="cursor" type="int"/> + <arg name="anchor" type="int"/> + </request> + + <enum name="change_cause"> + <description summary="text change reason"> + Reason for the change of surrounding text or cursor posision. + </description> + <entry name="input_method" value="0" summary="input method caused the change"/> + <entry name="other" value="1" summary="something else than the input method caused the change"/> + </enum> + + <request name="set_text_change_cause"> + <description summary="indicates the cause of surrounding text change"> + Tells the compositor why the text surrounding the cursor changed. + + Whenever the client detects an external change in text, cursor, or + anchor posision, it must issue this request to the compositor. This + request is intended to give the input method a chance to update the + preedit text in an appropriate way, e.g. by removing it when the user + starts typing with a keyboard. + + cause describes the source of the change. + + The value set with this request is double-buffered. It must be applied + and reset to initial at the next zwp_text_input_v3.commit request. + + The initial value of cause is input_method. + </description> + <arg name="cause" type="uint" enum="change_cause"/> + </request> + + <enum name="content_hint" bitfield="true"> + <description summary="content hint"> + Content hint is a bitmask to allow to modify the behavior of the text + input. + </description> + <entry name="none" value="0x0" summary="no special behavior"/> + <entry name="completion" value="0x1" summary="suggest word completions"/> + <entry name="spellcheck" value="0x2" summary="suggest word corrections"/> + <entry name="auto_capitalization" value="0x4" summary="switch to uppercase letters at the start of a sentence"/> + <entry name="lowercase" value="0x8" summary="prefer lowercase letters"/> + <entry name="uppercase" value="0x10" summary="prefer uppercase letters"/> + <entry name="titlecase" value="0x20" summary="prefer casing for titles and headings (can be language dependent)"/> + <entry name="hidden_text" value="0x40" summary="characters should be hidden"/> + <entry name="sensitive_data" value="0x80" summary="typed text should not be stored"/> + <entry name="latin" value="0x100" summary="just Latin characters should be entered"/> + <entry name="multiline" value="0x200" summary="the text input is multiline"/> + </enum> + + <enum name="content_purpose"> + <description summary="content purpose"> + The content purpose allows to specify the primary purpose of a text + input. + + This allows an input method to show special purpose input panels with + extra characters or to disallow some characters. + </description> + <entry name="normal" value="0" summary="default input, allowing all characters"/> + <entry name="alpha" value="1" summary="allow only alphabetic characters"/> + <entry name="digits" value="2" summary="allow only digits"/> + <entry name="number" value="3" summary="input a number (including decimal separator and sign)"/> + <entry name="phone" value="4" summary="input a phone number"/> + <entry name="url" value="5" summary="input an URL"/> + <entry name="email" value="6" summary="input an email address"/> + <entry name="name" value="7" summary="input a name of a person"/> + <entry name="password" value="8" summary="input a password (combine with sensitive_data hint)"/> + <entry name="pin" value="9" summary="input is a numeric password (combine with sensitive_data hint)"/> + <entry name="date" value="10" summary="input a date"/> + <entry name="time" value="11" summary="input a time"/> + <entry name="datetime" value="12" summary="input a date and time"/> + <entry name="terminal" value="13" summary="input for a terminal"/> + </enum> + + <request name="set_content_type"> + <description summary="set content purpose and hint"> + Sets the content purpose and content hint. While the purpose is the + basic purpose of an input field, the hint flags allow to modify some of + the behavior. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request. + Subsequent attempts to update them may have no effect. The values + remain valid until the next committed enable or disable request. + + The initial value for hint is none, and the initial value for purpose + is normal. + </description> + <arg name="hint" type="uint" enum="content_hint"/> + <arg name="purpose" type="uint" enum="content_purpose"/> + </request> + + <request name="set_cursor_rectangle"> + <description summary="set cursor position"> + Marks an area around the cursor as a x, y, width, height rectangle in + surface local coordinates. + + Allows the compositor to put a window with word suggestions near the + cursor, without obstructing the text being input. + + If the client is unaware of the position of edited text, it should not + issue this request, to signify lack of support to the compositor. + + Values set with this request are double-buffered. They will get applied + on the next zwp_text_input_v3.commit request, and stay valid until the + next committed enable or disable request. + + The initial values describing a cursor rectangle are empty. That means + the text input does not support describing the cursor area. If the + empty values get applied, subsequent attempts to change them may have + no effect. + </description> + <arg name="x" type="int"/> + <arg name="y" type="int"/> + <arg name="width" type="int"/> + <arg name="height" type="int"/> + </request> + + <request name="commit"> + <description summary="commit state"> + Atomically applies state changes recently sent to the compositor. + + The commit request establishes and updates the state of the client, and + must be issued after any changes to apply them. + + Text input state (enabled status, content purpose, content hint, + surrounding text and change cause, cursor rectangle) is conceptually + double-buffered within the context of a text input, i.e. between a + committed enable request and the following committed enable or disable + request. + + Protocol requests modify the pending state, as opposed to the current + state in use by the input method. A commit request atomically applies + all pending state, replacing the current state. After commit, the new + pending state is as documented for each related request. + + Requests are applied in the order of arrival. + + Neither current nor pending state are modified unless noted otherwise. + + The compositor must count the number of commit requests coming from + each zwp_text_input_v3 object and use the count as the serial in done + events. + </description> + </request> + + <event name="enter"> + <description summary="enter event"> + Notification that this seat's text-input focus is on a certain surface. + + If client has created multiple text input objects, compositor must send + this event to all of them. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. This event sets the current surface for the + text-input object. + </description> + <arg name="surface" type="object" interface="wl_surface"/> + </event> + + <event name="leave"> + <description summary="leave event"> + Notification that this seat's text-input focus is no longer on a + certain surface. The client should reset any preedit string previously + set. + + The leave notification clears the current surface. It is sent before + the enter notification for the new focus. After leave event, compositor + must ignore requests from any text input instances until next enter + event. + + When the seat has the keyboard capability the text-input focus follows + the keyboard focus. + </description> + <arg name="surface" type="object" interface="wl_surface"/> + </event> + + <event name="preedit_string"> + <description summary="pre-edit"> + Notify when a new composing text (pre-edit) should be set at the + current cursor position. Any previously set composing text must be + removed. Any previously existing selected text must be removed. + + The argument text contains the pre-edit string buffer. + + The parameters cursor_begin and cursor_end are counted in bytes + relative to the beginning of the submitted text buffer. Cursor should + be hidden when both are equal to -1. + + They could be represented by the client as a line if both values are + the same, or as a text highlight otherwise. + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial value of text is an empty string, and cursor_begin, + cursor_end and cursor_hidden are all 0. + </description> + <arg name="text" type="string" allow-null="true"/> + <arg name="cursor_begin" type="int"/> + <arg name="cursor_end" type="int"/> + </event> + + <event name="commit_string"> + <description summary="text commit"> + Notify when text should be inserted into the editor widget. The text to + commit could be either just a single character after a key press or the + result of some composing (pre-edit). + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial value of text is an empty string. + </description> + <arg name="text" type="string" allow-null="true"/> + </event> + + <event name="delete_surrounding_text"> + <description summary="delete surrounding text"> + Notify when the text around the current cursor position should be + deleted. + + Before_length and after_length are the number of bytes before and after + the current cursor index (excluding the selection) to delete. + + If a preedit text is present, in effect before_length is counted from + the beginning of it, and after_length from its end (see done event + sequence). + + Values set with this event are double-buffered. They must be applied + and reset to initial on the next zwp_text_input_v3.done event. + + The initial values of both before_length and after_length are 0. + </description> + <arg name="before_length" type="uint" summary="length of text before current cursor position"/> + <arg name="after_length" type="uint" summary="length of text after current cursor position"/> + </event> + + <event name="done"> + <description summary="apply changes"> + Instruct the application to apply changes to state requested by the + preedit_string, commit_string and delete_surrounding_text events. The + state relating to these events is double-buffered, and each one + modifies the pending state. This event replaces the current state with + the pending state. + + The application must proceed by evaluating the changes in the following + order: + + 1. Replace existing preedit string with the cursor. + 2. Delete requested surrounding text. + 3. Insert commit string with the cursor at its end. + 4. Calculate surrounding text to send. + 5. Insert new preedit text in cursor position. + 6. Place cursor inside preedit text. + + The serial number reflects the last state of the zwp_text_input_v3 + object known to the compositor. The value of the serial argument must + be equal to the number of commit requests already issued on that object. + + When the client receives a done event with a serial different than the + number of past commit requests, it must proceed with evaluating and + applying the changes as normal, except it should not change the current + state of the zwp_text_input_v3 object. All pending state requests + (set_surrounding_text, set_content_type and set_cursor_rectangle) on + the zwp_text_input_v3 object should be sent and committed after + receiving a zwp_text_input_v3.done event with a matching serial. + </description> + <arg name="serial" type="uint"/> + </event> + </interface> + + <interface name="zwp_text_input_manager_v3" version="1"> + <description summary="text input manager"> + A factory for text-input objects. This object is a global singleton. + </description> + + <request name="destroy" type="destructor"> + <description summary="Destroy the wp_text_input_manager"> + Destroy the wp_text_input_manager object. + </description> + </request> + + <request name="get_text_input"> + <description summary="create a new text input object"> + Creates a new text-input object for a given seat. + </description> + <arg name="id" type="new_id" interface="zwp_text_input_v3"/> + <arg name="seat" type="object" interface="wl_seat"/> + </request> + </interface> +</protocol> |
