瀏覽代碼

* Polished the driver split a bit (still no events, except resize events),

properly credited authors and documented a few things.
tags/v0.99.beta14
Sam Hocevar sam 19 年之前
父節點
當前提交
70d96c811b
共有 22 個檔案被更改,包括 170 行新增337 行删除
  1. +35
    -20
      caca/caca.c
  2. +11
    -11
      caca/caca_internals.h
  3. +13
    -20
      caca/driver_conio.c
  4. +14
    -25
      caca/driver_gl.c
  5. +18
    -32
      caca/driver_ncurses.c
  6. +21
    -41
      caca/driver_slang.c
  7. +23
    -41
      caca/driver_win32.c
  8. +13
    -34
      caca/driver_x11.c
  9. +2
    -8
      caca/event.c
  10. +1
    -31
      caca/graphics.c
  11. +0
    -8
      cucul/bitmap.c
  12. +0
    -6
      cucul/box.c
  13. +2
    -9
      cucul/char.c
  14. +0
    -6
      cucul/conic.c
  15. +0
    -7
      cucul/cucul.c
  16. +9
    -1
      cucul/cucul_internals.h
  17. +5
    -10
      cucul/export.c
  18. +0
    -6
      cucul/line.c
  19. +0
    -6
      cucul/math.c
  20. +0
    -6
      cucul/sprite.c
  21. +0
    -6
      cucul/triangle.c
  22. +3
    -3
      src/cacaview.c

+ 35
- 20
caca/caca.c 查看文件

@@ -21,13 +21,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>


@@ -37,40 +30,54 @@ typedef unsigned char uint8_t;
#include "caca_internals.h" #include "caca_internals.h"


static int caca_init_driver(caca_t *kk); static int caca_init_driver(caca_t *kk);
static void caca_init_terminal(caca_t *kk);
static void caca_check_terminal(caca_t *kk);


/** \brief Attach a caca graphical context to a cucul backend context.
*
* Create a graphical context using device-dependent features (ncurses for
* terminals, an X11 window, a DOS command window...) that attaches to a
* libcucul canvas. Everything that gets drawn in the libcucul canvas can
* then be displayed by the libcaca driver.
*
* \param qq The cucul backend context.
* \return The caca graphical context or NULL if an error occurred.
*/
caca_t * caca_attach(cucul_t * qq) caca_t * caca_attach(cucul_t * qq)
{ {
int ret;
caca_t *kk = malloc(sizeof(caca_t)); caca_t *kk = malloc(sizeof(caca_t));


ret = caca_init_driver(kk);
kk->qq = qq;


if(ret)
if(caca_init_driver(kk))
{ {
free(kk); free(kk);
return NULL; return NULL;
} }


qq->refcount++;
kk->qq = qq;

/* Only for slang and ncurses */
caca_init_terminal(kk);
/* Only needed for slang and ncurses */
caca_check_terminal(kk);


if(_caca_init_graphics(kk))
if(kk->driver.init_graphics(kk))
{ {
qq->refcount--;
free(kk); free(kk);
return NULL; return NULL;
} }


/* Initialise events stuff */
/* Attached! */
kk->qq->refcount++;

/* Graphics stuff */
kk->delay = 0;
kk->rendertime = 0;

/* Events stuff */
#if defined(USE_SLANG) || defined(USE_NCURSES)
kk->events.key_timer.last_sec = 0; kk->events.key_timer.last_sec = 0;
kk->events.key_timer.last_usec = 0; kk->events.key_timer.last_usec = 0;
kk->events.last_key_ticks = 0; kk->events.last_key_ticks = 0;
kk->events.autorepeat_ticks = 0; kk->events.autorepeat_ticks = 0;
kk->events.last_key = 0; kk->events.last_key = 0;
#endif


kk->timer.last_sec = 0; kk->timer.last_sec = 0;
kk->timer.last_usec = 0; kk->timer.last_usec = 0;
@@ -82,6 +89,14 @@ caca_t * caca_attach(cucul_t * qq)
return kk; return kk;
} }


/** \brief Detach a caca graphical context from a cucul backend context.
*
* Detach a graphical context from its cucul backend and destroy it. The
* libcucul canvas continues to exist and other graphical contexts can be
* attached to it afterwards.
*
* \param qq The caca graphical context.
*/
void caca_detach(caca_t *kk) void caca_detach(caca_t *kk)
{ {
kk->driver.end_graphics(kk); kk->driver.end_graphics(kk);
@@ -175,7 +190,7 @@ static int caca_init_driver(caca_t *kk)
return -1; return -1;
} }


