TORCS  1.3.9
The Open Racing Car Simulator
guiimage.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 
3  file : guiimage.cpp
4  created : Wed May 1 10:29:28 CEST 2002
5  copyright : (C) 2001 by Eric Espie
6  email : eric.espie@torcs.org
7  version : $Id$
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
27 #include <stdlib.h>
28 #ifdef WIN32
29 #include <windows.h>
30 #endif
31 #include <tgfclient.h>
32 #include "gui.h"
33 
34 
48 int GfuiStaticImageCreate(void *scr, int x, int y, int w, int h, char *name)
49 {
50  tGfuiImage *image;
51  tGfuiObject *object;
52  tGfuiScreen *screen = (tGfuiScreen*)scr;
53 
54  object = (tGfuiObject*)calloc(1, sizeof(tGfuiObject));
55  object->widget = GFUI_IMAGE;
56  object->focusMode = GFUI_FOCUS_NONE;
57  object->visible = 1;
58  object->id = screen->curId++;
59 
60  image = &(object->u.image);
61  image->texture = GfImgReadTex(name);
62 
63  if (!image->texture) {
64  free(object);
65  return -1;
66  }
67 
68  object->xmin = x;
69  object->xmax = x + w;
70  object->ymin = y;
71  object->ymax = y + h;
72 
73  gfuiAddObject(screen, object);
74 
75  return object->id;
76 }
77 
86 void GfuiStaticImageSet(void *scr, int id, char *name)
87 {
88  tGfuiObject *curObject;
89  tGfuiScreen *screen = (tGfuiScreen*)scr;
90  tGfuiImage *image;
91 
92  curObject = screen->objects;
93  if (curObject != NULL) {
94  do {
95  curObject = curObject->next;
96  if (curObject->id == id) {
97  if (curObject->widget == GFUI_IMAGE) {
98  image = &(curObject->u.image);
99  GfImgFreeTex(image->texture);
100  image->texture = GfImgReadTex(name);
101  }
102  return;
103  }
104  } while (curObject != screen->objects);
105  }
106 }
107 
108 void
110 {
111  tGfuiImage *image;
112 
113  image = &(obj->u.image);
114  GfImgFreeTex(image->texture);
115  free(obj);
116 }
117 
118 void
120 {
121  tGfuiImage *image;
122 
123  image = &(obj->u.image);
124 
125  glEnable(GL_TEXTURE_2D);
126  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
127  glBindTexture(GL_TEXTURE_2D, image->texture);
128 
129  glBegin(GL_TRIANGLE_STRIP);
130  {
131  glColor4f(1.0, 1.0, 1.0, 0.0);
132  glTexCoord2f(0.0, 0.0); glVertex2f(obj->xmin, obj->ymin);
133  glTexCoord2f(0.0, 1.0); glVertex2f(obj->xmin, obj->ymax);
134  glTexCoord2f(1.0, 0.0); glVertex2f(obj->xmax, obj->ymin);
135  glTexCoord2f(1.0, 1.0); glVertex2f(obj->xmax, obj->ymax);
136  }
137  glEnd();
138  glBindTexture(GL_TEXTURE_2D, 0);
139  glDisable(GL_TEXTURE_2D);
140 }
void GfImgFreeTex(GLuint tex)
Free the texture.
Definition: img.cpp:280
GLuint GfImgReadTex(char *filename)
Read a png image into a texture.
Definition: img.cpp:293
int id
Definition: gui.h:200
void gfuiDrawImage(tGfuiObject *obj)
Definition: guiimage.cpp:119
void GfuiStaticImageSet(void *scr, int id, char *name)
Replace an image by another one.
Definition: guiimage.cpp:86
int curId
Definition: gui.h:245
int ymin
Definition: gui.h:205
The Gaming Framework API (client part).
int xmax
Definition: gui.h:206
#define GFUI_IMAGE
Definition: gui.h:48
#define GFUI_FOCUS_NONE
Definition: gui.h:132
int GfuiStaticImageCreate(void *scr, int x, int y, int w, int h, char *name)
Create a new static image.
Definition: guiimage.cpp:48
union GfuiObject::@17 u
struct GfuiObject * next
Definition: gui.h:217
tGfuiImage image
Definition: gui.h:215
void gfuiAddObject(tGfuiScreen *screen, tGfuiObject *object)
Definition: guiobject.cpp:485
static Vector y[4]
Definition: Convex.cpp:56
int ymax
Definition: gui.h:206
tGfuiObject * objects
Definition: gui.h:243
GLuint texture
Definition: gui.h:194
void gfuiReleaseImage(tGfuiObject *obj)
Definition: guiimage.cpp:109
int widget
Definition: gui.h:199
int xmin
Definition: gui.h:205