]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/item/inputcontainer.qc
Optimize vehicle impact code by only calling vlen() if damage would be taken
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / inputcontainer.qc
index 8e7f24f73d55dc128a109bbecc959113e5dad464..cda342677262206dd8afb2bcdb011f136ed2edc9 100644 (file)
-#ifndef ITEM_INPUTCONTAINER_H
-#define ITEM_INPUTCONTAINER_H
-#include "container.qc"
-CLASS(InputContainer, Container)
-       METHOD(InputContainer, keyDown, float(entity, float, float, float));
-       METHOD(InputContainer, mouseMove, float(entity, vector));
-       METHOD(InputContainer, mousePress, float(entity, vector));
-       METHOD(InputContainer, mouseRelease, float(entity, vector));
-       METHOD(InputContainer, mouseDrag, float(entity, vector));
-       METHOD(InputContainer, focusLeave, void(entity));
-       METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector));
+#include "inputcontainer.qh"
 
-       METHOD(InputContainer, _changeFocusXY, bool(entity this, vector pos));
-       ATTRIB(InputContainer, mouseFocusedChild, entity, NULL)
-       ATTRIB(InputContainer, isTabRoot, float, 0)
-ENDCLASS(InputContainer)
-#endif
-
-#ifdef IMPLEMENTATION
-void InputContainer_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
-{
-       SUPER(InputContainer).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
-       /*
-       if(me.parent.instanceOfInputContainer)
-               me.isTabRoot = 0;
-       else
-               me.isTabRoot = 1;
-       */
-}
+       void InputContainer_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+       {
+               SUPER(InputContainer).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
+               /*
+               if(me.parent.instanceOfInputContainer)
+                   me.isTabRoot = 0;
+               else
+                   me.isTabRoot = 1;
+               */
+       }
 
-void InputContainer_focusLeave(entity me)
-{
-       SUPER(InputContainer).focusLeave(me);
-       me.mouseFocusedChild = NULL;
-}
+       void InputContainer_focusLeave(entity me)
+       {
+               SUPER(InputContainer).focusLeave(me);
+               me.mouseFocusedChild = NULL;
+       }
 