static void caca_init_terminal(caca_t *kk)
static void caca_check_terminal(caca_t *kk)
{ {
#if defined(HAVE_GETENV) && defined(HAVE_PUTENV) && \ #if defined(HAVE_GETENV) && defined(HAVE_PUTENV) && \
(defined(USE_SLANG) || defined(USE_NCURSES)) (defined(USE_SLANG) || defined(USE_NCURSES))


+ 11
- 11
caca/caca_internals.h 查看文件

@@ -20,6 +20,14 @@
#ifndef __CACA_INTERNALS_H__ #ifndef __CACA_INTERNALS_H__
#define __CACA_INTERNALS_H__ #define __CACA_INTERNALS_H__


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#endif

#if defined(USE_GL) #if defined(USE_GL)
# include <GL/glut.h> # include <GL/glut.h>
#endif #endif
@@ -102,7 +110,7 @@ struct caca_context
unsigned int (* get_window_width) (caca_t *); unsigned int (* get_window_width) (caca_t *);
unsigned int (* get_window_height) (caca_t *); unsigned int (* get_window_height) (caca_t *);
void (* display) (caca_t *); void (* display) (caca_t *);
void (* handle_resize) (caca_t *);
void (* handle_resize) (caca_t *, unsigned int *, unsigned int *);
} driver; } driver;


unsigned int width, height; unsigned int width, height;
@@ -124,6 +132,7 @@ struct caca_context
#endif #endif
} events; } events;


/* FIXME: maybe this should go away */
#if defined(USE_X11) && !defined(_DOXYGEN_SKIP_ME) #if defined(USE_X11) && !defined(_DOXYGEN_SKIP_ME)
struct x11 struct x11
{ {
@@ -163,6 +172,7 @@ struct caca_context
HANDLE hin, hout; HANDLE hin, hout;
HANDLE front, back; HANDLE front, back;
CHAR_INFO *buffer; CHAR_INFO *buffer;
CONSOLE_CURSOR_INFO cci;
} win32; } win32;
#endif #endif
#if defined(USE_GL) #if defined(USE_GL)
@@ -188,18 +198,8 @@ struct caca_context
#endif #endif
}; };


/* Initialisation functions */
extern int _caca_init_graphics(caca_t *kk);
extern int _caca_end_graphics(caca_t *kk);

/* Timer functions */ /* Timer functions */
extern void _caca_sleep(unsigned int); extern void _caca_sleep(unsigned int);
extern unsigned int _caca_getticks(struct caca_timer *); extern unsigned int _caca_getticks(struct caca_timer *);


/* Cached screen size */
extern unsigned int _caca_width;
extern unsigned int _caca_height;
extern int _caca_resize;
extern int _caca_resize_event;

#endif /* __CACA_INTERNALS_H__ */ #endif /* __CACA_INTERNALS_H__ */

+ 13
- 20
caca/driver_conio.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_conio.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \brief DOS/conio.h driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca DOS/conio.h input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_CONIO) #if defined(USE_CONIO)


#include <dos.h> #include <dos.h>
@@ -50,8 +43,7 @@ typedef unsigned char uint8_t;
#include "cucul.h" #include "cucul.h"
#include "cucul_internals.h" #include "cucul_internals.h"


#if !defined(_DOXYGEN_SKIP_ME)
int conio_init_graphics(caca_t *kk)
static int conio_init_graphics(caca_t *kk)
{ {
_wscroll = 0; _wscroll = 0;
_setcursortype(_NOCURSOR); _setcursortype(_NOCURSOR);
@@ -72,7 +64,7 @@ int conio_init_graphics(caca_t *kk)
return 0; return 0;
} }


int conio_end_graphics(caca_t *kk)
static int conio_end_graphics(caca_t *kk)
{ {
_wscroll = 1; _wscroll = 1;
textcolor((enum COLORS)WHITE); textcolor((enum COLORS)WHITE);
@@ -85,26 +77,25 @@ int conio_end_graphics(caca_t *kk)


return 0; return 0;
} }
#endif /* _DOXYGEN_SKIP_ME */


int conio_set_window_title(caca_t *kk, char const *title)
static int conio_set_window_title(caca_t *kk, char const *title)
{ {
return 0; return 0;
} }


unsigned int conio_get_window_width(caca_t *kk)
static unsigned int conio_get_window_width(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->width * 6; return kk->qq->width * 6;
} }


unsigned int conio_get_window_height(caca_t *kk)
static unsigned int conio_get_window_height(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->height * 10; return kk->qq->height * 10;
} }


void conio_display(caca_t *kk)
static void conio_display(caca_t *kk)
{ {
int n; int n;
char *screen = kk->conio.screen; char *screen = kk->conio.screen;
@@ -122,9 +113,11 @@ void conio_display(caca_t *kk)
# endif # endif
} }


