X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fdraw.qc;h=12b56d8dae8f2632ef8bbb84c847a2fde28863dd;hp=cec73d6c0a2f146d89b9298e21723d0976694442;hb=87e0e995192236dcc9a56e0b9766bb7c7e6cfcf3;hpb=4a5cfd617b0f9c3dec82873ce888640a6997bc0f diff --git a/qcsrc/menu/draw.qc b/qcsrc/menu/draw.qc index cec73d6c0..12b56d8da 100644 --- a/qcsrc/menu/draw.qc +++ b/qcsrc/menu/draw.qc @@ -69,6 +69,8 @@ void draw_PreloadPicture(string pic) void draw_Picture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha) { + if(theSize_x == 0 || theSize_y <= 0) // no default sizing please + return; pic = draw_UseSkinFor(pic); drawpic(boxToGlobal(theOrigin, draw_shift, draw_scale), pic, boxToGlobalSize(theSize, draw_scale), theColor, theAlpha * draw_alpha, 0); } @@ -174,11 +176,40 @@ void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector the theAlpha *= draw_alpha; width = eX * theSize_x; height = eY * theSize_y; - if(theSize_x <= theBorderSize_x * 2) + // zero size? bail out, we cannot handle this + if(theSize_x <= 0 || theSize_y <= 0) + return; + if(theBorderSize_x <= 0) // no x border + { + if(theBorderSize_y <= 0) + { + drawsubpic(theOrigin, width + height, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0); + } + else if(theSize_y <= theBorderSize_y * 2) + { + // not high enough... draw just top and bottom then + bH = eY * (0.25 * theSize_y / (theBorderSize_y * 2)); + drawsubpic(theOrigin, width + height * 0.5, pic, '0.25 0 0', '0.5 0 0' + bH, theColor, theAlpha, 0); + drawsubpic(theOrigin + height * 0.5, width + height * 0.5, pic, '0.25 0 0' + eY - bH, '0.5 0 0' + bH, theColor, theAlpha, 0); + } + else + { + dY = theBorderSize_y * eY; + drawsubpic(theOrigin, width + dY, pic, '0.25 0 0', '0.5 0.25 0', theColor, theAlpha, 0); + drawsubpic(theOrigin + dY, width + height - 2 * dY, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0); + drawsubpic(theOrigin + height - dY, width + dY, pic, '0.25 0.75 0', '0.5 0.25 0', theColor, theAlpha, 0); + } + } + else if(theSize_x <= theBorderSize_x * 2) { // not wide enough... draw just left and right then bW = eX * (0.25 * theSize_x / (theBorderSize_x * 2)); - if(theSize_y <= theBorderSize_y * 2) + if(theBorderSize_y <= 0) + { + drawsubpic(theOrigin, width * 0.5 + height, pic, '0 0.25 0', '0 0.5 0' + bW, theColor, theAlpha, 0); + drawsubpic(theOrigin + width * 0.5, width * 0.5 + height, pic, '0 0.25 0' + eX - bW, '0 0.5 0' + bW, theColor, theAlpha, 0); + } + else if(theSize_y <= theBorderSize_y * 2) { // not high enough... draw just corners bH = eY * (0.25 * theSize_y / (theBorderSize_y * 2)); @@ -189,7 +220,7 @@ void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector the } else { - dY = theBorderSize_x * eY; + dY = theBorderSize_y * eY; drawsubpic(theOrigin, width * 0.5 + dY, pic, '0 0 0', '0 0.25 0' + bW, theColor, theAlpha, 0); drawsubpic(theOrigin + width * 0.5, width * 0.5 + dY, pic, '0 0 0' + eX - bW, '0 0.25 0' + bW, theColor, theAlpha, 0); drawsubpic(theOrigin + dY, width * 0.5 + height - 2 * dY, pic, '0 0.25 0', '0 0.5 0' + bW, theColor, theAlpha, 0); @@ -200,7 +231,14 @@ void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector the } else { - if(theSize_y <= theBorderSize_y * 2) + if(theBorderSize_y <= 0) + { + dX = theBorderSize_x * eX; + drawsubpic(theOrigin, dX + height, pic, '0 0.25 0', '0.25 0.5 0', theColor, theAlpha, 0); + drawsubpic(theOrigin + dX, width - 2 * dX + height, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0); + drawsubpic(theOrigin + width - dX, dX + height, pic, '0.75 0.25 0', '0.25 0.5 0', theColor, theAlpha, 0); + } + else if(theSize_y <= theBorderSize_y * 2) { // not high enough... draw just top and bottom then bH = eY * (0.25 * theSize_y / (theBorderSize_y * 2)); @@ -215,7 +253,7 @@ void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector the else { dX = theBorderSize_x * eX; - dY = theBorderSize_x * eY; + dY = theBorderSize_y * eY; drawsubpic(theOrigin, dX + dY, pic, '0 0 0', '0.25 0.25 0', theColor, theAlpha, 0); drawsubpic(theOrigin + dX, width - 2 * dX + dY, pic, '0.25 0 0', '0.5 0.25 0', theColor, theAlpha, 0); drawsubpic(theOrigin + width - dX, dX + dY, pic, '0.75 0 0', '0.25 0.25 0', theColor, theAlpha, 0); @@ -244,14 +282,14 @@ void draw_Text(vector theOrigin, string theText, vector theSize, vector theColor } void draw_CenterText(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz) { - //print(strcat("orig = ", vtos(theOrigin) ," tx = ", ftos(draw_TextWidth(theText, ICanHasKallerz, theSize)), "\n")); + //dprint(strcat("orig = ", vtos(theOrigin) ," tx = ", ftos(draw_TextWidth(theText, ICanHasKallerz, theSize)), "\n")); draw_Text(theOrigin - eX * 0.5 * draw_TextWidth(theText, ICanHasKallerz, theSize), theText, theSize, theColor, theAlpha, ICanHasKallerz); } float draw_TextWidth(string theText, float ICanHasKallerz, vector SizeThxBye) { //return strlen(theText); - //print("draw_TextWidth \"", theText, "\"\n"); + //dprint("draw_TextWidth \"", theText, "\"\n"); vector v; v = '0 0 0'; //float r;