|
|
@@ -264,12 +264,16 @@ unsigned int gl_width, gl_height; |
|
|
|
float gl_font_width, gl_font_height; |
|
|
|
float gl_incx, gl_incy; |
|
|
|
int id[94]; |
|
|
|
unsigned char gl_resized=0, gl_bit=0; |
|
|
|
unsigned char gl_mouse_changed=0, gl_mouse_clicked=0; |
|
|
|
unsigned char gl_resized = 0, gl_bit = 0; |
|
|
|
unsigned char gl_mouse_changed = 0, gl_mouse_clicked = 0; |
|
|
|
unsigned int gl_mouse_x, gl_mouse_y; |
|
|
|
unsigned int gl_mouse_button=0, gl_mouse_state=0; |
|
|
|
#endif |
|
|
|
unsigned int gl_mouse_button = 0, gl_mouse_state = 0; |
|
|
|
|
|
|
|
unsigned char gl_key = 0; |
|
|
|
int gl_special_key = 0; |
|
|
|
int gl_new_width; |
|
|
|
int gl_new_height; |
|
|
|
#endif |
|
|
|
|
|
|
|
static char *_caca_empty_line; |
|
|
|
static char *_caca_scratch_line; |
|
|
@@ -301,50 +305,11 @@ static int x11_error_handler(Display *, XErrorEvent *); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(USE_GL) |
|
|
|
unsigned char gl_key = 0; |
|
|
|
int gl_special_key = 0; |
|
|
|
int gl_new_width; |
|
|
|
int gl_new_height; |
|
|
|
|
|
|
|
static void gl_handle_keyboard(unsigned char key, int x, int y) |
|
|
|
{ |
|
|
|
gl_key = key; |
|
|
|
} |
|
|
|
|
|
|
|
static void gl_handle_special_key(int key, int x, int y) |
|
|
|
{ |
|
|
|
gl_special_key = key; |
|
|
|
} |
|
|
|
|
|
|
|
static void gl_handle_reshape(int w, int h) |
|
|
|
{ |
|
|
|
if(gl_bit) /* Do not handle reshaping at the first time*/ |
|
|
|
{ |
|
|
|
gl_new_width = w; |
|
|
|
gl_new_height = h; |
|
|
|
|
|
|
|
gl_resized = 1; |
|
|
|
} |
|
|
|
else |
|
|
|
gl_bit = 1; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
static void gl_handle_keyboard(unsigned char, int, int); |
|
|
|
static void gl_handle_special_key(int, int, int); |
|
|
|
static void gl_handle_reshape(int, int); |
|
|
|
static void gl_handle_mouse(int, int, int, int); |
|
|
|
static void gl_handle_mouse_motion(int, int); |
|
|
|
#endif |
|
|
|
|
|
|
|
/** \brief Set the default colour pair. |
|
|
@@ -1480,7 +1445,7 @@ void caca_refresh(void) |
|
|
|
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT); |
|
|
|
|
|
|
|
offsety=0; |
|
|
|
offsety = 0; |
|
|
|
for(y = 0; y < gl_height; y += gl_font_height) |
|
|
|
{ |
|
|
|
offsetx = 0; |
|
|
@@ -1488,7 +1453,7 @@ void caca_refresh(void) |
|
|
|
{ |
|
|
|
uint8_t *attr = cache_attr + offsetx + offsety * _caca_width; |
|
|
|
int offset; |
|
|
|
float br, bg, bb; |
|
|
|
float br, bg, bb; |
|
|
|
offset = attr[0] >> 4; |
|
|
|
|
|
|
|
br = ((gl_bgpal[offset] & 0x00FF0000) >> 16) / 255.0f; |
|
|
@@ -1498,10 +1463,10 @@ void caca_refresh(void) |
|
|
|
glDisable(GL_TEXTURE_2D); |
|
|
|
glColor3f(br, bg, bb); |
|
|
|
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(); |
|
|
|
|
|
|
|
offsetx++; |
|
|
@@ -1535,14 +1500,14 @@ void caca_refresh(void) |
|
|
|
|
|
|
|
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); |
|
|
|
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++; |
|
|
@@ -1595,7 +1560,7 @@ void caca_refresh(void) |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* XXX: following functions are loca |
|
|
|
* XXX: following functions are local |
|
|
|
*/ |
|
|
|
static void caca_handle_resize(void) |
|
|
|
{ |
|
|
@@ -1636,6 +1601,7 @@ static void caca_handle_resize(void) |
|
|
|
#if defined(USE_CONIO) |
|
|
|
if(_caca_driver == CACA_DRIVER_CONIO) |
|
|
|
{ |
|
|
|
/* Nothing to do here. */ |
|
|
|
} |
|
|
|
else |
|
|
|
#endif |
|
|
@@ -1663,6 +1629,7 @@ static void caca_handle_resize(void) |
|
|
|
#if defined(USE_WIN32) |
|
|
|
if(_caca_driver == CACA_DRIVER_WIN32) |
|
|
|
{ |
|
|
|
/* Nothing to do here. */ |
|
|
|
} |
|
|
|
else |
|
|
|
#endif |
|
|
@@ -1784,6 +1751,48 @@ static RETSIGTYPE sigwinch_handler(int sig) |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(USE_GL) |
|
|
|
static void gl_handle_keyboard(unsigned char key, int x, int y) |
|
|
|
{ |
|
|
|
gl_key = key; |
|
|
|
} |
|
|
|
|
|
|
|
static void gl_handle_special_key(int key, int x, int y) |
|
|
|
{ |
|
|
|
gl_special_key = key; |
|
|
|
} |
|
|
|
|
|
|
|
static void gl_handle_reshape(int w, int h) |
|
|
|
{ |
|
|
|
if(gl_bit) /* Do not handle reshaping at the first time*/ |
|
|
|
{ |
|
|
|
gl_new_width = w; |
|
|
|
gl_new_height = h; |
|
|
|
|
|
|
|
gl_resized = 1; |
|
|
|
} |
|
|
|
else |
|
|
|
gl_bit = 1; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Exporters */ |
|
|
|
|
|
|
|
/* HTML */ |
|
|
@@ -2029,10 +2038,10 @@ char * caca_get_ansi(int trailing) |
|
|
|
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; |
|
|
|
unsigned int x, y; |
|
|
|
|
|
|
|
|
|
|
|
/* 20 bytes assumed for max length per pixel. |
|
|
|
* 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)); |
|
|
@@ -2058,7 +2067,7 @@ char * caca_get_ansi(int trailing) |
|
|
|
cur += sprintf(cur, "\033["); |
|
|
|
else |
|
|
|
cur += sprintf(cur, "\\033["); |
|
|
|
|
|
|
|
|
|
|
|
if(fg > 7) |
|
|
|
cur += sprintf(cur, "1;%d;%dm",fg,bg); |
|
|
|
else |
|
|
|