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), SUB_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, pressed, float, 0)
21 ATTRIB(Button, clickTime, float, 0)
22 ATTRIB(Button, disabled, float, 0)
23 ATTRIB(Button, disabledAlpha, float, 0.3)
24 ATTRIB(Button, forcePressed, float, 0)
25 ATTRIB(Button, color, vector, '1 1 1')
26 ATTRIB(Button, colorC, vector, '1 1 1')
27 ATTRIB(Button, colorF, vector, '1 1 1')
28 ATTRIB(Button, colorD, vector, '1 1 1')
29 ATTRIB(Button, color2, vector, '1 1 1')
30 ATTRIB(Button, alpha2, float, 1)
32 ATTRIB(Button, origin, vector, '0 0 0')
33 ATTRIB(Button, size, vector, '0 0 0')
38 void resizeNotifyButton(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
43 me.keepspaceLeft = min(0.8, absSize_y / absSize_x);
44 resizeNotifyLabel(me, relOrigin, relSize, absOrigin, absSize);
46 void configureButtonButton(entity me, string txt, float sz, string gfx)
48 configureLabelLabel(me, txt, sz, me.srcMulti ? 0.5 : 0);
51 float keyDownButton(entity me, float key, float ascii, float shift)
53 if(key == K_ENTER || key == K_SPACE)
55 me.clickTime = 0.1; // delayed for effect
60 float mouseDragButton(entity me, vector pos)
63 if(pos_x < 0) me.pressed = 0;
64 if(pos_y < 0) me.pressed = 0;
65 if(pos_x >= 1) me.pressed = 0;
66 if(pos_y >= 1) me.pressed = 0;
69 float mousePressButton(entity me, vector pos)
71 me.mouseDrag(me, pos); // verify coordinates
74 float mouseReleaseButton(entity me, vector pos)
76 me.mouseDrag(me, pos); // verify coordinates
80 me.onClick(me, me.onClickEntity);
85 void showNotifyButton(entity me)
87 me.focusable = !me.disabled;
89 void drawButton(entity me)
91 vector bOrigin, bSize;
94 me.focusable = !me.disabled;
98 draw_alpha *= me.disabledAlpha;
107 draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
108 else if(me.forcePressed || me.pressed || me.clickTime > 0)
109 draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
111 draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
113 draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
117 if(me.realFontSize_y == 0)
124 bOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
125 bSize = me.realFontSize;
128 draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
129 else if(me.forcePressed || me.pressed || me.clickTime > 0)
130 draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
132 draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
134 draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
139 bOrigin = me.keepspaceLeft * eX;
140 bSize = eY + eX * (1 - me.keepspaceLeft);
142 bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
143 bSize = bSize * me.src2scale;
145 draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
152 if(me.clickTime > 0 && me.clickTime <= frametime)
154 // keyboard click timer expired? Fire the event then.
156 me.onClick(me, me.onClickEntity);
158 me.clickTime -= frametime;