Bläddra i källkod

* coding style fixes.

tags/v0.99.beta14
Sam Hocevar sam 19 år sedan
förälder
incheckning
6516714d03
2 ändrade filer med 204 tillägg och 217 borttagningar
  1. +1
    -1
      src/caca.h
  2. +203
    -216
      src/graphics.c

+ 1
- 1
src/caca.h Visa fil

@@ -364,7 +364,7 @@ void caca_free_bitmap(struct caca_bitmap *);
char* caca_get_html(void); char* caca_get_html(void);
char* caca_get_html3(void); char* caca_get_html3(void);
char* caca_get_irc(void); char* caca_get_irc(void);
char* caca_get_ANSI(int trailing);
char* caca_get_ansi(int trailing);
/* @} */ /* @} */


#ifdef __cplusplus #ifdef __cplusplus


+ 203
- 216
src/graphics.c Visa fil

@@ -237,7 +237,7 @@ static int const win32_bg_palette[] =
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)


static unsigned int const gl_bg_palette[] =
static unsigned int const gl_bgpal[] =
{ {
0, 0,
0x0000007F, 0x0000007F,
@@ -302,52 +302,51 @@ static int x11_error_handler(Display *, XErrorEvent *);


#if defined(USE_GL) #if defined(USE_GL)
unsigned char gl_key = 0; unsigned char gl_key = 0;
int gl_special_key=0;
int gl_special_key = 0;
int gl_new_width; int gl_new_width;
int gl_new_height; int gl_new_height;



static void gl_handle_keyboard(unsigned char key, int x, int y) static void gl_handle_keyboard(unsigned char key, int x, int y)
{ {
gl_key = key; gl_key = key;
} }

static void gl_handle_special_key(int key, int x, int y) static void gl_handle_special_key(int key, int x, int y)
{ {
gl_special_key = key;
gl_special_key = key;
} }
static void gl_handle_reshape (int w, int h)

static void gl_handle_reshape(int w, int h)
{ {
if(gl_bit) /* Do not handle reshaping at the first time*/
if(gl_bit) /* Do not handle reshaping at the first time*/
{ {
gl_new_width = w;
gl_new_height = h;


gl_new_width = w;
gl_new_height = h;

gl_resized = 1;
gl_resized = 1;
} }
else
gl_bit=1;
else
gl_bit = 1;
} }

static void gl_handle_mouse(int button, int state, int x, int y) static void gl_handle_mouse(int button, int state, int x, int y)
{ {
gl_mouse_clicked = 1;
gl_mouse_button = button;
gl_mouse_state = state;
gl_mouse_x = x/gl_font_width;
gl_mouse_y = y/gl_font_height;
gl_mouse_changed = 1;
gl_mouse_clicked = 1;
gl_mouse_button = button;
gl_mouse_state = state;
gl_mouse_x = x / gl_font_width;
gl_mouse_y = y / gl_font_height;
gl_mouse_changed = 1;
} }

static void gl_handle_mouse_motion(int x, int y) static void gl_handle_mouse_motion(int x, int y)
{ {
gl_mouse_x = x/gl_font_width;
gl_mouse_y = y/gl_font_height;
gl_mouse_changed = 1;
gl_mouse_x = x / gl_font_width;
gl_mouse_y = y / gl_font_height;
gl_mouse_changed = 1;
} }

#endif #endif




/** \brief Set the default colour pair. /** \brief Set the default colour pair.
* *
* This function sets the default colour pair. String functions such as * This function sets the default colour pair. String functions such as
@@ -796,7 +795,7 @@ int _caca_init_graphics(void)
{ {
gettextinfo(&conio_ti); gettextinfo(&conio_ti);
conio_screen = malloc(2 * conio_ti.screenwidth conio_screen = malloc(2 * conio_ti.screenwidth
* conio_ti.screenheight * sizeof(char));
* conio_ti.screenheight * sizeof(char));
if(conio_screen == NULL) if(conio_screen == NULL)
return -1; return -1;
# if defined(SCREENUPDATE_IN_PC_H) # if defined(SCREENUPDATE_IN_PC_H)
@@ -993,12 +992,12 @@ int _caca_init_graphics(void)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
int i;
char *empty;
if(_caca_driver == CACA_DRIVER_GL)
{
int i;
char *empty;


if(getenv("CACA_GEOMETRY") && *(getenv("CACA_GEOMETRY")))
if(getenv("CACA_GEOMETRY") && *(getenv("CACA_GEOMETRY")))
sscanf(getenv("CACA_GEOMETRY"), sscanf(getenv("CACA_GEOMETRY"),
"%ux%u", &_caca_width, &_caca_height); "%ux%u", &_caca_width, &_caca_height);


@@ -1007,94 +1006,89 @@ int _caca_init_graphics(void)
if(!_caca_height) if(!_caca_height)
_caca_height = 32; _caca_height = 32;


gl_font_width = 9;
gl_font_height = 15;

gl_width = _caca_width*gl_font_width;
gl_height = _caca_height*gl_font_height;

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(gl_width, gl_height);
gl_window = glutCreateWindow("caca for GL");
gl_font_width = 9;
gl_font_height = 15;


gluOrtho2D(0,gl_width, gl_height, 0);
gl_width = _caca_width * gl_font_width;
gl_height = _caca_height * gl_font_height;


glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(gl_width, gl_height);
gl_window = glutCreateWindow("caca for GL");


glutKeyboardFunc(gl_handle_keyboard);
glutSpecialFunc(gl_handle_special_key);
glutReshapeFunc(gl_handle_reshape);
gluOrtho2D(0, gl_width, gl_height, 0);


glutMouseFunc(gl_handle_mouse);
glutMotionFunc(gl_handle_mouse_motion);
glutPassiveMotionFunc(gl_handle_mouse_motion);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);


glutKeyboardFunc(gl_handle_keyboard);
glutSpecialFunc(gl_handle_special_key);
glutReshapeFunc(gl_handle_reshape);


glLoadIdentity();
glutMouseFunc(gl_handle_mouse);
glutMotionFunc(gl_handle_mouse_motion);
glutPassiveMotionFunc(gl_handle_mouse_motion);


glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, gl_width, gl_height, 0);
glLoadIdentity();


glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, gl_width, gl_height, 0);


glMatrixMode(GL_MODELVIEW);


glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT);




empty = malloc(16*16*4);
if(empty == NULL)
empty = malloc(16 * 16 * 4);
if(empty == NULL)
return -1; return -1;


memset(empty, 255, 16*16*4);
glEnable(GL_TEXTURE_2D);
memset(empty, 0xff, 16 * 16 * 4);
glEnable(GL_TEXTURE_2D);


for(i=0;i<94;i++)
{
glGenTextures(1,&id[i]);
glBindTexture(GL_TEXTURE_2D, id[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16,16,
0, GL_RGB, GL_UNSIGNED_BYTE, empty);
}
for(i=0;i<94;i++)
{

glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT);
for(i = 0; i < 94; i++)
{
glGenTextures(1, &id[i]);
glBindTexture(GL_TEXTURE_2D, id[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
16, 16, 0, GL_RGB, GL_UNSIGNED_BYTE, empty);
}


glColor3f(1,1,1);
glRasterPos2f(0,15);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,i+32);
for(i = 0; i < 94; i++)
{
glDisable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT);


glColor3f(1, 1, 1);
glRasterPos2f(0, 15);
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, i + 32);


glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,id[i]);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, gl_height-16, 16,16, 0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, id[i]);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
0, gl_height - 16, 16, 16, 0);


glutMainLoopEvent();
glutPostRedisplay();
}
glutMainLoopEvent();
glutPostRedisplay();
} }
}
else else
#endif #endif
#if defined(USE_NULL) #if defined(USE_NULL)
if(_caca_driver == CACA_DRIVER_NULL)
{
if(getenv("CACA_GEOMETRY") && *(getenv("CACA_GEOMETRY")))
if(_caca_driver == CACA_DRIVER_NULL)
{
if(getenv("CACA_GEOMETRY") && *(getenv("CACA_GEOMETRY")))
sscanf(getenv("CACA_GEOMETRY"), sscanf(getenv("CACA_GEOMETRY"),
"%ux%u", &_caca_width, &_caca_height); "%ux%u", &_caca_width, &_caca_height);
if(!_caca_width)
if(!_caca_width)
_caca_width = 80; _caca_width = 80;
if(!_caca_height)
if(!_caca_height)
_caca_height = 32; _caca_height = 32;
}
else
}
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -1171,20 +1165,18 @@ int _caca_end_graphics(void)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
glutDestroyWindow(gl_window);
}
else
if(_caca_driver == CACA_DRIVER_GL)
{
glutDestroyWindow(gl_window);
}
else
#endif #endif
#if defined(USE_NULL) #if defined(USE_NULL)
if(_caca_driver == CACA_DRIVER_NULL)
{
/* I'm bored to write 'nothing to do'.
* So I don't.
*/
}
else
if(_caca_driver == CACA_DRIVER_NULL)
{
/* Nothing to do here. */
}
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -1221,11 +1213,11 @@ int caca_set_window_title(char const *title)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
glutSetWindowTitle(title);
}
else
if(_caca_driver == CACA_DRIVER_GL)
{
glutSetWindowTitle(title);
}
else
#endif #endif
{ {
/* Not supported */ /* Not supported */
@@ -1261,11 +1253,11 @@ unsigned int caca_get_window_width(void)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
return gl_width;
}
else
if(_caca_driver == CACA_DRIVER_GL)
{
return gl_width;
}
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -1301,11 +1293,11 @@ unsigned int caca_get_window_height(void)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
return gl_height;
}
else
if(_caca_driver == CACA_DRIVER_GL)
{
return gl_height;
}
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -1475,102 +1467,96 @@ void caca_refresh(void)
else else
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
if(_caca_driver == CACA_DRIVER_GL)
{
unsigned int x, y, offsetx, offsety;

if(_caca_driver == CACA_DRIVER_GL)
{
unsigned int x, y, offsetx, offsety;


glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT);


offsety=0;
for(y=0;y<gl_height;y+=gl_font_height)
offsety=0;
for(y = 0; y < gl_height; y += gl_font_height)
{
offsetx = 0;
for(x = 0; x < gl_width; x += gl_font_width)
{ {
offsetx = 0;
for(x=0;x<gl_width;x+=gl_font_width)
{
uint8_t *attr = cache_attr + offsetx + offsety * _caca_width; uint8_t *attr = cache_attr + offsetx + offsety * _caca_width;
int offset; int offset;
float br, bg, bb; float br, bg, bb;
offset = attr[0]>>4;
offset = attr[0] >> 4;


br = ((gl_bg_palette[offset]&0x00FF0000)>>16)/255.0f;
bg = ((gl_bg_palette[offset]&0x0000FF00)>>8)/255.0f;
bb = ((gl_bg_palette[offset]&0x000000FF))/255.0f;
br = ((gl_bgpal[offset] & 0x00FF0000) >> 16) / 255.0f;
bg = ((gl_bgpal[offset] & 0x0000FF00) >> 8) / 255.0f;
bb = ((gl_bgpal[offset] & 0x000000FF)) / 255.0f;


glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glColor3f(br, bg, bb); glColor3f(br, bg, bb);
glBegin(GL_QUADS); glBegin(GL_QUADS);
glVertex2f(x,y);
glVertex2f(x+gl_font_width,y);
glVertex2f(x+gl_font_width,y+gl_font_height);
glVertex2f(x,y+gl_font_height);
glVertex2f(x, y);
glVertex2f(x + gl_font_width, y);
glVertex2f(x + gl_font_width, y + gl_font_height);
glVertex2f(x, y + gl_font_height);
glEnd(); glEnd();



offsetx++;
}
offsetx++;
}


offsety++; offsety++;
}
}


/* 2nd pass, avoids changing render state too much */
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_ONE);


