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 float Button_mousePress(entity me, vector pos) 40 { 41 me.mouseDrag(me, pos); // verify coordinates 42 return 1; 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 } 138