void conio_handle_resize(caca_t *kk)
static void conio_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
return;
*new_width = kk->qq->width;
*new_height = kk->qq->height;
} }


/* /*


+ 14
- 25
caca/driver_gl.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_gl.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \author Jean-Yves Lamoureux <jylam@lnxscene.org>
* \brief OpenGL driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca OpenGL input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_GL) #if defined(USE_GL)


#include <GL/gl.h> #include <GL/gl.h>
@@ -82,7 +75,7 @@ static void gl_handle_reshape(int, int);
static void gl_handle_mouse(int, int, int, int); static void gl_handle_mouse(int, int, int, int);
static void gl_handle_mouse_motion(int, int); static void gl_handle_mouse_motion(int, int);


int gl_init_graphics(caca_t *kk)
static int gl_init_graphics(caca_t *kk)
{ {
char *empty_texture; char *empty_texture;
char const *geometry; char const *geometry;
@@ -186,29 +179,29 @@ int gl_init_graphics(caca_t *kk)
return 0; return 0;
} }


int gl_end_graphics(caca_t *kk)
static int gl_end_graphics(caca_t *kk)
{ {
glutDestroyWindow(kk->gl.window); glutDestroyWindow(kk->gl.window);
return 0; return 0;
} }


int gl_set_window_title(caca_t *kk, char const *title)
static int gl_set_window_title(caca_t *kk, char const *title)
{ {
glutSetWindowTitle(title); glutSetWindowTitle(title);
return 0; return 0;
} }


unsigned int gl_get_window_width(caca_t *kk)
static unsigned int gl_get_window_width(caca_t *kk)
{ {
return kk->gl.width; return kk->gl.width;
} }


unsigned int gl_get_window_height(caca_t *kk)
static unsigned int gl_get_window_height(caca_t *kk)
{ {
return kk->gl.height; return kk->gl.height;
} }


void gl_display(caca_t *kk)
static void gl_display(caca_t *kk)
{ {
unsigned int x, y, line; unsigned int x, y, line;


@@ -281,18 +274,14 @@ void gl_display(caca_t *kk)
glutPostRedisplay(); glutPostRedisplay();
} }


void gl_handle_resize(caca_t *kk)
static void gl_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
unsigned int new_width, new_height;

new_width = kk->qq->width;
new_height = kk->qq->height;

kk->gl.width = kk->gl.new_width; kk->gl.width = kk->gl.new_width;
kk->gl.height = kk->gl.new_height; kk->gl.height = kk->gl.new_height;


new_width = kk->gl.width / kk->gl.font_width;
new_height = (kk->gl.height / kk->gl.font_height) + 1;
*new_width = kk->gl.width / kk->gl.font_width;
*new_height = (kk->gl.height / kk->gl.font_height) + 1;


glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPushMatrix(); glPushMatrix();


+ 18
- 32
caca/driver_ncurses.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_ncurses.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \brief Ncurses driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca Ncurses input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_NCURSES) #if defined(USE_NCURSES)


#if defined(HAVE_NCURSES_H) #if defined(HAVE_NCURSES_H)
@@ -54,23 +47,16 @@ typedef unsigned char uint8_t;
#include "cucul.h" #include "cucul.h"
#include "cucul_internals.h" #include "cucul_internals.h"


int ncurses_init_graphics(caca_t *);
int ncurses_end_graphics(caca_t *);
int ncurses_set_window_title(caca_t *, char const *);
unsigned int ncurses_get_window_width(caca_t *);
unsigned int ncurses_get_window_height(caca_t *);
void ncurses_display(caca_t *);
void ncurses_handle_resize(caca_t *);

/* /*
* Local functions * Local functions
*/ */

#if defined(HAVE_SIGNAL) #if defined(HAVE_SIGNAL)
static RETSIGTYPE sigwinch_handler(int); static RETSIGTYPE sigwinch_handler(int);
static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */ static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */
#endif #endif


