summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-09-08 09:11:23 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-09-08 09:11:23 +0200
commit31a7fd1951f6e9f68faa6edd2aaff87cb922a31c (patch)
tree26d8dc6f39322b9496ce290d3f906d8dabcf293c
parent119f379a3d6993612e018f2f8224f7a7a7daf49d (diff)
parent1ced1f9c9981c923a4c6bf8d461028f8ffa622f6 (diff)
downloadredot-engine-31a7fd1951f6e9f68faa6edd2aaff87cb922a31c.tar.gz
Merge pull request #81406 from bruvzg/ts_dict_chk2
[TextServer] Pass Dictionary properties by value and check property values instead of references.
-rw-r--r--modules/text_server_adv/text_server_adv.cpp6
-rw-r--r--modules/text_server_fb/text_server_fb.cpp6
-rw-r--r--scene/resources/font.cpp16
3 files changed, 18 insertions, 10 deletions
diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp
index 3850fc4518..3cbc300946 100644
--- a/modules/text_server_adv/text_server_adv.cpp
+++ b/modules/text_server_adv/text_server_adv.cpp
@@ -2383,8 +2383,10 @@ void TextServerAdvanced::_font_set_variation_coordinates(const RID &p_font_rid,
ERR_FAIL_COND(!fd);
MutexLock lock(fd->mutex);
- _font_clear_cache(fd);
- fd->variation_coordinates = p_variation_coordinates;
+ if (!fd->variation_coordinates.recursive_equal(p_variation_coordinates, 1)) {
+ _font_clear_cache(fd);
+ fd->variation_coordinates = p_variation_coordinates.duplicate();
+ }
}
Dictionary TextServerAdvanced::_font_get_variation_coordinates(const RID &p_font_rid) const {
diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp
index 5d4de7a0d6..26d16a1ec9 100644
--- a/modules/text_server_fb/text_server_fb.cpp
+++ b/modules/text_server_fb/text_server_fb.cpp
@@ -1376,8 +1376,10 @@ void TextServerFallback::_font_set_variation_coordinates(const RID &p_font_rid,
ERR_FAIL_COND(!fd);
MutexLock lock(fd->mutex);
- _font_clear_cache(fd);
- fd->variation_coordinates = p_variation_coordinates;
+ if (!fd->variation_coordinates.recursive_equal(p_variation_coordinates, 1)) {
+ _font_clear_cache(fd);
+ fd->variation_coordinates = p_variation_coordinates.duplicate();
+ }
}
Dictionary TextServerFallback::_font_get_variation_coordinates(const RID &p_font_rid) const {
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index c8a98a6831..7aa2f8e178 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -2819,12 +2819,14 @@ Ref<Font> FontVariation::_get_base_font_or_default() const {
}
void FontVariation::set_variation_opentype(const Dictionary &p_coords) {
- variation.opentype = p_coords;
- _invalidate_rids();
+ if (!variation.opentype.recursive_equal(p_coords, 1)) {
+ variation.opentype = p_coords.duplicate();
+ _invalidate_rids();
+ }
}
Dictionary FontVariation::get_variation_opentype() const {
- return variation.opentype;
+ return variation.opentype.duplicate();
}
void FontVariation::set_variation_embolden(float p_strength) {
@@ -2861,12 +2863,14 @@ int FontVariation::get_variation_face_index() const {
}
void FontVariation::set_opentype_features(const Dictionary &p_features) {
- opentype_features = p_features;
- _invalidate_rids();
+ if (!opentype_features.recursive_equal(p_features, 1)) {
+ opentype_features = p_features.duplicate();
+ _invalidate_rids();
+ }
}
Dictionary FontVariation::get_opentype_features() const {
- return opentype_features;
+ return opentype_features.duplicate();
}
void FontVariation::set_spacing(TextServer::SpacingType p_spacing, int p_value) {