From ae8e40fb6c548a66ba478207601c92047a42eb1b Mon Sep 17 00:00:00 2001 From: FruitieX Date: Wed, 7 Jul 2010 22:16:37 +0300 Subject: [PATCH] drawstring_expanding, use in race modicon panel --- qcsrc/client/hud.qc | 8 +++---- qcsrc/client/miscfunctions.qc | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 6aedabe22..3c0235e56 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -3940,8 +3940,8 @@ void HUD_Mod_Race(vector pos, vector mySize) } else { drawstring_aspect(pos, "Personal best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(pos + eY * 0.25 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - //drawstring_expanding(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); - //drawstring_expanding(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(pos, "Personal best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(pos + eY * 0.25 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } // server record @@ -3958,8 +3958,8 @@ void HUD_Mod_Race(vector pos, vector mySize) } else { drawstring_aspect(pos + eY * 0.5 * mySize_y, "Server best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(pos + eY * 0.75 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - //drawstring_expanding(pos + eY * 0.5 * mySize_y, "Server best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); - //drawstring_expanding(pos + eY * 0.5 * mySize_y + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t),'1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(pos + eY * 0.5 * mySize_y, "Server best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(pos + eY * 0.75 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } if (race_status != race_status_prev || race_status_name != race_status_name_prev) { diff --git a/qcsrc/client/miscfunctions.qc b/qcsrc/client/miscfunctions.qc index 4d3c74cd5..c573fe305 100644 --- a/qcsrc/client/miscfunctions.qc +++ b/qcsrc/client/miscfunctions.qc @@ -581,6 +581,28 @@ void drawstring_expanding(vector position, string text, vector scale, vector rgb drawfontscale = '1 1 0'; } +// drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box +void drawstring_aspect_expanding(vector pos, string text, vector sz, vector color, float alpha, float drawflag, float fadelerp) { + vector textsize; + textsize = eX * stringwidth(text, FALSE, '1 1 1' * sz_y) + eY * sz_y; + + float textaspect; + textaspect = textsize_x/textsize_y; + + vector oldsz; + oldsz = sz; + float aspect; + aspect = sz_x/sz_y; + + if(aspect > textaspect) { + sz_x = sz_y * textaspect; + drawstring_expanding(pos + eX * (oldsz_x - sz_x) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag, fadelerp); + } else { + sz_y = sz_x / textaspect; + drawstring_expanding(pos + eY * (oldsz_y - sz_y) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag, fadelerp); + } +} + void drawcolorcodedstring_expanding(vector position, string text, vector scale, float alpha, float flag, float fadelerp) { float sz; @@ -592,6 +614,27 @@ void drawcolorcodedstring_expanding(vector position, string text, vector scale, drawfontscale = '1 1 0'; } +void drawcolorcodedstring_aspect_expanding(vector pos, string text, vector sz, float alpha, float drawflag, float fadelerp) { + vector textsize; + textsize = eX * stringwidth(text, TRUE, '1 1 1' * sz_y) + eY * sz_y; + + float textaspect; + textaspect = textsize_x/textsize_y; + + vector oldsz; + oldsz = sz; + float aspect; + aspect = sz_x/sz_y; + + if(aspect > textaspect) { + sz_x = sz_y * textaspect; + drawcolorcodedstring_expanding(pos + eX * (oldsz_x - sz_x) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp); + } else { + sz_y = sz_x / textaspect; + drawcolorcodedstring_expanding(pos + eY * (oldsz_y - sz_y) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp); + } +} + // this draws the triangles of a model DIRECTLY. Don't expect high performance, really... void PolyDrawModel(entity e) { -- 2.39.2