int ncurses_init_graphics(caca_t *kk)
static int ncurses_init_graphics(caca_t *kk)
{ {
static int curses_colors[] = static int curses_colors[] =
{ {
@@ -157,7 +143,7 @@ int ncurses_init_graphics(caca_t *kk)
return 0; return 0;
} }


int ncurses_end_graphics(caca_t *kk)
static int ncurses_end_graphics(caca_t *kk)
{ {
mousemask(kk->ncurses.oldmask, NULL); mousemask(kk->ncurses.oldmask, NULL);
curs_set(1); curs_set(1);
@@ -167,24 +153,24 @@ int ncurses_end_graphics(caca_t *kk)
return 0; return 0;
} }


int ncurses_set_window_title(caca_t *kk, char const *title)
static int ncurses_set_window_title(caca_t *kk, char const *title)
{ {
return 0; return 0;
} }


unsigned int ncurses_get_window_width(caca_t *kk)
static unsigned int ncurses_get_window_width(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->width * 6; return kk->qq->width * 6;
} }


unsigned int ncurses_get_window_height(caca_t *kk)
static unsigned int ncurses_get_window_height(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->height * 10; return kk->qq->height * 10;
} }


void ncurses_display(caca_t *kk)
static void ncurses_display(caca_t *kk)
{ {
int x, y; int x, y;
uint8_t *attr = kk->qq->attr; uint8_t *attr = kk->qq->attr;
@@ -201,22 +187,22 @@ void ncurses_display(caca_t *kk)
refresh(); refresh();
} }


void ncurses_handle_resize(caca_t *kk)
static void ncurses_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
unsigned int new_width, new_height;
struct winsize size; struct winsize size;


new_width = kk->qq->width;
new_height = kk->qq->height;
*new_width = kk->qq->width;
*new_height = kk->qq->height;


if(ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) if(ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0)
{ {
new_width = size.ws_col;
new_height = size.ws_row;
*new_width = size.ws_col;
*new_height = size.ws_row;
#if defined(HAVE_RESIZE_TERM) #if defined(HAVE_RESIZE_TERM)
resize_term(new_height, new_width);
resize_term(*new_height, *new_width);
#else #else
resizeterm(new_height, new_width);
resizeterm(*new_height, *new_width);
#endif #endif
wrefresh(curscr); wrefresh(curscr);
} }


+ 21
- 41
caca/driver_slang.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_slang.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \brief SLang driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca SLang input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_SLANG) #if defined(USE_SLANG)


#if defined(HAVE_SLANG_SLANG_H) #if defined(HAVE_SLANG_SLANG_H)
@@ -112,14 +105,6 @@ static int const slang_assoc[16*16] =
123, 149, 158, 167, 176, 185, 194, 19, 125, 21, 30, 39, 48, 57, 66, 255, 123, 149, 158, 167, 176, 185, 194, 19, 125, 21, 30, 39, 48, 57, 66, 255,
}; };


int slang_init_graphics(caca_t *);
int slang_end_graphics(caca_t *);
int slang_set_window_title(caca_t *, char const *);
unsigned int slang_get_window_width(caca_t *);
unsigned int slang_get_window_height(caca_t *);
void slang_display(caca_t *);
void slang_handle_resize(caca_t *);

/* /*
* Local functions * Local functions
*/ */
@@ -130,8 +115,7 @@ static RETSIGTYPE sigwinch_handler(int);
static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */ static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */
#endif #endif


#if !defined(_DOXYGEN_SKIP_ME)
int slang_init_graphics(caca_t *kk)
static int slang_init_graphics(caca_t *kk)
{ {
#if defined(HAVE_SIGNAL) #if defined(HAVE_SIGNAL)
sigwinch_kk = kk; sigwinch_kk = kk;
@@ -145,7 +129,7 @@ int slang_init_graphics(caca_t *kk)
if(SLkp_init() == -1) if(SLkp_init() == -1)
{ {
SLsig_unblock_signals(); SLsig_unblock_signals();
return NULL;
return -1;
} }


SLang_init_tty(-1, 0, 1); SLang_init_tty(-1, 0, 1);
@@ -153,7 +137,7 @@ int slang_init_graphics(caca_t *kk)
if(SLsmg_init_smg() == -1) if(SLsmg_init_smg() == -1)
{ {
SLsig_unblock_signals(); SLsig_unblock_signals();
return NULL;
return -1;
} }


SLsig_unblock_signals(); SLsig_unblock_signals();
@@ -179,7 +163,7 @@ int slang_init_graphics(caca_t *kk)
return 0; return 0;
} }


int slang_end_graphics(caca_t *kk)
static int slang_end_graphics(caca_t *kk)
{ {
SLtt_set_mouse_mode(0, 0); SLtt_set_mouse_mode(0, 0);
SLtt_set_cursor_visibility(1); SLtt_set_cursor_visibility(1);
@@ -188,26 +172,26 @@ int slang_end_graphics(caca_t *kk)


return 0; return 0;
} }
#endif /* _DOXYGEN_SKIP_ME */


int slang_set_window_title(caca_t *kk, char const *title)
static int slang_set_window_title(caca_t *kk, char const *title)
{ {
/* FIXME */
return 0; return 0;
} }


