Webclient: Make system fonts render closer to how they are rendered on desktop/mobile

This commit is contained in:
UnknownShadow200 2022-01-01 22:50:20 +11:00
parent 465771e2ec
commit cfb6f11dfe
2 changed files with 12 additions and 7 deletions

View File

@ -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);
}

View File

@ -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;
@ -891,11 +892,12 @@ mergeInto(LibraryManager.library, {
{
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);
}
}
},