|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /*
- * libcaca Colour ASCII-Art library
- * Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
- * All Rights Reserved
- *
- * $Id$
- *
- * This library is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
- * and/or modify it under the terms of the Do What The Fuck You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/wtfpl/COPYING for more details.
- */
-
- #ifndef __CACA_INTERNALS_H__
- #define __CACA_INTERNALS_H__
-
- #include "caca_stubs.h"
-
- typedef struct caca_timer caca_timer_t;
- typedef struct caca_privevent caca_privevent_t;
- typedef struct caca_figfont caca_figfont_t;
-
- #if !defined(_DOXYGEN_SKIP_ME)
- # define EVENTBUF_LEN 10
- #endif
-
- struct caca_frame
- {
- /* Frame size */
- int width, height;
-
- /* Cell information */
- uint32_t *chars;
- uint32_t *attrs;
-
- /* Painting context */
- int x, y;
- int handlex, handley;
- uint32_t curattr;
-
- /* Frame name */
- char *name;
- };
-
- struct caca_canvas
- {
- /* XXX: look at caca_set_canvas_boundaries() before adding anything
- * to this structure. The function is quite hacky. */
-
- /* Frame information */
- int frame, framecount;
- struct caca_frame *frames;
-
- /* Canvas management */
- int refcount;
- int autoinc;
- int (*resize_callback)(void *);
- void *resize_data;
-
- /* Shortcut to the active frame information */
- int width, height;
- uint32_t *chars;
- uint32_t *attrs;
- uint32_t curattr;
-
- /* FIGfont management */
- caca_figfont_t *ff;
- };
-
- /* Graphics driver */
- enum caca_driver
- {
- CACA_DRIVER_NONE = 0,
- CACA_DRIVER_RAW = 1,
- #if defined(USE_COCOA)
- CACA_DRIVER_COCOA = 2,
- #endif
- #if defined(USE_CONIO)
- CACA_DRIVER_CONIO = 3,
- #endif
- #if defined(USE_GL)
- CACA_DRIVER_GL = 4,
- #endif
- #if defined(USE_NCURSES)
- CACA_DRIVER_NCURSES = 5,
- #endif
- #if defined(USE_SLANG)
- CACA_DRIVER_SLANG = 6,
- #endif
- #if defined(USE_VGA)
- CACA_DRIVER_VGA = 7,
- #endif
- #if defined(USE_WIN32)
- CACA_DRIVER_WIN32 = 8,
- #endif
- #if defined(USE_X11)
- CACA_DRIVER_X11 = 9,
- #endif
- };
-
- /* Available external drivers */
- #if defined(USE_COCOA)
- int cocoa_install(caca_display_t *);
- #endif
- #if defined(USE_CONIO)
- int conio_install(caca_display_t *);
- #endif
- #if defined(USE_GL)
- int gl_install(caca_display_t *);
- #endif
- #if defined(USE_NCURSES)
- int ncurses_install(caca_display_t *);
- #endif
- int raw_install(caca_display_t *);
- #if defined(USE_SLANG)
- int slang_install(caca_display_t *);
- #endif
- #if defined(USE_VGA)
- int vga_install(caca_display_t *);
- #endif
- #if defined(USE_WIN32)
- int win32_install(caca_display_t *);
- #endif
- #if defined(USE_X11)
- int x11_install(caca_display_t *);
- #endif
-
- /* Timer structure */
- struct caca_timer
- {
- int last_sec, last_usec;
- };
-
- /* Private event structure */
- struct caca_privevent
- {
- enum caca_event_type type;
-
- union
- {
- struct { int x, y, button; } mouse;
- struct { int w, h; } resize;
- struct { int ch; uint32_t utf32; char utf8[8]; } key;
- } data;
- };
-
- /* Internal caca display context */
- struct caca_display
- {
- /* A link to our caca canvas */
- caca_canvas_t *cv;
- int autorelease;
-
- #if defined(USE_PLUGINS)
- void *plugin;
- #endif
-
- /* Device-specific functions */
- struct drv
- {
- char const * driver;
- enum caca_driver id;
- struct driver_private *p;
-
- int (* init_graphics) (caca_display_t *);
- int (* end_graphics) (caca_display_t *);
- int (* set_display_title) (caca_display_t *, char const *);
- int (* get_display_width) (caca_display_t const *);
- int (* get_display_height) (caca_display_t const *);
- void (* display) (caca_display_t *);
- void (* handle_resize) (caca_display_t *);
- int (* get_event) (caca_display_t *, caca_privevent_t *);
- void (* set_mouse) (caca_display_t *, int);
- void (* set_cursor) (caca_display_t *, int);
- } drv;
-
- /* Mouse position */
- struct mouse
- {
- int x, y;
- } mouse;
-
- /* Window resize handling */
- struct resize
- {
- int resized; /* A resize event was requested */
- int allow; /* The display driver allows resizing */
- int w, h; /* Requested width and height */
- } resize;
-
- /* Framerate handling */
- int delay, rendertime;
- caca_timer_t timer;
- int lastticks;
-
- struct events
- {
- #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
- caca_privevent_t buf[EVENTBUF_LEN];
- int queue;
- #endif
- #if defined(USE_SLANG) || defined(USE_NCURSES)
- caca_timer_t key_timer;
- int last_key_ticks;
- int autorepeat_ticks;
- caca_privevent_t last_key_event;
- #endif
- #if defined(USE_WIN32)
- uint8_t not_empty_struct;
- #endif
- } events;
- };
-
- /* Colour functions */
- extern uint32_t _caca_attr_to_rgb24fg(uint32_t);
- extern uint32_t _caca_attr_to_rgb24bg(uint32_t);
-
- /* Frames functions */
- extern void _caca_save_frame_info(caca_canvas_t *);
- extern void _caca_load_frame_info(caca_canvas_t *);
-
- /* Internal timer functions */
- extern void _caca_sleep(int);
- extern int _caca_getticks(caca_timer_t *);
-
- /* Internal event functions */
- extern void _caca_handle_resize(caca_display_t *);
- #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
- extern void _push_event(caca_display_t *, caca_privevent_t *);
- extern int _pop_event(caca_display_t *, caca_privevent_t *);
- #endif
-
- /* Internal window functions */
- extern void _caca_set_term_title(char const *);
-
- #endif /* __CACA_INTERNALS_H__ */
|