offsety = 0;
for(y = 0; y < gl_height; y += gl_font_height)
{
offsetx = 0;
for(x = 0; x < gl_width; x += gl_font_width)
{
uint8_t *attr = cache_attr + offsetx + offsety * _caca_width;
unsigned char *chr = cache_char + offsetx + offsety * _caca_width;
float fr, fg, fb;


/* 2nd pass, avoids changing render state too much */
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_ONE);
fr = ((gl_bgpal[attr[0] & 0xf] & 0x00FF0000) >> 16) / 255.0f;
fg = ((gl_bgpal[attr[0] & 0xf] & 0x0000FF00) >> 8) / 255.0f;
fb = ((gl_bgpal[attr[0] & 0xf] & 0x000000FF)) / 255.0f;


offsety=0;
for(y=0;y<gl_height;y+=gl_font_height)
{
offsetx = 0;
for(x=0;x<gl_width;x+=gl_font_width)
if(chr[0] != ' ')
{ {
uint8_t *attr = cache_attr + offsetx + offsety * _caca_width;
unsigned char *chr = cache_char + offsetx + offsety * _caca_width;
float fr, fg, fb;


fr = ((gl_bg_palette[attr[0] & 0xf]&0x00FF0000)>>16)/255.0f;
fg = ((gl_bg_palette[attr[0] & 0xf]&0x0000FF00)>>8)/255.0f;
fb = ((gl_bg_palette[attr[0] & 0xf]&0x000000FF))/255.0f;

if(chr[0] != ' ')
{
glBindTexture(GL_TEXTURE_2D, id[chr[0]-32]);

glColor3f(fr, fg, fb);
glBegin(GL_QUADS);
glTexCoord2f(0,1);
glVertex2f(x,y);
glTexCoord2f(0.5,1);
glVertex2f(x+gl_font_width,y);
glTexCoord2f(0.5,0);
glVertex2f(x+gl_font_width,y+gl_font_height);
glTexCoord2f(0,0);
glVertex2f(x,y+gl_font_height);
glEnd();
}
offsetx++;
glBindTexture(GL_TEXTURE_2D, id[chr[0]-32]);

glColor3f(fr, fg, fb);
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(x, y);
glTexCoord2f(0.5, 1);
glVertex2f(x + gl_font_width, y);
glTexCoord2f(0.5, 0);
glVertex2f(x + gl_font_width, y + gl_font_height);
glTexCoord2f(0, 0);
glVertex2f(x, y + gl_font_height);
glEnd();
} }
offsety++;
offsetx++;
} }
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);