-float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
-{
-       entity f, ff;
-       if(SUPER(InputContainer).keyDown(me, scan, ascii, shift))
-               return 1;
-       if(scan == K_ESCAPE)
+       float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
        {
-               f = me.focusedChild;
-               if(f)
-               {
-                       me.setFocus(me, NULL);
+               entity f, ff;
+               if (SUPER(InputContainer).keyDown(me, scan, ascii, shift))
                        return 1;
+               if (scan == K_ESCAPE)
+               {
+                       f = me.focusedChild;
+                       if (f)
+                       {
+                               me.setFocus(me, NULL);
+                               return 1;
+                       }
+                       return 0;
                }
-               return 0;
-       }
-       if(scan == K_TAB)
-       {
-               f = me.focusedChild;
-               if(shift & S_SHIFT)
+               if (scan == K_TAB)
                {
-                       if(f)
+                       f = me.focusedChild;
+                       if (shift & S_SHIFT)
                        {
-                               for(ff = f.prevSibling; ff; ff = ff.prevSibling)
+                               if (f)
                                {
-                                       if (!ff.focusable)
-                                               continue;
-                                       me.setFocus(me, ff);
-                                       return 1;
+                                       for (ff = f.prevSibling; ff; ff = ff.prevSibling)
+                                       {
+                                               if (!ff.focusable) continue;
+                                               me.setFocus(me, ff);
+                                               return 1;
+                                       }
                                }
-                       }
-                       if(!f || me.isTabRoot)
-                       {
-                               for(ff = me.lastChild; ff; ff = ff.prevSibling)
+                               if (!f || me.isTabRoot)
                                {
-                                       if (!ff.focusable)
-                                               continue;
-                                       me.setFocus(me, ff);
-                                       return 1;
+                                       for (ff = me.lastChild; ff; ff = ff.prevSibling)
+                                       {
+                                               if (!ff.focusable) continue;
+                                               me.setFocus(me, ff);
+                                               return 1;
+                                       }
+                                       return 0;  // AIIIIEEEEE!
                                }
-                               return 0; // AIIIIEEEEE!
                        }
-               }
-               else
-               {
-                       if(f)
+                       else
                        {
-                               for(ff = f.nextSibling; ff; ff = ff.nextSibling)
+                               if (f)
                                {
-                                       if (!ff.focusable)
-                                               continue;
-                                       me.setFocus(me, ff);
-                                       return 1;
+                                       for (ff = f.nextSibling; ff; ff = ff.nextSibling)
+                                       {
+                                               if (!ff.focusable) continue;
+                                               me.setFocus(me, ff);
+                                               return 1;
+                                       }
                                }
-                       }
-                       if(!f || me.isTabRoot)
-                       {
-                               for(ff = me.firstChild; ff; ff = ff.nextSibling)
+                               if (!f || me.isTabRoot)
                                {
-                                       if (!ff.focusable)
-                                               continue;
-                                       me.setFocus(me, ff);
-                                       return 1;
+                                       for (ff = me.firstChild; ff; ff = ff.nextSibling)
+                                       {
+                                               if (!ff.focusable) continue;
+                                               me.setFocus(me, ff);
+                                               return 1;
+                                       }
+                                       return 0;  // AIIIIEEEEE!
                                }
-                               return 0; // AIIIIEEEEE!
                        }
                }
+               return 0;
        }
-       return 0;
-}
 
-bool InputContainer__changeFocusXY(entity this, vector pos)
-{
-       entity e = this.itemFromPoint(this, pos);
-       if (e && !e.focusable) e = NULL;
-       entity prev = this.mouseFocusedChild;
-       this.mouseFocusedChild = e;
-       if (!e) return false; // keep focus when hovering over non-focusable elements
-       if (e != prev) {
-               this.setFocus(this, e);
-               if (e.instanceOfInputContainer) {
-                       e.focusedChild = NULL;
-                       e._changeFocusXY(e, globalToBox(pos, e.Container_origin, e.Container_size));
+       bool InputContainer__changeFocusXY(entity this, vector pos)
+       {
+               entity e = this.itemFromPoint(this, pos);
+               if (e && !e.focusable) e = NULL;
+               entity prev = this.mouseFocusedChild;
+               this.mouseFocusedChild = e;
+               if (e != prev)
+               {
+                       this.setFocus(this, e);
+                       if (e && e.instanceOfInputContainer)
+                       {
+                               e.focusedChild = NULL;
+                               e._changeFocusXY(e, globalToBox(pos, e.Container_origin, e.Container_size));
+                       }
                }
+               return true;  // have focus
        }
-       return true; // have focus
-}
 
-float InputContainer_mouseDrag(entity me, vector pos)
-{
-       if(SUPER(InputContainer).mouseDrag(me, pos))
-               return 1;
-       if(pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
-               return 1;
-       return 0;
-}
-float InputContainer_mouseMove(entity me, vector pos)
-{
-       if(me.mouseFocusedChild != me.focusedChild) // if the keyboard moved the focus away
-               me.mouseFocusedChild = NULL; // force focusing
-       if(me._changeFocusXY(me, pos))
-               if(SUPER(InputContainer).mouseMove(me, pos))
-                       return 1;
-       if(pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
-               return 1;
-       return 0;
-}
-float InputContainer_mousePress(entity me, vector pos)
-{
-       me.mouseFocusedChild = NULL; // force focusing
-       if(me._changeFocusXY(me, pos))
-               if(SUPER(InputContainer).mousePress(me, pos))
-                       return 1;
-       if(pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
-               return 1;
-       return 0;
-}
-float InputContainer_mouseRelease(entity me, vector pos)
-{
-       SUPER(InputContainer).mouseRelease(me, pos); // return value?
-       if(me.focused) // am I still eligible for this? (UGLY HACK, but a mouse event could have changed focus away)
-               if(me._changeFocusXY(me, pos))
-                       return 1;
-       if(pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
-               return 1;
-       return 0;
-}
-#endif
+       float InputContainer_mouseDrag(entity me, vector pos)
+       {
+               if (SUPER(InputContainer).mouseDrag(me, pos)) return 1;
+               if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return 1;
+               return 0;
+       }
+       float InputContainer_mouseMove(entity me, vector pos)
+       {
+               if (me.mouseFocusedChild != me.focusedChild) // if the keyboard moved the focus away
+                       me.mouseFocusedChild = NULL;             // force focusing
+               if (me._changeFocusXY(me, pos))
+                       if (SUPER(InputContainer).mouseMove(me, pos)) return 1;
+               if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return 1;
+               return 0;
+       }
+       METHOD(InputContainer, mousePress, bool(InputContainer this, vector pos))
+       {
+               this.mouseFocusedChild = NULL;  // force focusing
+               if (this._changeFocusXY(this, pos))
+                       if (SUPER(InputContainer).mousePress(this, pos)) return true;
+               if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return true;
+               return false;
+       }
+       float InputContainer_mouseRelease(entity me, vector pos)
+       {
+               SUPER(InputContainer).mouseRelease(me, pos); // return value?
+               if (me.focused)                              // am I still eligible for this? (UGLY HACK, but a mouse event could have changed focus away)
+                       if (me._changeFocusXY(me, pos)) return 1;
+               if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return 1;
+               return 0;
+       }