2 CLASS(Button) EXTENDS(Label)
3 METHOD(Button, configureButton, void(entity, string, float, string))
4 METHOD(Button, draw, void(entity))
5 METHOD(Button, showNotify, void(entity))
6 METHOD(Button, resizeNotify, void(entity, vector, vector, vector, vector))
7 METHOD(Button, keyDown, float(entity, float, float, float))
8 METHOD(Button, mousePress, float(entity, vector))
9 METHOD(Button, mouseDrag, float(entity, vector))
10 METHOD(Button, mouseRelease, float(entity, vector))
11 METHOD(Button, focusEnter, void(entity))
12 ATTRIB(Button, onClick, void(entity, entity), func_null)
13 ATTRIB(Button, onClickEntity, entity, NULL)
14 ATTRIB(Button, src, string, string_null)
15 ATTRIB(Button, srcSuffix, string, string_null)
16 ATTRIB(Button, src2, string, string_null) // is centered, same aspect, and stretched to label size
17 ATTRIB(Button, src2scale, float, 1)
18 ATTRIB(Button, srcMulti, float, 1) // 0: button square left, text right; 1: button stretched, text over it
19 ATTRIB(Button, buttonLeftOfText, float, 0)
20 ATTRIB(Button, focusable, float, 1)
21 ATTRIB(Button, pressed, float, 0)
22 ATTRIB(Button, clickTime, float, 0)
23 ATTRIB(Button, disabled, float, 0)
24 ATTRIB(Button, disabledAlpha, float, 0.3)
25 ATTRIB(Button, forcePressed, float, 0)
26 ATTRIB(Button, color, vector, '1 1 1')
27 ATTRIB(Button, colorC, vector, '1 1 1')
28 ATTRIB(Button, colorF, vector, '1 1 1')
29 ATTRIB(Button, colorD, vector, '1 1 1')
30 ATTRIB(Button, color2, vector, '1 1 1')
31 ATTRIB(Button, alpha2, float, 1)
33 ATTRIB(Button, origin, vector, '0 0 0')
34 ATTRIB(Button, size, vector, '0 0 0')
39 void Button_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
44 me.keepspaceLeft = min(0.8, absSize_y / absSize_x);
45 SUPER(Button).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
47 void Button_configureButton(entity me, string txt, float sz, string gfx)
49 SUPER(Button).configureLabel(me, txt, sz, me.srcMulti ? 0.5 : 0);
52 float Button_keyDown(entity me, float key, float ascii, float shift)
54 if(key == K_ENTER || key == K_SPACE || key == K_KP_ENTER)
56 me.clickTime = 0.1; // delayed for effect
61 float Button_mouseDrag(entity me, vector pos)
64 if(pos_x < 0) me.pressed = 0;
65 if(pos_y < 0) me.pressed = 0;
66 if(pos_x >= 1) me.pressed = 0;
67 if(pos_y >= 1) me.pressed = 0;
70 float Button_mousePress(entity me, vector pos)
72 me.mouseDrag(me, pos); // verify coordinates
75 float Button_mouseRelease(entity me, vector pos)
77 me.mouseDrag(me, pos); // verify coordinates
82 if(cvar("menu_sounds"))
83 localsound("sound/misc/menu2.wav");
85 me.onClick(me, me.onClickEntity);
91 void Button_showNotify(entity me)
93 me.focusable = !me.disabled;
95 void Button_focusEnter(entity me)
97 if(cvar("menu_sounds") > 1)
98 localsound("sound/misc/menu1.wav");
99 SUPER(Button).focusEnter(me);
101 void Button_draw(entity me)
103 vector bOrigin, bSize;
106 me.focusable = !me.disabled;
110 draw_alpha *= me.disabledAlpha;
119 draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
120 else if(me.forcePressed || me.pressed || me.clickTime > 0)
121 draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
123 draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
125 draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
129 if(me.realFontSize_y == 0)
136 bOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
137 bSize = me.realFontSize;
140 draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
141 else if(me.forcePressed || me.pressed || me.clickTime > 0)
142 draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
144 draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
146 draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
151 bOrigin = me.keepspaceLeft * eX;
152 bSize = eY + eX * (1 - me.keepspaceLeft);
154 bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
155 bSize = bSize * me.src2scale;
157 draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
162 if(me.clickTime > 0 && me.clickTime <= frametime)
164 // keyboard click timer expired? Fire the event then.
167 me.onClick(me, me.onClickEntity);
169 me.clickTime -= frametime;
171 SUPER(Button).draw(me);