unsigned int slang_get_window_width(caca_t *kk)
static unsigned int slang_get_window_width(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->width * 6; return kk->qq->width * 6;
} }


unsigned int slang_get_window_height(caca_t *kk)
static unsigned int slang_get_window_height(caca_t *kk)
{ {
/* Fallback to a 6x10 font */ /* Fallback to a 6x10 font */
return kk->qq->height * 10; return kk->qq->height * 10;
} }


void slang_display(caca_t *kk)
static void slang_display(caca_t *kk)
{ {
int x, y; int x, y;
uint8_t *attr = kk->qq->attr; uint8_t *attr = kk->qq->attr;
@@ -250,25 +234,21 @@ void slang_display(caca_t *kk)
SLsmg_refresh(); SLsmg_refresh();
} }


/*
* XXX: following functions are local
*/

void slang_handle_resize(caca_t *kk)
static void slang_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
unsigned int new_width, new_height;

new_width = kk->qq->width;
new_height = kk->qq->height;

SLtt_get_screen_size(); SLtt_get_screen_size();
new_width = SLtt_Screen_Cols;
new_height = SLtt_Screen_Rows;
*new_width = SLtt_Screen_Cols;
*new_height = SLtt_Screen_Rows;


if(new_width != kk->qq->width || new_height != kk->qq->height)
if(*new_width != kk->qq->width || *new_height != kk->qq->height)
SLsmg_reinit_smg(); SLsmg_reinit_smg();
} }


/*
* XXX: following functions are local
*/

static void slang_init_palette(void) static void slang_init_palette(void)
{ {
/* See SLang ref., 5.4.4. */ /* See SLang ref., 5.4.4. */


+ 23
- 41
caca/driver_win32.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_win32.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \brief Win32 driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca Win32 input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_WIN32) #if defined(USE_WIN32)


#include <windows.h> #include <windows.h>
@@ -87,17 +80,8 @@ static int const win32_bg_palette[] =
BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
}; };


int win32_init_graphics(caca_t *);
int win32_end_graphics(caca_t *);
int win32_set_window_title(caca_t *, char const *);
unsigned int win32_get_window_width(caca_t *);
unsigned int win32_get_window_height(caca_t *);
void win32_display(caca_t *);
void win32_handle_resize(caca_t *);

int win32_init_graphics(caca_t *kk)
static int win32_init_graphics(caca_t *kk)
{ {
CONSOLE_CURSOR_INFO cci;
CONSOLE_SCREEN_BUFFER_INFO csbi; CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD size; COORD size;


@@ -111,9 +95,9 @@ int win32_init_graphics(caca_t *kk)
if(kk->win32.hout == INVALID_HANDLE_VALUE) if(kk->win32.hout == INVALID_HANDLE_VALUE)
return -1; return -1;


GetConsoleCursorInfo(kk->win32.hout, &cci);
cci.bVisible = FALSE;
SetConsoleCursorInfo(kk->win32.hout, &cci);
GetConsoleCursorInfo(kk->win32.hout, &kk->win32.cci);
kk->win32.cci.bVisible = FALSE;
SetConsoleCursorInfo(kk->win32.hout, &kk->win32.cci);


SetConsoleMode(kk->win32.hout, ENABLE_MOUSE_INPUT); SetConsoleMode(kk->win32.hout, ENABLE_MOUSE_INPUT);


@@ -144,11 +128,11 @@ int win32_init_graphics(caca_t *kk)
SetConsoleMode(kk->win32.front, 0); SetConsoleMode(kk->win32.front, 0);
SetConsoleMode(kk->win32.back, 0); SetConsoleMode(kk->win32.back, 0);


GetConsoleCursorInfo(kk->win32.front, &cci);
cci.dwSize = 0;
cci.bVisible = FALSE;
SetConsoleCursorInfo(kk->win32.front, &cci);
SetConsoleCursorInfo(kk->win32.back, &cci);
GetConsoleCursorInfo(kk->win32.front, &kk->win32.cci);
kk->win32.cci.dwSize = 0;
kk->win32.cci.bVisible = FALSE;
SetConsoleCursorInfo(kk->win32.front, &kk->win32.cci);
SetConsoleCursorInfo(kk->win32.back, &kk->win32.cci);


SetConsoleActiveScreenBuffer(kk->win32.front); SetConsoleActiveScreenBuffer(kk->win32.front);


@@ -160,7 +144,7 @@ int win32_init_graphics(caca_t *kk)
return 0; return 0;
} }


