Replace last occurrences of 'ERR_EXPLAIN' with 'ERR_FAIL_*_MSG'
The last remaining ERR_EXPLAIN call is in FreeType code and makes sense as is (conditionally defines the error message). There are a few ERR_EXPLAINC calls for C-strings where String is not included which can stay as is to avoid adding additional _MSGC macros just for that. Part of #31244.
This commit is contained in:
parent
de4aabe89b
commit
d3153c28f0
|
@ -40,10 +40,7 @@ class FileAccessBufferedFA : public FileAccessBuffered {
|
||||||
|
|
||||||
int read_data_block(int p_offset, int p_size, uint8_t *p_dest = 0) const {
|
int read_data_block(int p_offset, int p_size, uint8_t *p_dest = 0) const {
|
||||||
|
|
||||||
if (!f.is_open()) {
|
ERR_FAIL_COND_V_MSG(!f.is_open(), -1, "Can't read data block when file is not opened.");
|
||||||
ERR_EXPLAIN("Can't read data block, when file is not opened.");
|
|
||||||
ERR_FAIL_V(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
((T *)&f)->seek(p_offset);
|
((T *)&f)->seek(p_offset);
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,7 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileAccessWindows::close() {
|
void FileAccessWindows::close() {
|
||||||
|
|
||||||
if (!f)
|
if (!f)
|
||||||
|
@ -167,11 +168,11 @@ void FileAccessWindows::close() {
|
||||||
if (close_fail_notify) {
|
if (close_fail_notify) {
|
||||||
close_fail_notify(save_path);
|
close_fail_notify(save_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_EXPLAIN("Safe save failed. This may be a permissions problem, but also may happen because you are running a paranoid antivirus. If this is the case, please switch to Windows Defender or disable the 'safe save' option in editor settings. This makes it work, but increases the risk of file corruption in a crash.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
save_path = "";
|
save_path = "";
|
||||||
|
|
||||||
|
ERR_FAIL_COND_MSG(rename_error, "Safe save failed. This may be a permissions problem, but also may happen because you are running a paranoid antivirus. If this is the case, please switch to Windows Defender or disable the 'safe save' option in editor settings. This makes it work, but increases the risk of file corruption in a crash.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,15 +63,10 @@ Error AudioDriverXAudio2::init() {
|
||||||
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
hr = XAudio2Create(&xaudio, 0, XAUDIO2_DEFAULT_PROCESSOR);
|
hr = XAudio2Create(&xaudio, 0, XAUDIO2_DEFAULT_PROCESSOR);
|
||||||
if (hr != S_OK) {
|
ERR_FAIL_COND_V_MSG(hr != S_OK, ERR_UNAVAILABLE, "Error creating XAudio2 engine.");
|
||||||
ERR_EXPLAIN("Error creating XAudio2 engine.");
|
|
||||||
ERR_FAIL_V(ERR_UNAVAILABLE);
|
|
||||||
}
|
|
||||||
hr = xaudio->CreateMasteringVoice(&mastering_voice);
|
hr = xaudio->CreateMasteringVoice(&mastering_voice);
|
||||||
if (hr != S_OK) {
|
ERR_FAIL_COND_V_MSG(hr != S_OK, ERR_UNAVAILABLE, "Error creating XAudio2 mastering voice.");
|
||||||
ERR_EXPLAIN("Error creating XAudio2 mastering voice.");
|
|
||||||
ERR_FAIL_V(ERR_UNAVAILABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
wave_format.nChannels = channels;
|
wave_format.nChannels = channels;
|
||||||
wave_format.cbSize = 0;
|
wave_format.cbSize = 0;
|
||||||
|
@ -82,10 +77,7 @@ Error AudioDriverXAudio2::init() {
|
||||||
wave_format.nAvgBytesPerSec = mix_rate * wave_format.nBlockAlign;
|
wave_format.nAvgBytesPerSec = mix_rate * wave_format.nBlockAlign;
|
||||||
|
|
||||||
hr = xaudio->CreateSourceVoice(&source_voice, &wave_format, 0, XAUDIO2_MAX_FREQ_RATIO, &voice_callback);
|
hr = xaudio->CreateSourceVoice(&source_voice, &wave_format, 0, XAUDIO2_MAX_FREQ_RATIO, &voice_callback);
|
||||||
if (hr != S_OK) {
|
ERR_FAIL_COND_V_MSG(hr != S_OK, ERR_UNAVAILABLE, "Error creating XAudio2 source voice. Error code: " + itos(hr) + ".");
|
||||||
ERR_EXPLAIN("Error creating XAudio2 source voice. " + itos(hr));
|
|
||||||
ERR_FAIL_V(ERR_UNAVAILABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex = Mutex::create();
|
mutex = Mutex::create();
|
||||||
thread = Thread::create(AudioDriverXAudio2::thread_func, this);
|
thread = Thread::create(AudioDriverXAudio2::thread_func, this);
|
||||||
|
@ -140,10 +132,7 @@ void AudioDriverXAudio2::start() {
|
||||||
|
|
||||||
active = true;
|
active = true;
|
||||||
HRESULT hr = source_voice->Start(0);
|
HRESULT hr = source_voice->Start(0);
|
||||||
if (hr != S_OK) {
|
ERR_FAIL_COND_MSG(hr != S_OK, "Error starting XAudio2 driver. Error code: " + itos(hr) + ".");
|
||||||
ERR_EXPLAIN("XAudio2 start error " + itos(hr));
|
|
||||||
ERR_FAIL();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int AudioDriverXAudio2::get_mix_rate() const {
|
int AudioDriverXAudio2::get_mix_rate() const {
|
||||||
|
|
|
@ -692,16 +692,6 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me
|
||||||
|
|
||||||
pre_weights[w_i] = weights;
|
pre_weights[w_i] = weights;
|
||||||
|
|
||||||
/*
|
|
||||||
for(Set<int>::Element *E=vertex_map[w_i].front();E;E=E->next()) {
|
|
||||||
|
|
||||||
int dst = E->get();
|
|
||||||
ERR_EXPLAIN("invalid vertex index in array");
|
|
||||||
ERR_FAIL_INDEX_V(dst,vertex_array.size(),ERR_INVALID_DATA);
|
|
||||||
vertex_array[dst].weights=weights;
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
index_ofs += wstride * amount;
|
index_ofs += wstride * amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -711,7 +701,6 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me
|
||||||
|
|
||||||
Set<Collada::Vertex> vertex_set; //vertex set will be the vertices
|
Set<Collada::Vertex> vertex_set; //vertex set will be the vertices
|
||||||
List<int> indices_list; //indices will be the indices
|
List<int> indices_list; //indices will be the indices
|
||||||
//Map<int,Set<int> > vertex_map; //map vertices (for setting skinning/morph)
|
|
||||||
|
|
||||||
/**************************/
|
/**************************/
|
||||||
/* CREATE PRIMITIVE ARRAY */
|
/* CREATE PRIMITIVE ARRAY */
|
||||||
|
@ -834,9 +823,6 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me
|
||||||
vertex_set.insert(vertex);
|
vertex_set.insert(vertex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (!vertex_map.has(vertex_index))
|
|
||||||
vertex_map[vertex_index]=Set<int>();
|
|
||||||
vertex_map[vertex_index].insert(index); //should be outside..*/
|
|
||||||
//build triangles if needed
|
//build triangles if needed
|
||||||
if (j == 0)
|
if (j == 0)
|
||||||
prev2[0] = index;
|
prev2[0] = index;
|
||||||
|
|
|
@ -62,10 +62,8 @@ RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path,
|
||||||
f->set_endian_swap(true);
|
f->set_endian_swap(true);
|
||||||
|
|
||||||
ETC1Header h;
|
ETC1Header h;
|
||||||
ERR_EXPLAIN("Invalid or Unsupported PKM texture file: " + p_path);
|
|
||||||
f->get_buffer((uint8_t *)&h.tag, sizeof(h.tag));
|
f->get_buffer((uint8_t *)&h.tag, sizeof(h.tag));
|
||||||
if (strncmp(h.tag, "PKM 10", sizeof(h.tag)))
|
ERR_FAIL_COND_V_MSG(strncmp(h.tag, "PKM 10", sizeof(h.tag)), RES(), "Invalid or unsupported PKM texture file: " + p_path + ".");
|
||||||
ERR_FAIL_V(RES());
|
|
||||||
|
|
||||||
h.format = f->get_16();
|
h.format = f->get_16();
|
||||||
h.texWidth = f->get_16();
|
h.texWidth = f->get_16();
|
||||||
|
|
|
@ -634,7 +634,7 @@ static GDScriptCompletionIdentifier _type_from_gdtype(const GDScriptDataType &p_
|
||||||
|
|
||||||
switch (p_gdtype.kind) {
|
switch (p_gdtype.kind) {
|
||||||
case GDScriptDataType::UNINITIALIZED: {
|
case GDScriptDataType::UNINITIALIZED: {
|
||||||
ERR_EXPLAIN("Uninitialized completion. Please report a bug.");
|
ERR_PRINT("Uninitialized completion. Please report a bug.");
|
||||||
} break;
|
} break;
|
||||||
case GDScriptDataType::BUILTIN: {
|
case GDScriptDataType::BUILTIN: {
|
||||||
ci.type.kind = GDScriptParser::DataType::BUILTIN;
|
ci.type.kind = GDScriptParser::DataType::BUILTIN;
|
||||||
|
|
|
@ -5761,7 +5761,7 @@ GDScriptParser::DataType GDScriptParser::_type_from_gdtype(const GDScriptDataTyp
|
||||||
|
|
||||||
switch (p_gdtype.kind) {
|
switch (p_gdtype.kind) {
|
||||||
case GDScriptDataType::UNINITIALIZED: {
|
case GDScriptDataType::UNINITIALIZED: {
|
||||||
ERR_EXPLAIN("Uninitialized datatype. Please report a bug.");
|
ERR_PRINT("Uninitialized datatype. Please report a bug.");
|
||||||
} break;
|
} break;
|
||||||
case GDScriptDataType::BUILTIN: {
|
case GDScriptDataType::BUILTIN: {
|
||||||
result.kind = DataType::BUILTIN;
|
result.kind = DataType::BUILTIN;
|
||||||
|
|
|
@ -37,7 +37,7 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force
|
||||||
|
|
||||||
String header = f->get_token();
|
String header = f->get_token();
|
||||||
|
|
||||||
ERR_FAIL_COND_V(header != "#?RADIANCE" && header != "#?RGBE", ERR_FILE_UNRECOGNIZED);
|
ERR_FAIL_COND_V_MSG(header != "#?RADIANCE" && header != "#?RGBE", ERR_FILE_UNRECOGNIZED, "Unsupported header information in HDR: " + header + ".");
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
String line = f->get_line();
|
String line = f->get_line();
|
||||||
|
@ -45,12 +45,9 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force
|
||||||
if (line == "") // empty line indicates end of header
|
if (line == "") // empty line indicates end of header
|
||||||
break;
|
break;
|
||||||
if (line.begins_with("FORMAT=")) { // leave option to implement other commands
|
if (line.begins_with("FORMAT=")) { // leave option to implement other commands
|
||||||
if (line != "FORMAT=32-bit_rle_rgbe") {
|
ERR_FAIL_COND_V_MSG(line != "FORMAT=32-bit_rle_rgbe", ERR_FILE_UNRECOGNIZED, "Only 32-bit_rle_rgbe is supported for HDR files.");
|
||||||
ERR_EXPLAIN("Only 32-bit_rle_rgbe is supported for HDR files.");
|
|
||||||
return ERR_FILE_UNRECOGNIZED;
|
|
||||||
}
|
|
||||||
} else if (!line.begins_with("#")) { // not comment
|
} else if (!line.begins_with("#")) { // not comment
|
||||||
WARN_PRINTS("Ignoring unsupported header information in HDR : " + line);
|
WARN_PRINTS("Ignoring unsupported header information in HDR: " + line + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,8 +106,7 @@ static Ref<Image> _webp_lossy_unpack(const PoolVector<uint8_t> &p_buffer) {
|
||||||
errdec = WebPDecodeRGBInto(&r[4], size, dst_w.ptr(), datasize, 3 * features.width) == NULL;
|
errdec = WebPDecodeRGBInto(&r[4], size, dst_w.ptr(), datasize, 3 * features.width) == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//ERR_EXPLAIN("Error decoding webp! - "+p_file);
|
ERR_FAIL_COND_V_MSG(errdec, Ref<Image>(), "Failed decoding WebP image.");
|
||||||
ERR_FAIL_COND_V(errdec, Ref<Image>());
|
|
||||||
|
|
||||||
dst_w.release();
|
dst_w.release();
|
||||||
|
|
||||||
|
@ -121,7 +120,6 @@ Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p
|
||||||
|
|
||||||
WebPBitstreamFeatures features;
|
WebPBitstreamFeatures features;
|
||||||
if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) {
|
if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) {
|
||||||
// ERR_EXPLAIN("Error decoding WEBP image");
|
|
||||||
ERR_FAIL_V(ERR_FILE_CORRUPT);
|
ERR_FAIL_V(ERR_FILE_CORRUPT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,8 +136,7 @@ Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p
|
||||||
}
|
}
|
||||||
dst_w.release();
|
dst_w.release();
|
||||||
|
|
||||||
//ERR_EXPLAIN("Error decoding webp!");
|
ERR_FAIL_COND_V_MSG(errdec, ERR_FILE_CORRUPT, "Failed decoding WebP image.");
|
||||||
ERR_FAIL_COND_V(errdec, ERR_FILE_CORRUPT);
|
|
||||||
|
|
||||||
p_image->create(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
|
p_image->create(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
|
||||||
|
|
||||||
|
|
|
@ -121,17 +121,17 @@ bool WSLClient::_verify_headers(String &r_protocol) {
|
||||||
headers[name] = value;
|
headers[name] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _WLS_EXPLAIN(NAME, VALUE) \
|
#define _WSL_CHECK(NAME, VALUE) \
|
||||||
ERR_EXPLAIN("Missing or invalid header '" + String(NAME) + "'. Expected value '" + VALUE + "'");
|
ERR_FAIL_COND_V_MSG(!headers.has(NAME) || headers[NAME].to_lower() != VALUE, false, \
|
||||||
#define _WLS_CHECK(NAME, VALUE) \
|
"Missing or invalid header '" + String(NAME) + "'. Expected value '" + VALUE + "'.");
|
||||||
_WLS_EXPLAIN(NAME, VALUE); \
|
#define _WSL_CHECK_NC(NAME, VALUE) \
|
||||||
ERR_FAIL_COND_V(!headers.has(NAME) || headers[NAME].to_lower() != VALUE, false);
|
ERR_FAIL_COND_V_MSG(!headers.has(NAME) || headers[NAME] != VALUE, false, \
|
||||||
#define _WLS_CHECK_NC(NAME, VALUE) \
|
"Missing or invalid header '" + String(NAME) + "'. Expected value '" + VALUE + "'.");
|
||||||
_WLS_EXPLAIN(NAME, VALUE); \
|
_WSL_CHECK("connection", "upgrade");
|
||||||
ERR_FAIL_COND_V(!headers.has(NAME) || headers[NAME] != VALUE, false);
|
_WSL_CHECK("upgrade", "websocket");
|
||||||
_WLS_CHECK("connection", "upgrade");
|
_WSL_CHECK_NC("sec-websocket-accept", WSLPeer::compute_key_response(_key));
|
||||||
_WLS_CHECK("upgrade", "websocket");
|
#undef _WSL_CHECK_NC
|
||||||
_WLS_CHECK_NC("sec-websocket-accept", WSLPeer::compute_key_response(_key));
|
#undef _WSL_CHECK
|
||||||
if (_protocols.size() == 0) {
|
if (_protocols.size() == 0) {
|
||||||
// We didn't request a custom protocol
|
// We didn't request a custom protocol
|
||||||
ERR_FAIL_COND_V(headers.has("sec-websocket-protocol"), false);
|
ERR_FAIL_COND_V(headers.has("sec-websocket-protocol"), false);
|
||||||
|
@ -148,10 +148,6 @@ bool WSLClient::_verify_headers(String &r_protocol) {
|
||||||
if (!valid)
|
if (!valid)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#undef _WLS_CHECK_NC
|
|
||||||
#undef _WLS_CHECK
|
|
||||||
#undef _WLS_EXPLAIN
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* lws_server.cpp */
|
/* wsl_server.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
|
@ -64,18 +64,17 @@ bool WSLServer::PendingPeer::_parse_request(const PoolStringArray p_protocols) {
|
||||||
else
|
else
|
||||||
headers[name] = value;
|
headers[name] = value;
|
||||||
}
|
}
|
||||||
#define _WLS_CHECK(NAME, VALUE) \
|
#define _WSL_CHECK(NAME, VALUE) \
|
||||||
ERR_EXPLAIN("Missing or invalid header '" + String(NAME) + "'. Expected value '" + VALUE + "'"); \
|
ERR_FAIL_COND_V_MSG(!headers.has(NAME) || headers[NAME].to_lower() != VALUE, false, \
|
||||||
ERR_FAIL_COND_V(!headers.has(NAME) || headers[NAME].to_lower() != VALUE, false);
|
"Missing or invalid header '" + String(NAME) + "'. Expected value '" + VALUE + "'.");
|
||||||
#define _WLS_CHECK_EX(NAME) \
|
#define _WSL_CHECK_EX(NAME) \
|
||||||
ERR_EXPLAIN("Missing header '" + String(NAME) + "'."); \
|
ERR_FAIL_COND_V_MSG(!headers.has(NAME), false, "Missing header '" + String(NAME) + "'.");
|
||||||
ERR_FAIL_COND_V(!headers.has(NAME), false);
|
_WSL_CHECK("upgrade", "websocket");
|
||||||
_WLS_CHECK("upgrade", "websocket");
|
_WSL_CHECK("sec-websocket-version", "13");
|
||||||
_WLS_CHECK("sec-websocket-version", "13");
|
_WSL_CHECK_EX("sec-websocket-key");
|
||||||
_WLS_CHECK_EX("sec-websocket-key");
|
_WSL_CHECK_EX("connection");
|
||||||
_WLS_CHECK_EX("connection");
|
#undef _WSL_CHECK_EX
|
||||||
#undef _WLS_CHECK_EX
|
#undef _WSL_CHECK
|
||||||
#undef _WLS_CHECK
|
|
||||||
key = headers["sec-websocket-key"];
|
key = headers["sec-websocket-key"];
|
||||||
if (headers.has("sec-websocket-protocol")) {
|
if (headers.has("sec-websocket-protocol")) {
|
||||||
Vector<String> protos = headers["sec-websocket-protocol"].split(",");
|
Vector<String> protos = headers["sec-websocket-protocol"].split(",");
|
||||||
|
|
|
@ -29,11 +29,14 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
#include "core/error_macros.h"
|
#include "core/error_macros.h"
|
||||||
|
|
||||||
#include "thirdparty/xatlas/xatlas.h"
|
#include "thirdparty/xatlas/xatlas.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
extern bool (*array_mesh_lightmap_unwrap_callback)(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y);
|
extern bool (*array_mesh_lightmap_unwrap_callback)(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y);
|
||||||
|
|
||||||
bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y) {
|
bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_vertices, const float *p_normals, int p_vertex_count, const int *p_indices, const int *p_face_materials, int p_index_count, float **r_uv, int **r_vertex, int *r_vertex_count, int **r_index, int *r_index_count, int *r_size_hint_x, int *r_size_hint_y) {
|
||||||
|
|
|
@ -193,14 +193,6 @@ Error DynamicFontAtSize::_load() {
|
||||||
|
|
||||||
ERR_FAIL_COND_V(error, ERR_FILE_CANT_OPEN);
|
ERR_FAIL_COND_V(error, ERR_FILE_CANT_OPEN);
|
||||||
|
|
||||||
/*error = FT_Set_Char_Size(face,0,64*size,512,512);
|
|
||||||
|
|
||||||
if ( error ) {
|
|
||||||
FT_Done_FreeType( library );
|
|
||||||
ERR_EXPLAIN(TTR("Invalid font size."));
|
|
||||||
ERR_FAIL_COND_V( error, ERR_INVALID_PARAMETER );
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (FT_HAS_COLOR(face)) {
|
if (FT_HAS_COLOR(face)) {
|
||||||
int best_match = 0;
|
int best_match = 0;
|
||||||
int diff = ABS(id.size - ((int64_t)face->available_sizes[0].width));
|
int diff = ABS(id.size - ((int64_t)face->available_sizes[0].width));
|
||||||
|
|
Loading…
Reference in New Issue