From cfb6f11dfedc1b0d3b8ac75dcf5686ca85a25a3e Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 1 Jan 2022 22:50:20 +1100 Subject: [PATCH] Webclient: Make system fonts render closer to how they are rendered on desktop/mobile --- src/Drawer2D.c | 5 ++++- src/interop_web.js | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Drawer2D.c b/src/Drawer2D.c index 11da59a02..ced0a8356 100644 --- a/src/Drawer2D.c +++ b/src/Drawer2D.c @@ -696,7 +696,7 @@ void Font_GetNames(struct StringsBuffer* buffer) { cc_result Font_Make(struct FontDesc* desc, const cc_string* fontName, int size, int flags) { desc->size = size; desc->flags = flags; - desc->height = size; + desc->height = Drawer2D_AdjHeight(size); desc->handle = Mem_TryAlloc(fontName->length + 1, 1); if (!desc->handle) return 0; @@ -738,6 +738,9 @@ static void Font_SysTextDraw(struct DrawTextArgs* args, struct Bitmap* bmp, int char buffer[NATIVE_STR_LEN]; int len = Platform_EncodeUtf8(buffer, &args->text); + /* adjust y position to more closely match FreeType drawn text */ + y += (args->font->height - args->font->size) / 2; + interop_SetFont(font->handle, font->size, font->flags); interop_TextDraw(buffer, len, bmp, x, y, shadow); } diff --git a/src/interop_web.js b/src/interop_web.js index 545255436..fdeddea8d 100644 --- a/src/interop_web.js +++ b/src/interop_web.js @@ -828,6 +828,7 @@ mergeInto(LibraryManager.library, { var prefix = ''; if (flags & 1) prefix += 'Bold '; + size += 4; // adjust font size so text appears more like FreeType var font = UTF8ToString(fontStr); var ctx = window.FONT_CONTEXT; @@ -889,13 +890,14 @@ mergeInto(LibraryManager.library, { for (var x = 0; x < img_width; x++) { - var xx = x + dstX; - if (xx < 0 || xx >= dst_width) continue; + var xx = x + dstX; + if (xx < 0 || xx >= dst_width) continue; + var I = src_pixels[src_row + (x<<2)+3], invI = 255 - I|0; - HEAPU8[dst_row + (x<<2)+0] = src_pixels[src_row + (x<<2)+0]; - HEAPU8[dst_row + (x<<2)+1] = src_pixels[src_row + (x<<2)+1]; - HEAPU8[dst_row + (x<<2)+2] = src_pixels[src_row + (x<<2)+2]; - HEAPU8[dst_row + (x<<2)+3] = src_pixels[src_row + (x<<2)+3]; + HEAPU8[dst_row + (x<<2)+0] = ((src_pixels[src_row + (x<<2)+0] * I) >> 8) + ((HEAPU8[dst_row + (x<<2)+0] * invI) >> 8); + HEAPU8[dst_row + (x<<2)+1] = ((src_pixels[src_row + (x<<2)+1] * I) >> 8) + ((HEAPU8[dst_row + (x<<2)+1] * invI) >> 8); + HEAPU8[dst_row + (x<<2)+2] = ((src_pixels[src_row + (x<<2)+2] * I) >> 8) + ((HEAPU8[dst_row + (x<<2)+2] * invI) >> 8); + HEAPU8[dst_row + (x<<2)+3] = I + ((HEAPU8[dst_row + (x<<2)+3] * invI) >> 8); } } },