diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2022-05-09 12:47:10 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2022-07-06 14:12:36 +0300 |
commit | 344ba0ffaf3f7d39bd5a1304ba6a6070d442a963 (patch) | |
tree | 318acb34fb6d8915522c0c05e5c9fb916f8e1227 /modules/text_server_fb | |
parent | cf194847468e00de682074a14b2cf4ccf7b69188 (diff) |
Refactor Font configuration and import UI, and Font resources.
Diffstat (limited to 'modules/text_server_fb')
-rw-r--r-- | modules/text_server_fb/text_server_fb.cpp | 327 | ||||
-rw-r--r-- | modules/text_server_fb/text_server_fb.h | 40 |
2 files changed, 172 insertions, 195 deletions
diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index f93c5909c9..8f57aa339c 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -104,7 +104,7 @@ int64_t TextServerFallback::get_features() const { void TextServerFallback::free_rid(const RID &p_rid) { _THREAD_SAFE_METHOD_ if (font_owner.owns(p_rid)) { - FontDataFallback *fd = font_owner.get_or_null(p_rid); + FontFallback *fd = font_owner.get_or_null(p_rid); font_owner.free(p_rid); memdelete(fd); } else if (shaped_owner.owns(p_rid)) { @@ -199,7 +199,7 @@ String TextServerFallback::tag_to_name(int64_t p_tag) const { /* Font Glyph Rendering */ /*************************************************************************/ -_FORCE_INLINE_ TextServerFallback::FontTexturePosition TextServerFallback::find_texture_pos_for_glyph(FontDataForSizeFallback *p_data, int p_color_size, Image::Format p_image_format, int p_width, int p_height, bool p_msdf) const { +_FORCE_INLINE_ TextServerFallback::FontTexturePosition TextServerFallback::find_texture_pos_for_glyph(FontForSizeFallback *p_data, int p_color_size, Image::Format p_image_format, int p_width, int p_height, bool p_msdf) const { FontTexturePosition ret; ret.index = -1; @@ -397,7 +397,7 @@ void TextServerFallback::_generateMTSDF_threaded(uint32_t y, void *p_td) const { } } -_FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_msdf(FontDataFallback *p_font_data, FontDataForSizeFallback *p_data, int p_pixel_range, int p_rect_margin, FT_Outline *outline, const Vector2 &advance) const { +_FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_msdf(FontFallback *p_font_data, FontForSizeFallback *p_data, int p_pixel_range, int p_rect_margin, FT_Outline *outline, const Vector2 &advance) const { msdfgen::Shape shape; shape.contours.clear(); @@ -502,7 +502,7 @@ _FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_msdf( #endif #ifdef MODULE_FREETYPE_ENABLED -_FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_bitmap(FontDataForSizeFallback *p_data, int p_rect_margin, FT_Bitmap bitmap, int yofs, int xofs, const Vector2 &advance) const { +_FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_bitmap(FontForSizeFallback *p_data, int p_rect_margin, FT_Bitmap bitmap, int yofs, int xofs, const Vector2 &advance) const { int w = bitmap.width; int h = bitmap.rows; @@ -579,12 +579,12 @@ _FORCE_INLINE_ TextServerFallback::FontGlyph TextServerFallback::rasterize_bitma /* Font Cache */ /*************************************************************************/ -_FORCE_INLINE_ bool TextServerFallback::_ensure_glyph(FontDataFallback *p_font_data, const Vector2i &p_size, int32_t p_glyph) const { +_FORCE_INLINE_ bool TextServerFallback::_ensure_glyph(FontFallback *p_font_data, const Vector2i &p_size, int32_t p_glyph) const { ERR_FAIL_COND_V(!_ensure_cache_for_size(p_font_data, p_size), false); int32_t glyph_index = p_glyph & 0xffffff; // Remove subpixel shifts. - FontDataForSizeFallback *fd = p_font_data->cache[p_size]; + FontForSizeFallback *fd = p_font_data->cache[p_size]; if (fd->glyph_map.has(p_glyph)) { return fd->glyph_map[p_glyph].found; } @@ -705,13 +705,13 @@ _FORCE_INLINE_ bool TextServerFallback::_ensure_glyph(FontDataFallback *p_font_d return false; } -_FORCE_INLINE_ bool TextServerFallback::_ensure_cache_for_size(FontDataFallback *p_font_data, const Vector2i &p_size) const { +_FORCE_INLINE_ bool TextServerFallback::_ensure_cache_for_size(FontFallback *p_font_data, const Vector2i &p_size) const { ERR_FAIL_COND_V(p_size.x <= 0, false); if (p_font_data->cache.has(p_size)) { return true; } - FontDataForSizeFallback *fd = memnew(FontDataForSizeFallback); + FontForSizeFallback *fd = memnew(FontForSizeFallback); fd->size = p_size; if (p_font_data->data_ptr && (p_font_data->data_size > 0)) { // Init dynamic font. @@ -851,8 +851,8 @@ _FORCE_INLINE_ bool TextServerFallback::_ensure_cache_for_size(FontDataFallback return true; } -_FORCE_INLINE_ void TextServerFallback::_font_clear_cache(FontDataFallback *p_font_data) { - for (const KeyValue<Vector2i, FontDataForSizeFallback *> &E : p_font_data->cache) { +_FORCE_INLINE_ void TextServerFallback::_font_clear_cache(FontFallback *p_font_data) { + for (const KeyValue<Vector2i, FontForSizeFallback *> &E : p_font_data->cache) { memdelete(E.value); } @@ -864,13 +864,13 @@ _FORCE_INLINE_ void TextServerFallback::_font_clear_cache(FontDataFallback *p_fo RID TextServerFallback::create_font() { _THREAD_SAFE_METHOD_ - FontDataFallback *fd = memnew(FontDataFallback); + FontFallback *fd = memnew(FontFallback); return font_owner.make_rid(fd); } void TextServerFallback::font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -881,7 +881,7 @@ void TextServerFallback::font_set_data(const RID &p_font_rid, const PackedByteAr } void TextServerFallback::font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -892,7 +892,7 @@ void TextServerFallback::font_set_data_ptr(const RID &p_font_rid, const uint8_t } void TextServerFallback::font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -905,7 +905,7 @@ void TextServerFallback::font_set_face_index(const RID &p_font_rid, int64_t p_fa ERR_FAIL_COND(p_face_index < 0); ERR_FAIL_COND(p_face_index >= 0x7FFF); - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -916,7 +916,7 @@ void TextServerFallback::font_set_face_index(const RID &p_font_rid, int64_t p_fa } int64_t TextServerFallback::font_get_face_index(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0); MutexLock lock(fd->mutex); @@ -924,7 +924,7 @@ int64_t TextServerFallback::font_get_face_index(const RID &p_font_rid) const { } int64_t TextServerFallback::font_get_face_count(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0); MutexLock lock(fd->mutex); @@ -965,7 +965,7 @@ int64_t TextServerFallback::font_get_face_count(const RID &p_font_rid) const { } int64_t /*FontStyle*/ TextServerFallback::font_get_style(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0); MutexLock lock(fd->mutex); @@ -975,7 +975,7 @@ int64_t /*FontStyle*/ TextServerFallback::font_get_style(const RID &p_font_rid) } void TextServerFallback::font_set_style_name(const RID &p_font_rid, const String &p_name) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -985,7 +985,7 @@ void TextServerFallback::font_set_style_name(const RID &p_font_rid, const String } String TextServerFallback::font_get_style_name(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, String()); MutexLock lock(fd->mutex); @@ -995,7 +995,7 @@ String TextServerFallback::font_get_style_name(const RID &p_font_rid) const { } void TextServerFallback::font_set_name(const RID &p_font_rid, const String &p_name) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1005,7 +1005,7 @@ void TextServerFallback::font_set_name(const RID &p_font_rid, const String &p_na } String TextServerFallback::font_get_name(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, String()); MutexLock lock(fd->mutex); @@ -1015,7 +1015,7 @@ String TextServerFallback::font_get_name(const RID &p_font_rid) const { } void TextServerFallback::font_set_antialiased(const RID &p_font_rid, bool p_antialiased) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1026,7 +1026,7 @@ void TextServerFallback::font_set_antialiased(const RID &p_font_rid, bool p_anti } bool TextServerFallback::font_is_antialiased(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1034,12 +1034,12 @@ bool TextServerFallback::font_is_antialiased(const RID &p_font_rid) const { } void TextServerFallback::font_set_generate_mipmaps(const RID &p_font_rid, bool p_generate_mipmaps) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); if (fd->mipmaps != p_generate_mipmaps) { - for (KeyValue<Vector2i, FontDataForSizeFallback *> &E : fd->cache) { + for (KeyValue<Vector2i, FontForSizeFallback *> &E : fd->cache) { for (int i = 0; i < E.value->textures.size(); i++) { E.value->textures.write[i].dirty = true; } @@ -1049,7 +1049,7 @@ void TextServerFallback::font_set_generate_mipmaps(const RID &p_font_rid, bool p } bool TextServerFallback::font_get_generate_mipmaps(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1057,7 +1057,7 @@ bool TextServerFallback::font_get_generate_mipmaps(const RID &p_font_rid) const } void TextServerFallback::font_set_multichannel_signed_distance_field(const RID &p_font_rid, bool p_msdf) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1068,7 +1068,7 @@ void TextServerFallback::font_set_multichannel_signed_distance_field(const RID & } bool TextServerFallback::font_is_multichannel_signed_distance_field(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1076,7 +1076,7 @@ bool TextServerFallback::font_is_multichannel_signed_distance_field(const RID &p } void TextServerFallback::font_set_msdf_pixel_range(const RID &p_font_rid, int64_t p_msdf_pixel_range) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1087,7 +1087,7 @@ void TextServerFallback::font_set_msdf_pixel_range(const RID &p_font_rid, int64_ } int64_t TextServerFallback::font_get_msdf_pixel_range(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1095,7 +1095,7 @@ int64_t TextServerFallback::font_get_msdf_pixel_range(const RID &p_font_rid) con } void TextServerFallback::font_set_msdf_size(const RID &p_font_rid, int64_t p_msdf_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1106,7 +1106,7 @@ void TextServerFallback::font_set_msdf_size(const RID &p_font_rid, int64_t p_msd } int64_t TextServerFallback::font_get_msdf_size(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1114,7 +1114,7 @@ int64_t TextServerFallback::font_get_msdf_size(const RID &p_font_rid) const { } void TextServerFallback::font_set_fixed_size(const RID &p_font_rid, int64_t p_fixed_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1122,7 +1122,7 @@ void TextServerFallback::font_set_fixed_size(const RID &p_font_rid, int64_t p_fi } int64_t TextServerFallback::font_get_fixed_size(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1130,7 +1130,7 @@ int64_t TextServerFallback::font_get_fixed_size(const RID &p_font_rid) const { } void TextServerFallback::font_set_force_autohinter(const RID &p_font_rid, bool p_force_autohinter) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1141,7 +1141,7 @@ void TextServerFallback::font_set_force_autohinter(const RID &p_font_rid, bool p } bool TextServerFallback::font_is_force_autohinter(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -1149,7 +1149,7 @@ bool TextServerFallback::font_is_force_autohinter(const RID &p_font_rid) const { } void TextServerFallback::font_set_hinting(const RID &p_font_rid, TextServer::Hinting p_hinting) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1160,7 +1160,7 @@ void TextServerFallback::font_set_hinting(const RID &p_font_rid, TextServer::Hin } TextServer::Hinting TextServerFallback::font_get_hinting(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, HINTING_NONE); MutexLock lock(fd->mutex); @@ -1168,7 +1168,7 @@ TextServer::Hinting TextServerFallback::font_get_hinting(const RID &p_font_rid) } void TextServerFallback::font_set_subpixel_positioning(const RID &p_font_rid, TextServer::SubpixelPositioning p_subpixel) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1176,7 +1176,7 @@ void TextServerFallback::font_set_subpixel_positioning(const RID &p_font_rid, Te } TextServer::SubpixelPositioning TextServerFallback::font_get_subpixel_positioning(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, SUBPIXEL_POSITIONING_DISABLED); MutexLock lock(fd->mutex); @@ -1184,7 +1184,7 @@ TextServer::SubpixelPositioning TextServerFallback::font_get_subpixel_positionin } void TextServerFallback::font_set_embolden(const RID &p_font_rid, double p_strength) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1195,7 +1195,7 @@ void TextServerFallback::font_set_embolden(const RID &p_font_rid, double p_stren } double TextServerFallback::font_get_embolden(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1203,7 +1203,7 @@ double TextServerFallback::font_get_embolden(const RID &p_font_rid) const { } void TextServerFallback::font_set_transform(const RID &p_font_rid, const Transform2D &p_transform) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1214,7 +1214,7 @@ void TextServerFallback::font_set_transform(const RID &p_font_rid, const Transfo } Transform2D TextServerFallback::font_get_transform(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Transform2D()); MutexLock lock(fd->mutex); @@ -1222,7 +1222,7 @@ Transform2D TextServerFallback::font_get_transform(const RID &p_font_rid) const } void TextServerFallback::font_set_variation_coordinates(const RID &p_font_rid, const Dictionary &p_variation_coordinates) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1233,7 +1233,7 @@ void TextServerFallback::font_set_variation_coordinates(const RID &p_font_rid, c } Dictionary TextServerFallback::font_get_variation_coordinates(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Dictionary()); MutexLock lock(fd->mutex); @@ -1241,7 +1241,7 @@ Dictionary TextServerFallback::font_get_variation_coordinates(const RID &p_font_ } void TextServerFallback::font_set_oversampling(const RID &p_font_rid, double p_oversampling) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1252,7 +1252,7 @@ void TextServerFallback::font_set_oversampling(const RID &p_font_rid, double p_o } double TextServerFallback::font_get_oversampling(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1260,30 +1260,30 @@ double TextServerFallback::font_get_oversampling(const RID &p_font_rid) const { } Array TextServerFallback::font_get_size_cache_list(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Array()); MutexLock lock(fd->mutex); Array ret; - for (const KeyValue<Vector2i, FontDataForSizeFallback *> &E : fd->cache) { + for (const KeyValue<Vector2i, FontForSizeFallback *> &E : fd->cache) { ret.push_back(E.key); } return ret; } void TextServerFallback::font_clear_size_cache(const RID &p_font_rid) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); - for (const KeyValue<Vector2i, FontDataForSizeFallback *> &E : fd->cache) { + for (const KeyValue<Vector2i, FontForSizeFallback *> &E : fd->cache) { memdelete(E.value); } fd->cache.clear(); } void TextServerFallback::font_remove_size_cache(const RID &p_font_rid, const Vector2i &p_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1294,7 +1294,7 @@ void TextServerFallback::font_remove_size_cache(const RID &p_font_rid, const Vec } void TextServerFallback::font_set_ascent(const RID &p_font_rid, int64_t p_size, double p_ascent) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1305,7 +1305,7 @@ void TextServerFallback::font_set_ascent(const RID &p_font_rid, int64_t p_size, } double TextServerFallback::font_get_ascent(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1321,7 +1321,7 @@ double TextServerFallback::font_get_ascent(const RID &p_font_rid, int64_t p_size } void TextServerFallback::font_set_descent(const RID &p_font_rid, int64_t p_size, double p_descent) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); Vector2i size = _get_size(fd, p_size); @@ -1331,7 +1331,7 @@ void TextServerFallback::font_set_descent(const RID &p_font_rid, int64_t p_size, } double TextServerFallback::font_get_descent(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1347,7 +1347,7 @@ double TextServerFallback::font_get_descent(const RID &p_font_rid, int64_t p_siz } void TextServerFallback::font_set_underline_position(const RID &p_font_rid, int64_t p_size, double p_underline_position) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1358,7 +1358,7 @@ void TextServerFallback::font_set_underline_position(const RID &p_font_rid, int6 } double TextServerFallback::font_get_underline_position(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1374,7 +1374,7 @@ double TextServerFallback::font_get_underline_position(const RID &p_font_rid, in } void TextServerFallback::font_set_underline_thickness(const RID &p_font_rid, int64_t p_size, double p_underline_thickness) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1385,7 +1385,7 @@ void TextServerFallback::font_set_underline_thickness(const RID &p_font_rid, int } double TextServerFallback::font_get_underline_thickness(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1401,7 +1401,7 @@ double TextServerFallback::font_get_underline_thickness(const RID &p_font_rid, i } void TextServerFallback::font_set_scale(const RID &p_font_rid, int64_t p_size, double p_scale) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1417,7 +1417,7 @@ void TextServerFallback::font_set_scale(const RID &p_font_rid, int64_t p_size, d } double TextServerFallback::font_get_scale(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0.0); MutexLock lock(fd->mutex); @@ -1432,60 +1432,8 @@ double TextServerFallback::font_get_scale(const RID &p_font_rid, int64_t p_size) } } -void TextServerFallback::font_set_spacing(const RID &p_font_rid, int64_t p_size, TextServer::SpacingType p_spacing, int64_t p_value) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); - ERR_FAIL_COND(!fd); - - MutexLock lock(fd->mutex); - Vector2i size = _get_size(fd, p_size); - - ERR_FAIL_COND(!_ensure_cache_for_size(fd, size)); - switch (p_spacing) { - case TextServer::SPACING_GLYPH: { - fd->cache[size]->spacing_glyph = p_value; - } break; - case TextServer::SPACING_SPACE: { - fd->cache[size]->spacing_space = p_value; - } break; - default: { - ERR_FAIL_MSG("Invalid spacing type: " + String::num_int64(p_spacing)); - } break; - } -} - -int64_t TextServerFallback::font_get_spacing(const RID &p_font_rid, int64_t p_size, TextServer::SpacingType p_spacing) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); - ERR_FAIL_COND_V(!fd, 0); - - MutexLock lock(fd->mutex); - Vector2i size = _get_size(fd, p_size); - - ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), 0); - - switch (p_spacing) { - case TextServer::SPACING_GLYPH: { - if (fd->msdf) { - return fd->cache[size]->spacing_glyph * (double)p_size / (double)fd->msdf_source_size; - } else { - return fd->cache[size]->spacing_glyph; - } - } break; - case TextServer::SPACING_SPACE: { - if (fd->msdf) { - return fd->cache[size]->spacing_space * (double)p_size / (double)fd->msdf_source_size; - } else { - return fd->cache[size]->spacing_space; - } - } break; - default: { - ERR_FAIL_V_MSG(0, "Invalid spacing type: " + String::num_int64(p_spacing)); - } break; - } - return 0; -} - int64_t TextServerFallback::font_get_texture_count(const RID &p_font_rid, const Vector2i &p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0); MutexLock lock(fd->mutex); @@ -1497,7 +1445,7 @@ int64_t TextServerFallback::font_get_texture_count(const RID &p_font_rid, const } void TextServerFallback::font_clear_textures(const RID &p_font_rid, const Vector2i &p_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); Vector2i size = _get_size_outline(fd, p_size); @@ -1507,7 +1455,7 @@ void TextServerFallback::font_clear_textures(const RID &p_font_rid, const Vector } void TextServerFallback::font_remove_texture(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1519,7 +1467,7 @@ void TextServerFallback::font_remove_texture(const RID &p_font_rid, const Vector } void TextServerFallback::font_set_texture_image(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index, const Ref<Image> &p_image) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); ERR_FAIL_COND(p_image.is_null()); @@ -1552,7 +1500,7 @@ void TextServerFallback::font_set_texture_image(const RID &p_font_rid, const Vec } Ref<Image> TextServerFallback::font_get_texture_image(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Ref<Image>()); MutexLock lock(fd->mutex); @@ -1569,7 +1517,7 @@ Ref<Image> TextServerFallback::font_get_texture_image(const RID &p_font_rid, con } void TextServerFallback::font_set_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index, const PackedInt32Array &p_offset) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1585,7 +1533,7 @@ void TextServerFallback::font_set_texture_offsets(const RID &p_font_rid, const V } PackedInt32Array TextServerFallback::font_get_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, PackedInt32Array()); MutexLock lock(fd->mutex); @@ -1598,7 +1546,7 @@ PackedInt32Array TextServerFallback::font_get_texture_offsets(const RID &p_font_ } Array TextServerFallback::font_get_glyph_list(const RID &p_font_rid, const Vector2i &p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Array()); MutexLock lock(fd->mutex); @@ -1614,7 +1562,7 @@ Array TextServerFallback::font_get_glyph_list(const RID &p_font_rid, const Vecto } void TextServerFallback::font_clear_glyphs(const RID &p_font_rid, const Vector2i &p_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1625,7 +1573,7 @@ void TextServerFallback::font_clear_glyphs(const RID &p_font_rid, const Vector2i } void TextServerFallback::font_remove_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1636,7 +1584,7 @@ void TextServerFallback::font_remove_glyph(const RID &p_font_rid, const Vector2i } Vector2 TextServerFallback::font_get_glyph_advance(const RID &p_font_rid, int64_t p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Vector2()); MutexLock lock(fd->mutex); @@ -1664,7 +1612,7 @@ Vector2 TextServerFallback::font_get_glyph_advance(const RID &p_font_rid, int64_ } void TextServerFallback::font_set_glyph_advance(const RID &p_font_rid, int64_t p_size, int64_t p_glyph, const Vector2 &p_advance) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1679,7 +1627,7 @@ void TextServerFallback::font_set_glyph_advance(const RID &p_font_rid, int64_t p } Vector2 TextServerFallback::font_get_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Vector2()); MutexLock lock(fd->mutex); @@ -1700,7 +1648,7 @@ Vector2 TextServerFallback::font_get_glyph_offset(const RID &p_font_rid, const V } void TextServerFallback::font_set_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_offset) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1715,7 +1663,7 @@ void TextServerFallback::font_set_glyph_offset(const RID &p_font_rid, const Vect } Vector2 TextServerFallback::font_get_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Vector2()); MutexLock lock(fd->mutex); @@ -1736,7 +1684,7 @@ Vector2 TextServerFallback::font_get_glyph_size(const RID &p_font_rid, const Vec } void TextServerFallback::font_set_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_gl_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1751,7 +1699,7 @@ void TextServerFallback::font_set_glyph_size(const RID &p_font_rid, const Vector } Rect2 TextServerFallback::font_get_glyph_uv_rect(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Rect2()); MutexLock lock(fd->mutex); @@ -1767,7 +1715,7 @@ Rect2 TextServerFallback::font_get_glyph_uv_rect(const RID &p_font_rid, const Ve } void TextServerFallback::font_set_glyph_uv_rect(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Rect2 &p_uv_rect) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1782,7 +1730,7 @@ void TextServerFallback::font_set_glyph_uv_rect(const RID &p_font_rid, const Vec } int64_t TextServerFallback::font_get_glyph_texture_idx(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, -1); MutexLock lock(fd->mutex); @@ -1798,7 +1746,7 @@ int64_t TextServerFallback::font_get_glyph_texture_idx(const RID &p_font_rid, co } void TextServerFallback::font_set_glyph_texture_idx(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, int64_t p_texture_idx) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1813,7 +1761,7 @@ void TextServerFallback::font_set_glyph_texture_idx(const RID &p_font_rid, const } RID TextServerFallback::font_get_glyph_texture_rid(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, RID()); MutexLock lock(fd->mutex); @@ -1853,7 +1801,7 @@ RID TextServerFallback::font_get_glyph_texture_rid(const RID &p_font_rid, const } Size2 TextServerFallback::font_get_glyph_texture_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Size2()); MutexLock lock(fd->mutex); @@ -1893,7 +1841,7 @@ Size2 TextServerFallback::font_get_glyph_texture_size(const RID &p_font_rid, con } Dictionary TextServerFallback::font_get_glyph_contours(const RID &p_font_rid, int64_t p_size, int64_t p_index) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Dictionary()); MutexLock lock(fd->mutex); @@ -1943,7 +1891,7 @@ Dictionary TextServerFallback::font_get_glyph_contours(const RID &p_font_rid, in } Array TextServerFallback::font_get_kerning_list(const RID &p_font_rid, int64_t p_size) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Array()); MutexLock lock(fd->mutex); @@ -1959,7 +1907,7 @@ Array TextServerFallback::font_get_kerning_list(const RID &p_font_rid, int64_t p } void TextServerFallback::font_clear_kerning_map(const RID &p_font_rid, int64_t p_size) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1970,7 +1918,7 @@ void TextServerFallback::font_clear_kerning_map(const RID &p_font_rid, int64_t p } void TextServerFallback::font_remove_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1981,7 +1929,7 @@ void TextServerFallback::font_remove_kerning(const RID &p_font_rid, int64_t p_si } void TextServerFallback::font_set_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair, const Vector2 &p_kerning) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -1992,7 +1940,7 @@ void TextServerFallback::font_set_kerning(const RID &p_font_rid, int64_t p_size, } Vector2 TextServerFallback::font_get_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Vector2()); MutexLock lock(fd->mutex); @@ -2032,7 +1980,7 @@ int64_t TextServerFallback::font_get_glyph_index(const RID &p_font_rid, int64_t } bool TextServerFallback::font_has_char(const RID &p_font_rid, int64_t p_char) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); ERR_FAIL_COND_V_MSG((p_char >= 0xd800 && p_char <= 0xdfff) || (p_char > 0x10ffff), false, "Unicode parsing error: Invalid unicode codepoint " + String::num_int64(p_char, 16) + "."); @@ -2040,7 +1988,7 @@ bool TextServerFallback::font_has_char(const RID &p_font_rid, int64_t p_char) co if (fd->cache.is_empty()) { ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, fd->msdf ? Vector2i(fd->msdf_source_size, 0) : Vector2i(16, 0)), false); } - FontDataForSizeFallback *at_size = fd->cache.begin()->value; + FontForSizeFallback *at_size = fd->cache.begin()->value; #ifdef MODULE_FREETYPE_ENABLED if (at_size && at_size->face) { @@ -2051,14 +1999,14 @@ bool TextServerFallback::font_has_char(const RID &p_font_rid, int64_t p_char) co } String TextServerFallback::font_get_supported_chars(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, String()); MutexLock lock(fd->mutex); if (fd->cache.is_empty()) { ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, fd->msdf ? Vector2i(fd->msdf_source_size, 0) : Vector2i(16, 0)), String()); } - FontDataForSizeFallback *at_size = fd->cache.begin()->value; + FontForSizeFallback *at_size = fd->cache.begin()->value; String chars; #ifdef MODULE_FREETYPE_ENABLED @@ -2084,7 +2032,7 @@ String TextServerFallback::font_get_supported_chars(const RID &p_font_rid) const } void TextServerFallback::font_render_range(const RID &p_font_rid, const Vector2i &p_size, int64_t p_start, int64_t p_end) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); ERR_FAIL_COND_MSG((p_start >= 0xd800 && p_start <= 0xdfff) || (p_start > 0x10ffff), "Unicode parsing error: Invalid unicode codepoint " + String::num_int64(p_start, 16) + "."); ERR_FAIL_COND_MSG((p_end >= 0xd800 && p_end <= 0xdfff) || (p_end > 0x10ffff), "Unicode parsing error: Invalid unicode codepoint " + String::num_int64(p_end, 16) + "."); @@ -2117,7 +2065,7 @@ void TextServerFallback::font_render_range(const RID &p_font_rid, const Vector2i } void TextServerFallback::font_render_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_index) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2146,7 +2094,7 @@ void TextServerFallback::font_render_glyph(const RID &p_font_rid, const Vector2i } void TextServerFallback::font_draw_glyph(const RID &p_font_rid, const RID &p_canvas, int64_t p_size, const Vector2 &p_pos, int64_t p_index, const Color &p_color) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2225,7 +2173,7 @@ void TextServerFallback::font_draw_glyph(const RID &p_font_rid, const RID &p_can } void TextServerFallback::font_draw_glyph_outline(const RID &p_font_rid, const RID &p_canvas, int64_t p_size, int64_t p_outline_size, const Vector2 &p_pos, int64_t p_index, const Color &p_color) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2304,7 +2252,7 @@ void TextServerFallback::font_draw_glyph_outline(const RID &p_font_rid, const RI } bool TextServerFallback::font_is_language_supported(const RID &p_font_rid, const String &p_language) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -2316,7 +2264,7 @@ bool TextServerFallback::font_is_language_supported(const RID &p_font_rid, const } void TextServerFallback::font_set_language_support_override(const RID &p_font_rid, const String &p_language, bool p_supported) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2324,7 +2272,7 @@ void TextServerFallback::font_set_language_support_override(const RID &p_font_ri } bool TextServerFallback::font_get_language_support_override(const RID &p_font_rid, const String &p_language) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -2332,7 +2280,7 @@ bool TextServerFallback::font_get_language_support_override(const RID &p_font_ri } void TextServerFallback::font_remove_language_support_override(const RID &p_font_rid, const String &p_language) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2340,7 +2288,7 @@ void TextServerFallback::font_remove_language_support_override(const RID &p_font } PackedStringArray TextServerFallback::font_get_language_support_overrides(const RID &p_font_rid) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, PackedStringArray()); MutexLock lock(fd->mutex); @@ -2352,7 +2300,7 @@ PackedStringArray TextServerFallback::font_get_language_support_overrides(const } bool TextServerFallback::font_is_script_supported(const RID &p_font_rid, const String &p_script) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -2364,7 +2312,7 @@ bool TextServerFallback::font_is_script_supported(const RID &p_font_rid, const S } void TextServerFallback::font_set_script_support_override(const RID &p_font_rid, const String &p_script, bool p_supported) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2372,7 +2320,7 @@ void TextServerFallback::font_set_script_support_override(const RID &p_font_rid, } bool TextServerFallback::font_get_script_support_override(const RID &p_font_rid, const String &p_script) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, false); MutexLock lock(fd->mutex); @@ -2380,7 +2328,7 @@ bool TextServerFallback::font_get_script_support_override(const RID &p_font_rid, } void TextServerFallback::font_remove_script_support_override(const RID &p_font_rid, const String &p_script) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2390,7 +2338,7 @@ void TextServerFallback::font_remove_script_support_override(const RID &p_font_r } PackedStringArray TextServerFallback::font_get_script_support_overrides(const RID &p_font_rid) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, PackedStringArray()); MutexLock lock(fd->mutex); @@ -2402,7 +2350,7 @@ PackedStringArray TextServerFallback::font_get_script_support_overrides(const RI } void TextServerFallback::font_set_opentype_feature_overrides(const RID &p_font_rid, const Dictionary &p_overrides) { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); MutexLock lock(fd->mutex); @@ -2412,7 +2360,7 @@ void TextServerFallback::font_set_opentype_feature_overrides(const RID &p_font_r } Dictionary TextServerFallback::font_get_opentype_feature_overrides(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Dictionary()); MutexLock lock(fd->mutex); @@ -2424,7 +2372,7 @@ Dictionary TextServerFallback::font_supported_feature_list(const RID &p_font_rid } Dictionary TextServerFallback::font_supported_variation_list(const RID &p_font_rid) const { - FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + FontFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, Dictionary()); MutexLock lock(fd->mutex); @@ -2630,6 +2578,31 @@ bool TextServerFallback::shaped_text_get_preserve_control(const RID &p_shaped) c return sd->preserve_control; } +void TextServerFallback::shaped_text_set_spacing(const RID &p_shaped, SpacingType p_spacing, int64_t p_value) { + ERR_FAIL_INDEX((int)p_spacing, 4); + ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_shaped); + ERR_FAIL_COND(!sd); + + MutexLock lock(sd->mutex); + if (sd->extra_spacing[p_spacing] != p_value) { + if (sd->parent != RID()) { + full_copy(sd); + } + sd->extra_spacing[p_spacing] = p_value; + invalidate(sd); + } +} + +int64_t TextServerFallback::shaped_text_get_spacing(const RID &p_shaped, SpacingType p_spacing) const { + ERR_FAIL_INDEX_V((int)p_spacing, 4, 0); + + const ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_shaped); + ERR_FAIL_COND_V(!sd, 0); + + MutexLock lock(sd->mutex); + return sd->extra_spacing[p_spacing]; +} + int64_t TextServerFallback::shaped_get_span_count(const RID &p_shaped) const { ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_shaped); ERR_FAIL_COND_V(!sd, 0); @@ -2912,6 +2885,9 @@ RID TextServerFallback::shaped_text_substr(const RID &p_shaped, int64_t p_start, new_sd->sort_valid = false; new_sd->upos = sd->upos; new_sd->uthk = sd->uthk; + for (int i = 0; i < TextServer::SPACING_MAX; i++) { + new_sd->extra_spacing[i] = sd->extra_spacing[i]; + } if (p_length > 0) { new_sd->text = sd->text.substr(p_start - sd->start, p_length); @@ -3289,7 +3265,7 @@ void TextServerFallback::shaped_text_overrun_trim_to_width(const RID &p_shaped_l int ellipsis_width = 0; if (add_ellipsis && whitespace_gl_font_rid.is_valid()) { - ellipsis_width = 3 * dot_adv.x + font_get_spacing(whitespace_gl_font_rid, last_gl_font_size, SPACING_GLYPH) + (cut_per_word ? whitespace_adv.x : 0); + ellipsis_width = 3 * dot_adv.x + sd->extra_spacing[SPACING_GLYPH] + (cut_per_word ? whitespace_adv.x : 0); } int ell_min_characters = 6; @@ -3491,10 +3467,13 @@ bool TextServerFallback::shaped_text_shape(const RID &p_shaped) { sd->descent = MAX(sd->descent, Math::round(font_get_glyph_advance(gl.font_rid, gl.font_size, gl.index).x * 0.5)); } } - if (font_get_spacing(gl.font_rid, gl.font_size, TextServer::SPACING_SPACE) && is_whitespace(sd->text[j - sd->start])) { - gl.advance += font_get_spacing(gl.font_rid, gl.font_size, TextServer::SPACING_SPACE); - } else { - gl.advance += font_get_spacing(gl.font_rid, gl.font_size, TextServer::SPACING_GLYPH); + if (j < sd->end - 1) { + // Do not add extra spacing to the last glyph of the string. + if (is_whitespace(sd->text[j - sd->start])) { + gl.advance += sd->extra_spacing[SPACING_SPACE]; + } else { + gl.advance += sd->extra_spacing[SPACING_GLYPH]; + } } sd->upos = MAX(sd->upos, font_get_underline_position(gl.font_rid, gl.font_size)); sd->uthk = MAX(sd->uthk, font_get_underline_thickness(gl.font_rid, gl.font_size)); @@ -3621,9 +3600,9 @@ Size2 TextServerFallback::shaped_text_get_size(const RID &p_shaped) const { const_cast<TextServerFallback *>(this)->shaped_text_shape(p_shaped); } if (sd->orientation == TextServer::ORIENTATION_HORIZONTAL) { - return Size2(sd->width, sd->ascent + sd->descent).ceil(); + return Size2(sd->width, sd->ascent + sd->descent + sd->extra_spacing[SPACING_TOP] + sd->extra_spacing[SPACING_BOTTOM]).ceil(); } else { - return Size2(sd->ascent + sd->descent, sd->width).ceil(); + return Size2(sd->ascent + sd->descent + sd->extra_spacing[SPACING_TOP] + sd->extra_spacing[SPACING_BOTTOM], sd->width).ceil(); } } @@ -3635,7 +3614,7 @@ double TextServerFallback::shaped_text_get_ascent(const RID &p_shaped) const { if (!sd->valid) { const_cast<TextServerFallback *>(this)->shaped_text_shape(p_shaped); } - return sd->ascent; + return sd->ascent + sd->extra_spacing[SPACING_TOP]; } double TextServerFallback::shaped_text_get_descent(const RID &p_shaped) const { @@ -3646,7 +3625,7 @@ double TextServerFallback::shaped_text_get_descent(const RID &p_shaped) const { if (!sd->valid) { const_cast<TextServerFallback *>(this)->shaped_text_shape(p_shaped); } - return sd->descent; + return sd->descent + sd->extra_spacing[SPACING_BOTTOM]; } double TextServerFallback::shaped_text_get_width(const RID &p_shaped) const { diff --git a/modules/text_server_fb/text_server_fb.h b/modules/text_server_fb/text_server_fb.h index e4c81aed5b..8b10c9e99e 100644 --- a/modules/text_server_fb/text_server_fb.h +++ b/modules/text_server_fb/text_server_fb.h @@ -144,7 +144,7 @@ class TextServerFallback : public TextServerExtension { Vector2 advance; }; - struct FontDataForSizeFallback { + struct FontForSizeFallback { double ascent = 0.0; double descent = 0.0; double underline_position = 0.0; @@ -152,9 +152,6 @@ class TextServerFallback : public TextServerExtension { double scale = 1.0; double oversampling = 1.0; - int spacing_glyph = 0; - int spacing_space = 0; - Vector2i size; Vector<FontTexture> textures; @@ -166,7 +163,7 @@ class TextServerFallback : public TextServerExtension { FT_StreamRec stream; #endif - ~FontDataForSizeFallback() { + ~FontForSizeFallback() { #ifdef MODULE_FREETYPE_ENABLED if (face != nullptr) { FT_Done_Face(face); @@ -175,7 +172,7 @@ class TextServerFallback : public TextServerExtension { } }; - struct FontDataFallback { + struct FontFallback { Mutex mutex; bool antialiased = true; @@ -196,7 +193,7 @@ class TextServerFallback : public TextServerExtension { String font_name; String style_name; - HashMap<Vector2i, FontDataForSizeFallback *, VariantHasher, VariantComparator> cache; + HashMap<Vector2i, FontForSizeFallback *, VariantHasher, VariantComparator> cache; bool face_init = false; Dictionary supported_varaitions; @@ -213,28 +210,28 @@ class TextServerFallback : public TextServerExtension { mutable ThreadWorkPool work_pool; - ~FontDataFallback() { + ~FontFallback() { work_pool.finish(); - for (const KeyValue<Vector2i, FontDataForSizeFallback *> &E : cache) { + for (const KeyValue<Vector2i, FontForSizeFallback *> &E : cache) { memdelete(E.value); } cache.clear(); } }; - _FORCE_INLINE_ FontTexturePosition find_texture_pos_for_glyph(FontDataForSizeFallback *p_data, int p_color_size, Image::Format p_image_format, int p_width, int p_height, bool p_msdf) const; + _FORCE_INLINE_ FontTexturePosition find_texture_pos_for_glyph(FontForSizeFallback *p_data, int p_color_size, Image::Format p_image_format, int p_width, int p_height, bool p_msdf) const; #ifdef MODULE_MSDFGEN_ENABLED - _FORCE_INLINE_ FontGlyph rasterize_msdf(FontDataFallback *p_font_data, FontDataForSizeFallback *p_data, int p_pixel_range, int p_rect_margin, FT_Outline *outline, const Vector2 &advance) const; + _FORCE_INLINE_ FontGlyph rasterize_msdf(FontFallback *p_font_data, FontForSizeFallback *p_data, int p_pixel_range, int p_rect_margin, FT_Outline *outline, const Vector2 &advance) const; #endif #ifdef MODULE_FREETYPE_ENABLED - _FORCE_INLINE_ FontGlyph rasterize_bitmap(FontDataForSizeFallback *p_data, int p_rect_margin, FT_Bitmap bitmap, int yofs, int xofs, const Vector2 &advance) const; + _FORCE_INLINE_ FontGlyph rasterize_bitmap(FontForSizeFallback *p_data, int p_rect_margin, FT_Bitmap bitmap, int yofs, int xofs, const Vector2 &advance) const; #endif - _FORCE_INLINE_ bool _ensure_glyph(FontDataFallback *p_font_data, const Vector2i &p_size, int32_t p_glyph) const; - _FORCE_INLINE_ bool _ensure_cache_for_size(FontDataFallback *p_font_data, const Vector2i &p_size) const; - _FORCE_INLINE_ void _font_clear_cache(FontDataFallback *p_font_data); + _FORCE_INLINE_ bool _ensure_glyph(FontFallback *p_font_data, const Vector2i &p_size, int32_t p_glyph) const; + _FORCE_INLINE_ bool _ensure_cache_for_size(FontFallback *p_font_data, const Vector2i &p_size) const; + _FORCE_INLINE_ void _font_clear_cache(FontFallback *p_font_data); void _generateMTSDF_threaded(uint32_t y, void *p_td) const; - _FORCE_INLINE_ Vector2i _get_size(const FontDataFallback *p_font_data, int p_size) const { + _FORCE_INLINE_ Vector2i _get_size(const FontFallback *p_font_data, int p_size) const { if (p_font_data->msdf) { return Vector2i(p_font_data->msdf_source_size, 0); } else if (p_font_data->fixed_size > 0) { @@ -244,7 +241,7 @@ class TextServerFallback : public TextServerExtension { } } - _FORCE_INLINE_ Vector2i _get_size_outline(const FontDataFallback *p_font_data, const Vector2i &p_size) const { + _FORCE_INLINE_ Vector2i _get_size_outline(const FontFallback *p_font_data, const Vector2i &p_size) const { if (p_font_data->msdf) { return Vector2i(p_font_data->msdf_source_size, 0); } else if (p_font_data->fixed_size > 0) { @@ -312,6 +309,7 @@ class TextServerFallback : public TextServerExtension { double descent = 0.0; // Descent for horizontal layout, 1/2 of width for vertical. double width = 0.0; // Width for horizontal layout, height for vertical. double width_trimmed = 0.0; + int extra_spacing[4] = { 0, 0, 0, 0 }; double upos = 0.0; double uthk = 0.0; @@ -326,7 +324,7 @@ class TextServerFallback : public TextServerExtension { // Common data. double oversampling = 1.0; - mutable RID_PtrOwner<FontDataFallback> font_owner; + mutable RID_PtrOwner<FontFallback> font_owner; mutable RID_PtrOwner<ShapedTextDataFallback> shaped_owner; void _realign(ShapedTextDataFallback *p_sd) const; @@ -437,9 +435,6 @@ public: virtual void font_set_scale(const RID &p_font_rid, int64_t p_size, double p_scale) override; virtual double font_get_scale(const RID &p_font_rid, int64_t p_size) const override; - virtual void font_set_spacing(const RID &p_font_rid, int64_t p_size, SpacingType p_spacing, int64_t p_value) override; - virtual int64_t font_get_spacing(const RID &p_font_rid, int64_t p_size, SpacingType p_spacing) const override; - virtual int64_t font_get_texture_count(const RID &p_font_rid, const Vector2i &p_size) const override; virtual void font_clear_textures(const RID &p_font_rid, const Vector2i &p_size) override; virtual void font_remove_texture(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) override; @@ -536,6 +531,9 @@ public: virtual void shaped_text_set_preserve_control(const RID &p_shaped, bool p_enabled) override; virtual bool shaped_text_get_preserve_control(const RID &p_shaped) const override; + virtual void shaped_text_set_spacing(const RID &p_shaped, SpacingType p_spacing, int64_t p_value) override; + virtual int64_t shaped_text_get_spacing(const RID &p_shaped, SpacingType p_spacing) const override; + virtual bool shaped_text_add_string(const RID &p_shaped, const String &p_text, const Array &p_fonts, int64_t p_size, const Dictionary &p_opentype_features = Dictionary(), const String &p_language = "", const Variant &p_meta = Variant()) override; virtual bool shaped_text_add_object(const RID &p_shaped, const Variant &p_key, const Size2 &p_size, InlineAlignment p_inline_align = INLINE_ALIGNMENT_CENTER, int64_t p_length = 1) override; virtual bool shaped_text_resize_object(const RID &p_shaped, const Variant &p_key, const Size2 &p_size, InlineAlignment p_inline_align = INLINE_ALIGNMENT_CENTER) override; |