[rdtk] code cleanups

This commit is contained in:
Armin Novak 2023-08-01 07:30:25 +02:00 committed by akallabeth
parent 21cfc456f5
commit 007ca8b646

View File

@ -123,11 +123,6 @@ int rdtk_font_draw_text(rdtkSurface* surface, uint16_t nXDst, uint16_t nYDst, rd
int rdtk_font_text_draw_size(rdtkFont* font, uint16_t* width, uint16_t* height, const char* text)
{
size_t index;
size_t length;
size_t glyphIndex;
rdtkGlyph* glyph;
WINPR_ASSERT(font);
WINPR_ASSERT(width);
WINPR_ASSERT(height);
@ -135,15 +130,14 @@ int rdtk_font_text_draw_size(rdtkFont* font, uint16_t* width, uint16_t* height,
*width = 0;
*height = 0;
length = strlen(text);
for (index = 0; index < length; index++)
const size_t length = strlen(text);
for (size_t index = 0; index < length; index++)
{
glyphIndex = text[index] - 32;
const size_t glyphIndex = text[index] - 32;
if (glyphIndex < font->glyphCount)
{
glyph = &font->glyphs[glyphIndex];
rdtkGlyph* glyph = &font->glyphs[glyphIndex];
*width += (glyph->width + 1);
}
}
@ -157,15 +151,12 @@ static char* rdtk_font_load_descriptor_file(const char* filename, size_t* pSize)
WINPR_ASSERT(filename);
WINPR_ASSERT(pSize);
uint8_t* buffer;
FILE* fp = NULL;
size_t readSize;
union
{
size_t s;
INT64 i64;
} fileSize;
fp = winpr_fopen(filename, "r");
FILE* fp = winpr_fopen(filename, "r");
if (!fp)
return NULL;
@ -180,7 +171,7 @@ static char* rdtk_font_load_descriptor_file(const char* filename, size_t* pSize)
return NULL;
}
buffer = (uint8_t*)malloc(fileSize.s + 2);
uint8_t* buffer = (uint8_t*)malloc(fileSize.s + 2);
if (!buffer)
{
@ -188,8 +179,7 @@ static char* rdtk_font_load_descriptor_file(const char* filename, size_t* pSize)
return NULL;
}
readSize = fread(buffer, fileSize.s, 1, fp);
size_t readSize = fread(buffer, fileSize.s, 1, fp);
if (readSize == 0)
{
if (!ferror(fp))
@ -215,7 +205,7 @@ static int rdtk_font_convert_descriptor_code_to_utf8(const char* str, uint8_t* u
WINPR_ASSERT(str);
WINPR_ASSERT(utf8);
size_t len = strlen(str);
const size_t len = strlen(str);
*((uint32_t*)utf8) = 0;
if (len < 1)
@ -250,15 +240,6 @@ static int rdtk_font_convert_descriptor_code_to_utf8(const char* str, uint8_t* u
static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, size_t size)
{
char* q;
char* r;
char* beg;
char* end;
char* tok[4];
int index;
int count;
rdtkGlyph* glyph;
WINPR_ASSERT(font);
char* p = strstr((char*)buffer, "<?xml version=\"1.0\" encoding=\"utf-8\"?>");
@ -274,7 +255,7 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
p += sizeof("<Font ") - 1;
/* find closing font tag */
end = strstr(p, "</Font>");
char* end = strstr(p, "</Font>");
if (!end)
return -1;
@ -286,7 +267,7 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
return -1;
p += sizeof("size=\"") - 1;
q = strchr(p, '"');
char* q = strchr(p, '"');
if (!q)
return -1;
@ -377,8 +358,8 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
p = q + 1;
// printf("size: %d family: %s height: %d style: %s\n",
// font->size, font->family, font->height, font->style);
beg = p;
count = 0;
char* beg = p;
size_t count = 0;
while (p < end)
{
@ -388,7 +369,7 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
return -1;
p += sizeof("<Char ") - 1;
r = strstr(p, "/>");
char* r = strstr(p, "/>");
if (!r)
return -1;
@ -399,7 +380,10 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
count++;
}
font->glyphCount = count;
if (count > UINT16_MAX)
return -1;
font->glyphCount = (uint16_t)count;
font->glyphs = NULL;
if (count > 0)
@ -409,7 +393,7 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
return -1;
p = beg;
index = 0;
size_t index = 0;
while (p < end)
{
@ -419,14 +403,17 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
return -1;
p += sizeof("<Char ") - 1;
r = strstr(p, "/>");
char* r = strstr(p, "/>");
if (!r)
return -1;
*r = '\0';
/* start parsing glyph */
glyph = &font->glyphs[index];
if (index > font->glyphCount)
return -1;
rdtkGlyph* glyph = &font->glyphs[index];
/* parse glyph width */
p = strstr(p, "width=\"");
@ -467,6 +454,7 @@ static int rdtk_font_parse_descriptor_buffer(rdtkFont* font, uint8_t* buffer, si
if (!q)
return -1;
char* tok[4] = { 0 };
*q = '\0';
tok[0] = p;
p = strchr(tok[0] + 1, ' ');
@ -604,8 +592,7 @@ static int rdtk_font_load_descriptor(rdtkFont* font, const char* filename)
rdtkFont* rdtk_font_new(rdtkEngine* engine, const char* path, const char* file)
{
int status;
size_t length;
size_t length = 0;
rdtkFont* font = NULL;
char* fontImageFile = NULL;
char* fontDescriptorFile = NULL;
@ -615,25 +602,17 @@ rdtkFont* rdtk_font_new(rdtkEngine* engine, const char* path, const char* file)
WINPR_ASSERT(file);
char* fontBaseFile = GetCombinedPath(path, file);
if (!fontBaseFile)
goto cleanup;
length = strlen(fontBaseFile);
fontImageFile = (char*)malloc(length + 8);
winpr_asprintf(&fontImageFile, &length, "%s." FILE_EXT, fontBaseFile);
if (!fontImageFile)
goto cleanup;
sprintf_s(fontImageFile, length + 8, "%s." FILE_EXT, fontBaseFile);
fontDescriptorFile = (char*)malloc(length + 8);
winpr_asprintf(&fontDescriptorFile, &length, "%s.xml", fontBaseFile);
if (!fontDescriptorFile)
goto cleanup;
sprintf_s(fontDescriptorFile, length + 8, "%s.xml", fontBaseFile);
if (!winpr_PathFileExists(fontImageFile))
goto cleanup;
@ -651,14 +630,12 @@ rdtkFont* rdtk_font_new(rdtkEngine* engine, const char* path, const char* file)
if (!font->image)
goto cleanup;
status = winpr_image_read(font->image, fontImageFile);
const int status = winpr_image_read(font->image, fontImageFile);
if (status < 0)
goto cleanup;
status = rdtk_font_load_descriptor(font, fontDescriptorFile);
if (status < 0)
const int status2 = rdtk_font_load_descriptor(font, fontDescriptorFile);
if (status2 < 0)
goto cleanup;
free(fontBaseFile);
@ -670,14 +647,7 @@ cleanup:
free(fontImageFile);
free(fontDescriptorFile);
if (font)
{
if (font->image)
winpr_image_free(font->image, TRUE);
free(font);
}
rdtk_font_free(font);
return NULL;
}
@ -686,7 +656,6 @@ static rdtkFont* rdtk_embedded_font_new(rdtkEngine* engine, const uint8_t* image
size_t descriptorSize)
{
size_t size;
int status;
uint8_t* buffer;
WINPR_ASSERT(engine);
@ -705,8 +674,7 @@ static rdtkFont* rdtk_embedded_font_new(rdtkEngine* engine, const uint8_t* image
return NULL;
}
status = winpr_image_read_buffer(font->image, imageData, imageSize);
const int status = winpr_image_read_buffer(font->image, imageData, imageSize);
if (status < 0)
{
winpr_image_free(font->image, TRUE);
@ -718,24 +686,20 @@ static rdtkFont* rdtk_embedded_font_new(rdtkEngine* engine, const uint8_t* image
buffer = (uint8_t*)malloc(size);
if (!buffer)
{
winpr_image_free(font->image, TRUE);
free(font);
return NULL;
}
goto fail;
CopyMemory(buffer, descriptorData, size);
status = rdtk_font_parse_descriptor_buffer(font, buffer, size);
const int status2 = rdtk_font_parse_descriptor_buffer(font, buffer, size);
free(buffer);
if (status < 0)
{
winpr_image_free(font->image, TRUE);
free(font);
return NULL;
}
if (status2 < 0)
goto fail;
return font;
fail:
rdtk_font_free(font);
return NULL;
}
void rdtk_font_free(rdtkFont* font)
@ -754,13 +718,11 @@ int rdtk_font_engine_init(rdtkEngine* engine)
WINPR_ASSERT(engine);
if (!engine->font)
{
SSIZE_T imageSize;
SSIZE_T descriptorSize;
const uint8_t* imageData = NULL;
const uint8_t* descriptorData = NULL;
imageSize =
const SSIZE_T imageSize =
rdtk_get_embedded_resource_file("source_serif_pro_regular_12." FILE_EXT, &imageData);
descriptorSize =
const SSIZE_T descriptorSize =
rdtk_get_embedded_resource_file("source_serif_pro_regular_12.xml", &descriptorData);
if ((imageSize < 0) || (descriptorSize < 0))
@ -774,6 +736,7 @@ int rdtk_font_engine_init(rdtkEngine* engine)
return 1;
}
int rdtk_font_engine_uninit(rdtkEngine* engine)
{
WINPR_ASSERT(engine);