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