skeleton of a tutorial for Jylam.tags/v0.99.beta14
@@ -7,39 +7,27 @@ | |||||
- all the sprite stuff (loading, saving, blitting, transparency | - all the sprite stuff (loading, saving, blitting, transparency | ||||
support, background colour support, thinking of a storage format, | support, background colour support, thinking of a storage format, | ||||
etc.) | etc.) | ||||
- Or maybe, instead of doing shit with the sprites, just allow canvases | - Or maybe, instead of doing shit with the sprites, just allow canvases | ||||
to have several buffers, allow to change the active buffer, and treat | to have several buffers, allow to change the active buffer, and treat | ||||
sprites like that. | sprites like that. | ||||
- ASCII/ANSI art loading functions (maybe load them as sprites) | - ASCII/ANSI art loading functions (maybe load them as sprites) | ||||
\subsection indep API-independent stuff | \subsection indep API-independent stuff | ||||
- support for transparency (CUCUL_COLOR_TRANSPARENT) | - support for transparency (CUCUL_COLOR_TRANSPARENT) | ||||
- Brightness, contrast support for bitmaps (the functions are here, we | - Brightness, contrast support for bitmaps (the functions are here, we | ||||
just need to fill them) | just need to fill them) | ||||
- Error distribution dithering | - Error distribution dithering | ||||
- Add a random factor to the random ditherer. No need to change the API | - Add a random factor to the random ditherer. No need to change the API | ||||
for that, we can just pass "random:10" instead of "random" to the | for that, we can just pass "random:10" instead of "random" to the | ||||
cucul_set_bitmap_dithering() function. | cucul_set_bitmap_dithering() function. | ||||
- Implement the colour modes set in cucul_set_bitmap_color(). For the | - Implement the colour modes set in cucul_set_bitmap_color(). For the | ||||
moment only "full16" and "16" are implemented. | moment only "full16" and "16" are implemented. | ||||
- Fix the thin ellipse rendering (currently it's only |s and -s, we | - Fix the thin ellipse rendering (currently it's only |s and -s, we | ||||
could make them smoother by using ' ` , etc). | could make them smoother by using ' ` , etc). | ||||
- support for double width glyphs (also needs some libcaca changes) | - support for double width glyphs (also needs some libcaca changes) | ||||
- better mask support in cucul_blit() | - better mask support in cucul_blit() | ||||
- factor internal Unicode character conversions, especially UCS4 -> UTF-8 | - factor internal Unicode character conversions, especially UCS4 -> UTF-8 | ||||
- optimise exporters so that they do not allocate huge blocks of memory | - optimise exporters so that they do not allocate huge blocks of memory | ||||
when they only need half of it. | when they only need half of it. | ||||
@@ -51,20 +39,14 @@ | |||||
- text edit widget with cursor support (I'm unsure about this, it | - text edit widget with cursor support (I'm unsure about this, it | ||||
seems pretty difficult) | seems pretty difficult) | ||||
\subsection indep API-independent stuff | \subsection indep API-independent stuff | ||||
- Write a Linux console output | - Write a Linux console output | ||||
- Better keyboard driver in an X terminal, see | - Better keyboard driver in an X terminal, see | ||||
http://groups.yahoo.com/group/zepp/message/381 | http://groups.yahoo.com/group/zepp/message/381 | ||||
- Unicode support for X11 (maybe through Xft) | - Unicode support for X11 (maybe through Xft) | ||||
- fix Unicode support for ncurses | - fix Unicode support for ncurses | ||||
- Unicode support for GL | - Unicode support for GL | ||||
- and Jylam wants a framebuffer output | - and Jylam wants a framebuffer output | ||||
@@ -73,35 +55,27 @@ | |||||
\subsection needed Needed | \subsection needed Needed | ||||
- Fix Python | - Fix Python | ||||
- Fix Perl | - Fix Perl | ||||
- C# (it's the next big thing, believe me) | - C# (it's the next big thing, believe me) | ||||
- PHP (together with the HTML output it would allow for nice web | - PHP (together with the HTML output it would allow for nice web | ||||
applications) | applications) | ||||
\subsection notimp Not that important | \subsection notimp Not that important | ||||
- Ruby | - Ruby | ||||
- Java | - Java | ||||
\section kernel Kernel mode | \section kernel Kernel mode | ||||
- keyboard support | - keyboard support | ||||
- printf/fprintf are missing | - printf/fprintf are missing | ||||
- Improve malloc/free so that we can reuse freed memory | - Improve malloc/free so that we can reuse freed memory | ||||
\section doc Documentation | \section doc Documentation | ||||
- Write a tutorial. | - Write a tutorial. | ||||
- Draw a nicer logo | - Draw a nicer logo | ||||
@@ -110,25 +84,19 @@ | |||||
\section cacaview cacaview | \section cacaview cacaview | ||||
- File browser | - File browser | ||||
- open ANSI files | - open ANSI files | ||||
- save in different formats | - save in different formats | ||||
\section cacadraw cacadraw | \section cacadraw cacadraw | ||||
- Does not exist yet, but I want it. A modern ANSI editor that can also | - Does not exist yet, but I want it. A modern ANSI editor that can also | ||||
do Unicode. | do Unicode. | ||||
\section cuculet CUCUlet | \section cuculet CUCUlet | ||||
- Does not exist yet, but I want it. A replacement for FIGlet that can | - Does not exist yet, but I want it. A replacement for FIGlet that can | ||||
also do Unicode | also do Unicode | ||||
- Colour support, of course: outputs to IRC, ANSI, HTML... | - Colour support, of course: outputs to IRC, ANSI, HTML... | ||||
- Can open FIGlet fonts | - Can open FIGlet fonts | ||||
*/ | */ |
@@ -143,7 +143,7 @@ enum caca_key | |||||
CACA_KEY_F15 = 0x128 /**< The F15 key. */ | CACA_KEY_F15 = 0x128 /**< The F15 key. */ | ||||
}; | }; | ||||
/** \defgroup caca Basic libcaca functions | |||||
/** \defgroup caca libcaca basic functions | |||||
* | * | ||||
* These functions provide the basic \e libcaca routines for driver | * These functions provide the basic \e libcaca routines for driver | ||||
* initialisation, system information retrieval and configuration. | * initialisation, system information retrieval and configuration. | ||||
@@ -159,7 +159,7 @@ unsigned int caca_get_display_height(caca_display_t *); | |||||
int caca_set_display_title(caca_display_t *, char const *); | int caca_set_display_title(caca_display_t *, char const *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup event Event handling | |||||
/** \defgroup event libcaca event handling | |||||
* | * | ||||
* These functions handle user events such as keyboard input and mouse | * These functions handle user events such as keyboard input and mouse | ||||
* clicks. | * clicks. | ||||
@@ -42,7 +42,7 @@ typedef struct cucul_buffer cucul_buffer_t; | |||||
/** font structure */ | /** font structure */ | ||||
typedef struct cucul_font cucul_font_t; | typedef struct cucul_font cucul_font_t; | ||||
/** \defgroup colour Colour definitions | |||||
/** \defgroup colour libcucul colour definitions | |||||
* | * | ||||
* Colours that can be used with cucul_set_color(). | * Colours that can be used with cucul_set_color(). | ||||
* | * | ||||
@@ -67,7 +67,7 @@ typedef struct cucul_font cucul_font_t; | |||||
#define CUCUL_COLOR_TRANSPARENT 0x20 /**< The transparent colour. */ | #define CUCUL_COLOR_TRANSPARENT 0x20 /**< The transparent colour. */ | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup cucul Basic libcucul functions | |||||
/** \defgroup cucul libcucul basic functions | |||||
* | * | ||||
* These functions provide the basic \e libcaca routines for library | * These functions provide the basic \e libcaca routines for library | ||||
* initialisation, system information retrieval and configuration. | * initialisation, system information retrieval and configuration. | ||||
@@ -82,7 +82,7 @@ void cucul_free_canvas(cucul_canvas_t *); | |||||
int cucul_rand(int, int); | int cucul_rand(int, int); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup buffer Buffer handling | |||||
/** \defgroup buffer libcucul buffer handling | |||||
* | * | ||||
* These functions provide methods to handle libcucul buffers. | * These functions provide methods to handle libcucul buffers. | ||||
* | * | ||||
@@ -92,7 +92,7 @@ void * cucul_get_buffer_data(cucul_buffer_t *); | |||||
void cucul_free_buffer(cucul_buffer_t *); | void cucul_free_buffer(cucul_buffer_t *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup canvas Canvas drawing | |||||
/** \defgroup canvas libcucul canvas drawing | |||||
* | * | ||||
* These functions provide low-level character printing routines and | * These functions provide low-level character printing routines and | ||||
* higher level graphics functions. | * higher level graphics functions. | ||||
@@ -108,7 +108,7 @@ void cucul_clear_canvas(cucul_canvas_t *, unsigned char); | |||||
void cucul_blit(cucul_canvas_t *, int, int, cucul_canvas_t const *, cucul_canvas_t const *); | void cucul_blit(cucul_canvas_t *, int, int, cucul_canvas_t const *, cucul_canvas_t const *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup transform Canvas transformation | |||||
/** \defgroup transform libcucul canvas transformation | |||||
* | * | ||||
* These functions perform horizontal and vertical canvas flipping. | * These functions perform horizontal and vertical canvas flipping. | ||||
* | * | ||||
@@ -119,7 +119,7 @@ void cucul_flop(cucul_canvas_t *); | |||||
void cucul_rotate(cucul_canvas_t *); | void cucul_rotate(cucul_canvas_t *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup prim Primitives drawing | |||||
/** \defgroup prim libcucul primitives drawing | |||||
* | * | ||||
* These functions provide routines for primitive drawing, such as lines, | * These functions provide routines for primitive drawing, such as lines, | ||||
* boxes, triangles and ellipses. | * boxes, triangles and ellipses. | ||||
@@ -144,7 +144,7 @@ void cucul_draw_thin_triangle(cucul_canvas_t *, int, int, int, int, int, int); | |||||
void cucul_fill_triangle(cucul_canvas_t *, int, int, int, int, int, int, char const *); | void cucul_fill_triangle(cucul_canvas_t *, int, int, int, int, int, int, char const *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup sprite Sprite handling | |||||
/** \defgroup sprite libcucul sprite handling | |||||
* | * | ||||
* These functions provide high level routines for sprite loading, animation | * These functions provide high level routines for sprite loading, animation | ||||
* and rendering. | * and rendering. | ||||
@@ -160,7 +160,7 @@ void cucul_draw_sprite(cucul_canvas_t *, int, int, cucul_sprite_t const *, int); | |||||
void cucul_free_sprite(cucul_sprite_t *); | void cucul_free_sprite(cucul_sprite_t *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup dither Bitmap dithering | |||||
/** \defgroup dither libcucul bitmap dithering | |||||
* | * | ||||
* These functions provide high level routines for dither allocation and | * These functions provide high level routines for dither allocation and | ||||
* rendering. | * rendering. | ||||
@@ -190,7 +190,7 @@ void cucul_dither_bitmap(cucul_canvas_t *, int, int, int, int, | |||||
void cucul_free_dither(cucul_dither_t *); | void cucul_free_dither(cucul_dither_t *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup font Font handling | |||||
/** \defgroup font libcucul font handling | |||||
* | * | ||||
* These functions provide font handling routines and high quality | * These functions provide font handling routines and high quality | ||||
* canvas to bitmap rendering. | * canvas to bitmap rendering. | ||||
@@ -205,7 +205,7 @@ void cucul_render_canvas(cucul_canvas_t *, cucul_font_t *, void *, | |||||
void cucul_free_font(cucul_font_t *); | void cucul_free_font(cucul_font_t *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup exporter Exporters to various formats | |||||
/** \defgroup exporter libcucul exporters to various formats | |||||
* | * | ||||
* These functions export the current canvas to various text formats. It | * These functions export the current canvas to various text formats. It | ||||
* is necessary to call cucul_free_buffer() to dispose of the data. | * is necessary to call cucul_free_buffer() to dispose of the data. | ||||
@@ -1,6 +1,7 @@ | |||||
# $Id$ | # $Id$ | ||||
EXTRA_DIST = doxygen.cfg.in footer.html header.html libcaca.dox $(man_MANS) | |||||
EXTRA_DIST = doxygen.cfg.in footer.html header.html $(man_MANS) \ | |||||
libcaca.dox user.dox migrating.dox tutorial.dox | |||||
man_MANS = caca-config.1 cacafire.1 cacaview.1 | man_MANS = caca-config.1 cacafire.1 cacaview.1 | ||||
@@ -21,7 +21,7 @@ | |||||
software. It used to be licensed under the GNU Lesser General Public | software. It used to be licensed under the GNU Lesser General Public | ||||
License, but that was not free enough. | License, but that was not free enough. | ||||
\section api The libcaca API | |||||
\section devel Developer's documentation | |||||
\e libcaca relies on a low-level, device independent library, called | \e libcaca relies on a low-level, device independent library, called | ||||
\e libcucul. \e libcucul can be used alone as a simple ASCII and/or | \e libcucul. \e libcucul can be used alone as a simple ASCII and/or | ||||
@@ -30,34 +30,26 @@ | |||||
The complete \e libcucul and \e libcaca programming interface is | The complete \e libcucul and \e libcaca programming interface is | ||||
available from the cucul.h and caca.h headers. | available from the cucul.h and caca.h headers. | ||||
\section env Environment variables | |||||
Some other topics are covered by specific sections: | |||||
Some environment variables can be used to change the behaviour of | |||||
\e libcaca without having to modify the program which uses them. These | |||||
variables are: | |||||
- \subpage tutorial | |||||
- \subpage migrating | |||||
\li \b CACA_DRIVER: set the backend video driver. In order of preference: | |||||
- \c conio uses the DOS conio.h interface. | |||||
- \c ncurses uses the ncurses library. | |||||
- \c slang uses the S-Lang library. | |||||
- \c x11 uses the native X11 driver. | |||||
- \c gl uses freeglut and opengl libraries. | |||||
- \c raw outputs to the standard output instead of rendering the | |||||
canvas. This is can be used together with cacaserver. | |||||
\section user User's documentation | |||||
\li \b CACA_GEOMETRY: set the video display size. The format of this | |||||
variable must be XxY, with X and Y being integer values. This option | |||||
currently works with the network, X11 and GL drivers. | |||||
- \subpage env | |||||
\li \b CACA_FONT: set the rendered font. The format of this variable is | |||||
implementation dependent, but since it currently only works with the | |||||
X11 driver, an X11 font name such as "fixed" or "5x7" is expected. | |||||
\section Misc | |||||
\section misc Misc | |||||
- \subpage news | - \subpage news | ||||
- \subpage authors | - \subpage authors | ||||
- \subpage thanks | - \subpage thanks | ||||
- \subpage todo | - \subpage todo | ||||
\section license License | |||||
Permission is granted to copy, distribute and/or modify this document | |||||
under the terms of the Do What The Fuck You Want To Public License, version | |||||
2 as published by Sam Hocevar. For details see http://sam.zoy.org/wtfpl/ . | |||||
*/ | */ |
@@ -0,0 +1,165 @@ | |||||
/* $Id$ */ | |||||
/** \page migrating Migrating from libcaca 0.9 to the 1.0 API | |||||
This section will guide you through the migration of a \e libcaca 0.9 | |||||
application to the latest API version. | |||||
\section foo1 Overview | |||||
The most important changes in the 1.0 API of \e libcaca are the | |||||
\e libcaca / \e libcucul split and the object-oriented design. Where | |||||
you used to do: | |||||
\code | |||||
#include <caca.h> | |||||
int main(void) | |||||
{ | |||||
/* Initialise libcaca */ | |||||
caca_init(); | |||||
/* Set window title */ | |||||
caca_set_window_title("Hello!"); | |||||
/* Choose drawing colours */ | |||||
caca_set_color(CACA_COLOR_BLACK, CACA_COLOR_WHITE); | |||||
/* Draw a string at coordinates (0, 0) */ | |||||
caca_putstr(0, 0, "This is a message"); | |||||
/* Refresh display */ | |||||
caca_refresh(); | |||||
/* Wait for a key press event */ | |||||
caca_wait_event(CACA_EVENT_KEY_PRESS); | |||||
/* Clean up library */ | |||||
caca_end(); | |||||
return 0; | |||||
} | |||||
\endcode | |||||
You now do: | |||||
\code | |||||
#include <cucul.h> | |||||
#include <caca.h> | |||||
int main(void) | |||||
{ | |||||
/* Initialise libcaca */ | |||||
cucul_canvas_t *cv; caca_display_t *dp; caca_event_t ev; | |||||
cv = cucul_create_canvas(0, 0); | |||||
dp = caca_create_display(cv); | |||||
/* Set window title */ | |||||
caca_set_display_title(dp, "Hello!"); | |||||
/* Choose drawing colours */ | |||||
cucul_set_color(cv, CUCUL_COLOR_BLACK, CUCUL_COLOR_WHITE); | |||||
/* Draw a string at coordinates (0, 0) */ | |||||
cucul_putstr(cv, 0, 0, "This is a message"); | |||||
/* Refresh display */ | |||||
caca_refresh_display(); | |||||
/* Wait for a key press event */ | |||||
caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, -1); | |||||
/* Clean up library */ | |||||
caca_free_display(dp); | |||||
cucul_free_canvas(cv); | |||||
return 0; | |||||
} | |||||
\endcode | |||||
Note the following important things: | |||||
- Functions now take an object handle as their first argument. | |||||
- All input/output functions start with \b caca_ and all | |||||
drawing and text handling functions start with \b cucul_ . | |||||
\section foo2 Function equivalence list | |||||
\subsection bar1 Basic functions | |||||
- \b caca_init(): use cucul_create_canvas() to create a \e libcucul canvas, | |||||
followed by caca_create_display() to attach a \e libcaca display to it. | |||||
- \b caca_set_delay(): unchanged. | |||||
- \b caca_get_feature(): deprecated. | |||||
- \b caca_set_feature(): deprecated, see cucul_set_dither_antialias(), | |||||
cucul_set_dither_color() and cucul_set_dither_mode() instead. | |||||
- \b caca_get_feature_name(): deprecated, see cucul_get_dither_mode_list(), | |||||
cucul_get_dither_antialias_list() and cucul_get_dither_color_list() | |||||
instead. | |||||
- \b caca_get_rendertime(): unchanged. | |||||
- \b caca_get_width(): use cucul_get_canvas_width(). | |||||
- \b caca_get_height(): use cucul_get_canvas_height(). | |||||
- \b caca_set_window_title(): use caca_set_display_title(). | |||||
- \b caca_get_window_width(): use caca_get_display_width(). | |||||
- \b caca_get_window_height(): use caca_get_display_height(). | |||||
- \b caca_refresh(): use caca_refresh_display(). | |||||
- \b caca_end(): use caca_free_display() to detach the \e libcaca display, | |||||
followed by cucul_free_canvas() to free the underlying \e libcucul canvas. | |||||
\subsection bar2 Event handling | |||||
- \b caca_get_event(): unchanged. | |||||
- \b caca_wait_event(): use caca_get_event() with a \c timeout argument | |||||
of \b -1. | |||||
- \b caca_get_mouse_x(): unchanged. | |||||
- \b caca_get_mouse_y(): unchanged. | |||||
\subsection bar3 Character printing | |||||
- \b caca_set_color(): use cucul_set_color() or cucul_set_truecolor(). | |||||
- \b caca_get_fg_color(): deprecated. | |||||
- \b caca_get_bg_color(): deprecated. | |||||
- \b caca_get_color_name(): use cucul_get_color_name(). | |||||
- \b caca_putchar(): use cucul_putchar(). | |||||
- \b caca_putstr(): use cucul_putstr(). | |||||
- \b caca_printf(): use cucul_printf(). | |||||
- \b caca_clear(): use cucul_clear_canvas(). | |||||
\subsection bar4 Primitives drawing | |||||
- \b caca_draw_line(): use cucul_draw_line(). | |||||
- \b caca_draw_polyline(): use cucul_draw_polyline(). | |||||
- \b caca_draw_thin_line(): use cucul_draw_thin_line(). | |||||
- \b caca_draw_thin_polyline(): use cucul_draw_thin_polyline(). | |||||
- \b caca_draw_circle(): use cucul_draw_circle(). | |||||
- \b caca_draw_ellipse(): use cucul_draw_ellipse(). | |||||
- \b caca_draw_thin_ellipse(): use cucul_draw_thin_ellipse(). | |||||
- \b caca_fill_ellipse(): use cucul_fill_ellipse(). | |||||
- \b caca_draw_box(): use cucul_draw_box(). | |||||
- \b caca_draw_thin_box(): use cucul_draw_thin_box(). | |||||
- \b caca_fill_box(): use cucul_fill_box(). | |||||
- \b caca_draw_triangle(): use cucul_draw_triangle(). | |||||
- \b caca_draw_thin_triangle(): use cucul_draw_thin_triangle(). | |||||
- \b caca_fill_triangle(): use cucul_fill_triangle(). | |||||
\subsection bar5 Mathematical functions | |||||
- \b caca_rand(): use cucul_rand() | |||||
- \b caca_sqrt(): this function is now deprecated | |||||
\subsection bar6 Sprite handling | |||||
The sprite handling functions are currently being reworked. | |||||
\subsection bar7 Bitmap handling | |||||
- \b caca_create_bitmap(): use cucul_create_dither(). | |||||
- \b caca_set_bitmap_palette(): use cucul_set_dither_palette(). | |||||
- \b caca_draw_bitmap(): use cucul_dither_bitmap(). | |||||
- \b caca_free_bitmap(): use cucul_free_dither(). | |||||
\section foo3 Compilation | |||||
The \c caca-config utility is deprecated in favour of the standard | |||||
\c pkg-config interface: | |||||
\code | |||||
gcc -c foobar.c -o foobar.o `pkg-config --cflags caca` | |||||
gcc foobar.o -o foobar `pkg-config --libs caca` | |||||
\endcode | |||||
\c caca-config is still provided as a convenience tool but will be removed | |||||
in the future. | |||||
*/ |
@@ -0,0 +1,26 @@ | |||||
/* $Id$ */ | |||||
/** \page env Environment variables | |||||
Some environment variables can be used to change the behaviour of | |||||
\e libcaca without having to modify the program which uses them. These | |||||
variables are: | |||||
\li \b CACA_DRIVER: set the backend video driver. In order of preference: | |||||
- \c conio uses the DOS conio.h interface. | |||||
- \c ncurses uses the ncurses library. | |||||
- \c slang uses the S-Lang library. | |||||
- \c x11 uses the native X11 driver. | |||||
- \c gl uses freeglut and opengl libraries. | |||||
- \c raw outputs to the standard output instead of rendering the | |||||
canvas. This is can be used together with cacaserver. | |||||
\li \b CACA_GEOMETRY: set the video display size. The format of this | |||||
variable must be \c XxY, with \c X and \c Y being integer values. This | |||||
option currently works with the X11 and GL drivers. | |||||
\li \b CACA_FONT: set the rendered font. The format of this variable is | |||||
implementation dependent, but since it currently only works with the | |||||
X11 driver, an X11 font name such as \c fixed or \c 5x7 is expected. | |||||
*/ |