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 ATTRIB(Button, onClick, void(entity, entity), func_null)
12 ATTRIB(Button, onClickEntity, entity, NULL)
13 ATTRIB(Button, src, string, string_null)
14 ATTRIB(Button, srcSuffix, string, string_null)
15 ATTRIB(Button, src2, string, string_null) // is centered, same aspect, and stretched to label size
16 ATTRIB(Button, src2scale, float, 1)
17 ATTRIB(Button, srcMulti, float, 1) // 0: button square left, text right; 1: button stretched, text over it
18 ATTRIB(Button, buttonLeftOfText, float, 0)
19 ATTRIB(Button, focusable, float, 1)
20 ATTRIB(Button, allowFocusSound, 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_draw(entity me)
97 vector bOrigin, bSize;
100 me.focusable = !me.disabled;
104 draw_alpha *= me.disabledAlpha;
113 draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
114 else if(me.forcePressed || me.pressed || me.clickTime > 0)
115 draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
117 draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
119 draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
123 if(me.realFontSize_y == 0)
130 bOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
131 bSize = me.realFontSize;
134 draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
135 else if(me.forcePressed || me.pressed || me.clickTime > 0)
136 draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
138 draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
140 draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
145 bOrigin = me.keepspaceLeft * eX;
146 bSize = eY + eX * (1 - me.keepspaceLeft);
148 bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
149 bSize = bSize * me.src2scale;
151 draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
156 if(me.clickTime > 0 && me.clickTime <= frametime)
158 // keyboard click timer expired? Fire the event then.
161 me.onClick(me, me.onClickEntity);
163 me.clickTime -= frametime;
165 SUPER(Button).draw(me);