2 CLASS(InputContainer) EXTENDS(Container)
\r
3 METHOD(InputContainer, keyDown, float(entity, float, float, float))
\r
4 METHOD(InputContainer, mouseMove, float(entity, vector))
\r
5 METHOD(InputContainer, mousePress, float(entity, vector))
\r
6 METHOD(InputContainer, mouseRelease, float(entity, vector))
\r
7 METHOD(InputContainer, mouseDrag, float(entity, vector))
\r
8 METHOD(InputContainer, focusLeave, void(entity))
\r
9 METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector))
\r
11 METHOD(InputContainer, _changeFocusXY, float(entity, vector))
\r
12 ATTRIB(InputContainer, mouseFocusedChild, entity, NULL)
\r
13 ATTRIB(InputContainer, isTabRoot, float, 0)
\r
14 ENDCLASS(InputContainer)
\r
17 #ifdef IMPLEMENTATION
\r
18 void resizeNotifyInputContainer(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
\r
20 resizeNotifyContainer(me, relOrigin, relSize, absOrigin, absSize);
\r
22 if(me.parent.instanceOfInputContainer)
\r
29 void focusLeaveInputContainer(entity me)
\r
31 focusLeaveContainer(me);
\r
32 me.mouseFocusedChild = NULL;
\r
35 float keyDownInputContainer(entity me, float scan, float ascii, float shift)
\r
38 if(keyDownContainer(me, scan, ascii, shift))
\r
40 if(scan == K_ESCAPE)
\r
42 f = me.focusedChild;
\r
45 me.setFocus(me, NULL);
\r
52 f = me.focusedChild;
\r
57 for(ff = f.prevSibling; ff; ff = ff.prevSibling)
\r
59 if not(ff.focusable)
\r
61 me.setFocus(me, ff);
\r
65 if(!f || me.isTabRoot)
\r
67 for(ff = me.lastChild; ff; ff = ff.prevSibling)
\r
69 if not(ff.focusable)
\r
71 me.setFocus(me, ff);
\r
74 return 0; // AIIIIEEEEE!
\r
81 for(ff = f.nextSibling; ff; ff = ff.nextSibling)
\r
83 if not(ff.focusable)
\r
85 me.setFocus(me, ff);
\r
89 if(!f || me.isTabRoot)
\r
91 for(ff = me.firstChild; ff; ff = ff.nextSibling)
\r
93 if not(ff.focusable)
\r
95 me.setFocus(me, ff);
\r
98 return 0; // AIIIIEEEEE!
\r
105 float _changeFocusXYInputContainer(entity me, vector pos)
\r
108 e = me.mouseFocusedChild;
\r
109 ne = me.itemFromPoint(me, pos);
\r
111 if not(ne.focusable)
\r
113 me.mouseFocusedChild = ne;
\r
117 me.setFocus(me, ne);
\r
118 if(ne.instanceOfInputContainer)
\r
120 ne.focusedChild = NULL;
\r
121 ne._changeFocusXY(e, globalToBox(pos, ne.Container_origin, ne.Container_size));
\r
124 return (ne != NULL);
\r
127 float mouseDragInputContainer(entity me, vector pos)
\r
129 if(mouseDragContainer(me, pos))
\r
131 if(pos_x >= 0 && pos_y >= 0 && pos_x < 1 && pos_y < 1)
\r
135 float mouseMoveInputContainer(entity me, vector pos)
\r
137 if(me._changeFocusXY(me, pos))
\r
138 if(mouseMoveContainer(me, pos))
\r
140 if(pos_x >= 0 && pos_y >= 0 && pos_x < 1 && pos_y < 1)
\r
144 float mousePressInputContainer(entity me, vector pos)
\r
146 me.mouseFocusedChild = NULL; // force focusing
\r
147 if(me._changeFocusXY(me, pos))
\r
148 if(mousePressContainer(me, pos))
\r
150 if(pos_x >= 0 && pos_y >= 0 && pos_x < 1 && pos_y < 1)
\r
154 float mouseReleaseInputContainer(entity me, vector pos)
\r
157 r = mouseReleaseContainer(me, pos);
\r
158 if(me.focused) // am I still eligible for this? (UGLY HACK, but a mouse event could have changed focus away)
\r
159 if(me._changeFocusXY(me, pos))
\r
161 if(pos_x >= 0 && pos_y >= 0 && pos_x < 1 && pos_y < 1)
\r