glutMainLoopEvent();
glutSwapBuffers();
glutPostRedisplay();
offsety++;
} }
else
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);

glutMainLoopEvent();
glutSwapBuffers();
glutPostRedisplay();
}
else
#endif #endif
#if defined(USE_NULL) #if defined(USE_NULL)
if(_caca_driver == CACA_DRIVER_NULL)
{
/* Do I told you about my cat ? */
}
if(_caca_driver == CACA_DRIVER_NULL)
{
/* Nothing to do here. */
}
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -1696,11 +1682,11 @@ static void caca_handle_resize(void)
#if defined(USE_NULL) #if defined(USE_NULL)
if(_caca_driver == CACA_DRIVER_NULL) if(_caca_driver == CACA_DRIVER_NULL)
{ {
/* \_o< pOaK */
/* By the way, we should never reach this,
* as events are not handled
*/
/* \_o< pOaK
* By the way, we should never reach this,
* as events are not handled */
} }
else
#endif #endif
{ {
/* Dummy */ /* Dummy */
@@ -2025,23 +2011,23 @@ char* caca_get_irc(void)
* *
* This function generates and returns an ANSI representation of * This function generates and returns an ANSI representation of
* the current image. * the current image.
* \param trailing if 0, raw ANSI will be generated. Otherwise, you'll be able to cut/paste the result to a function like printf
* \param trailing if 0, raw ANSI will be generated. Otherwise, you'll be
* able to cut/paste the result to a function like printf
* \return buffer containing generated ANSI codes as a big string * \return buffer containing generated ANSI codes as a big string
*/ */
char* caca_get_ANSI(int trailing)
char * caca_get_ansi(int trailing)
{ {
static int const palette[] =
static int const palette[] =
{ {
30, 34, 32, 36, 31, 35, 33, 37, /* Both lines (light and dark) are the same, */
30, 34, 32, 36, 31, 35, 33, 37, /* light colors handling is done later */
30, 34, 32, 36, 31, 35, 33, 37, /* Both lines (light and dark) are the same, */
30, 34, 32, 36, 31, 35, 33, 37, /* light colors handling is done later */
}; };
char *buffer, *cur; char *buffer, *cur;
unsigned int x, y; unsigned int x, y;
/* 20 bytes assumed for max length per pixel. /* 20 bytes assumed for max length per pixel.
Add height*9 to that (zeroes color at the end and jump to next line)
*/
* Add height*9 to that (zeroes color at the end and jump to next line) */
buffer = malloc(((_caca_height*9) + (_caca_width * _caca_height * 20)) * sizeof(char)); buffer = malloc(((_caca_height*9) + (_caca_width * _caca_height * 20)) * sizeof(char));
cur = buffer; cur = buffer;


@@ -2061,29 +2047,30 @@ char* caca_get_ANSI(int trailing)
uint8_t bg = (palette[lineattr[x] >> 4])+10; uint8_t bg = (palette[lineattr[x] >> 4])+10;
uint8_t c = linechar[x]; uint8_t c = linechar[x];


if(!trailing)
cur += sprintf(cur, "\033[");
else
cur += sprintf(cur, "\\033[");
if(!trailing)
cur += sprintf(cur, "\033[");
else
cur += sprintf(cur, "\\033[");
if(fg>7)
cur += sprintf(cur, "1;%d;%dm",fg,bg);
else
cur += sprintf(cur, "0;%d;%dm",fg,bg);
if(fg > 7)
cur += sprintf(cur, "1;%d;%dm",fg,bg);
else
cur += sprintf(cur, "0;%d;%dm",fg,bg);
*cur++ = c; *cur++ = c;
if((c=='%') && trailing)
*cur++=c;
if((c == '%') && trailing)
*cur++ = c;
prevfg = fg; prevfg = fg;
prevbg = bg; prevbg = bg;
} }
if(!trailing)
cur += sprintf(cur, "\033[0m\n\r");
else
cur += sprintf(cur, "\\033[0m\\n\n");
if(!trailing)
cur += sprintf(cur, "\033[0m\n\r");
else
cur += sprintf(cur, "\\033[0m\\n\n");
} }

/* Crop to really used size */ /* Crop to really used size */
buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char)); buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char));


return buffer; return buffer;

} }


Laddar…
Avbryt
Spara