1 ///////////////////////////////////////////////
2 // Controls/Item Source File
3 ///////////////////////
4 // This file belongs to dpmod/darkplaces
5 // AK contains all item specific stuff
6 ////////////////////////////////////////////////
12 void(void) ITEM_WINDOW =
14 self.flag = self.flag | FLAG_NOSELECT | FLAG_DRAWONLY;
33 void(void) ITEM_REFERENCE =
35 self.flag = self.flag | FLAG_NOSELECT | FLAG_DRAWONLY;
37 // if there is no link, this is a dynamic reference
40 self._child = menu_getitem(self.link);
41 if(self._child == null_entity)
43 print(self.name, " removed, cause link ", self.link, " not found\n");
44 remove(self); // no need to call terminate
66 void(void) ITEM_CUSTOM =
68 item_init(defct_reinit, defct_destroy, defct_key, defct_draw, defct_mouse_enter, defct_mouse_leave, defct_action, defct_refresh);
76 // ITEM_PICTURE has a special draw function
77 void(void) ITEM_PICTURE_DRAW =
79 menu_drawpic(self.pos, self.picture, self.size, self.color, self.alpha, self.drawflag);
84 void(void) ITEM_PICTURE_DESTROY =
86 gfx_unloadpic(self.picture);
91 void(void) ITEM_PICTURE =
93 if(self.picture == "")
94 // a picture has to have a picture
95 remove(self); // no need to call terminate
97 // load the picture if it isnt loaded already
98 gfx_loadpic(self.picture, MENU_ENFORCELOADING);
100 // if flag wasnt set yet, then set it to FLAG_DRAWONLY
102 self.flag = FLAG_DRAWONLY;
104 if(self.color == '0 0 0')
105 self.color = ITEM_PICTURE_NORMAL_COLOR;
107 self.alpha = ITEM_PICTURE_NORMAL_ALPHA;
111 ITEM_PICTURE_DESTROY,
126 void(void) ITEM_TEXT_REFRESH =
128 // first do own refresh, *then* call the default refresh !
129 if(self.size == '0 0 0')
131 if(self.font_size == '0 0 0')
132 self.font_size = ITEM_TEXT_FONT_SIZE;
134 self.size_x = self.font_size_x * strlen(self.text);
135 self.size_y = self.font_size_y;
136 } else if(self.font_size == '0 0 0')
138 self.font_size_x = self.size_x / strlen(self.text);
139 self.font_size_y = self.size_y;
146 void(void) ITEM_TEXT_DRAW =
150 // align to the rect pos - (pos + size)
152 // now check the alignement
153 if(self.alignment & TEXT_ALIGN_CENTER)
154 alignpos_x = self.pos_x + (self.size_x - strlen(self.text) * self.font_size_x) / 2;
155 else if(self.alignment & TEXT_ALIGN_RIGHT)
156 alignpos_x = self.pos_x + self.size_x - strlen(self.text) * self.font_size_x;
158 alignpos_x = self.pos_x;
159 alignpos_y = self.pos_y;
161 menu_drawstring(alignpos, self.text, self.font_size, self.color, self.alpha, self.drawflag);
166 void(void) ITEM_TEXT =
169 self.flag = FLAG_DRAWONLY;
171 if(self.color == '0 0 0')
172 self.color = ITEM_TEXT_NORMAL_COLOR;
174 self.alpha = ITEM_TEXT_NORMAL_ALPHA;
177 if(self.alignment & TEXT_ALIGN_CENTERPOS)
179 self.pos_x = self.pos_x - self.size_x / 2;
180 } else if(self.alignment & TEXT_ALIGN_LEFTPOS)
182 self.pos_x = self.pos_x - self.size_x;
202 void(void) ITEM_RECTANGLE_DRAW =
204 menu_fillarea(self.pos, self.size, self.color, self.alpha, self.drawflag);
207 void(void) ITEM_RECTANGLE =
210 self.flag = FLAG_DRAWONLY;
229 void(void) ITEM_BUTTON_DRAW =
231 if(self._button_state == BUTTON_NORMAL)
232 menu_drawpic(self.pos, self.picture, self.size, self.color, self.alpha, self.drawflag);
233 else if(self._button_state == BUTTON_SELECTED)
234 menu_drawpic(self.pos, self.picture_selected, self.size, self.color_selected, self.alpha_selected, self.drawflag_selected);
236 menu_drawpic(self.pos, self.picture_pressed, self.size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
241 void(void) ITEM_BUTTON_REFRESH =
243 if( self.hold_pressed + self._press_time < time )
245 if( menu_selected != self && self._button_state != BUTTON_NORMAL )
246 self._button_state = BUTTON_NORMAL;
247 else if( menu_selected == self && self._button_state != BUTTON_SELECTED)
249 self._button_state = BUTTON_SELECTED;
250 if(self.sound_selected)
251 snd_play(self.sound_selected);
259 void(float keynr, float ascii) ITEM_BUTTON_KEY =
261 if(ctcall_key(keynr, ascii))
264 if(keynr == K_ENTER || keynr == K_MOUSE1)
268 def_keyevent(keynr, ascii);
271 void(void) ITEM_BUTTON_ACTION =
273 self._press_time = time;
274 self._button_state = BUTTON_PRESSED;
275 if(self.sound_pressed)
276 snd_play(self.sound_pressed);
280 void(void) ITEM_BUTTON_REINIT =
282 self._button_state = BUTTON_NORMAL;
287 void(void) ITEM_BUTTON_DESTROY =
289 gfx_unloadpic(self.picture);
290 gfx_unloadpic(self.picture_selected);
291 gfx_unloadpic(self.picture_pressed);
296 void(void) ITEM_BUTTON =
298 if(self.picture == "" || self.picture_selected == "" || self.picture_pressed == "")
299 // a picture has to have pictures
300 remove(self); // no need to call terminate
302 // load the picture if it isnt loaded already
303 gfx_loadpic(self.picture, MENU_ENFORCELOADING);
304 gfx_loadpic(self.picture_selected, MENU_ENFORCELOADING);
305 gfx_loadpic(self.picture_pressed, MENU_ENFORCELOADING);
307 if(self.sound_selected != "")
308 snd_loadsound(self.sound_selected, SOUND_ENFORCELOADING);
310 self.sound_selected = SOUND_SELECT;
312 if(self.sound_pressed != "")
313 snd_loadsound(self.sound_pressed, SOUND_ENFORCELOADING);
315 self.sound_pressed = SOUND_ACTION;
317 // if flag wasnt set yet, then set it to FLAG_DRAWONLY
319 self.flag = FLAG_AUTOSETCLICK;
321 if(self.color == '0 0 0')
322 self.color = ITEM_PICTURE_NORMAL_COLOR;
324 self.alpha = ITEM_PICTURE_NORMAL_ALPHA;
325 if(self.color_selected == '0 0 0')
326 self.color_selected = ITEM_PICTURE_SELECTED_COLOR;
327 if(self.alpha_selected == 0)
328 self.alpha_selected = ITEM_PICTURE_SELECTED_ALPHA;
329 if(self.color_pressed == '0 0 0')
330 self.color_pressed = ITEM_PICTURE_PRESSED_COLOR;
331 if(self.alpha_pressed == 0)
332 self.alpha_pressed = ITEM_PICTURE_PRESSED_ALPHA;
334 if(self.hold_pressed == 0)
335 self.hold_pressed = ITEM_BUTTON_HOLD_PRESSED;
345 ITEM_BUTTON_REFRESH);
354 void(void) ITEM_TEXTBUTTON_REFRESH =
356 // first do own refresh, *then* call the default refresh !
357 if(self.size == '0 0 0')
359 if(self.font_size == '0 0 0')
360 self.font_size = ITEM_TEXT_FONT_SIZE;
362 self.size_x = self.font_size_x * strlen(self.text);
363 self.size_y = self.font_size_y;
364 } else if(self.font_size == '0 0 0')
366 self.font_size_x = self.size_x / strlen(self.text);
367 self.font_size_y = self.size_y;
370 if((self.hold_pressed + self._press_time < time && self._button_state == BUTTON_PRESSED) || (menu_selected != self && self._button_state == BUTTON_SELECTED))
372 self._button_state = BUTTON_NORMAL;
374 if(menu_selected == self && self._button_state == BUTTON_NORMAL)
376 self._button_state = BUTTON_SELECTED;
377 if(self.sound_selected)
378 snd_play(self.sound_selected);
385 void(void) ITEM_TEXTBUTTON_DRAW =
390 // align to the rect pos - (pos + size)
392 // now check the alignement
393 if(self.alignment & TEXT_ALIGN_CENTER)
394 alignpos_x = self.pos_x + (self.size_x - strlen(self.text) * self.font_size_x) / 2;
395 else if(self.alignment & TEXT_ALIGN_RIGHT)
396 alignpos_x = self.pos_x + self.size_x - strlen(self.text) * self.font_size_x;
398 alignpos_x = self.pos_x;
399 alignpos_y = self.pos_y;
401 if(self.style == TEXTBUTTON_STYLE_OUTLINE && self._button_state != BUTTON_NORMAL)
407 s_x = TEXTBUTTON_OUTLINE_WIDTH;
409 if(self._button_state == BUTTON_PRESSED)
411 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
413 else if(self._button_state == BUTTON_SELECTED)
415 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
418 p_x = self.pos_x + self.size_x - TEXTBUTTON_OUTLINE_WIDTH;
420 s_x = TEXTBUTTON_OUTLINE_WIDTH;
422 if(self._button_state == BUTTON_PRESSED)
424 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
426 else if(self._button_state == BUTTON_SELECTED)
428 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
433 s_y = TEXTBUTTON_OUTLINE_WIDTH;
435 if(self._button_state == BUTTON_PRESSED)
437 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
439 else if(self._button_state == BUTTON_SELECTED)
441 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
445 p_y = self.pos_y + self.size_y - TEXTBUTTON_OUTLINE_WIDTH;
446 s_y = TEXTBUTTON_OUTLINE_WIDTH;
448 if(self._button_state == BUTTON_PRESSED)
450 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
452 else if(self._button_state == BUTTON_SELECTED)
454 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
456 } else if(self.style == TEXTBUTTON_STYLE_BOX)
458 if(self._button_state == BUTTON_PRESSED)
460 menu_fillarea(alignpos, self.size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
462 else if(self._button_state == BUTTON_SELECTED)
464 menu_fillarea(alignpos, self.size, self.color_selected, self.alpha_selected, self.drawflag_selected);
468 if(self._button_state == BUTTON_NORMAL || self.style == TEXTBUTTON_STYLE_BOX || self.style == TEXTBUTTON_STYLE_OUTLINE)
469 menu_drawstring(alignpos, self.text, self.font_size, self.color, self.alpha, self.drawflag);
471 if(self.style == TEXTBUTTON_STYLE_TEXT)
473 if(self._button_state == BUTTON_PRESSED)
475 menu_drawstring(alignpos, self.text, self.font_size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
477 else if(self._button_state == BUTTON_SELECTED)
479 menu_drawstring(alignpos, self.text, self.font_size, self.color_selected, self.alpha_selected, self.drawflag_selected);
486 void(void) ITEM_TEXTBUTTON_ACTION =
488 self._press_time = time;
489 self._button_state = BUTTON_PRESSED;
490 if(self.sound_pressed)
491 snd_play(self.sound_pressed);
496 void(float keynr, float ascii) ITEM_TEXTBUTTON_KEY =
498 if(ctcall_key(keynr, ascii))
501 if(keynr == K_ENTER || keynr == K_MOUSE1)
505 def_keyevent(keynr, ascii);
508 void(void) ITEM_TEXTBUTTON_REINIT =
510 self._button_state = BUTTON_NORMAL;
515 void(void) ITEM_TEXTBUTTON =
518 self.flag = FLAG_AUTOSETCLICK;
520 if(self.color == '0 0 0')
521 self.color = ITEM_TEXT_NORMAL_COLOR;
523 self.alpha = ITEM_TEXT_NORMAL_ALPHA;
524 if(self.color_selected == '0 0 0')
525 self.color_selected = ITEM_TEXT_SELECTED_COLOR;
526 if(self.alpha_selected == 0)
527 self.alpha_selected = ITEM_TEXT_SELECTED_ALPHA;
528 if(self.color_pressed == '0 0 0')
529 self.color_pressed = ITEM_TEXT_PRESSED_COLOR;
530 if(self.alpha_pressed == 0)
531 self.alpha_pressed = ITEM_TEXT_PRESSED_ALPHA;
533 if(self.hold_pressed == 0)
534 self.hold_pressed = ITEM_BUTTON_HOLD_PRESSED;
536 if(self.sound_selected != "")
537 snd_loadsound(self.sound_selected, SOUND_ENFORCELOADING);
539 self.sound_selected = SOUND_SELECT;
541 if(self.sound_pressed != "")
542 snd_loadsound(self.sound_pressed, SOUND_ENFORCELOADING);
544 self.sound_pressed = SOUND_ACTION;
546 ITEM_TEXTBUTTON_REFRESH();
547 if(self.alignment & TEXT_ALIGN_CENTERPOS)
549 self.pos_x = self.pos_x - self.size_x / 2;
550 } else if(self.alignment & TEXT_ALIGN_LEFTPOS)
552 self.pos_x = self.pos_x - self.size_x;
556 ITEM_TEXTBUTTON_REINIT,
559 ITEM_TEXTBUTTON_DRAW,
562 ITEM_TEXTBUTTON_ACTION,
563 ITEM_TEXTBUTTON_REFRESH);
570 void(void) ITEM_SLIDER_DRAW =
576 if(self.picture_bar != "")
578 menu_drawpic(self.pos, self.picture_bar, self.size, self.color, self.alpha, self.drawflag);
582 menu_fillarea(self.pos, self.size, self.color, self.alpha, self.drawflag);
586 slider_pos = self.pos;
587 slider_pos_x = slider_pos_x + self.left_margin + ((self.size_x - self.slider_size_x - self.left_margin - self.right_margin) / (self.max_value - self.min_value)) * (self.value - self.min_value);
588 if(self.picture != "")
590 menu_drawpic(slider_pos, self.picture, self.slider_size, self.color, self.alpha, self.drawflag);
594 menu_fillarea(slider_pos, self.slider_size, self.color + ITEM_SLIDER_BAR_COLOR_DELTA, self.alpha, self.drawflag);
598 void(void) ITEM_SLIDER_UPDATESLIDER =
600 self.value = bound(self.min_value, self.value, self.max_value);
605 void(float keynr, float ascii) ITEM_SLIDER_KEY =
610 if(ctcall_key(keynr, ascii))
613 if(keynr == K_LEFTARROW)
615 self.value = (rint(self.value / self.step) - 1) * self.step;
617 else if(keynr == K_RIGHTARROW)
619 self.value = (rint(self.value / self.step) + 1)* self.step;
621 else if(keynr == K_MOUSE1)
623 if(inrect(menu_cursor, self.pos, self.size))
625 if(menu_cursor_x - self.pos_x <= self.left_margin)
627 self.value = (rint(self.value / self.step) - 1)* self.step;
629 else if(menu_cursor_x - self.pos_x >= self.size_x - self.right_margin)
631 self.value = (rint(self.value / self.step) + 1)* self.step;
635 self.value = self.min_value + ((menu_cursor_x - self.slider_size_x / 2) - self.pos_x - self.left_margin) * ((self.max_value - self.min_value) / (self.size_x - self.slider_size_x - self.left_margin - self.right_margin));
641 def_keyevent(keynr, ascii);
647 snd_play(self.sound_increase);
649 else if(self.value < old)
651 snd_play(self.sound_decrease);
654 ITEM_SLIDER_UPDATESLIDER();
658 void(void) ITEM_SLIDER_DESTROY =
660 if(self.picture != "" && self.picture != ITEM_SLIDER_DEFAULT_SLIDER)
661 gfx_unloadpic(self.picture);
662 if(self.picture_bar != "" && self.picture_bar != ITEM_SLIDER_DEFAULT_BAR)
663 gfx_unloadpic(self.picture);
664 if(self.sound_increase != SOUND_INCREASE)
665 snd_unloadsound(self.sound_decrease);
666 if(self.sound_increase != SOUND_INCREASE)
667 snd_unloadsound(self.sound_increase);
672 void(void) ITEM_SLIDER =
674 if(self.picture != "")
675 self.picture = gfx_loadpic(self.picture, MENU_ENFORCELOADING);
676 if(self.picture == "")
677 self.picture = gfx_loadpic(ITEM_SLIDER_DEFAULT_SLIDER, MENU_ENFORCELOADING);
678 if(self.picture_bar != "")
679 self.picture_bar = gfx_loadpic(self.picture_bar, MENU_ENFORCELOADING);
680 if(self.picture_bar == "")
681 self.picture_bar = gfx_loadpic(ITEM_SLIDER_DEFAULT_BAR, MENU_ENFORCELOADING);
682 if(self.sound_decrease == "")
683 self.sound_decrease = SOUND_DECREASE;
685 snd_loadsound(self.sound_decrease, MENU_ENFORCELOADING);
686 if(self.sound_increase == "")
687 self.sound_increase = SOUND_INCREASE;
689 snd_loadsound(self.sound_increase, MENU_ENFORCELOADING);
691 if(self.color == '0 0 0')
692 self.color = ITEM_SLIDER_COLOR;
694 self.alpha = ITEM_SLIDER_ALPHA;
696 self.step = ITEM_SLIDER_STEP;
697 if(self.slider_size == '0 0 0')
699 /*if(self.picture != "")
700 self.slider_size = gfx_getimagesize(self.picture);
702 self.slider_size = ITEM_SLIDER_SIZE;
704 if(self.left_margin == 0)
705 self.left_margin = ITEM_SLIDER_LEFT_MARGIN;
706 if(self.right_margin == 0)
707 self.right_margin = ITEM_SLIDER_RIGHT_MARGIN;
724 void(void) ITEM_TEXTSWITCH_DRAW =
728 // get the current text
730 self.text = getaltstring(self.value, self.text);
736 void(void) ITEM_TEXTSWITCH_REFRESH =
741 self.text = getaltstring(self.value, self.text);
748 void(float keynr, float ascii) ITEM_TEXTSWITCH_KEY =
753 if(ctcall_key(keynr, ascii))
756 if(keynr == K_LEFTARROW || keynr == K_MOUSE2)
758 self.value = self.value - 1;
760 self.value = getaltstringcount(self.text) - 1;
762 else if(keynr == K_RIGHTARROW || keynr == K_MOUSE1 || keynr == K_ENTER)
764 self.value = self.value + 1;
765 if(self.value > getaltstringcount(self.text) - 1)
769 def_keyevent(keynr, ascii);
774 snd_play(self.sound_increase);
775 else if(self.value < old)
776 snd_play(self.sound_decrease);
778 if(self.switchchange)
782 void(void) ITEM_TEXTSWITCH_DESTROY =
784 if(self.sound_increase != SOUND_INCREASE)
785 snd_unloadsound(self.sound_decrease);
786 if(self.sound_increase != SOUND_INCREASE)
787 snd_unloadsound(self.sound_increase);
790 void(void) ITEM_TEXTSWITCH =
794 if(self.sound_decrease == "")
795 self.sound_decrease = SOUND_DECREASE;
797 snd_loadsound(self.sound_decrease, MENU_ENFORCELOADING);
798 if(self.sound_increase == "")
799 self.sound_increase = SOUND_INCREASE;
801 snd_loadsound(self.sound_increase, MENU_ENFORCELOADING);
804 self.text = getaltstring(self.value, self.text);
810 ITEM_TEXTSWITCH_DESTROY,
812 ITEM_TEXTSWITCH_DRAW,
816 ITEM_TEXTSWITCH_REFRESH);
823 void(void) ITEM_EDITBOX_REINIT =
826 self._button_state = BUTTON_NORMAL;
829 void(void) ITEM_EDITBOX_DRAW =
836 if(self._button_state == BUTTON_NORMAL || mod(time * 1000, 1000 / EDITBOX_CURSOR_FREQ) > 500 / EDITBOX_CURSOR_FREQ)
840 csize_y = self.font_size_y;
843 cpos_x = cpos_x + self._cursorpos * self.font_size_x;
845 menu_fillarea(cpos, csize, self.color_selected, self.alpha_selected, self.drawflag_selected);
848 void(float ascii) ITEM_EDITBOX_INSERT =
850 string firsthalf, secondhalf;
853 if(self._cursorpos > strlen(self.text))
856 if(self.format == "")
858 // no format stuff, so lets have fun
859 firsthalf = substring(self.text, 0, self._cursorpos);
860 secondhalf = substring(self.text, self._cursorpos, strlen(self.text) - self._cursorpos);
861 strunzone(self.text);
862 self.text = strcat(firsthalf, chr(ascii));
863 self.text = strcat(self.text, secondhalf);
864 if(self.maxlen >= 0 && strlen(self.text) > self.maxlen)
866 // remove the last char(s)
867 self.text = substring(self.text, 0, self.maxlen);
869 // move the cursor forward
870 if(strlen(self.text) >= self._cursorpos)
871 self._cursorpos = self._cursorpos + 1;
873 self.text = strzone(self.text);
875 else // here begins the funny part
877 // TODO: add wildcard support :-/
878 // move the cursor to the next space
879 len = strlen(self.format);
880 while(substring(self.format, self._cursorpos, 1) != " " && len > self._cursorpos)
882 self._cursorpos = self._cursorpos + 1;
884 if(self._cursorpos >= len)
887 firsthalf = substring(self.text, 0, self._cursorpos);
888 secondhalf = substring(self.text, self._cursorpos + 1 , strlen(self.text) - self._cursorpos - 1);
889 strunzone(self.text);
890 self.text = strcat(firsthalf, chr(ascii), secondhalf);
891 self.text = strzone(self.text);
895 void(void) ITEM_EDITBOX_LEFT =
897 if(self._cursorpos > 0)
898 self._cursorpos = self._cursorpos - 1;
901 void(void) ITEM_EDITBOX_RIGHT =
903 if(self._cursorpos < strlen(self.text))
904 self._cursorpos = self._cursorpos + 1;
907 void(float keynr, float ascii) ITEM_EDITBOX_KEY =
909 if(ctcall_key(keynr, ascii))
912 if(ascii >= 30 && ascii <= 126)
914 ITEM_EDITBOX_INSERT(ascii);
915 } else if(keynr == K_BACKSPACE)
917 if(self.format == "")
919 string firsthalf, secondhalf;
921 firsthalf = substring(self.text,0, self._cursorpos - 1);
922 secondhalf = substring(self.text,self._cursorpos, strlen(self.text) - self._cursorpos);
923 strunzone(self.text);
924 self.text = strcat(firsthalf, secondhalf);
925 self.text = strzone(self.text);
929 } else if(keynr == K_ENTER)
933 //snd_play(self.sound_action);
934 } else if(keynr == K_LEFTARROW)
938 else if(keynr == K_RIGHTARROW)
940 ITEM_EDITBOX_RIGHT();
943 def_keyevent(keynr, ascii);
945 snd_play(self.sound_pressed);
948 void(void) ITEM_EDITBOX_REFRESH =
950 if(menu_selected != self && menu_selected != self._parent)
951 self._button_state = BUTTON_NORMAL;
952 else if(self._button_state == BUTTON_NORMAL)
954 self._button_state = BUTTON_SELECTED;
956 if(self.sound_selected)
957 snd_play(self.sound_selected);
960 if(self._cursorpos > strlen(self.text))
961 self._cursorpos = strlen(self.text);
963 // hack: we want the text to scroll if possible
964 // self.clip_pos holds the normal value
965 if(self._cursorpos >= self.size_x / self.font_size_x - 1.5 )
966 self.pos_x = self.clip_pos_x -(self._cursorpos - floor( self.size_x / self.font_size_x - 1.5)) * self.font_size_x;
968 self.pos_x = self.clip_pos_x;
973 void(void) ITEM_EDITBOX =
975 if(self.sound_selected != "")
976 snd_loadsound(self.sound_selected, SOUND_ENFORCELOADING);
978 self.sound_selected = SOUND_SELECT;
980 if(self.sound_pressed != "")
981 snd_loadsound(self.sound_pressed, SOUND_ENFORCELOADING);
983 self.sound_pressed = SOUND_ACTION;
985 // if flag wasnt set yet, then set it to FLAG_DRAWONLY
987 self.flag = FLAG_AUTOSETCLICK;
989 if(self.color == '0 0 0')
990 self.color = ITEM_PICTURE_NORMAL_COLOR;
992 self.alpha = ITEM_PICTURE_NORMAL_ALPHA;
993 if(self.color_selected == '0 0 0')
994 self.color_selected = ITEM_PICTURE_SELECTED_COLOR;
995 if(self.alpha_selected == 0)
996 self.alpha_selected = ITEM_PICTURE_SELECTED_ALPHA;
998 self.text = strzone(self.text);
1000 ITEM_TEXT_REFRESH();
1001 if(self.alignment & TEXT_ALIGN_CENTERPOS)
1003 self.pos_x = self.pos_x - self.size_x / 2;
1004 } else if(self.alignment & TEXT_ALIGN_LEFTPOS)
1006 self.pos_x = self.pos_x - self.size_x;
1010 self.clip_pos = self.pos;
1020 ITEM_EDITBOX_REFRESH);
1026 /////////////////////////////////////////////////////////////////////////
1027 // The "actual" funtions
1029 void(void) ctinit_picture =
1034 // draws a text (uses the std. way)
1035 void(string text, vector pos, vector size, float alignment, float style, float state) ctdrawtext =
1042 // align to the rect pos - (pos + size)
1044 // now check the alignement
1045 if(alignment & TEXT_ALIGN_CENTER)
1046 alignpos_x = pos_x + (size_x - strlen(text) * self.font_size_x) / 2;
1047 else if(alignment & TEXT_ALIGN_RIGHT)
1048 alignpos_x = pos_x + size_x - strlen(text) * self.font_size_x;
1053 if(style == TEXTBUTTON_STYLE_OUTLINE && state != BUTTON_NORMAL)
1059 s_x = TEXTBUTTON_OUTLINE_WIDTH;
1061 if(state == BUTTON_PRESSED)
1063 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1065 else if(state == BUTTON_SELECTED)
1067 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
1070 p_x = pos_x + size_x - TEXTBUTTON_OUTLINE_WIDTH;
1072 s_x = TEXTBUTTON_OUTLINE_WIDTH;
1074 if(state == BUTTON_PRESSED)
1076 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1078 else if(state == BUTTON_SELECTED)
1080 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
1085 s_y = TEXTBUTTON_OUTLINE_WIDTH;
1087 if(state == BUTTON_PRESSED)
1089 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1091 else if(self._button_state == BUTTON_SELECTED)
1093 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
1097 p_y = pos_y + size_y - TEXTBUTTON_OUTLINE_WIDTH;
1098 s_y = TEXTBUTTON_OUTLINE_WIDTH;
1100 if(state == BUTTON_PRESSED)
1102 menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1104 else if(state == BUTTON_SELECTED)
1106 menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
1108 } else if(style == TEXTBUTTON_STYLE_BOX)
1110 if(state == BUTTON_PRESSED)
1112 menu_fillarea(alignpos, size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1114 else if(self._button_state == BUTTON_SELECTED)
1116 menu_fillarea(alignpos, size, self.color_selected, self.alpha_selected, self.drawflag_selected);
1120 if(state == BUTTON_NORMAL || style == TEXTBUTTON_STYLE_BOX || style == TEXTBUTTON_STYLE_OUTLINE)
1121 menu_drawstring(alignpos, text, self.font_size, self.color, self.alpha, self.drawflag);
1123 if(style == TEXTBUTTON_STYLE_TEXT)
1125 if(state == BUTTON_PRESSED)
1127 menu_drawstring(alignpos, text, self.font_size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
1129 else if(state == BUTTON_SELECTED)
1131 menu_drawstring(alignpos, text, self.font_size, self.color_selected, self.alpha_selected, self.drawflag_selected);