From 84cc99d55973db2fcf7aaf9335f569db4e0fc9d8 Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Sun, 16 Mar 2025 00:22:39 +0200 Subject: [PATCH] client: center chars in ttf font --- src/client/refresh/gl1/gl1_draw.c | 12 +++++++++--- src/client/refresh/gl3/gl3_draw.c | 10 ++++++++-- src/client/refresh/gl4/gl4_draw.c | 10 ++++++++-- src/client/refresh/vk/vk_draw.c | 10 ++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/client/refresh/gl1/gl1_draw.c b/src/client/refresh/gl1/gl1_draw.c index 221a4ec0..f078deb3 100644 --- a/src/client/refresh/gl1/gl1_draw.c +++ b/src/client/refresh/gl1/gl1_draw.c @@ -112,18 +112,24 @@ RDraw_StringScaled(int x, int y, float scale, qboolean alt, const char *message) if (value >= 32 && value < MAX_FONTCODE) { + float xf = 0, yf = 0, xdiff; stbtt_aligned_quad q; - float xf = 0, yf = 0; stbtt_GetBakedQuad(draw_fontcodes, gl_font_height, gl_font_height, value - 32, &xf, &yf, &q, 1); + xdiff = (8 - xf / font_scale) / 2; + if (xdiff < 0) + { + xdiff = 0; + } + R_UpdateGLBuffer(buf_2d, alt ? draw_font_alt->texnum : draw_font->texnum, 0, 0, 1); R_Buffer2DQuad( - (float)(x + q.x0 * scale / font_scale), + (float)(x + (xdiff + q.x0 / font_scale) * scale), (float)(y + q.y0 * scale / font_scale + 8 * scale), - x + q.x1 * scale / font_scale, + x + (xdiff + q.x1 / font_scale) * scale, y + q.y1 * scale / font_scale + 8 * scale, q.s0, q.t0, q.s1, q.t1); x += Q_max(8, xf / font_scale) * scale; diff --git a/src/client/refresh/gl3/gl3_draw.c b/src/client/refresh/gl3/gl3_draw.c index f692c9e8..4ca3faee 100644 --- a/src/client/refresh/gl3/gl3_draw.c +++ b/src/client/refresh/gl3/gl3_draw.c @@ -184,16 +184,22 @@ GL3_Draw_StringScaled(int x, int y, float scale, qboolean alt, const char *messa if (value >= 32 && value < MAX_FONTCODE) { + float xf = 0, yf = 0, xdiff; stbtt_aligned_quad q; - float xf = 0, yf = 0; stbtt_GetBakedQuad(draw_fontcodes, gl3_font_height, gl3_font_height, value - 32, &xf, &yf, &q, 1); + xdiff = (8 - xf / font_scale) / 2; + if (xdiff < 0) + { + xdiff = 0; + } + GL3_UseProgram(gl3state.si2D.shaderProgram); GL3_Bind(alt ? draw_font_alt->texnum : draw_font->texnum); drawTexturedRectangle( - (float)(x + q.x0 * scale / font_scale), + (float)(x + (xdiff + q.x0 / font_scale) * scale), (float)(y + q.y0 * scale / font_scale + 8 * scale), (q.x1 - q.x0) * scale / font_scale, (q.y1 - q.y0) * scale / font_scale, diff --git a/src/client/refresh/gl4/gl4_draw.c b/src/client/refresh/gl4/gl4_draw.c index 891848ce..a2b82ee4 100644 --- a/src/client/refresh/gl4/gl4_draw.c +++ b/src/client/refresh/gl4/gl4_draw.c @@ -184,16 +184,22 @@ GL4_Draw_StringScaled(int x, int y, float scale, qboolean alt, const char *messa if (value >= 32 && value < MAX_FONTCODE) { + float xf = 0, yf = 0, xdiff; stbtt_aligned_quad q; - float xf = 0, yf = 0; stbtt_GetBakedQuad(draw_fontcodes, gl4_font_height, gl4_font_height, value - 32, &xf, &yf, &q, 1); + xdiff = (8 - xf / font_scale) / 2; + if (xdiff < 0) + { + xdiff = 0; + } + GL4_UseProgram(gl4state.si2D.shaderProgram); GL4_Bind(alt ? draw_font_alt->texnum : draw_font->texnum); drawTexturedRectangle( - (float)(x + q.x0 * scale / font_scale), + (float)(x + (xdiff + q.x0 / font_scale) * scale), (float)(y + q.y0 * scale / font_scale + 8 * scale), (q.x1 - q.x0) * scale / font_scale, (q.y1 - q.y0) * scale / font_scale, diff --git a/src/client/refresh/vk/vk_draw.c b/src/client/refresh/vk/vk_draw.c index d3eec34d..b644e75b 100644 --- a/src/client/refresh/vk/vk_draw.c +++ b/src/client/refresh/vk/vk_draw.c @@ -109,13 +109,19 @@ RE_Draw_StringScaled(int x, int y, float scale, qboolean alt, const char *messag if (value >= 32 && value < MAX_FONTCODE) { + float xf = 0, yf = 0, xdiff; stbtt_aligned_quad q; - float xf = 0, yf = 0; stbtt_GetBakedQuad(draw_fontcodes, vk_font_height, vk_font_height, value - 32, &xf, &yf, &q, 1); - QVk_DrawTexRect((float)(x + q.x0 * scale / font_scale) / vid.width, + xdiff = (8 - xf / font_scale) / 2; + if (xdiff < 0) + { + xdiff = 0; + } + + QVk_DrawTexRect((float)(x + (xdiff + q.x0 / font_scale) * scale) / vid.width, (float)(y + q.y0 * scale / font_scale + 8 * scale) / vid.height, (q.x1 - q.x0) * scale / font_scale / vid.width, (q.y1 - q.y0) * scale / font_scale / vid.height,