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), SUB_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");
84 me.onClick(me, me.onClickEntity);
90 void Button_showNotify(entity me)
92 me.focusable = !me.disabled;
94 void Button_focusEnter(entity me)
96 if(cvar("menu_sounds") > 1)
97 localsound("sound/misc/menu1.wav");
98 SUPER(Button).focusEnter(me);
100 void Button_draw(entity me)
102 vector bOrigin, bSize;
105 me.focusable = !me.disabled;
109 draw_alpha *= me.disabledAlpha;
118 draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
119 else if(me.forcePressed || me.pressed || me.clickTime > 0)
120 draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
122 draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
124 draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
128 if(me.realFontSize_y == 0)
135 bOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
136 bSize = me.realFontSize;
139 draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
140 else if(me.forcePressed || me.pressed || me.clickTime > 0)
141 draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
143 draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
145 draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
150 bOrigin = me.keepspaceLeft * eX;
151 bSize = eY + eX * (1 - me.keepspaceLeft);
153 bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
154 bSize = bSize * me.src2scale;
156 draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
161 if(me.clickTime > 0 && me.clickTime <= frametime)
163 // keyboard click timer expired? Fire the event then.
165 me.onClick(me, me.onClickEntity);
167 me.clickTime -= frametime;
169 SUPER(Button).draw(me);