/***************************************************************************
tgfclient.h -- Interface file for The Gaming Framework
-------------------
created : Fri Aug 13 22:32:14 CEST 1999
copyright : (C) 1999 by Eric Espie
email : torcs@free.fr
version : $Id: tgfclient.h,v 1.3 2004/03/03 23:00:41 torcs Exp $
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
/** @file
The Gaming Framework API (client part).
@author Eric Espie
@version $Id: tgfclient.h,v 1.3 2004/03/03 23:00:41 torcs Exp $
*/
#ifndef __TGFCLIENT__H__
#define __TGFCLIENT__H__
#include
#include
#include
#include
extern void GfInitClient(void);
/********************
* Screen Interface *
********************/
extern unsigned char *GfImgReadPng(const char *filename, int *widthp, int *heightp, float gamma);
extern int GfImgWritePng(unsigned char *img, const char *filename, int width, int height);
extern void GfImgFreeTex(GLuint tex);
extern GLuint GfImgReadTex(char *filename);
extern void GfScrInit(int argc, char *argv[]);
extern void GfScrShutdown(void);
extern void *GfScrMenuInit(void *precMenu);
extern char *GfTime2Str(tdble sec, int sgn);
extern void GfScrGetSize(int *ScrW, int *ScrH, int *ViewW, int *ViewH);
extern void GfScrReinit(void*);
/*****************************
* GUI interface (low-level) *
*****************************/
/* Widget type */
#define GFUI_LABEL 0
#define GFUI_BUTTON 1
#define GFUI_GRBUTTON 2
#define GFUI_SCROLLIST 3
#define GFUI_SCROLLBAR 4
#define GFUI_EDITBOX 5
/* Alignment */
#define GFUI_ALIGN_HL_VB 0x00
#define GFUI_ALIGN_HL_VC 0x01
#define GFUI_ALIGN_HL_VT 0x02
#define GFUI_ALIGN_HC_VB 0x10
#define GFUI_ALIGN_HC_VC 0x11
#define GFUI_ALIGN_HC_VT 0x12
#define GFUI_ALIGN_HR_VB 0x20
#define GFUI_ALIGN_HR_VC 0x21
#define GFUI_ALIGN_HR_VT 0x22
/* Mouse action */
#define GFUI_MOUSE_UP 0
#define GFUI_MOUSE_DOWN 1
/* Keyboard action */
#define GFUI_KEY_UP 0
#define GFUI_KEY_DOWN 1
/* Scroll Bar position */
#define GFUI_SB_NONE 0
#define GFUI_SB_RIGHT 1
#define GFUI_SB_LEFT 2
#define GFUI_SB_TOP 3
#define GFUI_SB_BOTTOM 4
/* Scroll bar orientation */
#define GFUI_HORI_SCROLLBAR 0
#define GFUI_VERT_SCROLLBAR 1
/** Scroll bar call-back information */
typedef struct ScrollBarInfo
{
int pos; /**< Current scroll bar position */
void *userData; /**< Associated user data */
} tScrollBarInfo;
typedef void (*tfuiCallback)(void * /* userdata */);
typedef void (*tfuiSBCallback)(tScrollBarInfo *);
typedef int (*tfuiKeyCallback)(unsigned char key, int modifier, int state); /**< return 1 to prevent normal key computing */
typedef int (*tfuiSKeyCallback)(int key, int modifier, int state); /**< return 1 to prevent normal key computing */
/* GLUT Callback functions */
/* should be called explicitely if */
/* the corresponding GLUT Func is overriden */
/* after a call to GfuiActivateScreen */
extern void GfuiDisplay(void);
extern void GfuiDisplayNothing(void);
extern void GfuiIdle(void);
/* Screen management */
extern void *GfuiScreenCreate(void);
extern void *GfuiScreenCreateEx(float *bgColor,
void *userDataOnActivate, tfuiCallback onActivate,
void *userDataOnDeactivate, tfuiCallback onDeactivate,
int mouseAllowed);
extern void GfuiScreenRelease(void *screen);
extern void GfuiScreenActivate(void *screen);
extern int GfuiScreenIsActive(void *screen);
extern void GfuiScreenReplace(void *screen);
extern void GfuiScreenDeactivate(void);
extern void *GfuiHookCreate(void *userDataOnActivate, tfuiCallback onActivate);
extern void GfuiHookRelease(void *hook);
extern void GfuiAddKey(void *scr, unsigned char key, char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased);
extern void GfuiRegisterKey(unsigned char key, char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased);
extern void GfuiAddSKey(void *scr, int key, char *descr, void *userData, tfuiCallback onKeyPressed, tfuiCallback onKeyReleased);
extern void GfuiHelpScreen(void *prevScreen);
extern void GfuiScreenShot(void *notused);
extern void GfuiScreenAddBgImg(void *scr, char *filename);
extern void GfuiKeyEventRegister(void *scr, tfuiKeyCallback onKeyAction);
extern void GfuiSKeyEventRegister(void *scr, tfuiSKeyCallback onSKeyAction);
extern void GfuiKeyEventRegisterCurrent(tfuiKeyCallback onKeyAction);
extern void GfuiSKeyEventRegisterCurrent(tfuiSKeyCallback onSKeyAction);
/* mouse */
typedef struct MouseInfo
{
int X;
int Y;
int button[3];
} tMouseInfo;
extern tMouseInfo *GfuiMouseInfo(void);
extern void GfuiMouseSetPos(int x, int y);
extern void GfuiMouseHide(void);
extern void GfuiMouseShow(void);
extern void GfuiMouseSetHWPresent(void);
/* all widgets */
#define GFUI_VISIBLE 1 /**< Object visibility flag */
#define GFUI_INVISIBLE 0 /**< Object invisibility flag */
extern int GfuiVisibilitySet(void *scr, int id, int visible);
#define GFUI_DISABLE 1
#define GFUI_ENABLE 0
extern int GfuiEnable(void *scr, int id, int flag);
extern void GfuiUnSelectCurrent(void);
/* labels */
#define GFUI_FONT_BIG 0
#define GFUI_FONT_LARGE 1
#define GFUI_FONT_MEDIUM 2
#define GFUI_FONT_SMALL 3
#define GFUI_FONT_BIG_C 4
#define GFUI_FONT_LARGE_C 5
#define GFUI_FONT_MEDIUM_C 6
#define GFUI_FONT_SMALL_C 7
#define GFUI_FONT_DIGIT 8
extern int GfuiLabelCreate(void *scr, char *text,
int font, int x, int y, int align, int maxlen);
extern int GfuiLabelCreateEx(void *scr, char *text, float *fgColor, int font, int x, int y, int align, int maxlen);
extern int GfuiTipCreate(void *scr, char *text, int maxlen);
extern int GfuiTitleCreate(void *scr, char *text, int maxlen);
extern void GfuiLabelSetText(void *scr, int id, char *text);
extern void GfuiLabelSetColor(void *scr, int id, float *color);
extern void GfuiPrintString(char *text, float *fgColor, int font, int x, int y, int align);
extern int GfuiFontHeight(int font);
extern int GfuiFontWidth(int font, char *text);
/* buttons */
#define GFUI_BTNSZ 300
extern int GfuiButtonCreate(void *scr, char *text, int font,
int x, int y, int width, int align, int mouse,
void *userDataOnPush, tfuiCallback onPush,
void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost);
extern int GfuiButtonStateCreate(void *scr, char *text, int font, int x, int y, int width, int align, int mouse,
void *userDataOnPush, tfuiCallback onPush,
void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost);
extern int GfuiGrButtonCreate(void *scr, char *disabled, char *enabled, char *focused, char *pushed,
int x, int y, int align, int mouse,
void *userDataOnPush, tfuiCallback onPush,
void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost);
extern void GfuiButtonSetText(void *scr, int id, char *text);
extern int GfuiButtonGetFocused(void);
/* Edit Box */
extern int GfuiEditboxCreate(void *scr, char *text, int font, int x, int y, int width, int maxlen,
void *userDataOnFocus, tfuiCallback onFocus, tfuiCallback onFocusLost);
extern int GfuiEditboxGetFocused(void);
extern char *GfuiEditboxGetString(void *scr, int id);
extern void GfuiEditboxSetString(void *scr, int id, char *text);
/* Scrolling lists */
extern int GfuiScrollListCreate(void *scr, int font, int x, int y, int align,
int width, int height, int scrollbar, void *userDataOnSelect, tfuiCallback onSelect);
extern int GfuiScrollListInsertElement(void *scr, int Id, char *element, int index, void *userData);
extern int GfuiScrollListMoveSelectedElement(void *scr, int Id, int delta);
extern char *GfuiScrollListExtractSelectedElement(void *scr, int Id, void **userData);
extern char *GfuiScrollListExtractElement(void *scr, int Id, int index, void **userData);
extern char *GfuiScrollListGetSelectedElement(void *scr, int Id, void **userData);
extern char *GfuiScrollListGetElement(void *scr, int Id, int index, void **userData);
/* scroll bars */
extern int GfuiScrollBarCreate(void *scr, int x, int y, int align, int width, int orientation,
int min, int max, int len, int start,
void *userData, tfuiSBCallback onScroll);
extern void GfuiScrollBarPosSet(void *scr, int id, int min, int max, int len, int start);
extern int GfuiScrollBarPosGet(void *scr, int id);
/* Images */
extern int GfuiStaticImageCreate(void *scr, int x, int y, int w, int h, char *name);
extern void GfuiStaticImageSet(void *scr, int id, char *name);
/*****************************
* Menu Management Interface *
*****************************/
extern void *GfuiMenuScreenCreate(char *title);
extern void GfuiMenuDefaultKeysAdd(void *scr);
extern int GfuiMenuButtonCreate(void *menu, char *text, char *tip, void *userdata, tfuiCallback onpush);
extern int GfuiMenuBackQuitButtonCreate(void *menu, char *text, char *tip, void *userdata, tfuiCallback onpush);
/*********************
* Control interface *
*********************/
#define GFCTRL_TYPE_NOT_AFFECTED 0
#define GFCTRL_TYPE_JOY_AXIS 1
#define GFCTRL_TYPE_JOY_BUT 2
#define GFCTRL_TYPE_KEYBOARD 3
#define GFCTRL_TYPE_MOUSE_BUT 4
#define GFCTRL_TYPE_MOUSE_AXIS 5
#define GFCTRL_TYPE_SKEYBOARD 6
typedef struct
{
int index;
int type;
} tCtrlRef;
#define GFCTRL_JOY_UNTESTED -1
#define GFCTRL_JOY_NONE 0
#define GFCTRL_JOY_PRESENT 1
#define GFCTRL_JOY_MAXBUTTON 32 /* Size of integer so don't change please */
/** Joystick Information Structure */
typedef struct
{
int oldb[NUM_JOY];
float ax[MAX_AXES * NUM_JOY]; /**< Axis values */
int edgeup[GFCTRL_JOY_MAXBUTTON * NUM_JOY]; /**< Button transition from down (pressed) to up */
int edgedn[GFCTRL_JOY_MAXBUTTON * NUM_JOY]; /**< Button transition from up to down */
int levelup[GFCTRL_JOY_MAXBUTTON * NUM_JOY];/**< Button state (1 = up) */
} tCtrlJoyInfo;
extern tCtrlJoyInfo *GfctrlJoyInit(void);
extern int GfctrlJoyIsPresent(void);
extern int GfctrlJoyGetCurrent(tCtrlJoyInfo *joyInfo);
extern void GfctrlJoyRelease(tCtrlJoyInfo *joyInfo);
/** Mouse information structure */
typedef struct
{
int edgeup[3]; /**< Button transition from down (pressed) to up */
int edgedn[3]; /**< Button transition from up to down */
int button[3]; /**< Button state (1 = up) */
float ax[4]; /**< mouse axis position (mouse considered as a joystick) */
} tCtrlMouseInfo;
extern tCtrlMouseInfo *GfctrlMouseInit(void);
extern int GfctrlMouseGetCurrent(tCtrlMouseInfo *mouseInfo);
extern void GfctrlMouseRelease(tCtrlMouseInfo *mouseInfo);
extern void GfctrlMouseCenter(void);
extern void GfctrlMouseInitCenter(void);
extern tCtrlRef *GfctrlGetRefByName(char *name);
extern char *GfctrlGetNameByRef(int type, int index);
extern int GfuiGlutExtensionSupported(char *str);
#endif /* __TGFCLIENT__H__ */