]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/miscfunctions.qc
Something can be done for drawpic_aspect too
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / miscfunctions.qc
index 049368c1636b07944ae7de43de10008dfbbd9da2..adc72221e5dc658568602a81ef9a54375578786f 100644 (file)
@@ -460,43 +460,47 @@ void drawpic_tiled(vector pos, string pic, vector sz, vector area, vector color,
 }
 
 // drawpic wrapper to draw an image as large as possible with preserved aspect ratio into a box
-var float imgaspect;
-var float aspect;
+var float _drawpic_imgaspect;
+var vector _drawpic_imgsize;
+var vector _drawpic_sz;
+var float _drawpic_oldsz;
+var string _drawpic_picpath;
 #define drawpic_aspect(pos,pic,mySize,color,alpha,drawflag)\
        do {\
-               vector imgsize;\
-               imgsize = drawgetimagesize(pic);\
-               imgaspect = imgsize_x/imgsize_y;\
-               vector oldsz, sz;\
-               oldsz = sz = mySize;\
-               aspect = sz_x/sz_y;\
-               if(aspect > imgaspect) {\
-                       sz_x = sz_y * imgaspect;\
-                       drawpic(pos + eX * (oldsz_x - sz_x) * 0.5, pic, sz, color, alpha, drawflag);\
+               _drawpic_imgsize = drawgetimagesize(pic);\
+               _drawpic_imgaspect = _drawpic_imgsize_x/_drawpic_imgsize_y;\
+               _drawpic_sz = mySize;\
+               if(_drawpic_sz_x/_drawpic_sz_y > _drawpic_imgaspect) {\
+                       _drawpic_oldsz = _drawpic_sz_x;\
+                       _drawpic_sz_x = _drawpic_sz_y * _drawpic_imgaspect;\
+                       drawpic(pos + eX * (_drawpic_oldsz - _drawpic_sz_x) * 0.5, pic, _drawpic_sz, color, alpha, drawflag);\
                } else {\
-                       sz_y = sz_x / imgaspect;\
-                       drawpic(pos + eY * (oldsz_y - sz_y) * 0.5, pic, sz, color, alpha, drawflag);\
+                       _drawpic_oldsz = _drawpic_sz_y;\
+                       _drawpic_sz_y = _drawpic_sz_x / _drawpic_imgaspect;\
+                       drawpic(pos + eY * (_drawpic_oldsz - _drawpic_sz_y) * 0.5, pic, _drawpic_sz, color, alpha, drawflag);\
                }\
        } while(0)
 
 // draw HUD element with image from gfx/hud/hud_skin/foo.tga if it exists, otherwise gfx/hud/default/foo.tga
 #define drawpic_aspect_skin(pos,pic,sz,color,alpha,drawflag)\
        do{\
-               picpath = strcat(hud_skin_path, "/", pic);\
-               if(precache_pic(picpath) == "") {\
-                       picpath = strcat("gfx/hud/default/", pic);\
+               _drawpic_picpath = strcat(hud_skin_path, "/", pic);\
+               if(precache_pic(_drawpic_picpath) == "") {\
+                       _drawpic_picpath = strcat("gfx/hud/default/", pic);\
                }\
-               drawpic_aspect(pos, picpath, sz, color, alpha, drawflag);\
+               drawpic_aspect(pos, _drawpic_picpath, sz, color, alpha, drawflag);\
+               _drawpic_picpath = string_null;\
        } while(0)
 
 // draw HUD element with image from gfx/hud/hud_skin/foo.tga if it exists, otherwise gfx/hud/default/foo.tga
 #define drawpic_skin(pos,pic,sz,color,alpha,drawflag)\
        do{\
-               picpath = strcat(hud_skin_path, "/", pic);\
-               if(precache_pic(picpath) == "") {\
-                       picpath = strcat("gfx/hud/default/", pic);\
+               _drawpic_picpath = strcat(hud_skin_path, "/", pic);\
+               if(precache_pic(_drawpic_picpath) == "") {\
+                       _drawpic_picpath = strcat("gfx/hud/default/", pic);\
                }\
-               drawpic(pos, picpath, sz, color, alpha, drawflag);\
+               drawpic(pos, _drawpic_picpath, sz, color, alpha, drawflag);\
+               _drawpic_picpath = string_null;\
        } while(0)
 
 void drawpic_aspect_skin_expanding(vector position, string pic, vector scale, vector rgb, float alpha, float flag, float fadelerp)
@@ -515,45 +519,31 @@ void drawpic_aspect_skin_expanding_two(vector position, string pic, vector scale
 
 // drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box
 void drawstring_aspect(vector pos, string text, vector sz, vector color, float alpha, float drawflag) {
-       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) {
+       float textaspect, oldsz;
+       textaspect = stringwidth(text, FALSE, '1 1 1' * sz_y) / sz_y;
+       if(sz_x/sz_y > textaspect) {
+               oldsz = sz_x;
                sz_x = sz_y * textaspect;
-               drawstring(pos + eX * (oldsz_x - sz_x) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag);
+               drawstring(pos + eX * (oldsz - sz_x) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag);
        } else {
+               oldsz = sz_y;
                sz_y = sz_x / textaspect; 
-               drawstring(pos + eY * (oldsz_y - sz_y) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag);
+               drawstring(pos + eY * (oldsz - sz_y) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag);
        }
 }
 
 // drawstring wrapper to draw a colorcodedstring as large as possible with preserved aspect ratio into a box
 void drawcolorcodedstring_aspect(vector pos, string text, vector sz, float alpha, float drawflag) {
-       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) {
+       float textaspect, oldsz;
+       textaspect = stringwidth(text, TRUE, '1 1 1' * sz_y) / sz_y;
+       if(sz_x/sz_y > textaspect) {
+               oldsz = sz_x;
                sz_x = sz_y * textaspect;
-               drawcolorcodedstring(pos + eX * (oldsz_x - sz_x) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag);
+               drawcolorcodedstring(pos + eX * (oldsz - sz_x) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag);
        } else {
+               oldsz = sz_y;
                sz_y = sz_x / textaspect; 
-               drawcolorcodedstring(pos + eY * (oldsz_y - sz_y) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag);
+               drawcolorcodedstring(pos + eY * (oldsz - sz_y) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag);
        }
 }
 
@@ -574,23 +564,16 @@ void drawstring_expanding(vector position, string text, vector scale, vector rgb
 
 // 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) {
+       float textaspect, oldsz;
+       textaspect = stringwidth(text, FALSE, '1 1 1' * sz_y) / sz_y;
+       if(sz_x/sz_y > textaspect) {
+               oldsz = sz_x;
                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);
+               drawstring_expanding(pos + eX * (oldsz - sz_x) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag, fadelerp);
        } else {
+               oldsz = sz_y;
                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);
+               drawstring_expanding(pos + eY * (oldsz - sz_y) * 0.5, text, '1 1 0' * sz_y, color, alpha, drawflag, fadelerp);
        }
 }
 
@@ -606,23 +589,16 @@ void drawcolorcodedstring_expanding(vector position, string text, vector scale,
 }
 
 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) {
+       float textaspect, oldsz;
+       textaspect = stringwidth(text, TRUE, '1 1 1' * sz_y) / sz_y;
+       if(sz_x/sz_y > textaspect) {
+               oldsz = sz_x;
                sz_x = sz_y * textaspect;
-               drawcolorcodedstring_expanding(pos + eX * (oldsz_x - sz_x) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp);
+               drawcolorcodedstring_expanding(pos + eX * (oldsz - sz_x) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp);
        } else {
+               oldsz = sz_y;
                sz_y = sz_x / textaspect; 
-               drawcolorcodedstring_expanding(pos + eY * (oldsz_y - sz_y) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp);
+               drawcolorcodedstring_expanding(pos + eY * (oldsz - sz_y) * 0.5, text, '1 1 0' * sz_y, alpha, drawflag, fadelerp);
        }
 }