[TextServer] Store font extra spacing variations without making a full copy of font.
This commit is contained in:
parent
ec62b8a3ee
commit
4a167fc740
12 changed files with 411 additions and 268 deletions
|
@ -15,6 +15,13 @@
|
|||
Creates a new, empty font cache entry resource. To free the resulting resource, use the [method free_rid] method.
|
||||
</description>
|
||||
</method>
|
||||
<method name="create_font_linked_variation">
|
||||
<return type="RID" />
|
||||
<param index="0" name="font_rid" type="RID" />
|
||||
<description>
|
||||
Creates a new variation existing font which is reusing the same glyph cache and font data. To free the resulting resource, use the [method free_rid] method.
|
||||
</description>
|
||||
</method>
|
||||
<method name="create_shaped_text">
|
||||
<return type="RID" />
|
||||
<param index="0" name="direction" type="int" enum="TextServer.Direction" default="0" />
|
||||
|
|
|
@ -19,6 +19,12 @@
|
|||
<description>
|
||||
</description>
|
||||
</method>
|
||||
<method name="_create_font_linked_variation" qualifiers="virtual">
|
||||
<return type="RID" />
|
||||
<param index="0" name="font_rid" type="RID" />
|
||||
<description>
|
||||
</description>
|
||||
</method>
|
||||
<method name="_create_shaped_text" qualifiers="virtual">
|
||||
<return type="RID" />
|
||||
<param index="0" name="direction" type="int" enum="TextServer.Direction" />
|
||||
|
|
|
@ -397,6 +397,14 @@ void TextServerAdvanced::_free_rid(const RID &p_rid) {
|
|||
font_owner.free(p_rid);
|
||||
}
|
||||
memdelete(fd);
|
||||
} else if (font_var_owner.owns(p_rid)) {
|
||||
MutexLock ftlock(ft_mutex);
|
||||
|
||||
FontAdvancedLinkedVariation *fdv = font_var_owner.get_or_null(p_rid);
|
||||
{
|
||||
font_var_owner.free(p_rid);
|
||||
}
|
||||
memdelete(fdv);
|
||||
} else if (shaped_owner.owns(p_rid)) {
|
||||
ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_rid);
|
||||
{
|
||||
|
@ -409,7 +417,7 @@ void TextServerAdvanced::_free_rid(const RID &p_rid) {
|
|||
|
||||
bool TextServerAdvanced::_has(const RID &p_rid) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
return font_owner.owns(p_rid) || shaped_owner.owns(p_rid);
|
||||
return font_owner.owns(p_rid) || font_var_owner.owns(p_rid) || shaped_owner.owns(p_rid);
|
||||
}
|
||||
|
||||
bool TextServerAdvanced::_load_support_data(const String &p_filename) {
|
||||
|
@ -1809,7 +1817,7 @@ _FORCE_INLINE_ void TextServerAdvanced::_font_clear_cache(FontAdvanced *p_font_d
|
|||
}
|
||||
|
||||
hb_font_t *TextServerAdvanced::_font_get_hb_handle(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, nullptr);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1828,8 +1836,24 @@ RID TextServerAdvanced::_create_font() {
|
|||
return font_owner.make_rid(fd);
|
||||
}
|
||||
|
||||
RID TextServerAdvanced::_create_font_linked_variation(const RID &p_font_rid) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
RID rid = p_font_rid;
|
||||
FontAdvancedLinkedVariation *fdv = font_var_owner.get_or_null(rid);
|
||||
if (unlikely(fdv)) {
|
||||
rid = fdv->base_font;
|
||||
}
|
||||
ERR_FAIL_COND_V(!font_owner.owns(rid), RID());
|
||||
|
||||
FontAdvancedLinkedVariation *new_fdv = memnew(FontAdvancedLinkedVariation);
|
||||
new_fdv->base_font = rid;
|
||||
|
||||
return font_var_owner.make_rid(new_fdv);
|
||||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1840,7 +1864,7 @@ void TextServerAdvanced::_font_set_data(const RID &p_font_rid, const PackedByteA
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1854,7 +1878,7 @@ void TextServerAdvanced::_font_set_face_index(const RID &p_font_rid, int64_t p_f
|
|||
ERR_FAIL_COND(p_face_index < 0);
|
||||
ERR_FAIL_COND(p_face_index >= 0x7FFF);
|
||||
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1865,7 +1889,7 @@ void TextServerAdvanced::_font_set_face_index(const RID &p_font_rid, int64_t p_f
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_face_index(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1873,7 +1897,7 @@ int64_t TextServerAdvanced::_font_get_face_index(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_face_count(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1919,7 +1943,7 @@ int64_t TextServerAdvanced::_font_get_face_count(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_style(const RID &p_font_rid, BitField<FontStyle> p_style) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1929,7 +1953,7 @@ void TextServerAdvanced::_font_set_style(const RID &p_font_rid, BitField<FontSty
|
|||
}
|
||||
|
||||
BitField<TextServer::FontStyle> TextServerAdvanced::_font_get_style(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1939,7 +1963,7 @@ BitField<TextServer::FontStyle> TextServerAdvanced::_font_get_style(const RID &p
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_style_name(const RID &p_font_rid, const String &p_name) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1949,7 +1973,7 @@ void TextServerAdvanced::_font_set_style_name(const RID &p_font_rid, const Strin
|
|||
}
|
||||
|
||||
String TextServerAdvanced::_font_get_style_name(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1959,7 +1983,7 @@ String TextServerAdvanced::_font_get_style_name(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_weight(const RID &p_font_rid, int64_t p_weight) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1969,7 +1993,7 @@ void TextServerAdvanced::_font_set_weight(const RID &p_font_rid, int64_t p_weigh
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_weight(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 400);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1979,7 +2003,7 @@ int64_t TextServerAdvanced::_font_get_weight(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_stretch(const RID &p_font_rid, int64_t p_stretch) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1989,7 +2013,7 @@ void TextServerAdvanced::_font_set_stretch(const RID &p_font_rid, int64_t p_stre
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_stretch(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 100);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1999,7 +2023,7 @@ int64_t TextServerAdvanced::_font_get_stretch(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_name(const RID &p_font_rid, const String &p_name) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2009,7 +2033,7 @@ void TextServerAdvanced::_font_set_name(const RID &p_font_rid, const String &p_n
|
|||
}
|
||||
|
||||
String TextServerAdvanced::_font_get_name(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2019,7 +2043,7 @@ String TextServerAdvanced::_font_get_name(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_get_ot_name_strings(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2132,7 +2156,7 @@ Dictionary TextServerAdvanced::_font_get_ot_name_strings(const RID &p_font_rid)
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_antialiasing(const RID &p_font_rid, TextServer::FontAntialiasing p_antialiasing) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2143,7 +2167,7 @@ void TextServerAdvanced::_font_set_antialiasing(const RID &p_font_rid, TextServe
|
|||
}
|
||||
|
||||
TextServer::FontAntialiasing TextServerAdvanced::_font_get_antialiasing(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TextServer::FONT_ANTIALIASING_NONE);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2151,7 +2175,7 @@ TextServer::FontAntialiasing TextServerAdvanced::_font_get_antialiasing(const RI
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_generate_mipmaps(const RID &p_font_rid, bool p_generate_mipmaps) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2167,7 +2191,7 @@ void TextServerAdvanced::_font_set_generate_mipmaps(const RID &p_font_rid, bool
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_get_generate_mipmaps(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2175,7 +2199,7 @@ bool TextServerAdvanced::_font_get_generate_mipmaps(const RID &p_font_rid) const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_multichannel_signed_distance_field(const RID &p_font_rid, bool p_msdf) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2186,7 +2210,7 @@ void TextServerAdvanced::_font_set_multichannel_signed_distance_field(const RID
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_is_multichannel_signed_distance_field(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2194,7 +2218,7 @@ bool TextServerAdvanced::_font_is_multichannel_signed_distance_field(const RID &
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_msdf_pixel_range(const RID &p_font_rid, int64_t p_msdf_pixel_range) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2205,7 +2229,7 @@ void TextServerAdvanced::_font_set_msdf_pixel_range(const RID &p_font_rid, int64
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_msdf_pixel_range(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2213,7 +2237,7 @@ int64_t TextServerAdvanced::_font_get_msdf_pixel_range(const RID &p_font_rid) co
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_msdf_size(const RID &p_font_rid, int64_t p_msdf_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2224,7 +2248,7 @@ void TextServerAdvanced::_font_set_msdf_size(const RID &p_font_rid, int64_t p_ms
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_msdf_size(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2232,7 +2256,7 @@ int64_t TextServerAdvanced::_font_get_msdf_size(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_fixed_size(const RID &p_font_rid, int64_t p_fixed_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2240,7 +2264,7 @@ void TextServerAdvanced::_font_set_fixed_size(const RID &p_font_rid, int64_t p_f
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_fixed_size(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2248,7 +2272,7 @@ int64_t TextServerAdvanced::_font_get_fixed_size(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_allow_system_fallback(const RID &p_font_rid, bool p_allow_system_fallback) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2256,7 +2280,7 @@ void TextServerAdvanced::_font_set_allow_system_fallback(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_is_allow_system_fallback(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2264,7 +2288,7 @@ bool TextServerAdvanced::_font_is_allow_system_fallback(const RID &p_font_rid) c
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_force_autohinter(const RID &p_font_rid, bool p_force_autohinter) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2275,7 +2299,7 @@ void TextServerAdvanced::_font_set_force_autohinter(const RID &p_font_rid, bool
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_is_force_autohinter(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2283,7 +2307,7 @@ bool TextServerAdvanced::_font_is_force_autohinter(const RID &p_font_rid) const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_hinting(const RID &p_font_rid, TextServer::Hinting p_hinting) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2294,7 +2318,7 @@ void TextServerAdvanced::_font_set_hinting(const RID &p_font_rid, TextServer::Hi
|
|||
}
|
||||
|
||||
TextServer::Hinting TextServerAdvanced::_font_get_hinting(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, HINTING_NONE);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2302,7 +2326,7 @@ TextServer::Hinting TextServerAdvanced::_font_get_hinting(const RID &p_font_rid)
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_subpixel_positioning(const RID &p_font_rid, TextServer::SubpixelPositioning p_subpixel) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2310,7 +2334,7 @@ void TextServerAdvanced::_font_set_subpixel_positioning(const RID &p_font_rid, T
|
|||
}
|
||||
|
||||
TextServer::SubpixelPositioning TextServerAdvanced::_font_get_subpixel_positioning(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, SUBPIXEL_POSITIONING_DISABLED);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2318,7 +2342,7 @@ TextServer::SubpixelPositioning TextServerAdvanced::_font_get_subpixel_positioni
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_embolden(const RID &p_font_rid, double p_strength) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2329,7 +2353,7 @@ void TextServerAdvanced::_font_set_embolden(const RID &p_font_rid, double p_stre
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_embolden(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2338,29 +2362,38 @@ double TextServerAdvanced::_font_get_embolden(const RID &p_font_rid) const {
|
|||
|
||||
void TextServerAdvanced::_font_set_spacing(const RID &p_font_rid, SpacingType p_spacing, int64_t p_value) {
|
||||
ERR_FAIL_INDEX((int)p_spacing, 4);
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
FontAdvancedLinkedVariation *fdv = font_var_owner.get_or_null(p_font_rid);
|
||||
if (fdv) {
|
||||
if (fdv->extra_spacing[p_spacing] != p_value) {
|
||||
fdv->extra_spacing[p_spacing] = p_value;
|
||||
}
|
||||
} else {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
if (fd->extra_spacing[p_spacing] != p_value) {
|
||||
_font_clear_cache(fd);
|
||||
fd->extra_spacing[p_spacing] = p_value;
|
||||
MutexLock lock(fd->mutex);
|
||||
if (fd->extra_spacing[p_spacing] != p_value) {
|
||||
fd->extra_spacing[p_spacing] = p_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_spacing(const RID &p_font_rid, SpacingType p_spacing) const {
|
||||
ERR_FAIL_INDEX_V((int)p_spacing, 4, 0);
|
||||
FontAdvancedLinkedVariation *fdv = font_var_owner.get_or_null(p_font_rid);
|
||||
if (fdv) {
|
||||
return fdv->extra_spacing[p_spacing];
|
||||
} else {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
||||
return fd->extra_spacing[p_spacing];
|
||||
MutexLock lock(fd->mutex);
|
||||
return fd->extra_spacing[p_spacing];
|
||||
}
|
||||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_transform(const RID &p_font_rid, const Transform2D &p_transform) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2371,7 +2404,7 @@ void TextServerAdvanced::_font_set_transform(const RID &p_font_rid, const Transf
|
|||
}
|
||||
|
||||
Transform2D TextServerAdvanced::_font_get_transform(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Transform2D());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2379,7 +2412,7 @@ Transform2D TextServerAdvanced::_font_get_transform(const RID &p_font_rid) const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_variation_coordinates(const RID &p_font_rid, const Dictionary &p_variation_coordinates) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2390,7 +2423,7 @@ void TextServerAdvanced::_font_set_variation_coordinates(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_get_variation_coordinates(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2398,7 +2431,7 @@ Dictionary TextServerAdvanced::_font_get_variation_coordinates(const RID &p_font
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_oversampling(const RID &p_font_rid, double p_oversampling) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2409,7 +2442,7 @@ void TextServerAdvanced::_font_set_oversampling(const RID &p_font_rid, double p_
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_oversampling(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2417,7 +2450,7 @@ double TextServerAdvanced::_font_get_oversampling(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
TypedArray<Vector2i> TextServerAdvanced::_font_get_size_cache_list(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TypedArray<Vector2i>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2429,7 +2462,7 @@ TypedArray<Vector2i> TextServerAdvanced::_font_get_size_cache_list(const RID &p_
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_clear_size_cache(const RID &p_font_rid) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2441,7 +2474,7 @@ void TextServerAdvanced::_font_clear_size_cache(const RID &p_font_rid) {
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_size_cache(const RID &p_font_rid, const Vector2i &p_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2453,7 +2486,7 @@ void TextServerAdvanced::_font_remove_size_cache(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_ascent(const RID &p_font_rid, int64_t p_size, double p_ascent) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2464,7 +2497,7 @@ void TextServerAdvanced::_font_set_ascent(const RID &p_font_rid, int64_t p_size,
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_ascent(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2480,7 +2513,7 @@ double TextServerAdvanced::_font_get_ascent(const RID &p_font_rid, int64_t p_siz
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_descent(const RID &p_font_rid, int64_t p_size, double p_descent) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
Vector2i size = _get_size(fd, p_size);
|
||||
|
@ -2490,7 +2523,7 @@ void TextServerAdvanced::_font_set_descent(const RID &p_font_rid, int64_t p_size
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_descent(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2506,7 +2539,7 @@ double TextServerAdvanced::_font_get_descent(const RID &p_font_rid, int64_t p_si
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_underline_position(const RID &p_font_rid, int64_t p_size, double p_underline_position) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2517,7 +2550,7 @@ void TextServerAdvanced::_font_set_underline_position(const RID &p_font_rid, int
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_underline_position(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2533,7 +2566,7 @@ double TextServerAdvanced::_font_get_underline_position(const RID &p_font_rid, i
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_underline_thickness(const RID &p_font_rid, int64_t p_size, double p_underline_thickness) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2544,7 +2577,7 @@ void TextServerAdvanced::_font_set_underline_thickness(const RID &p_font_rid, in
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_underline_thickness(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2560,7 +2593,7 @@ double TextServerAdvanced::_font_get_underline_thickness(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_scale(const RID &p_font_rid, int64_t p_size, double p_scale) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2576,7 +2609,7 @@ void TextServerAdvanced::_font_set_scale(const RID &p_font_rid, int64_t p_size,
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_font_get_scale(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2592,7 +2625,7 @@ double TextServerAdvanced::_font_get_scale(const RID &p_font_rid, int64_t p_size
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_texture_count(const RID &p_font_rid, const Vector2i &p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2604,7 +2637,7 @@ int64_t TextServerAdvanced::_font_get_texture_count(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_clear_textures(const RID &p_font_rid, const Vector2i &p_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
MutexLock lock(fd->mutex);
|
||||
Vector2i size = _get_size_outline(fd, p_size);
|
||||
|
@ -2614,7 +2647,7 @@ void TextServerAdvanced::_font_clear_textures(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_texture(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2626,7 +2659,7 @@ void TextServerAdvanced::_font_remove_texture(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_texture_image(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index, const Ref<Image> &p_image) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
ERR_FAIL_COND(p_image.is_null());
|
||||
|
||||
|
@ -2655,7 +2688,7 @@ void TextServerAdvanced::_font_set_texture_image(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
Ref<Image> TextServerAdvanced::_font_get_texture_image(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Ref<Image>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2669,7 +2702,7 @@ Ref<Image> TextServerAdvanced::_font_get_texture_image(const RID &p_font_rid, co
|
|||
|
||||
void TextServerAdvanced::_font_set_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index, const PackedInt32Array &p_offsets) {
|
||||
ERR_FAIL_COND(p_offsets.size() % 4 != 0);
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2688,7 +2721,7 @@ void TextServerAdvanced::_font_set_texture_offsets(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
PackedInt32Array TextServerAdvanced::_font_get_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedInt32Array());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2713,7 +2746,7 @@ PackedInt32Array TextServerAdvanced::_font_get_texture_offsets(const RID &p_font
|
|||
}
|
||||
|
||||
PackedInt32Array TextServerAdvanced::_font_get_glyph_list(const RID &p_font_rid, const Vector2i &p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedInt32Array());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2729,7 +2762,7 @@ PackedInt32Array TextServerAdvanced::_font_get_glyph_list(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_clear_glyphs(const RID &p_font_rid, const Vector2i &p_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2740,7 +2773,7 @@ void TextServerAdvanced::_font_clear_glyphs(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2751,7 +2784,7 @@ void TextServerAdvanced::_font_remove_glyph(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
double TextServerAdvanced::_get_extra_advance(RID p_font_rid, int p_font_size) const {
|
||||
const FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
const FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2765,7 +2798,7 @@ double TextServerAdvanced::_get_extra_advance(RID p_font_rid, int p_font_size) c
|
|||
}
|
||||
|
||||
Vector2 TextServerAdvanced::_font_get_glyph_advance(const RID &p_font_rid, int64_t p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2803,7 +2836,7 @@ Vector2 TextServerAdvanced::_font_get_glyph_advance(const RID &p_font_rid, int64
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_glyph_advance(const RID &p_font_rid, int64_t p_size, int64_t p_glyph, const Vector2 &p_advance) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2818,7 +2851,7 @@ void TextServerAdvanced::_font_set_glyph_advance(const RID &p_font_rid, int64_t
|
|||
}
|
||||
|
||||
Vector2 TextServerAdvanced::_font_get_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2848,7 +2881,7 @@ Vector2 TextServerAdvanced::_font_get_glyph_offset(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_offset) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2863,7 +2896,7 @@ void TextServerAdvanced::_font_set_glyph_offset(const RID &p_font_rid, const Vec
|
|||
}
|
||||
|
||||
Vector2 TextServerAdvanced::_font_get_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2893,7 +2926,7 @@ Vector2 TextServerAdvanced::_font_get_glyph_size(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_gl_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2908,7 +2941,7 @@ void TextServerAdvanced::_font_set_glyph_size(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
Rect2 TextServerAdvanced::_font_get_glyph_uv_rect(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Rect2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2933,7 +2966,7 @@ Rect2 TextServerAdvanced::_font_get_glyph_uv_rect(const RID &p_font_rid, const V
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_glyph_uv_rect(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Rect2 &p_uv_rect) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2948,7 +2981,7 @@ void TextServerAdvanced::_font_set_glyph_uv_rect(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_glyph_texture_idx(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, -1);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2973,7 +3006,7 @@ int64_t TextServerAdvanced::_font_get_glyph_texture_idx(const RID &p_font_rid, c
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_glyph_texture_idx(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, int64_t p_texture_idx) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2988,7 +3021,7 @@ void TextServerAdvanced::_font_set_glyph_texture_idx(const RID &p_font_rid, cons
|
|||
}
|
||||
|
||||
RID TextServerAdvanced::_font_get_glyph_texture_rid(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, RID());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3034,7 +3067,7 @@ RID TextServerAdvanced::_font_get_glyph_texture_rid(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
Size2 TextServerAdvanced::_font_get_glyph_texture_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Size2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3080,7 +3113,7 @@ Size2 TextServerAdvanced::_font_get_glyph_texture_size(const RID &p_font_rid, co
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_get_glyph_contours(const RID &p_font_rid, int64_t p_size, int64_t p_index) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3130,7 +3163,7 @@ Dictionary TextServerAdvanced::_font_get_glyph_contours(const RID &p_font_rid, i
|
|||
}
|
||||
|
||||
TypedArray<Vector2i> TextServerAdvanced::_font_get_kerning_list(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TypedArray<Vector2i>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3146,7 +3179,7 @@ TypedArray<Vector2i> TextServerAdvanced::_font_get_kerning_list(const RID &p_fon
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_clear_kerning_map(const RID &p_font_rid, int64_t p_size) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3157,7 +3190,7 @@ void TextServerAdvanced::_font_clear_kerning_map(const RID &p_font_rid, int64_t
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3168,7 +3201,7 @@ void TextServerAdvanced::_font_remove_kerning(const RID &p_font_rid, int64_t p_s
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair, const Vector2 &p_kerning) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3179,7 +3212,7 @@ void TextServerAdvanced::_font_set_kerning(const RID &p_font_rid, int64_t p_size
|
|||
}
|
||||
|
||||
Vector2 TextServerAdvanced::_font_get_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3212,7 +3245,7 @@ Vector2 TextServerAdvanced::_font_get_kerning(const RID &p_font_rid, int64_t p_s
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_glyph_index(const RID &p_font_rid, int64_t p_size, int64_t p_char, int64_t p_variation_selector) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
ERR_FAIL_COND_V_MSG((p_char >= 0xd800 && p_char <= 0xdfff) || (p_char > 0x10ffff), 0, "Unicode parsing error: Invalid unicode codepoint " + String::num_int64(p_char, 16) + ".");
|
||||
ERR_FAIL_COND_V_MSG((p_variation_selector >= 0xd800 && p_variation_selector <= 0xdfff) || (p_variation_selector > 0x10ffff), 0, "Unicode parsing error: Invalid unicode codepoint " + String::num_int64(p_variation_selector, 16) + ".");
|
||||
|
@ -3237,7 +3270,7 @@ int64_t TextServerAdvanced::_font_get_glyph_index(const RID &p_font_rid, int64_t
|
|||
}
|
||||
|
||||
int64_t TextServerAdvanced::_font_get_char_from_glyph_index(const RID &p_font_rid, int64_t p_size, int64_t p_glyph_index) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3268,7 +3301,7 @@ int64_t TextServerAdvanced::_font_get_char_from_glyph_index(const RID &p_font_ri
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_has_char(const RID &p_font_rid, int64_t p_char) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
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) + ".");
|
||||
if (!fd) {
|
||||
return false;
|
||||
|
@ -3289,7 +3322,7 @@ bool TextServerAdvanced::_font_has_char(const RID &p_font_rid, int64_t p_char) c
|
|||
}
|
||||
|
||||
String TextServerAdvanced::_font_get_supported_chars(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3322,7 +3355,7 @@ String TextServerAdvanced::_font_get_supported_chars(const RID &p_font_rid) cons
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_render_range(const RID &p_font_rid, const Vector2i &p_size, int64_t p_start, int64_t p_end) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(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) + ".");
|
||||
|
@ -3357,7 +3390,7 @@ void TextServerAdvanced::_font_render_range(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_render_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_index) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3388,7 +3421,7 @@ void TextServerAdvanced::_font_render_glyph(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_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 {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3480,7 +3513,7 @@ void TextServerAdvanced::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_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 {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3572,7 +3605,7 @@ void TextServerAdvanced::_font_draw_glyph_outline(const RID &p_font_rid, const R
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_is_language_supported(const RID &p_font_rid, const String &p_language) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3584,7 +3617,7 @@ bool TextServerAdvanced::_font_is_language_supported(const RID &p_font_rid, cons
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_language_support_override(const RID &p_font_rid, const String &p_language, bool p_supported) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3592,7 +3625,7 @@ void TextServerAdvanced::_font_set_language_support_override(const RID &p_font_r
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_get_language_support_override(const RID &p_font_rid, const String &p_language) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3600,7 +3633,7 @@ bool TextServerAdvanced::_font_get_language_support_override(const RID &p_font_r
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_language_support_override(const RID &p_font_rid, const String &p_language) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3608,7 +3641,7 @@ void TextServerAdvanced::_font_remove_language_support_override(const RID &p_fon
|
|||
}
|
||||
|
||||
PackedStringArray TextServerAdvanced::_font_get_language_support_overrides(const RID &p_font_rid) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedStringArray());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3620,7 +3653,7 @@ PackedStringArray TextServerAdvanced::_font_get_language_support_overrides(const
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_is_script_supported(const RID &p_font_rid, const String &p_script) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3634,7 +3667,7 @@ bool TextServerAdvanced::_font_is_script_supported(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_script_support_override(const RID &p_font_rid, const String &p_script, bool p_supported) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3642,7 +3675,7 @@ void TextServerAdvanced::_font_set_script_support_override(const RID &p_font_rid
|
|||
}
|
||||
|
||||
bool TextServerAdvanced::_font_get_script_support_override(const RID &p_font_rid, const String &p_script) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3650,7 +3683,7 @@ bool TextServerAdvanced::_font_get_script_support_override(const RID &p_font_rid
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_remove_script_support_override(const RID &p_font_rid, const String &p_script) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3658,7 +3691,7 @@ void TextServerAdvanced::_font_remove_script_support_override(const RID &p_font_
|
|||
}
|
||||
|
||||
PackedStringArray TextServerAdvanced::_font_get_script_support_overrides(const RID &p_font_rid) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedStringArray());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3670,7 +3703,7 @@ PackedStringArray TextServerAdvanced::_font_get_script_support_overrides(const R
|
|||
}
|
||||
|
||||
void TextServerAdvanced::_font_set_opentype_feature_overrides(const RID &p_font_rid, const Dictionary &p_overrides) {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3680,7 +3713,7 @@ void TextServerAdvanced::_font_set_opentype_feature_overrides(const RID &p_font_
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_get_opentype_feature_overrides(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3688,7 +3721,7 @@ Dictionary TextServerAdvanced::_font_get_opentype_feature_overrides(const RID &p
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_supported_feature_list(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -3698,7 +3731,7 @@ Dictionary TextServerAdvanced::_font_supported_feature_list(const RID &p_font_ri
|
|||
}
|
||||
|
||||
Dictionary TextServerAdvanced::_font_supported_variation_list(const RID &p_font_rid) const {
|
||||
FontAdvanced *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontAdvanced *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -4051,7 +4084,7 @@ bool TextServerAdvanced::_shaped_text_add_string(const RID &p_shaped, const Stri
|
|||
|
||||
MutexLock lock(sd->mutex);
|
||||
for (int i = 0; i < p_fonts.size(); i++) {
|
||||
ERR_FAIL_COND_V(!font_owner.get_or_null(p_fonts[i]), false);
|
||||
ERR_FAIL_COND_V(!_get_font_data(p_fonts[i]), false);
|
||||
}
|
||||
|
||||
if (p_text.is_empty()) {
|
||||
|
@ -5633,7 +5666,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star
|
|||
return;
|
||||
}
|
||||
|
||||
FontAdvanced *fd = font_owner.get_or_null(f);
|
||||
FontAdvanced *fd = _get_font_data(f);
|
||||
ERR_FAIL_NULL(fd);
|
||||
MutexLock lock(fd->mutex);
|
||||
|
||||
|
|
|
@ -293,6 +293,11 @@ class TextServerAdvanced : public TextServerExtension {
|
|||
}
|
||||
};
|
||||
|
||||
struct FontAdvancedLinkedVariation {
|
||||
RID base_font;
|
||||
int extra_spacing[4] = { 0, 0, 0, 0 };
|
||||
};
|
||||
|
||||
struct FontAdvanced {
|
||||
Mutex mutex;
|
||||
|
||||
|
@ -534,9 +539,19 @@ class TextServerAdvanced : public TextServerExtension {
|
|||
// Common data.
|
||||
|
||||
double oversampling = 1.0;
|
||||
mutable RID_PtrOwner<FontAdvancedLinkedVariation> font_var_owner;
|
||||
mutable RID_PtrOwner<FontAdvanced> font_owner;
|
||||
mutable RID_PtrOwner<ShapedTextDataAdvanced> shaped_owner;
|
||||
|
||||
_FORCE_INLINE_ FontAdvanced *_get_font_data(const RID &p_font_rid) const {
|
||||
RID rid = p_font_rid;
|
||||
FontAdvancedLinkedVariation *fdv = font_var_owner.get_or_null(rid);
|
||||
if (unlikely(fdv)) {
|
||||
rid = fdv->base_font;
|
||||
}
|
||||
return font_owner.get_or_null(rid);
|
||||
}
|
||||
|
||||
struct SystemFontKey {
|
||||
String font_name;
|
||||
TextServer::FontAntialiasing antialiasing = TextServer::FONT_ANTIALIASING_GRAY;
|
||||
|
@ -704,6 +719,7 @@ public:
|
|||
/* Font interface */
|
||||
|
||||
MODBIND0R(RID, create_font);
|
||||
MODBIND1R(RID, create_font_linked_variation, const RID &);
|
||||
|
||||
MODBIND2(font_set_data, const RID &, const PackedByteArray &);
|
||||
MODBIND3(font_set_data_ptr, const RID &, const uint8_t *, int64_t);
|
||||
|
|
|
@ -123,6 +123,14 @@ void TextServerFallback::_free_rid(const RID &p_rid) {
|
|||
font_owner.free(p_rid);
|
||||
}
|
||||
memdelete(fd);
|
||||
} else if (font_var_owner.owns(p_rid)) {
|
||||
MutexLock ftlock(ft_mutex);
|
||||
|
||||
FontFallbackLinkedVariation *fdv = font_var_owner.get_or_null(p_rid);
|
||||
{
|
||||
font_var_owner.free(p_rid);
|
||||
}
|
||||
memdelete(fdv);
|
||||
} else if (shaped_owner.owns(p_rid)) {
|
||||
ShapedTextDataFallback *sd = shaped_owner.get_or_null(p_rid);
|
||||
{
|
||||
|
@ -935,8 +943,24 @@ RID TextServerFallback::_create_font() {
|
|||
return font_owner.make_rid(fd);
|
||||
}
|
||||
|
||||
RID TextServerFallback::_create_font_linked_variation(const RID &p_font_rid) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
RID rid = p_font_rid;
|
||||
FontFallbackLinkedVariation *fdv = font_var_owner.get_or_null(rid);
|
||||
if (unlikely(fdv)) {
|
||||
rid = fdv->base_font;
|
||||
}
|
||||
ERR_FAIL_COND_V(!font_owner.owns(rid), RID());
|
||||
|
||||
FontFallbackLinkedVariation *new_fdv = memnew(FontFallbackLinkedVariation);
|
||||
new_fdv->base_font = rid;
|
||||
|
||||
return font_var_owner.make_rid(new_fdv);
|
||||
}
|
||||
|
||||
void TextServerFallback::_font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -947,7 +971,7 @@ void TextServerFallback::_font_set_data(const RID &p_font_rid, const PackedByteA
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -958,7 +982,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, BitField<FontStyle> p_style) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -971,7 +995,7 @@ void TextServerFallback::_font_set_face_index(const RID &p_font_rid, int64_t p_f
|
|||
ERR_FAIL_COND(p_face_index < 0);
|
||||
ERR_FAIL_COND(p_face_index >= 0x7FFF);
|
||||
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -982,7 +1006,7 @@ void TextServerFallback::_font_set_face_index(const RID &p_font_rid, int64_t p_f
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_face_index(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -990,7 +1014,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1036,7 +1060,7 @@ int64_t TextServerFallback::_font_get_face_count(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
BitField<TextServer::FontStyle> TextServerFallback::_font_get_style(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1046,7 +1070,7 @@ BitField<TextServer::FontStyle> TextServerFallback::_font_get_style(const RID &p
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_style_name(const RID &p_font_rid, const String &p_name) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1056,7 +1080,7 @@ void TextServerFallback::_font_set_style_name(const RID &p_font_rid, const Strin
|
|||
}
|
||||
|
||||
String TextServerFallback::_font_get_style_name(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1066,7 +1090,7 @@ String TextServerFallback::_font_get_style_name(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_weight(const RID &p_font_rid, int64_t p_weight) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1076,7 +1100,7 @@ void TextServerFallback::_font_set_weight(const RID &p_font_rid, int64_t p_weigh
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_weight(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 400);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1086,7 +1110,7 @@ int64_t TextServerFallback::_font_get_weight(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_stretch(const RID &p_font_rid, int64_t p_stretch) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1096,7 +1120,7 @@ void TextServerFallback::_font_set_stretch(const RID &p_font_rid, int64_t p_stre
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_stretch(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 100);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1106,7 +1130,7 @@ int64_t TextServerFallback::_font_get_stretch(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_name(const RID &p_font_rid, const String &p_name) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1116,7 +1140,7 @@ void TextServerFallback::_font_set_name(const RID &p_font_rid, const String &p_n
|
|||
}
|
||||
|
||||
String TextServerFallback::_font_get_name(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1126,7 +1150,7 @@ String TextServerFallback::_font_get_name(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_antialiasing(const RID &p_font_rid, TextServer::FontAntialiasing p_antialiasing) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1137,7 +1161,7 @@ void TextServerFallback::_font_set_antialiasing(const RID &p_font_rid, TextServe
|
|||
}
|
||||
|
||||
TextServer::FontAntialiasing TextServerFallback::_font_get_antialiasing(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TextServer::FONT_ANTIALIASING_NONE);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1145,7 +1169,7 @@ TextServer::FontAntialiasing TextServerFallback::_font_get_antialiasing(const RI
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_generate_mipmaps(const RID &p_font_rid, bool p_generate_mipmaps) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1161,7 +1185,7 @@ void TextServerFallback::_font_set_generate_mipmaps(const RID &p_font_rid, bool
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_get_generate_mipmaps(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1169,7 +1193,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1180,7 +1204,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1188,7 +1212,7 @@ bool TextServerFallback::_font_is_multichannel_signed_distance_field(const RID &
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_msdf_pixel_range(const RID &p_font_rid, int64_t p_msdf_pixel_range) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1199,7 +1223,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1207,7 +1231,7 @@ int64_t TextServerFallback::_font_get_msdf_pixel_range(const RID &p_font_rid) co
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_msdf_size(const RID &p_font_rid, int64_t p_msdf_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1218,7 +1242,7 @@ void TextServerFallback::_font_set_msdf_size(const RID &p_font_rid, int64_t p_ms
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_msdf_size(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1226,7 +1250,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1234,7 +1258,7 @@ void TextServerFallback::_font_set_fixed_size(const RID &p_font_rid, int64_t p_f
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_fixed_size(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1242,7 +1266,7 @@ int64_t TextServerFallback::_font_get_fixed_size(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_allow_system_fallback(const RID &p_font_rid, bool p_allow_system_fallback) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1250,7 +1274,7 @@ void TextServerFallback::_font_set_allow_system_fallback(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_is_allow_system_fallback(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1258,7 +1282,7 @@ bool TextServerFallback::_font_is_allow_system_fallback(const RID &p_font_rid) c
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_force_autohinter(const RID &p_font_rid, bool p_force_autohinter) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1269,7 +1293,7 @@ void TextServerFallback::_font_set_force_autohinter(const RID &p_font_rid, bool
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_is_force_autohinter(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1277,7 +1301,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1288,7 +1312,7 @@ void TextServerFallback::_font_set_hinting(const RID &p_font_rid, TextServer::Hi
|
|||
}
|
||||
|
||||
TextServer::Hinting TextServerFallback::_font_get_hinting(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, HINTING_NONE);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1296,7 +1320,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1304,7 +1328,7 @@ void TextServerFallback::_font_set_subpixel_positioning(const RID &p_font_rid, T
|
|||
}
|
||||
|
||||
TextServer::SubpixelPositioning TextServerFallback::_font_get_subpixel_positioning(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, SUBPIXEL_POSITIONING_DISABLED);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1312,7 +1336,7 @@ TextServer::SubpixelPositioning TextServerFallback::_font_get_subpixel_positioni
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_embolden(const RID &p_font_rid, double p_strength) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1323,7 +1347,7 @@ void TextServerFallback::_font_set_embolden(const RID &p_font_rid, double p_stre
|
|||
}
|
||||
|
||||
double TextServerFallback::_font_get_embolden(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1332,28 +1356,39 @@ double TextServerFallback::_font_get_embolden(const RID &p_font_rid) const {
|
|||
|
||||
void TextServerFallback::_font_set_spacing(const RID &p_font_rid, SpacingType p_spacing, int64_t p_value) {
|
||||
ERR_FAIL_INDEX((int)p_spacing, 4);
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
FontFallbackLinkedVariation *fdv = font_var_owner.get_or_null(p_font_rid);
|
||||
if (fdv) {
|
||||
if (fdv->extra_spacing[p_spacing] != p_value) {
|
||||
fdv->extra_spacing[p_spacing] = p_value;
|
||||
}
|
||||
} else {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
if (fd->extra_spacing[p_spacing] != p_value) {
|
||||
_font_clear_cache(fd);
|
||||
fd->extra_spacing[p_spacing] = p_value;
|
||||
MutexLock lock(fd->mutex);
|
||||
if (fd->extra_spacing[p_spacing] != p_value) {
|
||||
_font_clear_cache(fd);
|
||||
fd->extra_spacing[p_spacing] = p_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_spacing(const RID &p_font_rid, SpacingType p_spacing) const {
|
||||
ERR_FAIL_INDEX_V((int)p_spacing, 4, 0);
|
||||
FontFallbackLinkedVariation *fdv = font_var_owner.get_or_null(p_font_rid);
|
||||
if (fdv) {
|
||||
return fdv->extra_spacing[p_spacing];
|
||||
} else {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
return fd->extra_spacing[p_spacing];
|
||||
MutexLock lock(fd->mutex);
|
||||
return fd->extra_spacing[p_spacing];
|
||||
}
|
||||
}
|
||||
|
||||
void TextServerFallback::_font_set_transform(const RID &p_font_rid, const Transform2D &p_transform) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1364,7 +1399,7 @@ void TextServerFallback::_font_set_transform(const RID &p_font_rid, const Transf
|
|||
}
|
||||
|
||||
Transform2D TextServerFallback::_font_get_transform(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Transform2D());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1372,7 +1407,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1383,7 +1418,7 @@ void TextServerFallback::_font_set_variation_coordinates(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
Dictionary TextServerFallback::_font_get_variation_coordinates(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1391,7 +1426,7 @@ Dictionary TextServerFallback::_font_get_variation_coordinates(const RID &p_font
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_oversampling(const RID &p_font_rid, double p_oversampling) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1402,7 +1437,7 @@ void TextServerFallback::_font_set_oversampling(const RID &p_font_rid, double p_
|
|||
}
|
||||
|
||||
double TextServerFallback::_font_get_oversampling(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1410,7 +1445,7 @@ double TextServerFallback::_font_get_oversampling(const RID &p_font_rid) const {
|
|||
}
|
||||
|
||||
TypedArray<Vector2i> TextServerFallback::_font_get_size_cache_list(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TypedArray<Vector2i>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1422,7 +1457,7 @@ TypedArray<Vector2i> TextServerFallback::_font_get_size_cache_list(const RID &p_
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_clear_size_cache(const RID &p_font_rid) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1434,7 +1469,7 @@ void TextServerFallback::_font_clear_size_cache(const RID &p_font_rid) {
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_remove_size_cache(const RID &p_font_rid, const Vector2i &p_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1446,7 +1481,7 @@ void TextServerFallback::_font_remove_size_cache(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_ascent(const RID &p_font_rid, int64_t p_size, double p_ascent) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1457,7 +1492,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1473,7 +1508,7 @@ double TextServerFallback::_font_get_ascent(const RID &p_font_rid, int64_t p_siz
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_descent(const RID &p_font_rid, int64_t p_size, double p_descent) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
Vector2i size = _get_size(fd, p_size);
|
||||
|
@ -1483,7 +1518,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1499,7 +1534,7 @@ double TextServerFallback::_font_get_descent(const RID &p_font_rid, int64_t p_si
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_underline_position(const RID &p_font_rid, int64_t p_size, double p_underline_position) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1510,7 +1545,7 @@ void TextServerFallback::_font_set_underline_position(const RID &p_font_rid, int
|
|||
}
|
||||
|
||||
double TextServerFallback::_font_get_underline_position(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1526,7 +1561,7 @@ double TextServerFallback::_font_get_underline_position(const RID &p_font_rid, i
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_underline_thickness(const RID &p_font_rid, int64_t p_size, double p_underline_thickness) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1537,7 +1572,7 @@ void TextServerFallback::_font_set_underline_thickness(const RID &p_font_rid, in
|
|||
}
|
||||
|
||||
double TextServerFallback::_font_get_underline_thickness(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1553,7 +1588,7 @@ double TextServerFallback::_font_get_underline_thickness(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_scale(const RID &p_font_rid, int64_t p_size, double p_scale) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1569,7 +1604,7 @@ void TextServerFallback::_font_set_scale(const RID &p_font_rid, int64_t p_size,
|
|||
}
|
||||
|
||||
double TextServerFallback::_font_get_scale(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0.0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1585,7 +1620,7 @@ double TextServerFallback::_font_get_scale(const RID &p_font_rid, int64_t p_size
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_texture_count(const RID &p_font_rid, const Vector2i &p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, 0);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1597,7 +1632,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
MutexLock lock(fd->mutex);
|
||||
Vector2i size = _get_size_outline(fd, p_size);
|
||||
|
@ -1607,7 +1642,7 @@ void TextServerFallback::_font_clear_textures(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_remove_texture(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1619,7 +1654,7 @@ void TextServerFallback::_font_remove_texture(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
ERR_FAIL_COND(p_image.is_null());
|
||||
|
||||
|
@ -1648,7 +1683,7 @@ void TextServerFallback::_font_set_texture_image(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
Ref<Image> TextServerFallback::_font_get_texture_image(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Ref<Image>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1662,7 +1697,7 @@ Ref<Image> TextServerFallback::_font_get_texture_image(const RID &p_font_rid, co
|
|||
|
||||
void TextServerFallback::_font_set_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index, const PackedInt32Array &p_offsets) {
|
||||
ERR_FAIL_COND(p_offsets.size() % 4 != 0);
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1681,7 +1716,7 @@ void TextServerFallback::_font_set_texture_offsets(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
PackedInt32Array TextServerFallback::_font_get_texture_offsets(const RID &p_font_rid, const Vector2i &p_size, int64_t p_texture_index) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedInt32Array());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1706,7 +1741,7 @@ PackedInt32Array TextServerFallback::_font_get_texture_offsets(const RID &p_font
|
|||
}
|
||||
|
||||
PackedInt32Array TextServerFallback::_font_get_glyph_list(const RID &p_font_rid, const Vector2i &p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedInt32Array());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1722,7 +1757,7 @@ PackedInt32Array TextServerFallback::_font_get_glyph_list(const RID &p_font_rid,
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_clear_glyphs(const RID &p_font_rid, const Vector2i &p_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1733,7 +1768,7 @@ void TextServerFallback::_font_clear_glyphs(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_remove_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1744,7 +1779,7 @@ void TextServerFallback::_font_remove_glyph(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
Vector2 TextServerFallback::_font_get_glyph_advance(const RID &p_font_rid, int64_t p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1782,7 +1817,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1797,7 +1832,7 @@ void TextServerFallback::_font_set_glyph_advance(const RID &p_font_rid, int64_t
|
|||
}
|
||||
|
||||
Vector2 TextServerFallback::_font_get_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1827,7 +1862,7 @@ Vector2 TextServerFallback::_font_get_glyph_offset(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_glyph_offset(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_offset) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1842,7 +1877,7 @@ void TextServerFallback::_font_set_glyph_offset(const RID &p_font_rid, const Vec
|
|||
}
|
||||
|
||||
Vector2 TextServerFallback::_font_get_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1872,7 +1907,7 @@ Vector2 TextServerFallback::_font_get_glyph_size(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_glyph_size(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph, const Vector2 &p_gl_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1887,7 +1922,7 @@ void TextServerFallback::_font_set_glyph_size(const RID &p_font_rid, const Vecto
|
|||
}
|
||||
|
||||
Rect2 TextServerFallback::_font_get_glyph_uv_rect(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Rect2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1912,7 +1947,7 @@ Rect2 TextServerFallback::_font_get_glyph_uv_rect(const RID &p_font_rid, const V
|
|||
}
|
||||
|
||||
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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1927,7 +1962,7 @@ void TextServerFallback::_font_set_glyph_uv_rect(const RID &p_font_rid, const Ve
|
|||
}
|
||||
|
||||
int64_t TextServerFallback::_font_get_glyph_texture_idx(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, -1);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1952,7 +1987,7 @@ int64_t TextServerFallback::_font_get_glyph_texture_idx(const RID &p_font_rid, c
|
|||
}
|
||||
|
||||
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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -1967,7 +2002,7 @@ void TextServerFallback::_font_set_glyph_texture_idx(const RID &p_font_rid, cons
|
|||
}
|
||||
|
||||
RID TextServerFallback::_font_get_glyph_texture_rid(const RID &p_font_rid, const Vector2i &p_size, int64_t p_glyph) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, RID());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2013,7 +2048,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Size2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2059,7 +2094,7 @@ Size2 TextServerFallback::_font_get_glyph_texture_size(const RID &p_font_rid, co
|
|||
}
|
||||
|
||||
Dictionary TextServerFallback::_font_get_glyph_contours(const RID &p_font_rid, int64_t p_size, int64_t p_index) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2109,7 +2144,7 @@ Dictionary TextServerFallback::_font_get_glyph_contours(const RID &p_font_rid, i
|
|||
}
|
||||
|
||||
TypedArray<Vector2i> TextServerFallback::_font_get_kerning_list(const RID &p_font_rid, int64_t p_size) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, TypedArray<Vector2i>());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2125,7 +2160,7 @@ TypedArray<Vector2i> TextServerFallback::_font_get_kerning_list(const RID &p_fon
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_clear_kerning_map(const RID &p_font_rid, int64_t p_size) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2136,7 +2171,7 @@ void TextServerFallback::_font_clear_kerning_map(const RID &p_font_rid, int64_t
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_remove_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2147,7 +2182,7 @@ void TextServerFallback::_font_remove_kerning(const RID &p_font_rid, int64_t p_s
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_kerning(const RID &p_font_rid, int64_t p_size, const Vector2i &p_glyph_pair, const Vector2 &p_kerning) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2158,7 +2193,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Vector2());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2202,7 +2237,7 @@ int64_t TextServerFallback::_font_get_char_from_glyph_index(const RID &p_font_ri
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_has_char(const RID &p_font_rid, int64_t p_char) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
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) + ".");
|
||||
if (!fd) {
|
||||
return false;
|
||||
|
@ -2223,7 +2258,7 @@ bool TextServerFallback::_font_has_char(const RID &p_font_rid, int64_t p_char) c
|
|||
}
|
||||
|
||||
String TextServerFallback::_font_get_supported_chars(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, String());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2256,7 +2291,7 @@ String TextServerFallback::_font_get_supported_chars(const RID &p_font_rid) cons
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_render_range(const RID &p_font_rid, const Vector2i &p_size, int64_t p_start, int64_t p_end) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(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) + ".");
|
||||
|
@ -2291,7 +2326,7 @@ void TextServerFallback::_font_render_range(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_render_glyph(const RID &p_font_rid, const Vector2i &p_size, int64_t p_index) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2322,7 +2357,7 @@ void TextServerFallback::_font_render_glyph(const RID &p_font_rid, const Vector2
|
|||
}
|
||||
|
||||
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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2414,7 +2449,7 @@ void TextServerFallback::_font_draw_glyph(const RID &p_font_rid, const RID &p_ca
|
|||
}
|
||||
|
||||
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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2506,7 +2541,7 @@ void TextServerFallback::_font_draw_glyph_outline(const RID &p_font_rid, const R
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_is_language_supported(const RID &p_font_rid, const String &p_language) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2518,7 +2553,7 @@ bool TextServerFallback::_font_is_language_supported(const RID &p_font_rid, cons
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_language_support_override(const RID &p_font_rid, const String &p_language, bool p_supported) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2526,7 +2561,7 @@ void TextServerFallback::_font_set_language_support_override(const RID &p_font_r
|
|||
}
|
||||
|
||||
bool TextServerFallback::_font_get_language_support_override(const RID &p_font_rid, const String &p_language) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2534,7 +2569,7 @@ bool TextServerFallback::_font_get_language_support_override(const RID &p_font_r
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_remove_language_support_override(const RID &p_font_rid, const String &p_language) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2542,7 +2577,7 @@ void TextServerFallback::_font_remove_language_support_override(const RID &p_fon
|
|||
}
|
||||
|
||||
PackedStringArray TextServerFallback::_font_get_language_support_overrides(const RID &p_font_rid) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedStringArray());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2554,7 +2589,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 {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2566,7 +2601,7 @@ bool TextServerFallback::_font_is_script_supported(const RID &p_font_rid, const
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_script_support_override(const RID &p_font_rid, const String &p_script, bool p_supported) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2574,7 +2609,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, false);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2582,7 +2617,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) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2592,7 +2627,7 @@ void TextServerFallback::_font_remove_script_support_override(const RID &p_font_
|
|||
}
|
||||
|
||||
PackedStringArray TextServerFallback::_font_get_script_support_overrides(const RID &p_font_rid) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, PackedStringArray());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2604,7 +2639,7 @@ PackedStringArray TextServerFallback::_font_get_script_support_overrides(const R
|
|||
}
|
||||
|
||||
void TextServerFallback::_font_set_opentype_feature_overrides(const RID &p_font_rid, const Dictionary &p_overrides) {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL(fd);
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2614,7 +2649,7 @@ void TextServerFallback::_font_set_opentype_feature_overrides(const RID &p_font_
|
|||
}
|
||||
|
||||
Dictionary TextServerFallback::_font_get_opentype_feature_overrides(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2626,7 +2661,7 @@ Dictionary TextServerFallback::_font_supported_feature_list(const RID &p_font_ri
|
|||
}
|
||||
|
||||
Dictionary TextServerFallback::_font_supported_variation_list(const RID &p_font_rid) const {
|
||||
FontFallback *fd = font_owner.get_or_null(p_font_rid);
|
||||
FontFallback *fd = _get_font_data(p_font_rid);
|
||||
ERR_FAIL_NULL_V(fd, Dictionary());
|
||||
|
||||
MutexLock lock(fd->mutex);
|
||||
|
@ -2904,7 +2939,7 @@ bool TextServerFallback::_shaped_text_add_string(const RID &p_shaped, const Stri
|
|||
ERR_FAIL_COND_V(p_size <= 0, false);
|
||||
|
||||
for (int i = 0; i < p_fonts.size(); i++) {
|
||||
ERR_FAIL_COND_V(!font_owner.get_or_null(p_fonts[i]), false);
|
||||
ERR_FAIL_COND_V(!_get_font_data(p_fonts[i]), false);
|
||||
}
|
||||
|
||||
if (p_text.is_empty()) {
|
||||
|
|
|
@ -245,6 +245,11 @@ class TextServerFallback : public TextServerExtension {
|
|||
}
|
||||
};
|
||||
|
||||
struct FontFallbackLinkedVariation {
|
||||
RID base_font;
|
||||
int extra_spacing[4] = { 0, 0, 0, 0 };
|
||||
};
|
||||
|
||||
struct FontFallback {
|
||||
Mutex mutex;
|
||||
|
||||
|
@ -451,9 +456,19 @@ class TextServerFallback : public TextServerExtension {
|
|||
// Common data.
|
||||
|
||||
double oversampling = 1.0;
|
||||
mutable RID_PtrOwner<FontFallbackLinkedVariation> font_var_owner;
|
||||
mutable RID_PtrOwner<FontFallback> font_owner;
|
||||
mutable RID_PtrOwner<ShapedTextDataFallback> shaped_owner;
|
||||
|
||||
_FORCE_INLINE_ FontFallback *_get_font_data(const RID &p_font_rid) const {
|
||||
RID rid = p_font_rid;
|
||||
FontFallbackLinkedVariation *fdv = font_var_owner.get_or_null(rid);
|
||||
if (unlikely(fdv)) {
|
||||
rid = fdv->base_font;
|
||||
}
|
||||
return font_owner.get_or_null(rid);
|
||||
}
|
||||
|
||||
struct SystemFontKey {
|
||||
String font_name;
|
||||
TextServer::FontAntialiasing antialiasing = TextServer::FONT_ANTIALIASING_GRAY;
|
||||
|
@ -569,6 +584,7 @@ public:
|
|||
/* Font interface */
|
||||
|
||||
MODBIND0R(RID, create_font);
|
||||
MODBIND1R(RID, create_font_linked_variation, const RID &);
|
||||
|
||||
MODBIND2(font_set_data, const RID &, const PackedByteArray &);
|
||||
MODBIND3(font_set_data_ptr, const RID &, const uint8_t *, int64_t);
|
||||
|
|
|
@ -558,24 +558,28 @@ _FORCE_INLINE_ void FontFile::_clear_cache() {
|
|||
}
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ void FontFile::_ensure_rid(int p_cache_index) const {
|
||||
_FORCE_INLINE_ void FontFile::_ensure_rid(int p_cache_index, int p_make_linked_from) const {
|
||||
if (unlikely(p_cache_index >= cache.size())) {
|
||||
cache.resize(p_cache_index + 1);
|
||||
}
|
||||
if (unlikely(!cache[p_cache_index].is_valid())) {
|
||||
cache.write[p_cache_index] = TS->create_font();
|
||||
TS->font_set_data_ptr(cache[p_cache_index], data_ptr, data_size);
|
||||
TS->font_set_antialiasing(cache[p_cache_index], antialiasing);
|
||||
TS->font_set_generate_mipmaps(cache[p_cache_index], mipmaps);
|
||||
TS->font_set_multichannel_signed_distance_field(cache[p_cache_index], msdf);
|
||||
TS->font_set_msdf_pixel_range(cache[p_cache_index], msdf_pixel_range);
|
||||
TS->font_set_msdf_size(cache[p_cache_index], msdf_size);
|
||||
TS->font_set_fixed_size(cache[p_cache_index], fixed_size);
|
||||
TS->font_set_force_autohinter(cache[p_cache_index], force_autohinter);
|
||||
TS->font_set_allow_system_fallback(cache[p_cache_index], allow_system_fallback);
|
||||
TS->font_set_hinting(cache[p_cache_index], hinting);
|
||||
TS->font_set_subpixel_positioning(cache[p_cache_index], subpixel_positioning);
|
||||
TS->font_set_oversampling(cache[p_cache_index], oversampling);
|
||||
if (p_make_linked_from >= 0 && p_make_linked_from != p_cache_index && p_make_linked_from < cache.size()) {
|
||||
cache.write[p_cache_index] = TS->create_font_linked_variation(cache[p_make_linked_from]);
|
||||
} else {
|
||||
cache.write[p_cache_index] = TS->create_font();
|
||||
TS->font_set_data_ptr(cache[p_cache_index], data_ptr, data_size);
|
||||
TS->font_set_antialiasing(cache[p_cache_index], antialiasing);
|
||||
TS->font_set_generate_mipmaps(cache[p_cache_index], mipmaps);
|
||||
TS->font_set_multichannel_signed_distance_field(cache[p_cache_index], msdf);
|
||||
TS->font_set_msdf_pixel_range(cache[p_cache_index], msdf_pixel_range);
|
||||
TS->font_set_msdf_size(cache[p_cache_index], msdf_size);
|
||||
TS->font_set_fixed_size(cache[p_cache_index], fixed_size);
|
||||
TS->font_set_force_autohinter(cache[p_cache_index], force_autohinter);
|
||||
TS->font_set_allow_system_fallback(cache[p_cache_index], allow_system_fallback);
|
||||
TS->font_set_hinting(cache[p_cache_index], hinting);
|
||||
TS->font_set_subpixel_positioning(cache[p_cache_index], subpixel_positioning);
|
||||
TS->font_set_oversampling(cache[p_cache_index], oversampling);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2218,17 +2222,19 @@ real_t FontFile::get_oversampling() const {
|
|||
RID FontFile::find_variation(const Dictionary &p_variation_coordinates, int p_face_index, float p_strength, Transform2D p_transform, int p_spacing_top, int p_spacing_bottom, int p_spacing_space, int p_spacing_glyph) const {
|
||||
// Find existing variation cache.
|
||||
const Dictionary &supported_coords = get_supported_variation_list();
|
||||
int make_linked_from = -1;
|
||||
for (int i = 0; i < cache.size(); i++) {
|
||||
if (cache[i].is_valid()) {
|
||||
const Dictionary &cache_var = TS->font_get_variation_coordinates(cache[i]);
|
||||
bool match = true;
|
||||
bool match_linked = true;
|
||||
match = match && (TS->font_get_face_index(cache[i]) == p_face_index);
|
||||
match = match && (TS->font_get_embolden(cache[i]) == p_strength);
|
||||
match = match && (TS->font_get_transform(cache[i]) == p_transform);
|
||||
match = match && (TS->font_get_spacing(cache[i], TextServer::SPACING_TOP) == p_spacing_top);
|
||||
match = match && (TS->font_get_spacing(cache[i], TextServer::SPACING_BOTTOM) == p_spacing_bottom);
|
||||
match = match && (TS->font_get_spacing(cache[i], TextServer::SPACING_SPACE) == p_spacing_space);
|
||||
match = match && (TS->font_get_spacing(cache[i], TextServer::SPACING_GLYPH) == p_spacing_glyph);
|
||||
match_linked = match_linked && (TS->font_get_spacing(cache[i], TextServer::SPACING_TOP) == p_spacing_top);
|
||||
match_linked = match_linked && (TS->font_get_spacing(cache[i], TextServer::SPACING_BOTTOM) == p_spacing_bottom);
|
||||
match_linked = match_linked && (TS->font_get_spacing(cache[i], TextServer::SPACING_SPACE) == p_spacing_space);
|
||||
match_linked = match_linked && (TS->font_get_spacing(cache[i], TextServer::SPACING_GLYPH) == p_spacing_glyph);
|
||||
for (const Variant *V = supported_coords.next(nullptr); V && match; V = supported_coords.next(V)) {
|
||||
const Vector3 &def = supported_coords[*V];
|
||||
|
||||
|
@ -2255,22 +2261,34 @@ RID FontFile::find_variation(const Dictionary &p_variation_coordinates, int p_fa
|
|||
match = match && (c_v == s_v);
|
||||
}
|
||||
if (match) {
|
||||
return cache[i];
|
||||
if (match_linked) {
|
||||
return cache[i];
|
||||
} else {
|
||||
make_linked_from = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create new variation cache.
|
||||
int idx = cache.size();
|
||||
_ensure_rid(idx);
|
||||
TS->font_set_variation_coordinates(cache[idx], p_variation_coordinates);
|
||||
TS->font_set_face_index(cache[idx], p_face_index);
|
||||
TS->font_set_embolden(cache[idx], p_strength);
|
||||
TS->font_set_transform(cache[idx], p_transform);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_TOP, p_spacing_top);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_BOTTOM, p_spacing_bottom);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_SPACE, p_spacing_space);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_GLYPH, p_spacing_glyph);
|
||||
if (make_linked_from >= 0) {
|
||||
_ensure_rid(idx, make_linked_from);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_TOP, p_spacing_top);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_BOTTOM, p_spacing_bottom);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_SPACE, p_spacing_space);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_GLYPH, p_spacing_glyph);
|
||||
} else {
|
||||
_ensure_rid(idx);
|
||||
TS->font_set_variation_coordinates(cache[idx], p_variation_coordinates);
|
||||
TS->font_set_face_index(cache[idx], p_face_index);
|
||||
TS->font_set_embolden(cache[idx], p_strength);
|
||||
TS->font_set_transform(cache[idx], p_transform);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_TOP, p_spacing_top);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_BOTTOM, p_spacing_bottom);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_SPACE, p_spacing_space);
|
||||
TS->font_set_spacing(cache[idx], TextServer::SPACING_GLYPH, p_spacing_glyph);
|
||||
}
|
||||
return cache[idx];
|
||||
}
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ class FontFile : public Font {
|
|||
mutable Vector<RID> cache;
|
||||
|
||||
_FORCE_INLINE_ void _clear_cache();
|
||||
_FORCE_INLINE_ void _ensure_rid(int p_cache_index) const;
|
||||
_FORCE_INLINE_ void _ensure_rid(int p_cache_index, int p_make_linked_from = -1) const;
|
||||
|
||||
void _convert_packed_8bit(Ref<Image> &p_source, int p_page, int p_sz);
|
||||
void _convert_packed_4bit(Ref<Image> &p_source, int p_page, int p_sz);
|
||||
|
|
|
@ -51,6 +51,7 @@ void TextServerExtension::_bind_methods() {
|
|||
/* Font interface */
|
||||
|
||||
GDVIRTUAL_BIND(_create_font);
|
||||
GDVIRTUAL_BIND(_create_font_linked_variation, "font_rid");
|
||||
|
||||
GDVIRTUAL_BIND(_font_set_data, "font_rid", "data");
|
||||
GDVIRTUAL_BIND(_font_set_data_ptr, "font_rid", "data_ptr", "data_size");
|
||||
|
@ -412,6 +413,12 @@ RID TextServerExtension::create_font() {
|
|||
return ret;
|
||||
}
|
||||
|
||||
RID TextServerExtension::create_font_linked_variation(const RID &p_font_rid) {
|
||||
RID ret;
|
||||
GDVIRTUAL_CALL(_create_font_linked_variation, p_font_rid, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void TextServerExtension::font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) {
|
||||
GDVIRTUAL_CALL(_font_set_data, p_font_rid, p_data);
|
||||
}
|
||||
|
|
|
@ -80,6 +80,9 @@ public:
|
|||
virtual RID create_font() override;
|
||||
GDVIRTUAL0R(RID, _create_font);
|
||||
|
||||
virtual RID create_font_linked_variation(const RID &p_font_rid) override;
|
||||
GDVIRTUAL1R(RID, _create_font_linked_variation, RID);
|
||||
|
||||
virtual void font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) override;
|
||||
virtual void font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) override;
|
||||
GDVIRTUAL2(_font_set_data, RID, const PackedByteArray &);
|
||||
|
|
|
@ -206,6 +206,7 @@ void TextServer::_bind_methods() {
|
|||
/* Font Interface */
|
||||
|
||||
ClassDB::bind_method(D_METHOD("create_font"), &TextServer::create_font);
|
||||
ClassDB::bind_method(D_METHOD("create_font_linked_variation", "font_rid"), &TextServer::create_font_linked_variation);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("font_set_data", "font_rid", "data"), &TextServer::font_set_data);
|
||||
|
||||
|
|
|
@ -237,6 +237,7 @@ public:
|
|||
/* Font interface */
|
||||
|
||||
virtual RID create_font() = 0;
|
||||
virtual RID create_font_linked_variation(const RID &p_font_rid) = 0;
|
||||
|
||||
virtual void font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) = 0;
|
||||
virtual void font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) = 0;
|
||||
|
|
Loading…
Reference in a new issue