int win32_end_graphics(caca_t *kk)
static int win32_end_graphics(caca_t *kk)
{ {
SetConsoleActiveScreenBuffer(kk->win32.hout); SetConsoleActiveScreenBuffer(kk->win32.hout);
CloseHandle(kk->win32.back); CloseHandle(kk->win32.back);
@@ -170,20 +154,20 @@ int win32_end_graphics(caca_t *kk)
| FOREGROUND_RED | FOREGROUND_RED
| FOREGROUND_GREEN | FOREGROUND_GREEN
| FOREGROUND_BLUE); | FOREGROUND_BLUE);
cci.bVisible = TRUE;
SetConsoleCursorInfo(kk->win32.hout, &cci);
kk->win32.cci.bVisible = TRUE;
SetConsoleCursorInfo(kk->win32.hout, &kk->win32.cci);
CloseHandle(kk->win32.hout); CloseHandle(kk->win32.hout);


return 0; return 0;
} }


int win32_set_window_title(caca_t *kk, char const *title)
static int win32_set_window_title(caca_t *kk, char const *title)
{ {
SetConsoleTitle(title); SetConsoleTitle(title);
return 0; return 0;
} }


unsigned int win32_get_window_width(caca_t *kk)
static unsigned int win32_get_window_width(caca_t *kk)
{ {
/* FIXME */ /* FIXME */


@@ -191,7 +175,7 @@ unsigned int win32_get_window_width(caca_t *kk)
return kk->qq->width * 6; return kk->qq->width * 6;
} }


unsigned int win32_get_window_height(caca_t *kk)
static unsigned int win32_get_window_height(caca_t *kk)
{ {
/* FIXME */ /* FIXME */


@@ -199,7 +183,7 @@ unsigned int win32_get_window_height(caca_t *kk)
return kk->qq->height * 10; return kk->qq->height * 10;
} }


void win32_display(caca_t *kk)
static void win32_display(caca_t *kk)
{ {
COORD size, pos; COORD size, pos;
SMALL_RECT rect; SMALL_RECT rect;
@@ -224,14 +208,12 @@ void win32_display(caca_t *kk)
WriteConsoleOutput(kk->win32.front, kk->win32.buffer, size, pos, &rect); WriteConsoleOutput(kk->win32.front, kk->win32.buffer, size, pos, &rect);
} }


void win32_handle_resize(caca_t *kk)
static void win32_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
unsigned int new_width, new_height;

new_width = kk->qq->width;
new_height = kk->qq->height;

/* Nothing to do here. */ /* Nothing to do here. */
*new_width = kk->qq->width;
*new_height = kk->qq->height;
} }


/* /*


+ 13
- 34
caca/driver_x11.c 查看文件

@@ -9,23 +9,16 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file graphics.c
/** \file driver_x11.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \brief X11 driver
* *
* This file contains character and string drawing functions.
* This file contains the libcaca X11 input and output driver
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#if defined(USE_X11) #if defined(USE_X11)


#include <X11/Xlib.h> #include <X11/Xlib.h>
@@ -46,21 +39,12 @@ typedef unsigned char uint8_t;
#include "cucul.h" #include "cucul.h"
#include "cucul_internals.h" #include "cucul_internals.h"


int x11_init_graphics(caca_t *);
int x11_end_graphics(caca_t *);
int x11_set_window_title(caca_t *, char const *);
unsigned int x11_get_window_width(caca_t *);
unsigned int x11_get_window_height(caca_t *);
void x11_display(caca_t *);
void x11_handle_resize(caca_t *);

/* /*
* Local functions * Local functions
*/ */
static int x11_error_handler(Display *, XErrorEvent *); static int x11_error_handler(Display *, XErrorEvent *);


