|
@@ -54,6 +54,7 @@ _FORCE_INLINE_ void FontData::_ensure_rid(int p_cache_index) const {
|
|
if (unlikely(!cache[p_cache_index].is_valid())) {
|
|
if (unlikely(!cache[p_cache_index].is_valid())) {
|
|
cache.write[p_cache_index] = TS->create_font();
|
|
cache.write[p_cache_index] = TS->create_font();
|
|
TS->font_set_data_ptr(cache[p_cache_index], data_ptr, data_size);
|
|
TS->font_set_data_ptr(cache[p_cache_index], data_ptr, data_size);
|
|
|
|
+ TS->font_set_face_index(cache[p_cache_index], face_index);
|
|
TS->font_set_antialiased(cache[p_cache_index], antialiased);
|
|
TS->font_set_antialiased(cache[p_cache_index], antialiased);
|
|
TS->font_set_generate_mipmaps(cache[p_cache_index], mipmaps);
|
|
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_multichannel_signed_distance_field(cache[p_cache_index], msdf);
|
|
@@ -76,6 +77,11 @@ void FontData::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("set_data", "data"), &FontData::set_data);
|
|
ClassDB::bind_method(D_METHOD("set_data", "data"), &FontData::set_data);
|
|
ClassDB::bind_method(D_METHOD("get_data"), &FontData::get_data);
|
|
ClassDB::bind_method(D_METHOD("get_data"), &FontData::get_data);
|
|
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_face_index", "face_index"), &FontData::set_face_index);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_face_index"), &FontData::get_face_index);
|
|
|
|
+
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_face_count"), &FontData::get_face_count);
|
|
|
|
+
|
|
ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &FontData::set_antialiased);
|
|
ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &FontData::set_antialiased);
|
|
ClassDB::bind_method(D_METHOD("is_antialiased"), &FontData::is_antialiased);
|
|
ClassDB::bind_method(D_METHOD("is_antialiased"), &FontData::is_antialiased);
|
|
|
|
|
|
@@ -217,6 +223,7 @@ void FontData::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("get_supported_variation_list"), &FontData::get_supported_variation_list);
|
|
ClassDB::bind_method(D_METHOD("get_supported_variation_list"), &FontData::get_supported_variation_list);
|
|
|
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_data", "get_data");
|
|
ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_data", "get_data");
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "face_index", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_face_index", "get_face_index");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate_mipmaps", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_generate_mipmaps", "get_generate_mipmaps");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate_mipmaps", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_generate_mipmaps", "get_generate_mipmaps");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_antialiased", "is_antialiased");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_antialiased", "is_antialiased");
|
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "font_name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_font_name", "get_font_name");
|
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "font_name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_font_name", "get_font_name");
|
|
@@ -445,6 +452,7 @@ void FontData::reset_state() {
|
|
data.clear();
|
|
data.clear();
|
|
data_ptr = nullptr;
|
|
data_ptr = nullptr;
|
|
data_size = 0;
|
|
data_size = 0;
|
|
|
|
+ face_index = 0;
|
|
cache.clear();
|
|
cache.clear();
|
|
|
|
|
|
antialiased = true;
|
|
antialiased = true;
|
|
@@ -1244,6 +1252,31 @@ void FontData::set_data(const PackedByteArray &p_data) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void FontData::set_face_index(int64_t p_index) {
|
|
|
|
+ ERR_FAIL_COND(p_index < 0);
|
|
|
|
+ ERR_FAIL_COND(p_index >= 0x7FFF);
|
|
|
|
+
|
|
|
|
+ if (face_index != p_index) {
|
|
|
|
+ face_index = p_index;
|
|
|
|
+ if (data_ptr != nullptr) {
|
|
|
|
+ for (int i = 0; i < cache.size(); i++) {
|
|
|
|
+ if (cache[i].is_valid()) {
|
|
|
|
+ TS->font_set_face_index(cache[i], face_index);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int64_t FontData::get_face_index() const {
|
|
|
|
+ return face_index;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int64_t FontData::get_face_count() const {
|
|
|
|
+ _ensure_rid(0);
|
|
|
|
+ return TS->font_get_face_count(cache[0]);
|
|
|
|
+}
|
|
|
|
+
|
|
PackedByteArray FontData::get_data() const {
|
|
PackedByteArray FontData::get_data() const {
|
|
if (unlikely((size_t)data.size() != data_size)) {
|
|
if (unlikely((size_t)data.size() != data_size)) {
|
|
PackedByteArray *data_w = const_cast<PackedByteArray *>(&data);
|
|
PackedByteArray *data_w = const_cast<PackedByteArray *>(&data);
|