1 /* 2 * GRacer 3 * 4 * Copyright (C) 1999 Takashi Matsuda <matsu@users.sourceforge.net> 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation; either version 2 of the 9 * License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 19 * USA 20 */ 21 22 #ifndef __GRACER_WIDGETS_H__ 23 #define __GRACER_WIDGETS_H__ 24 25 #include <GL/gl.h> 26 #include <common/gr_memory.h> 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 #if 0 32 } 33 #endif 34 35 enum { 36 GR_GLUT_ROOT = 0, 37 GR_GLUT_ROOT_WIDGET, 38 GR_GLUT_ROOT_GAME, 39 40 GR_GLUT_WIDGET = 0, 41 GR_GLUT_WIDGET_LABEL, 42 GR_GLUT_WIDGET_BUTTON, 43 GR_GLUT_WIDGET_ENTRY, 44 }; 45 46 enum { 47 GR_STATE_NORMAL = 0, 48 GR_STATE_ACTIVE, 49 GR_STATE_FOCUS, 50 GR_STATE_GRAB, 51 GR_STATE_DISABLE, 52 53 GR_NUM_STATE, 54 }; 55 56 enum { 57 GR_CENTER = 0, 58 GR_TOP = 1<<0, 59 GR_BOTTOM = 1<<1, 60 GR_LEFT = 1<<2, 61 GR_RIGHT = 1<<3, 62 63 GR_VERTICAL_MASK = (GR_TOP|GR_BOTTOM), 64 GR_HORIZONTAL_MASK = (GR_LEFT|GR_RIGHT), 65 }; 66 67 typedef void* GlutObject; 68 69 typedef struct GlutRoot GlutRoot; 70 typedef struct GlutWidget GlutWidget; 71 typedef struct GlutLabel GlutLabel; 72 typedef struct GlutButton GlutButton; 73 typedef struct GlutEntry GlutEntry; 74 75 typedef struct GlutFontInfo GlutFontInfo; 76 77 struct GlutFontInfo { 78 void *font; 79 int height; 80 int ascent; 81 int descent; 82 GLuint dl; 83 int compiled[128]; 84 }; 85 86 typedef void (*GlutRootFreeFunc) (GlutObject obj); 87 typedef void (*GlutRootDisplayFunc) (GlutObject obj); 88 typedef void (*GlutRootReshapeFunc) (GlutObject obj, 89 int width, int height); 90 91 struct GlutRoot { 92 GrRef ref; 93 int type; 94 95 GLuint dl; 96 int changed; 97 98 GlutRootFreeFunc free_func; 99 GlutRootDisplayFunc display_func; 100 GlutRootReshapeFunc reshape_func; 101 }; 102 103 typedef void (*GlutWidgetKeyboardFunc) (GlutObject obj, 104 unsigned char key, int x, int y); 105 typedef void (*GlutWidgetSpecialFunc) (GlutObject obj, 106 int key, int x, int y); 107 typedef void (*GlutWidgetMouseFunc) (GlutObject obj, 108 int button, int state, int x, int y); 109 110 /* this is for internal use */ 111 typedef void (*GlutWidgetCheckSize) (GlutObject obj); 112 113 struct GlutWidget { 114 GlutRoot core; 115 116 int type; 117 int x, y; 118 int width, height; 119 int anchor; 120 121 int x0, y0, x1, y1; 122 123 int focus; 124 int active; 125 126 void *font; 127 GLfloat fg_color[GR_NUM_STATE][4]; 128 GLfloat bg_color[GR_NUM_STATE][4]; 129 130 GlutWidgetKeyboardFunc keyboard_func; 131 GlutWidgetSpecialFunc special_func; 132 GlutWidgetMouseFunc mouse_func; 133 134 GlutWidgetCheckSize check_size; 135 }; 136 137 typedef void (*GlutButtonInvokeFunc) (GlutObject obj); 138 139 struct GlutLabel { 140 GlutWidget core; 141 142 int type; 143 144 char *title; 145 int length; 146 int str_width; 147 int justify; 148 }; 149 150 struct GlutButton { 151 GlutWidget core; 152 153 int type; 154 char *title; 155 int length; 156 int str_width; 157 158 GlutButtonInvokeFunc invoke_func; 159 }; 160 161 typedef void (*GlutEntryInvokeFunc) (GlutObject obj); 162 typedef void (*GlutEntryChangedFunc) (GlutObject obj); 163 164 struct GlutEntry { 165 GlutWidget core; 166 167 int type; 168 char text[1024]; 169 int length; 170 int display_pos; 171 int calet_pos; 172 173 GlutEntryChangedFunc invoke_func; 174 GlutEntryChangedFunc changed_func; 175 }; 176 177 178 extern GrSList *glut_widgets; 179 extern GlutObject grab_widget; 180 extern GlutObject focus_widget; 181 182 extern int screen_width; 183 extern int screen_height; 184 185 GlutObject glut_root_new (void); 186 void glut_root_init (GlutObject obj); 187 void glut_root_destroy (GlutObject obj); 188 189 GlutObject glut_widget_new (void); 190 void glut_widget_init (GlutObject obj); 191 void glut_widget_destroy (GlutObject obj); 192 193 void glut_widget_set_position (GlutObject obj, 194 int x, int y, int anchor); 195 void glut_widget_move (GlutObject obj, 196 int dx, int dy); 197 void glut_widget_set_size (GlutObject obj, 198 int width, int height); 199 void glut_widget_set_font (GlutObject obj, void *font); 200 void glut_widget_set_focus (GlutObject obj); 201 int glut_widget_is_focusable (GlutObject obj); 202 203 GlutObject glut_label_new (void); 204 void glut_label_init (GlutObject obj); 205 void glut_label_destroy (GlutObject obj); 206 207 void glut_label_set_text (GlutObject obj, char *text); 208 209 void glut_button_init (GlutObject obj); 210 void glut_button_destroy (GlutObject obj); 211 GlutObject glut_button_new (void); 212 void glut_button_set_text (GlutObject obj, char *text); 213 void glut_button_invoke (GlutObject obj); 214 215 void glut_entry_init (GlutObject obj); 216 void glut_entry_destroy (GlutObject obj); 217 GlutObject glut_entry_new (void); 218 void glut_entry_set_text (GlutObject obj, char *text); 219 void glut_entry_invoke (GlutObject obj); 220 221 void glut_display_func (void); 222 void glut_reshape_func (int width, int height); 223 void glut_keyboard_func (unsigned char key, 224 int x, int y); 225 void glut_special_func (int key, int x, int y); 226 void glut_mouse_func (int button, int state, 227 int x, int y); 228 void glut_passive_motion_func (int x, int y); 229 230 void glut_append_object (GlutObject obj); 231 void glut_prepend_object (GlutObject obj); 232 void glut_insert_object (GlutObject obj, 233 GlutObject after); 234 void glut_remove_object (GlutObject obj); 235 236 GlutObject glut_previous_object (GlutObject); 237 GlutObject glut_next_object (GlutObject); 238 GlutObject glut_last_object (void); 239 240 GlutObject glut_previous_focus_widget (GlutObject); 241 GlutObject glut_next_focus_widget (GlutObject); 242 243 int glut_bitmap_string_width (void *font, char *string, 244 int length); 245 GlutFontInfo* glut_get_bitmap_font_info (void *font); 246 247 void glut_forget_all (void); 248 249 250 #ifdef __cplusplus 251 } 252 #endif 253 254 #endif /* __GRACER_WIDGETS_H__ */ 255