]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/item/button.qc
Merge branch 'master' into Mario/stats_eloranking
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / button.qc
1 #include "button.qh"
2
3         void Button_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
4         {
5                 if (me.srcMulti) me.keepspaceLeft = 0;
6                 else me.keepspaceLeft = min(0.8, absSize.x == 0 ? 0 : (absSize.y / absSize.x));
7                 SUPER(Button).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
8
9                 if(me.disableOnClick)
10                         me.disabled = true; // initially disabled
11         }
12         void Button_configureButton(entity me, string txt, float sz, string gfx)
13         {
14                 SUPER(Button).configureLabel(me, txt, sz, me.srcMulti ? 0.5 : 0);
15                 me.src = gfx;
16         }
17         float Button_keyDown(entity me, float key, float ascii, float shift)
18         {
19                 if (key == K_ENTER || key == K_SPACE || key == K_KP_ENTER)
20                 {
21                         if(!me.disabled)
22                         {
23                                 me.playClickSound(me);
24                                 me.clickTime = 0.1;  // delayed for effect
25                         }
26                         return 1;
27                 }
28                 return 0;
29         }
30         float Button_mouseDrag(entity me, vector pos)
31         {
32                 me.pressed = 1;
33                 if (pos.x < 0) me.pressed = 0;
34                 if (pos.y < 0) me.pressed = 0;
35                 if (pos.x >= 1) me.pressed = 0;
36                 if (pos.y >= 1) me.pressed = 0;
37                 return 1;
38         }
39         METHOD(Button, mousePress, bool(Button this, vector pos))
40         {
41                 this.mouseDrag(this, pos);  // verify coordinates
42                 return true;
43         }
44         float Button_mouseRelease(entity me, vector pos)
45         {
46                 me.mouseDrag(me, pos);  // verify coordinates
47                 if (me.pressed)
48                 {
49                         if (!me.disabled)
50                         {
51                                 me.playClickSound(me);
52                                 if (me.onClick)
53                                 {
54                                         if(me.applyButton)
55                                                 me.applyButton.disabled = false;
56                                         me.onClick(me, me.onClickEntity);
57                                         if(me.disableOnClick)
58                                                 me.disabled = true;
59                                 }
60                         }
61                         me.pressed = 0;
62                 }
63                 return 1;
64         }
65         void Button_showNotify(entity me)
66         {
67                 me.focusable = !me.disabled;
68         }
69         void Button_draw(entity me)
70         {
71                 vector bOrigin, bSize;
72                 float save;
73
74                 me.focusable = !me.disabled;
75
76                 save = draw_alpha;
77                 if (me.disabled) draw_alpha *= me.disabledAlpha;
78
79                 if (me.src)
80                 {
81                         if (me.srcMulti)
82                         {
83                                 bOrigin = '0 0 0';
84                                 bSize = '1 1 0';
85                                 if (me.disabled) draw_ButtonPicture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
86                                 else if (me.forcePressed || me.pressed || me.clickTime > 0) draw_ButtonPicture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
87                                 else if (me.focused) draw_ButtonPicture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
88                                 else draw_ButtonPicture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
89                         }
90                         else
91                         {
92                                 if (me.realFontSize_y == 0)
93                                 {
94                                         bOrigin = '0 0 0';
95                                         bSize = '1 1 0';
96                                 }
97                                 else
98                                 {
99                                         bOrigin = eY * (0.5 * (1 - me.realFontSize.y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize.x));
100                                         bSize = me.realFontSize;
101                                 }
102                                 if (me.disabled) draw_Picture(bOrigin, strcat(me.src, "_d", me.srcSuffix), bSize, me.colorD, 1);
103                                 else if (me.forcePressed || me.pressed || me.clickTime > 0) draw_Picture(bOrigin, strcat(me.src, "_c", me.srcSuffix), bSize, me.colorC, 1);
104                                 else if (me.focused) draw_Picture(bOrigin, strcat(me.src, "_f", me.srcSuffix), bSize, me.colorF, 1);
105                                 else draw_Picture(bOrigin, strcat(me.src, "_n", me.srcSuffix), bSize, me.color, 1);
106                         }
107                 }
108                 if (me.src2)
109                 {
110                         bOrigin = me.keepspaceLeft * eX;
111                         bSize = eY + eX * (1 - me.keepspaceLeft);
112
113                         bOrigin += bSize * (0.5 - 0.5 * me.src2scale);
114                         bSize = bSize * me.src2scale;
115
116                         draw_Picture(bOrigin, me.src2, bSize, me.color2, me.alpha2);
117                 }
118
119                 draw_alpha = save;
120
121                 if (me.clickTime > 0 && me.clickTime <= frametime)
122                 {
123                         // keyboard click timer expired? Fire the event then.
124                         if (!me.disabled)
125                                 if (me.onClick) me.onClick(me, me.onClickEntity);
126                 }
127                 me.clickTime -= frametime;
128
129                 SUPER(Button).draw(me);
130         }
131         void Dialog_Close(entity button, entity me);
132         void Button_playClickSound(entity me)
133         {
134                 if (me.onClick == DialogOpenButton_Click) m_play_click_sound(MENU_SOUND_OPEN);
135                 else if (me.onClick == Dialog_Close) m_play_click_sound(MENU_SOUND_CLOSE);
136                 else m_play_click_sound(MENU_SOUND_EXECUTE);
137         }