You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 18 години
преди 21 години
преди 21 години
преди 19 години
преди 18 години
преди 18 години
преди 18 години
преди 18 години
преди 18 години
преди 18 години
преди 18 години
преди 21 години
преди 18 години
преди 19 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /*
  2. * libcaca Colour ASCII-Art library
  3. * Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
  4. * All Rights Reserved
  5. *
  6. * $Id$
  7. *
  8. * This library is free software. It comes without any warranty, to
  9. * the extent permitted by applicable law. You can redistribute it
  10. * and/or modify it under the terms of the Do What The Fuck You Want
  11. * To Public License, Version 2, as published by Sam Hocevar. See
  12. * http://sam.zoy.org/wtfpl/COPYING for more details.
  13. */
  14. /** \file caca.h
  15. * \version \$Id$
  16. * \author Sam Hocevar <sam@zoy.org>
  17. * \brief The \e libcaca public header.
  18. *
  19. * This header contains the public types and functions that applications
  20. * using \e libcaca may use.
  21. */
  22. #ifndef __CACA_H__
  23. #define __CACA_H__
  24. /** libcaca API version */
  25. #define CACA_API_VERSION_1
  26. #include <cucul.h>
  27. #ifdef __cplusplus
  28. extern "C"
  29. {
  30. #endif
  31. /** \e libcaca display context */
  32. typedef struct caca_display caca_display_t;
  33. /** \e libcaca event structure */
  34. typedef struct caca_event caca_event_t;
  35. /** \brief Handling of user events.
  36. *
  37. * This structure is filled by caca_get_event() when an event is received.
  38. * The \e type field is always valid. */
  39. struct caca_event
  40. {
  41. /** \brief User event type enumeration.
  42. *
  43. * This enum serves two purposes:
  44. * - Build listening masks for caca_get_event().
  45. * - Define the type of a \e caca_event_t.
  46. */
  47. enum caca_event_type
  48. {
  49. CACA_EVENT_NONE = 0x0000, /**< No event. */
  50. CACA_EVENT_KEY_PRESS = 0x0001, /**< A key was pressed. */
  51. CACA_EVENT_KEY_RELEASE = 0x0002, /**< A key was released. */
  52. CACA_EVENT_MOUSE_PRESS = 0x0004, /**< A mouse button was pressed. */
  53. CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */
  54. CACA_EVENT_MOUSE_MOTION = 0x0010, /**< The mouse was moved. */
  55. CACA_EVENT_RESIZE = 0x0020, /**< The window was resized. */
  56. CACA_EVENT_QUIT = 0x0040, /**< The user requested to quit. */
  57. CACA_EVENT_ANY = 0xffff /**< Bitmask for any event. */
  58. }
  59. /** \brief User event type member.
  60. *
  61. * This field is always valid when caca_get_event() returns.
  62. */
  63. type;
  64. /** \brief User event data member.
  65. *
  66. * The validity of the \e data union depends on the value of the \e type
  67. * field:
  68. * - \c CACA_EVENT_NONE: no field is valid.
  69. * - \c CACA_EVENT_KEY_PRESS, \c CACA_EVENT_KEY_RELEASE: the
  70. * \e data.key.ch field is valid and contains either the ASCII value for
  71. * the key, or an \e enum \e caca_key value. If the value is a printable
  72. * ASCII character, the \e data.key.utf32 and \e data.key.utf8 fields are
  73. * also filled and contain respectively the UTF-32/UCS-4 and the UTF-8
  74. * representations of the character. Otherwise, their content is
  75. * undefined.
  76. * - \c CACA_EVENT_MOUSE_PRESS, \c CACA_EVENT_MOUSE_RELEASE: the
  77. * \e data.mouse.button field is valid and contains the index of the
  78. * mouse button that was pressed.
  79. * - \c CACA_EVENT_MOUSE_MOTION: the \e data.mouse.x and \e data.mouse.y
  80. * fields are valid and contain the mouse coordinates in character
  81. * cells.
  82. * - \c CACA_EVENT_RESIZE: the \e data.resize.w and \e data.resize.h
  83. * fields are valid and contain the new width and height values of
  84. * the \e libcucul canvas attached to \e libcaca.
  85. * - \c CACA_EVENT_QUIT: no other field is valid.
  86. *
  87. * The result of accessing data members outside the above conditions is
  88. * undefined.
  89. */
  90. union
  91. {
  92. struct { unsigned int x, y, button; } mouse;
  93. struct { unsigned int w, h; } resize;
  94. struct { unsigned int ch; unsigned long int utf32; char utf8[8]; } key;
  95. } data;
  96. };
  97. /** \brief Special key values.
  98. *
  99. * Special key values returned by caca_get_event() for which there is no
  100. * printable ASCII equivalent.
  101. */
  102. enum caca_key
  103. {
  104. CACA_KEY_UNKNOWN = 0x00, /**< Unknown key. */
  105. /* The following keys have ASCII equivalents */
  106. CACA_KEY_CTRL_A = 0x01, /**< The Ctrl-A key. */
  107. CACA_KEY_CTRL_B = 0x02, /**< The Ctrl-B key. */
  108. CACA_KEY_CTRL_C = 0x03, /**< The Ctrl-C key. */
  109. CACA_KEY_CTRL_D = 0x04, /**< The Ctrl-D key. */
  110. CACA_KEY_CTRL_E = 0x05, /**< The Ctrl-E key. */
  111. CACA_KEY_CTRL_F = 0x06, /**< The Ctrl-F key. */
  112. CACA_KEY_CTRL_G = 0x07, /**< The Ctrl-G key. */
  113. CACA_KEY_BACKSPACE = 0x08, /**< The backspace key. */
  114. CACA_KEY_TAB = 0x09, /**< The tabulation key. */
  115. CACA_KEY_CTRL_J = 0x0a, /**< The Ctrl-J key. */
  116. CACA_KEY_CTRL_K = 0x0b, /**< The Ctrl-K key. */
  117. CACA_KEY_CTRL_L = 0x0c, /**< The Ctrl-L key. */
  118. CACA_KEY_RETURN = 0x0d, /**< The return key. */
  119. CACA_KEY_CTRL_N = 0x0e, /**< The Ctrl-N key. */
  120. CACA_KEY_CTRL_O = 0x0f, /**< The Ctrl-O key. */
  121. CACA_KEY_CTRL_P = 0x10, /**< The Ctrl-P key. */
  122. CACA_KEY_CTRL_Q = 0x11, /**< The Ctrl-Q key. */
  123. CACA_KEY_CTRL_R = 0x12, /**< The Ctrl-R key. */
  124. CACA_KEY_PAUSE = 0x13, /**< The pause key. */
  125. CACA_KEY_CTRL_T = 0x14, /**< The Ctrl-T key. */
  126. CACA_KEY_CTRL_U = 0x15, /**< The Ctrl-U key. */
  127. CACA_KEY_CTRL_V = 0x16, /**< The Ctrl-V key. */
  128. CACA_KEY_CTRL_W = 0x17, /**< The Ctrl-W key. */
  129. CACA_KEY_CTRL_X = 0x18, /**< The Ctrl-X key. */
  130. CACA_KEY_CTRL_Y = 0x19, /**< The Ctrl-Y key. */
  131. CACA_KEY_CTRL_Z = 0x1a, /**< The Ctrl-Z key. */
  132. CACA_KEY_ESCAPE = 0x1b, /**< The escape key. */
  133. CACA_KEY_DELETE = 0x7f, /**< The delete key. */
  134. /* The following keys do not have ASCII equivalents but have been
  135. * chosen to match the SDL equivalents */
  136. CACA_KEY_UP = 0x111, /**< The up arrow key. */
  137. CACA_KEY_DOWN = 0x112, /**< The down arrow key. */
  138. CACA_KEY_LEFT = 0x113, /**< The left arrow key. */
  139. CACA_KEY_RIGHT = 0x114, /**< The right arrow key. */
  140. CACA_KEY_INSERT = 0x115, /**< The insert key. */
  141. CACA_KEY_HOME = 0x116, /**< The home key. */
  142. CACA_KEY_END = 0x117, /**< The end key. */
  143. CACA_KEY_PAGEUP = 0x118, /**< The page up key. */
  144. CACA_KEY_PAGEDOWN = 0x119, /**< The page down key. */
  145. CACA_KEY_F1 = 0x11a, /**< The F1 key. */
  146. CACA_KEY_F2 = 0x11b, /**< The F2 key. */
  147. CACA_KEY_F3 = 0x11c, /**< The F3 key. */
  148. CACA_KEY_F4 = 0x11d, /**< The F4 key. */
  149. CACA_KEY_F5 = 0x11e, /**< The F5 key. */
  150. CACA_KEY_F6 = 0x11f, /**< The F6 key. */
  151. CACA_KEY_F7 = 0x120, /**< The F7 key. */
  152. CACA_KEY_F8 = 0x121, /**< The F8 key. */
  153. CACA_KEY_F9 = 0x122, /**< The F9 key. */
  154. CACA_KEY_F10 = 0x123, /**< The F10 key. */
  155. CACA_KEY_F11 = 0x124, /**< The F11 key. */
  156. CACA_KEY_F12 = 0x125, /**< The F12 key. */
  157. CACA_KEY_F13 = 0x126, /**< The F13 key. */
  158. CACA_KEY_F14 = 0x127, /**< The F14 key. */
  159. CACA_KEY_F15 = 0x128 /**< The F15 key. */
  160. };
  161. /** \defgroup libcaca libcaca basic functions
  162. *
  163. * These functions provide the basic \e libcaca routines for driver
  164. * initialisation, system information retrieval and configuration.
  165. *
  166. * @{ */
  167. caca_display_t * caca_create_display(cucul_canvas_t *);
  168. int caca_free_display(caca_display_t *);
  169. int caca_refresh_display(caca_display_t *);
  170. int caca_set_display_time(caca_display_t *, unsigned int);
  171. unsigned int caca_get_display_time(caca_display_t *);
  172. unsigned int caca_get_display_width(caca_display_t *);
  173. unsigned int caca_get_display_height(caca_display_t *);
  174. int caca_set_display_title(caca_display_t *, char const *);
  175. /* @} */
  176. /** \defgroup caca_event libcaca event handling
  177. *
  178. * These functions handle user events such as keyboard input and mouse
  179. * clicks.
  180. *
  181. * @{ */
  182. int caca_get_event(caca_display_t *, unsigned int, caca_event_t *, int);
  183. unsigned int caca_get_mouse_x(caca_display_t *);
  184. unsigned int caca_get_mouse_y(caca_display_t *);
  185. int caca_set_mouse(caca_display_t *, int);
  186. int caca_set_cursor(caca_display_t *, int);
  187. /* @} */
  188. #ifdef __cplusplus
  189. }
  190. #endif
  191. #endif /* __CACA_H__ */