X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fitem%2Fcontainer.c;h=6241cee03968c077249d62bfbdcb8b81a91ec3a9;hb=129ac6d2e1c51e90e97c96085858bc586fb7ec24;hp=b29eea0b80ea70c8ed805682d6e38665cd580b8f;hpb=222228f3a13c61dd01668e201bfdfd437598ebe4;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/item/container.c b/qcsrc/menu/item/container.c index b29eea0b8..6241cee03 100644 --- a/qcsrc/menu/item/container.c +++ b/qcsrc/menu/item/container.c @@ -9,7 +9,7 @@ CLASS(Container) EXTENDS(Item) METHOD(Container, mouseRelease, float(entity, vector)) METHOD(Container, focusLeave, void(entity)) METHOD(Container, resizeNotify, void(entity, vector, vector, vector, vector)) - METHOD(Container, resizeNotifyLie, void(entity, vector, vector, vector, vector, .vector, .vector)) + METHOD(Container, resizeNotifyLie, void(entity, vector, vector, vector, vector, .vector, .vector, .vector)) METHOD(Container, addItem, void(entity, entity, vector, vector, float)) METHOD(Container, addItemCentered, void(entity, entity, vector, float)) METHOD(Container, moveItemAfter, void(entity, entity, entity)) @@ -25,6 +25,10 @@ CLASS(Container) EXTENDS(Item) ATTRIB(Container, lastChild, entity, NULL) ATTRIB(Container, focusedChild, entity, NULL) ATTRIB(Container, shown, float, 0) + + METHOD(Container, enterSubitem, void(entity, entity)) + METHOD(Container, enterLieSubitem, void(entity, vector, vector, vector, float)) + METHOD(Container, leaveSubitem, void(entity)) ENDCLASS(Container) .entity nextSibling; .entity prevSibling; @@ -33,9 +37,40 @@ ENDCLASS(Container) .vector Container_size; .vector Container_fontscale; .float Container_alpha; +.vector Container_save_shift; +.vector Container_save_scale; +.vector Container_save_fontscale; +.float Container_save_alpha; #endif #ifdef IMPLEMENTATION +void Container_enterSubitem(entity me, entity sub) +{ + me.enterLieSubitem(me, sub.Container_origin, sub.Container_size, sub.Container_fontscale, sub.Container_alpha); +} + +void Container_enterLieSubitem(entity me, vector o, vector s, vector f, float a) +{ + me.Container_save_shift = draw_shift; + me.Container_save_scale = draw_scale; + me.Container_save_alpha = draw_alpha; + me.Container_save_fontscale = draw_fontscale; + + draw_shift = boxToGlobal(o, draw_shift, draw_scale); + draw_scale = boxToGlobalSize(s, draw_scale); + if(f != '0 0 0') + draw_fontscale = boxToGlobalSize(f, draw_fontscale); + draw_alpha *= a; +} + +void Container_leaveSubitem(entity me) +{ + draw_shift = me.Container_save_shift; + draw_scale = me.Container_save_scale; + draw_alpha = me.Container_save_alpha; + draw_fontscale = me.Container_save_fontscale; +} + void Container_showNotify(entity me) { entity e; @@ -73,7 +108,7 @@ void Container_setAlphaOf(entity me, entity other, float theAlpha) other.Container_alpha = theAlpha; } -void Container_resizeNotifyLie(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize, .vector originField, .vector sizeField) +void Container_resizeNotifyLie(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize, .vector originField, .vector sizeField, .vector fontScaleField) { entity e; vector o, s; @@ -82,7 +117,9 @@ void Container_resizeNotifyLie(entity me, vector relOrigin, vector relSize, vect { o = e.originField; s = e.sizeField; + me.enterLieSubitem(me, o, s, e.fontScaleField, e.Container_alpha); e.resizeNotify(e, o, s, boxToGlobal(o, absOrigin, absSize), boxToGlobalSize(s, absSize)); + me.leaveSubitem(me); } do { @@ -94,7 +131,9 @@ void Container_resizeNotifyLie(entity me, vector relOrigin, vector relSize, vect d = 1; o = e.originField; s = e.sizeField; + me.enterLieSubitem(me, o, s, e.fontScaleField, e.Container_alpha); e.resizeNotify(e, o, s, boxToGlobal(o, absOrigin, absSize), boxToGlobalSize(s, absSize)); + me.leaveSubitem(me); } } while(d); @@ -103,7 +142,7 @@ void Container_resizeNotifyLie(entity me, vector relOrigin, vector relSize, vect void Container_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { - me.resizeNotifyLie(me, relOrigin, relSize, absOrigin, absSize, Container_origin, Container_size); + me.resizeNotifyLie(me, relOrigin, relSize, absOrigin, absSize, Container_origin, Container_size, Container_fontscale); } entity Container_itemFromPoint(entity me, vector pos) @@ -125,16 +164,8 @@ entity Container_itemFromPoint(entity me, vector pos) void Container_draw(entity me) { - vector oldshift; - vector oldscale; - float oldalpha; - vector oldfontscale; entity e; - oldshift = draw_shift; - oldscale = draw_scale; - oldalpha = draw_alpha; - oldfontscale = draw_fontscale; me.focusable = 0; for(e = me.firstChild; e; e = e.nextSibling) { @@ -142,18 +173,13 @@ void Container_draw(entity me) me.focusable += 1; if(e.Container_alpha < 0.003) // can't change color values anyway continue; - draw_shift = boxToGlobal(e.Container_origin, oldshift, oldscale); - draw_scale = boxToGlobalSize(e.Container_size, oldscale); - if(e.Container_fontscale != '0 0 0') - draw_fontscale = boxToGlobalSize(e.Container_fontscale, oldfontscale); - draw_alpha *= e.Container_alpha; + me.enterSubitem(me, e); e.draw(e); - draw_shift = oldshift; - draw_scale = oldscale; - draw_fontscale = oldfontscale; - draw_alpha = oldalpha; + me.leaveSubitem(me); } -}; + + SUPER(Container).draw(me); +} void Container_focusLeave(entity me) { @@ -163,51 +189,87 @@ void Container_focusLeave(entity me) float Container_keyUp(entity me, float scan, float ascii, float shift) { entity f; + float r; f = me.focusedChild; if(f) - return f.keyUp(f, scan, ascii, shift); + { + me.enterSubitem(me, f); + r = f.keyUp(f, scan, ascii, shift); + me.leaveSubitem(me); + return r; + } return 0; } float Container_keyDown(entity me, float scan, float ascii, float shift) { entity f; + float r; f = me.focusedChild; if(f) - return f.keyDown(f, scan, ascii, shift); + { + me.enterSubitem(me, f); + r = f.keyDown(f, scan, ascii, shift); + me.leaveSubitem(me); + return r; + } return 0; } float Container_mouseMove(entity me, vector pos) { entity f; + float r; f = me.focusedChild; if(f) - return f.mouseMove(f, globalToBox(pos, f.Container_origin, f.Container_size)); + { + me.enterSubitem(me, f); + r = f.mouseMove(f, globalToBox(pos, f.Container_origin, f.Container_size)); + me.leaveSubitem(me); + return r; + } return 0; } float Container_mousePress(entity me, vector pos) { entity f; + float r; f = me.focusedChild; if(f) - return f.mousePress(f, globalToBox(pos, f.Container_origin, f.Container_size)); + { + me.enterSubitem(me, f); + r = f.mousePress(f, globalToBox(pos, f.Container_origin, f.Container_size)); + me.leaveSubitem(me); + return r; + } return 0; } float Container_mouseDrag(entity me, vector pos) { entity f; + float r; f = me.focusedChild; if(f) - return f.mouseDrag(f, globalToBox(pos, f.Container_origin, f.Container_size)); + { + me.enterSubitem(me, f); + r = f.mouseDrag(f, globalToBox(pos, f.Container_origin, f.Container_size)); + me.leaveSubitem(me); + return r; + } return 0; } float Container_mouseRelease(entity me, vector pos) { entity f; + float r; f = me.focusedChild; if(f) - return f.mouseRelease(f, globalToBox(pos, f.Container_origin, f.Container_size)); + { + me.enterSubitem(me, f); + r = f.mouseRelease(f, globalToBox(pos, f.Container_origin, f.Container_size)); + me.leaveSubitem(me); + return r; + } return 0; } @@ -242,8 +304,7 @@ void Container_addItem(entity me, entity other, vector theOrigin, vector theSize other.Container_size = theSize; me.setAlphaOf(me, other, theAlpha); - entity f, l; - f = me.firstChild; + entity l; l = me.lastChild; if(l) @@ -268,9 +329,7 @@ void Container_removeItem(entity me, entity other) other.parent = NULL; - entity n, p, f, l; - f = me.firstChild; - l = me.lastChild; + entity n, p; n = other.nextSibling; p = other.prevSibling; @@ -309,13 +368,11 @@ void Container_setFocus(entity me, entity other) void Container_moveItemAfter(entity me, entity other, entity dest) { // first: remove other from the chain - entity n, p, f, l; + entity n, p; if(other.parent != me) error("Can't move in wrong container!"); - f = me.firstChild; - l = me.lastChild; n = other.nextSibling; p = other.prevSibling;