2 CLASS(Button) EXTENDS(Label)
\r
3 METHOD(Button, configureButton, void(entity, string, float, string))
\r
4 METHOD(Button, draw, void(entity))
\r
5 METHOD(Button, showNotify, void(entity))
\r
6 METHOD(Button, resizeNotify, void(entity, vector, vector, vector, vector))
\r
7 METHOD(Button, keyDown, float(entity, float, float, float))
\r
8 METHOD(Button, mousePress, float(entity, vector))
\r
9 METHOD(Button, mouseDrag, float(entity, vector))
\r
10 METHOD(Button, mouseRelease, float(entity, vector))
\r
11 ATTRIB(Button, onClick, void(entity, entity), func_null)
\r
12 ATTRIB(Button, onClickEntity, entity, NULL)
\r
13 ATTRIB(Button, src, string, string_null)
\r
14 ATTRIB(Button, srcSuffix, string, string_null)
\r
15 ATTRIB(Button, src2, string, string_null) // is centered, same aspect, and stretched to label size
\r
16 ATTRIB(Button, src2scale, float, 1)
\r
17 ATTRIB(Button, srcMulti, float, 1) // 0: button square left, text right; 1: button stretched, text over it
\r
18 ATTRIB(Button, buttonLeftOfText, float, 0)
\r
19 ATTRIB(Button, focusable, float, 1)
\r
20 ATTRIB(Button, pressed, float, 0)
\r
21 ATTRIB(Button, clickTime, float, 0)
\r
22 ATTRIB(Button, disabled, float, 0)
\r
23 ATTRIB(Button, disabledAlpha, float, 0.3)
\r
24 ATTRIB(Button, forcePressed, float, 0)
\r
25 ATTRIB(Button, color, vector, '1 1 1')
\r
26 ATTRIB(Button, colorC, vector, '1 1 1')
\r
27 ATTRIB(Button, colorF, vector, '1 1 1')
\r
28 ATTRIB(Button, colorD, vector, '1 1 1')
\r
29 ATTRIB(Button, color2, vector, '1 1 1')
\r
30 ATTRIB(Button, alpha2, float, 1)
\r
32 ATTRIB(Button, origin, vector, '0 0 0')
\r
33 ATTRIB(Button, size, vector, '0 0 0')
\r
37 #ifdef IMPLEMENTATION
\r
38 void resizeNotifyButton(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
\r
41 me.keepspaceLeft = 0;
\r
43 me.keepspaceLeft = min(0.8, absSize_y / absSize_x);
\r
44 resizeNotifyLabel(me, relOrigin, relSize, absOrigin, absSize);
\r
46 void configureButtonButton(entity me, string txt, float sz, string gfx)
\r
48 configureLabelLabel(me, txt, sz, me.srcMulti ? 0.5 : 0);
\r
51 float keyDownButton(entity me, float key, float ascii, float shift)
\r
53 if(key == K_ENTER || key == K_SPACE)
\r
55 me.clickTime = 0.1; // delayed for effect
\r
60 float mouseDragButton(entity me, vector pos)
\r
63 if(pos_x < 0) me.pressed = 0;
\r
64 if(pos_y < 0) me.pressed = 0;
\r
65 if(pos_x >= 1) me.pressed = 0;
\r
66 if(pos_y >= 1) me.pressed = 0;
\r
69 float mousePressButton(entity me, vector pos)
\r
71 me.mouseDrag(me, pos); // verify coordinates
\r
72 if(cvar("menu_sounds"))
\r
73 localsound("sound/misc/menu2.wav");
\r
76 float mouseReleaseButton(entity me, vector pos)
\r
78 me.mouseDrag(me, pos); // verify coordinates
\r
82 me.onClick(me, me.onClickEntity);
\r
87 void showNotifyButton(entity me)
\r
89 me.focusable = !me.disabled;
\r
92 void drawButton(entity me)
\r
94 vector bOrigin, bSize;
\r
97 me.focusable = !me.disabled;
\r
101 draw_alpha *= me.disabledAlpha;
\r
110 draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
\r
111 else if(me.forcePressed || me.pressed || me.clickTime > 0)
\r
112 draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
\r
113 else if(me.focused)
\r
114 draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
\r
116 draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
\r
120 if(me.realFontSize_y == 0)
\r
127 bOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
\r
128 bSize = me.realFontSize;
\r
131 draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
\r
132 else if(me.forcePressed || me.pressed || me.clickTime > 0)
\r
133 draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
\r
134 else if(me.focused)
\r
135 draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
\r
137 draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
\r
142 bOrigin = me.keepspaceLeft * eX;
\r
143 bSize = eY + eX * (1 - me.keepspaceLeft);
\r
145 bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
\r
146 bSize = bSize * me.src2scale;
\r
148 draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
\r
155 if(me.clickTime > 0 && me.clickTime <= frametime)
\r
157 // keyboard click timer expired? Fire the event then.
\r
158 if not(me.disabled)
\r
159 me.onClick(me, me.onClickEntity);
\r
161 me.clickTime -= frametime;
\r
163 if(cvar("menu_sounds") > 1)
\r
164 if(me.focused && !me.playedfocus)
\r
166 localsound("sound/misc/menu1.wav");
\r
167 me.playedfocus = 1;
\r
169 else if(!me.focused && me.playedfocus)
\r
170 me.playedfocus = 0;
\r