/* * GRacer * * Copyright (C) 1999 Takashi Matsuda * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #ifndef __GRACER_WIDGETS_H__ #define __GRACER_WIDGETS_H__ #include #include #ifdef __cplusplus extern "C" { #endif #if 0 } #endif enum { GR_GLUT_ROOT = 0, GR_GLUT_ROOT_WIDGET, GR_GLUT_ROOT_GAME, GR_GLUT_WIDGET = 0, GR_GLUT_WIDGET_LABEL, GR_GLUT_WIDGET_BUTTON, GR_GLUT_WIDGET_ENTRY, }; enum { GR_STATE_NORMAL = 0, GR_STATE_ACTIVE, GR_STATE_FOCUS, GR_STATE_GRAB, GR_STATE_DISABLE, GR_NUM_STATE, }; enum { GR_CENTER = 0, GR_TOP = 1<<0, GR_BOTTOM = 1<<1, GR_LEFT = 1<<2, GR_RIGHT = 1<<3, GR_VERTICAL_MASK = (GR_TOP|GR_BOTTOM), GR_HORIZONTAL_MASK = (GR_LEFT|GR_RIGHT), }; typedef void* GlutObject; typedef struct GlutRoot GlutRoot; typedef struct GlutWidget GlutWidget; typedef struct GlutLabel GlutLabel; typedef struct GlutButton GlutButton; typedef struct GlutEntry GlutEntry; typedef struct GlutFontInfo GlutFontInfo; struct GlutFontInfo { void *font; int height; int ascent; int descent; GLuint dl; int compiled[128]; }; typedef void (*GlutRootFreeFunc) (GlutObject obj); typedef void (*GlutRootDisplayFunc) (GlutObject obj); typedef void (*GlutRootReshapeFunc) (GlutObject obj, int width, int height); struct GlutRoot { GrRef ref; int type; GLuint dl; int changed; GlutRootFreeFunc free_func; GlutRootDisplayFunc display_func; GlutRootReshapeFunc reshape_func; }; typedef void (*GlutWidgetKeyboardFunc) (GlutObject obj, unsigned char key, int x, int y); typedef void (*GlutWidgetSpecialFunc) (GlutObject obj, int key, int x, int y); typedef void (*GlutWidgetMouseFunc) (GlutObject obj, int button, int state, int x, int y); /* this is for internal use */ typedef void (*GlutWidgetCheckSize) (GlutObject obj); struct GlutWidget { GlutRoot core; int type; int x, y; int width, height; int anchor; int x0, y0, x1, y1; int focus; int active; void *font; GLfloat fg_color[GR_NUM_STATE][4]; GLfloat bg_color[GR_NUM_STATE][4]; GlutWidgetKeyboardFunc keyboard_func; GlutWidgetSpecialFunc special_func; GlutWidgetMouseFunc mouse_func; GlutWidgetCheckSize check_size; }; typedef void (*GlutButtonInvokeFunc) (GlutObject obj); struct GlutLabel { GlutWidget core; int type; char *title; int length; int str_width; int justify; }; struct GlutButton { GlutWidget core; int type; char *title; int length; int str_width; GlutButtonInvokeFunc invoke_func; }; typedef void (*GlutEntryInvokeFunc) (GlutObject obj); typedef void (*GlutEntryChangedFunc) (GlutObject obj); struct GlutEntry { GlutWidget core; int type; char text[1024]; int length; int display_pos; int calet_pos; GlutEntryChangedFunc invoke_func; GlutEntryChangedFunc changed_func; }; extern GrSList *glut_widgets; extern GlutObject grab_widget; extern GlutObject focus_widget; extern int screen_width; extern int screen_height; GlutObject glut_root_new (void); void glut_root_init (GlutObject obj); void glut_root_destroy (GlutObject obj); GlutObject glut_widget_new (void); void glut_widget_init (GlutObject obj); void glut_widget_destroy (GlutObject obj); void glut_widget_set_position (GlutObject obj, int x, int y, int anchor); void glut_widget_move (GlutObject obj, int dx, int dy); void glut_widget_set_size (GlutObject obj, int width, int height); void glut_widget_set_font (GlutObject obj, void *font); void glut_widget_set_focus (GlutObject obj); int glut_widget_is_focusable (GlutObject obj); GlutObject glut_label_new (void); void glut_label_init (GlutObject obj); void glut_label_destroy (GlutObject obj); void glut_label_set_text (GlutObject obj, char *text); void glut_button_init (GlutObject obj); void glut_button_destroy (GlutObject obj); GlutObject glut_button_new (void); void glut_button_set_text (GlutObject obj, char *text); void glut_button_invoke (GlutObject obj); void glut_entry_init (GlutObject obj); void glut_entry_destroy (GlutObject obj); GlutObject glut_entry_new (void); void glut_entry_set_text (GlutObject obj, char *text); void glut_entry_invoke (GlutObject obj); void glut_display_func (void); void glut_reshape_func (int width, int height); void glut_keyboard_func (unsigned char key, int x, int y); void glut_special_func (int key, int x, int y); void glut_mouse_func (int button, int state, int x, int y); void glut_passive_motion_func (int x, int y); void glut_append_object (GlutObject obj); void glut_prepend_object (GlutObject obj); void glut_insert_object (GlutObject obj, GlutObject after); void glut_remove_object (GlutObject obj); GlutObject glut_previous_object (GlutObject); GlutObject glut_next_object (GlutObject); GlutObject glut_last_object (void); GlutObject glut_previous_focus_widget (GlutObject); GlutObject glut_next_focus_widget (GlutObject); int glut_bitmap_string_width (void *font, char *string, int length); GlutFontInfo* glut_get_bitmap_font_info (void *font); void glut_forget_all (void); #ifdef __cplusplus } #endif #endif /* __GRACER_WIDGETS_H__ */