#if !defined(_DOXYGEN_SKIP_ME)
int x11_init_graphics(caca_t *kk)
static int x11_init_graphics(caca_t *kk)
{ {
static int const x11_palette[] = static int const x11_palette[] =
{ {
@@ -210,7 +194,7 @@ int x11_init_graphics(caca_t *kk)
return 0; return 0;
} }


int x11_end_graphics(caca_t *kk)
static int x11_end_graphics(caca_t *kk)
{ {
XSync(kk->x11.dpy, False); XSync(kk->x11.dpy, False);
#if defined(HAVE_X11_XKBLIB_H) #if defined(HAVE_X11_XKBLIB_H)
@@ -226,25 +210,24 @@ int x11_end_graphics(caca_t *kk)


return 0; return 0;
} }
#endif /* _DOXYGEN_SKIP_ME */


int x11_set_window_title(caca_t *kk, char const *title)
static int x11_set_window_title(caca_t *kk, char const *title)
{ {
XStoreName(kk->x11.dpy, kk->x11.window, title); XStoreName(kk->x11.dpy, kk->x11.window, title);
return 0; return 0;
} }


unsigned int x11_get_window_width(caca_t *kk)
static unsigned int x11_get_window_width(caca_t *kk)
{ {
return kk->qq->width * kk->x11.font_width; return kk->qq->width * kk->x11.font_width;
} }


unsigned int x11_get_window_height(caca_t *kk)
static unsigned int x11_get_window_height(caca_t *kk)
{ {
return kk->qq->height * kk->x11.font_height; return kk->qq->height * kk->x11.font_height;
} }


void x11_display(caca_t *kk)
static void x11_display(caca_t *kk)
{ {
unsigned int x, y, len; unsigned int x, y, len;


@@ -308,17 +291,13 @@ void x11_display(caca_t *kk)
XFlush(kk->x11.dpy); XFlush(kk->x11.dpy);
} }


void x11_handle_resize(caca_t *kk)
static void x11_handle_resize(caca_t *kk, unsigned int *new_width,
unsigned int *new_height)
{ {
unsigned int new_width, new_height;

Pixmap new_pixmap; Pixmap new_pixmap;


new_width = kk->qq->width;
new_height = kk->qq->height;

new_width = kk->x11.new_width;
new_height = kk->x11.new_height;
*new_width = kk->x11.new_width;
*new_height = kk->x11.new_height;


new_pixmap = XCreatePixmap(kk->x11.dpy, kk->x11.window, new_pixmap = XCreatePixmap(kk->x11.dpy, kk->x11.window,
kk->qq->width * kk->x11.font_width, kk->qq->width * kk->x11.font_width,


+ 2
- 8
caca/event.c 查看文件

@@ -19,12 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#if defined(USE_SLANG) #if defined(USE_SLANG)
# if defined(HAVE_SLANG_SLANG_H) # if defined(HAVE_SLANG_SLANG_H)
# include <slang/slang.h> # include <slang/slang.h>
@@ -658,11 +652,11 @@ static unsigned int _lowlevel_event(caca_t *kk)


for( ; ; ) for( ; ; )
{ {
GetNumberOfConsoleInputEvents(win32_hin, &num);
GetNumberOfConsoleInputEvents(kk->win32.hin, &num);
if(num == 0) if(num == 0)
break; break;


ReadConsoleInput(win32_hin, &rec, 1, &num);
ReadConsoleInput(kk->win32.hin, &rec, 1, &num);
if(rec.EventType == KEY_EVENT) if(rec.EventType == KEY_EVENT)
{ {
if(rec.Event.KeyEvent.bKeyDown) if(rec.Event.KeyEvent.bKeyDown)


+ 1
- 31
caca/graphics.c 查看文件

@@ -19,13 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#include <stdio.h> /* BUFSIZ */ #include <stdio.h> /* BUFSIZ */
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@@ -44,26 +37,6 @@ typedef unsigned char uint8_t;
*/ */
static void caca_handle_resize(caca_t *kk); static void caca_handle_resize(caca_t *kk);


#if !defined(_DOXYGEN_SKIP_ME)
int _caca_init_graphics(caca_t *kk)
{
int ret = kk->driver.init_graphics(kk);

if(!ret)
return ret;

kk->delay = 0;
kk->rendertime = 0;

return 0;
}

int _caca_end_graphics(caca_t *kk)
{
return kk->driver.end_graphics(kk);
}
#endif /* _DOXYGEN_SKIP_ME */

/** \brief Set the window title. /** \brief Set the window title.
* *
* If libcaca runs in a window, try to change its title. This works with * If libcaca runs in a window, try to change its title. This works with
@@ -191,10 +164,7 @@ static void caca_handle_resize(caca_t *kk)
{ {
unsigned int new_width, new_height; unsigned int new_width, new_height;


new_width = kk->qq->width;
new_height = kk->qq->height;

kk->driver.handle_resize(kk);
kk->driver.handle_resize(kk, &new_width, &new_height);


/* Tell libcucul we changed size */ /* Tell libcucul we changed size */
if(new_width != kk->qq->width || new_height != kk->qq->height) if(new_width != kk->qq->width || new_height != kk->qq->height)


+ 0
- 8
cucul/bitmap.c 查看文件

@@ -19,14 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#endif

#if defined(HAVE_ENDIAN_H) #if defined(HAVE_ENDIAN_H)
# include <endian.h> # include <endian.h>
#endif #endif


+ 0
- 6
cucul/box.c 查看文件

@@ -19,12 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>


#include "cucul.h" #include "cucul.h"


+ 2
- 9
cucul/char.c 查看文件

@@ -19,13 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#include <stdio.h> /* BUFSIZ */ #include <stdio.h> /* BUFSIZ */
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@@ -102,7 +95,7 @@ void cucul_putchar(cucul_t *qq, int x, int y, char c)
y < 0 || y >= (int)qq->height) y < 0 || y >= (int)qq->height)
return; return;


qq->chars[x + y * qq->width] = c & 0x7f; /* FIXME: ASCII-only */
qq->chars[x + y * qq->width] = c & 0x0000007f; /* FIXME: ASCII-only */
qq->attr[x + y * qq->width] = (qq->bgcolor << 4) | qq->fgcolor; qq->attr[x + y * qq->width] = (qq->bgcolor << 4) | qq->fgcolor;
} }


@@ -151,7 +144,7 @@ void cucul_putstr(cucul_t *qq, int x, int y, char const *s)
t = s; t = s;
while(*t) while(*t)
{ {
*chars++ = *t++ & 0x7f; /* FIXME: ASCII-only */
*chars++ = *t++ & 0x0000007f; /* FIXME: ASCII-only */
*attr++ = (qq->bgcolor << 4) | qq->fgcolor; *attr++ = (qq->bgcolor << 4) | qq->fgcolor;
} }
} }


+ 0
- 6
cucul/conic.c 查看文件

@@ -20,12 +20,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>


#include "cucul.h" #include "cucul.h"


+ 0
- 7
cucul/cucul.c 查看文件

@@ -20,13 +20,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>




+ 9
- 1
cucul/cucul_internals.h 查看文件

@@ -20,6 +20,14 @@
#ifndef __CUCUL_INTERNALS_H__ #ifndef __CUCUL_INTERNALS_H__
#define __CUCUL_INTERNALS_H__ #define __CUCUL_INTERNALS_H__


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
typedef unsigned char uint16_t;
typedef unsigned int uint32_t;
#endif

struct cucul_context struct cucul_context
{ {
/* Context size */ /* Context size */
@@ -27,7 +35,7 @@ struct cucul_context


uint32_t *chars; uint32_t *chars;
uint8_t *attr; uint8_t *attr;
uint8_t *empty_line, *scratch_line;
char *empty_line, *scratch_line;


enum cucul_color fgcolor; enum cucul_color fgcolor;
enum cucul_color bgcolor; enum cucul_color bgcolor;


+ 5
- 10
cucul/export.c 查看文件

@@ -9,23 +9,18 @@
* http://sam.zoy.org/wtfpl/COPYING for more details. * http://sam.zoy.org/wtfpl/COPYING for more details.
*/ */


/** \file char.c
/** \file export.c
* \version \$Id$ * \version \$Id$
* \author Sam Hocevar <sam@zoy.org> * \author Sam Hocevar <sam@zoy.org>
* \brief Character drawing
* \author Jean-Yves Lamoureux <jylam@lnxscene.org>
* \brief Export function
* *
* This file contains character and string drawing functions.
* This file contains export functions for various file formats such
* as HTML or IRC.
*/ */


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>


+ 0
- 6
cucul/line.c 查看文件

@@ -20,12 +20,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>


#include "cucul.h" #include "cucul.h"


+ 0
- 6
cucul/math.c 查看文件

@@ -19,12 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>


#include "cucul.h" #include "cucul.h"


+ 0
- 6
cucul/sprite.c 查看文件

@@ -19,12 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>


+ 0
- 6
cucul/triangle.c 查看文件

@@ -19,12 +19,6 @@


#include "config.h" #include "config.h"


#if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME)
# include <inttypes.h>
#else
typedef unsigned char uint8_t;
#endif

#include <stdlib.h> #include <stdlib.h>


#include "cucul.h" #include "cucul.h"


+ 3
- 3
src/cacaview.c 查看文件

@@ -680,8 +680,8 @@ static void load_image(char const *name)
fclose(fp); fclose(fp);


/* Create the libcaca bitmap */ /* Create the libcaca bitmap */
bitmap = caca_create_bitmap(bpp, w, h, depth * w,
rmask, gmask, bmask, amask);
bitmap = cucul_create_bitmap(qq, bpp, w, h, depth * w,
rmask, gmask, bmask, amask);
if(!bitmap) if(!bitmap)
{ {
free(pixels); free(pixels);
@@ -690,7 +690,7 @@ static void load_image(char const *name)
} }


if(bpp == 8) if(bpp == 8)
caca_set_bitmap_palette(bitmap, red, green, blue, alpha);
cucul_set_bitmap_palette(qq, bitmap, red, green, blue, alpha);
#endif #endif
} }




Loading…
取消
儲存