00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef SXYNTH_H
00017 #define SXYNTH_H
00018
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022
00023 typedef struct s_font_ft_s s_font_ft_t;
00024 typedef struct s_gettext_s s_gettext_t;
00025
00026 typedef struct s_window_s s_window_t;
00027
00028 typedef struct s_config_var_s s_config_var_t;
00029 typedef struct s_config_cat_s s_config_cat_t;
00030 typedef struct s_config_s s_config_t;
00031 typedef struct s_handler_s s_handler_t;
00032 typedef struct s_handlers_s s_handlers_t;
00033 typedef struct s_handler_keybd_s s_handler_keybd_t;
00034 typedef struct s_handler_mouse_s s_handler_mouse_t;
00035 typedef struct s_image_s s_image_t;
00036 typedef struct s_list_s s_list_t;
00037 typedef struct s_list_node_s s_list_node_t;
00038 typedef struct s_pollfd_s s_pollfd_t;
00039 typedef struct s_pollfds_s s_pollfds_t;
00040 typedef struct s_rect_s s_rect_t;
00041 typedef struct s_surface_s s_surface_t;
00042 typedef struct s_thread_s s_thread_t;
00043 typedef struct s_thread_sem_s s_thread_sem_t;
00044 typedef struct s_thread_cond_s s_thread_cond_t;
00045 typedef struct s_thread_mutex_s s_thread_mutex_t;
00046 typedef struct s_timer_s s_timer_t;
00047 typedef struct s_timers_s s_timers_t;
00048
00049 typedef enum {
00050 MOUSE_CURSOR_WAIT = 0x0,
00051 MOUSE_CURSOR_CROSS = 0x1,
00052 MOUSE_CURSOR_IBEAM = 0x2,
00053 MOUSE_CURSOR_SIZEV = 0x3,
00054 MOUSE_CURSOR_SIZEH = 0x4,
00055 MOUSE_CURSOR_SIZES = 0x5,
00056 MOUSE_CURSOR_SIZEB = 0x6,
00057 MOUSE_CURSOR_SIZEA = 0x7,
00058 MOUSE_CURSOR_ARROW = 0x8,
00059 MOUSE_CURSOR_POINT = 0x9,
00060 MOUSE_CURSOR_SPLITV = 0xA,
00061 MOUSE_CURSOR_SPLITH = 0xB,
00062 MOUSE_CURSOR_FORBID = 0xC,
00063 MOUSE_CURSOR_UPARROW = 0xD,
00064 MOUSE_CURSOR_NONE = 0xE,
00065 MOUSE_CURSOR_MAX = 0xF
00066 } S_MOUSE_CURSOR;
00067
00068 typedef enum {
00069 KEYCODE_NMLCKF = 0x01,
00070 KEYCODE_CPLCKF = 0x02,
00071 KEYCODE_LCTRLF = 0x04,
00072 KEYCODE_RCTRLF = 0x08,
00073 KEYCODE_LSHIFTF = 0x10,
00074 KEYCODE_RSHIFTF = 0x20,
00075 KEYCODE_LALTF = 0x40,
00076 KEYCODE_RALTF = 0x80,
00077 KEYCODE_SHIFTF = (KEYCODE_LSHIFTF | KEYCODE_RSHIFTF),
00078 KEYCODE_CTRLF = (KEYCODE_LCTRLF | KEYCODE_RCTRLF),
00079 KEYCODE_ALTF = (KEYCODE_LALTF | KEYCODE_LALTF),
00080 KEYCODE_ALTGRF = KEYCODE_RALTF
00081 } S_KEYCODE_FLAG;
00082
00083 typedef enum {
00084
00085 S_KEYCODE_ESCAPE,
00086 S_KEYCODE_ONE,
00087 S_KEYCODE_TWO,
00088 S_KEYCODE_THREE,
00089 S_KEYCODE_FOUR,
00090 S_KEYCODE_FIVE,
00091 S_KEYCODE_SIX,
00092 S_KEYCODE_SEVEN,
00093 S_KEYCODE_EIGHT,
00094 S_KEYCODE_NINE,
00095 S_KEYCODE_ZERO,
00096 S_KEYCODE_MINUS,
00097 S_KEYCODE_EQUAL,
00098 S_KEYCODE_DELETE,
00099 S_KEYCODE_TAB,
00100 S_KEYCODE_q,
00101 S_KEYCODE_w,
00102 S_KEYCODE_e,
00103 S_KEYCODE_r,
00104 S_KEYCODE_t,
00105 S_KEYCODE_y,
00106 S_KEYCODE_u,
00107 S_KEYCODE_i,
00108 S_KEYCODE_o,
00109 S_KEYCODE_p,
00110 S_KEYCODE_BRACKETLEFT,
00111 S_KEYCODE_BRACKETRIGHT,
00112 S_KEYCODE_RETURN,
00113 S_KEYCODE_LEFTCONTROL,
00114 S_KEYCODE_a,
00115 S_KEYCODE_s,
00116 S_KEYCODE_d,
00117 S_KEYCODE_f,
00118 S_KEYCODE_g,
00119 S_KEYCODE_h,
00120 S_KEYCODE_j,
00121 S_KEYCODE_k,
00122 S_KEYCODE_l,
00123 S_KEYCODE_SEMICOLON,
00124 S_KEYCODE_APOSTROPHE,
00125 S_KEYCODE_GRAVE,
00126 S_KEYCODE_LEFTSHIFT,
00127 S_KEYCODE_BACKSLASH,
00128 S_KEYCODE_z,
00129 S_KEYCODE_x,
00130 S_KEYCODE_c,
00131 S_KEYCODE_v,
00132 S_KEYCODE_b,
00133 S_KEYCODE_n,
00134 S_KEYCODE_m,
00135 S_KEYCODE_COMMA,
00136 S_KEYCODE_PERIOD,
00137 S_KEYCODE_SLASH,
00138 S_KEYCODE_RIGHTSHIFT,
00139 S_KEYCODE_KP_MULTIPLY,
00140 S_KEYCODE_ALT,
00141 S_KEYCODE_SPACE,
00142 S_KEYCODE_CAPS_LOCK,
00143 S_KEYCODE_F1,
00144 S_KEYCODE_F2,
00145 S_KEYCODE_F3,
00146 S_KEYCODE_F4,
00147 S_KEYCODE_F5,
00148 S_KEYCODE_F6,
00149 S_KEYCODE_F7,
00150 S_KEYCODE_F8,
00151 S_KEYCODE_F9,
00152 S_KEYCODE_F10,
00153 S_KEYCODE_NUM_LOCK,
00154 S_KEYCODE_SCROLL_LOCK,
00155 S_KEYCODE_KP_7,
00156 S_KEYCODE_KP_8,
00157 S_KEYCODE_KP_9,
00158 S_KEYCODE_KP_SUBTRACT,
00159 S_KEYCODE_KP_4,
00160 S_KEYCODE_KP_5,
00161 S_KEYCODE_KP_6,
00162 S_KEYCODE_KP_ADD,
00163 S_KEYCODE_KP_1,
00164 S_KEYCODE_KP_2,
00165 S_KEYCODE_KP_3,
00166 S_KEYCODE_KP_0,
00167 S_KEYCODE_KP_PERIOD,
00168 S_KEYCODE_LAST_CONSOLE,
00169 S_KEYCODE_LESS,
00170 S_KEYCODE_F11,
00171 S_KEYCODE_F12,
00172 S_KEYCODE_KP_ENTER,
00173 S_KEYCODE_RIGHTCONTROL,
00174 S_KEYCODE_KP_DIVIDE,
00175 S_KEYCODE_VOIDSYMBOL,
00176 S_KEYCODE_ALTGR,
00177 S_KEYCODE_BREAK,
00178 S_KEYCODE_HOME,
00179 S_KEYCODE_UP,
00180 S_KEYCODE_PAGEUP,
00181 S_KEYCODE_LEFT,
00182 S_KEYCODE_RIGHT,
00183 S_KEYCODE_END,
00184 S_KEYCODE_DOWN,
00185 S_KEYCODE_PAGEDOWN,
00186 S_KEYCODE_INSERT,
00187 S_KEYCODE_REMOVE,
00188 S_KEYCODE_PAUSE,
00189
00190 S_KEYCODE_EXCLAM,
00191 S_KEYCODE_AT,
00192 S_KEYCODE_NUMBERSIGN,
00193 S_KEYCODE_DOLLAR,
00194 S_KEYCODE_PERCENT,
00195 S_KEYCODE_ASCIICIRCUM,
00196 S_KEYCODE_AMPERSAND,
00197 S_KEYCODE_ASTERISK,
00198 S_KEYCODE_PARENLEFT,
00199 S_KEYCODE_PARENRIGHT,
00200 S_KEYCODE_UNDERSCORE,
00201 S_KEYCODE_PLUS,
00202 S_KEYCODE_Q,
00203 S_KEYCODE_W,
00204 S_KEYCODE_E,
00205 S_KEYCODE_R,
00206 S_KEYCODE_T,
00207 S_KEYCODE_Y,
00208 S_KEYCODE_U,
00209 S_KEYCODE_I,
00210 S_KEYCODE_O,
00211 S_KEYCODE_P,
00212 S_KEYCODE_BRACELEFT,
00213 S_KEYCODE_BRACERIGHT,
00214 S_KEYCODE_A,
00215 S_KEYCODE_S,
00216 S_KEYCODE_D,
00217 S_KEYCODE_F,
00218 S_KEYCODE_G,
00219 S_KEYCODE_H,
00220 S_KEYCODE_J,
00221 S_KEYCODE_K,
00222 S_KEYCODE_L,
00223 S_KEYCODE_COLON,
00224 S_KEYCODE_QUOTEDBL,
00225 S_KEYCODE_ASCIITILDE,
00226 S_KEYCODE_BAR,
00227 S_KEYCODE_Z,
00228 S_KEYCODE_X,
00229 S_KEYCODE_C,
00230 S_KEYCODE_V,
00231 S_KEYCODE_B,
00232 S_KEYCODE_N,
00233 S_KEYCODE_M,
00234 S_KEYCODE_GREATER,
00235 S_KEYCODE_QUESTION,
00236 S_KEYCODE_F13,
00237 S_KEYCODE_F14,
00238 S_KEYCODE_F15,
00239 S_KEYCODE_F16,
00240 S_KEYCODE_F17,
00241 S_KEYCODE_F18,
00242 S_KEYCODE_F19,
00243 S_KEYCODE_F20,
00244 S_KEYCODE_F21,
00245 S_KEYCODE_F22,
00246 S_KEYCODE_SHOW_MEMORY,
00247 S_KEYCODE_F23,
00248 S_KEYCODE_F24,
00249 S_KEYCODE_SCROLL_BACKWARD,
00250 S_KEYCODE_SCROLL_FORWARD,
00251
00252 S_KEYCODE_CURRENCY,
00253 S_KEYCODE_CENT,
00254 S_KEYCODE_HEX_C,
00255 S_KEYCODE_HEX_A,
00256 S_KEYCODE_SHOW_REGISTERS,
00257 S_KEYCODE_HEX_7,
00258 S_KEYCODE_HEX_8,
00259 S_KEYCODE_HEX_9,
00260 S_KEYCODE_HEX_D,
00261 S_KEYCODE_HEX_4,
00262 S_KEYCODE_HEX_5,
00263 S_KEYCODE_HEX_6,
00264 S_KEYCODE_HEX_E,
00265 S_KEYCODE_HEX_1,
00266 S_KEYCODE_HEX_2,
00267 S_KEYCODE_HEX_3,
00268 S_KEYCODE_HEX_0,
00269 S_KEYCODE_HEX_F,
00270 S_KEYCODE_HEX_B,
00271 S_KEYCODE_USER0,
00272 S_KEYCODE_USER1,
00273 S_KEYCODE_USER2,
00274 S_KEYCODE_USER3,
00275 S_KEYCODE_USER4,
00276 S_KEYCODE_USER5,
00277 S_KEYCODE_USER6,
00278 S_KEYCODE_USER7,
00279 S_KEYCODE_USER8,
00280 S_KEYCODE_USER9,
00281 S_KEYCODE_USER10,
00282 S_KEYCODE_USER11,
00283 S_KEYCODE_USER12,
00284 S_KEYCODE_USER13,
00285 S_KEYCODE_USER14,
00286 S_KEYCODE_USER15,
00287 S_KEYCODE_USER16,
00288 S_KEYCODE_USER17,
00289 S_KEYCODE_USER18,
00290 S_KEYCODE_USER19,
00291 S_KEYCODE_USER20,
00292 S_KEYCODE_USER21,
00293 S_KEYCODE_USER22,
00294 S_KEYCODE_USER23,
00295 S_KEYCODE_USER24,
00296 S_KEYCODE_USER25,
00297 S_KEYCODE_USER26,
00298 S_KEYCODE_USER27,
00299 S_KEYCODE_NOCODE,
00300 S_KEYCODE_CODES
00301 } S_KEYCODE_CODE;
00302
00303 typedef enum {
00304 MOUSE_RIGHTBUTTON = 0x00000001,
00305 MOUSE_MIDDLEBUTTON = 0x00000002,
00306 MOUSE_LEFTBUTTON = 0x00000004,
00307 MOUSE_FOURTHBUTTON = 0x00000008,
00308 MOUSE_FIFTHBUTTON = 0x00000010,
00309 MOUSE_SIXTHBUTTON = 0x00000020,
00310 MOUSE_RESETBUTTON = 0x00000040,
00311 MOUSE_WHEELXBUTTON_U = 0x00000080,
00312 MOUSE_WHEELXBUTTON_D = 0x00000100,
00313 MOUSE_WHEELYBUTTON_U = 0x00000200,
00314 MOUSE_WHEELYBUTTON_D = 0x00000400,
00315
00316 MOUSE_USER0BUTTON = 0x00000800,
00317 MOUSE_USER1BUTTON = 0x00001000,
00318 MOUSE_USER2BUTTON = 0x00002000,
00319 MOUSE_USER3BUTTON = 0x00004000,
00320 MOUSE_USER4BUTTON = 0x00008000,
00321 MOUSE_USER5BUTTON = 0x00010000,
00322 MOUSE_USER6BUTTON = 0x00020000,
00323 MOUSE_USER7BUTTON = 0x00040000,
00324 MOUSE_USER8BUTTON = 0x00080000,
00325 MOUSE_USER9BUTTON = 0x00100000,
00326 MOUSE_USER10BUTTON = 0x00200000,
00327
00328 MOUSE_NONEBUTTON = 0x00400000
00329 } S_MOUSECODE_CODE;
00330
00331 typedef enum {
00332 NONE_EVENT = 0x00000000,
00333 QUIT_EVENT = 0x00000001,
00334 KEYBD_EVENT = 0x00000002,
00335 KEYBD_RELEASED = 0x00000004,
00336 KEYBD_PRESSED = 0x00000008,
00337 MOUSE_EVENT = 0x00000010,
00338 MOUSE_OVER = 0x00000020,
00339 MOUSE_RELEASED = 0x00000040,
00340 MOUSE_PRESSED = 0x00000080,
00341 MOUSE_CLICKED = 0x00000100,
00342 MOUSE_ENTERED = 0x00000200,
00343 MOUSE_EXITED = 0x00000400,
00344 MOUSE_HINT = 0x00000800,
00345 MOUSE_HINT2 = 0x00001000,
00346 EXPOSE_EVENT = 0x00002000,
00347 CONFIG_EVENT = 0x00004000,
00348 CONFIG_CHNGX = 0x00008000,
00349 CONFIG_CHNGY = 0x00010000,
00350 CONFIG_CHNGW = 0x00020000,
00351 CONFIG_CHNGH = 0x00040000,
00352 FOCUS_EVENT = 0x00080000,
00353 FOCUSIN_EVENT = 0x00100000,
00354 FOCUSOUT_EVENT = 0x00200000,
00355 DESKTOP_EVENT = 0x00400000,
00356 TIMER_EVENT = 0x00800000,
00357 REMOTE_EVENT = 0x01000000,
00358 SIGNAL_EVENT = 0x02000000,
00359 EVENT_MASK = (QUIT_EVENT | KEYBD_EVENT | MOUSE_EVENT | EXPOSE_EVENT | CONFIG_EVENT | FOCUS_EVENT | DESKTOP_EVENT | TIMER_EVENT)
00360 } S_EVENT;
00361
00362 typedef enum {
00363 MOUSE_HANDLER = 0x1,
00364 KEYBD_HANDLER = 0x2
00365 } S_HANDLER;
00366
00367 typedef struct s_font_glyph_s {
00368 int yMin;
00369 int yMax;
00370 int height;
00371 int lineskip;
00372 int size;
00373 s_image_t *img;
00374 } s_font_glyph_t;
00375
00376 typedef struct s_font_s {
00377 char *name;
00378 char *str;
00379 int size;
00380 int ascent;
00381 int descent;
00382 int height;
00383 int lineskip;
00384 int underline_offset;
00385 int underline_height;
00386 unsigned int rgb;
00387 s_font_glyph_t glyph;
00388 s_font_ft_t *ft;
00389 } s_font_t;
00390
00391 typedef struct s_mouse_s {
00392 int x;
00393 int y;
00394 int x_old;
00395 int y_old;
00396 S_MOUSECODE_CODE b;
00397 int clicks;
00398 S_MOUSECODE_CODE buttons;
00399 long long time;
00400 int px;
00401 int py;
00402 int pb;
00403 S_MOUSECODE_CODE pbuttons;
00404 long long ctime;
00405 S_MOUSE_CURSOR cursor;
00406 } s_mouse_t;
00407
00408 typedef struct s_keybd_s {
00409 int ascii;
00410 int button;
00411 int keycode;
00412 int scancode;
00413 int state[S_KEYCODE_CODES];
00414 S_KEYCODE_FLAG flag;
00415 } s_keybd_t;
00416
00417 typedef struct s_expose_s {
00418 s_rect_t *rect;
00419 } s_expose_t;
00420
00421 typedef struct s_desktop_client_s {
00422 int id;
00423 int pri;
00424 char *title;
00425 } s_desktop_client_t;
00426
00427 typedef struct s_dekstop_s {
00428 s_list_t *clients;
00429 } s_desktop_t;
00430
00432 typedef struct s_event_s {
00434 S_EVENT type;
00436 s_mouse_t *mouse;
00438 s_keybd_t *keybd;
00440 s_expose_t *expose;
00442 s_desktop_t *desktop;
00444 s_timer_t *timer;
00446 void *data;
00447 } s_event_t;
00448
00450 typedef struct s_eventq_s {
00452 s_thread_t *tid;
00454 s_list_t *queue;
00456 s_thread_cond_t *cond;
00458 s_thread_mutex_t *mut;
00459 } s_eventq_t;
00460
00461 typedef struct s_childs_s {
00462 s_list_t *list;
00463 s_thread_mutex_t *mut;
00464 } s_childs_t;
00465
00466 typedef struct s_single_app_s {
00467 int (*fonk) (int argc, char *argv[]);
00468 int argc;
00469 char *argv[10];
00470 } s_single_app_t;
00471
00472
00473 void * s_malloc (unsigned int size);
00474 void * s_calloc (unsigned int nmemb, unsigned int size);
00475 void * s_realloc (void *ptr, unsigned int size);
00476 void s_free (void *ptr);
00477
00478
00479 int s_child_add (s_window_t *window, s_window_t *child);
00480 int s_child_del (s_window_t *window, s_window_t *child);
00481 int s_childs_init (s_window_t *window);
00482 int s_childs_uninit (s_window_t *window);
00483
00548
00551 struct s_config_var_s {
00553 char *name;
00555 char *value;
00556 };
00557
00560 struct s_config_cat_s {
00562 char *name;
00564 s_list_t *variable;
00565 };
00566
00569 struct s_config_s {
00571 s_list_t *category;
00572 };
00573
00574
00575
00581 char * s_config_strip (char *buf);
00582
00589 int s_config_parse (s_config_t *cfg, char *name);
00590
00596 int s_config_init (s_config_t **cfg);
00597
00604 int s_config_category_init (s_config_cat_t **cat, char *name);
00605
00613 int s_config_variable_init (s_config_var_t **var, char *name, char *value);
00614
00620 int s_config_variable_uninit (s_config_var_t *var);
00621
00627 int s_config_category_uninit (s_config_cat_t *cat);
00628
00634 int s_config_uninit (s_config_t *cfg);
00635
00638
00639 void s_debug_debugf (unsigned short flags, char *file, int line, char *func, char *fmt, ...);
00640
00641
00642 void bpp_setpixel (s_surface_t *surface, int x, int y, int c);
00643 void bpp_setpixel_o (s_surface_t *surface, int id, int x, int y, int c);
00644 int bpp_getpixel (s_surface_t *surface, int x, int y);
00645 int bpp_getpixel_o (s_surface_t *surface, int id, int x, int y);
00646 void bpp_hline (s_surface_t *surface, int x1, int y, int x2, int c);
00647 void bpp_hline_o (s_surface_t *surface, int id, int x1, int y, int x2, int c);
00648 void bpp_vline (s_surface_t *surface, int x, int y1, int y2, int c);
00649 void bpp_vline_o (s_surface_t *surface, int id, int x, int y1, int y2, int c);
00650 void bpp_fillbox (s_surface_t *surface, int x, int y, int w, int h, int c);
00651 void bpp_fillbox_o (s_surface_t *surface, int id, int x, int y, int w, int h, int c);
00652 void bpp_putbox (s_surface_t *surface, int x, int y, int w, int h, void *sp, int bw);
00653 void bpp_putbox_mask (s_surface_t *surface, int x, int y, int w, int h, void *sp, unsigned char *sm, int bw);
00654 void bpp_putbox_alpha (s_surface_t *surface, int x, int y, int w, int h, void *sp, unsigned char *sm, int bw);
00655 void bpp_putbox_rgb (s_surface_t *surface, int x, int y, int w, int h, unsigned int *rgb, int bw);
00656 void bpp_putbox_rgba (s_surface_t *surface, int x, int y, int w, int h, unsigned int *rgba, int bw);
00657 void bpp_getbox (s_surface_t *surface, int x, int y, int w, int h, void *dp);
00658 void bpp_putbox_o (s_surface_t *surface, int id, int x, int y, int w, int h, void *sp, int bw);
00659 void bpp_putbox_mask_o (s_surface_t *surface, int id, int x, int y, int w, int h, void *sp, unsigned char *sm, int bw);
00660 void bpp_putbox_alpha_o (s_surface_t *surface, int id, int x, int y, int w, int h, void *sp, unsigned char *sm, int bw);
00661 void bpp_putbox_rgb_o (s_surface_t *surface, int id, int x, int y, int w, int h, unsigned int *rgb, int bw);
00662 void bpp_putbox_rgba_o (s_surface_t *surface, int id, int x, int y, int w, int h, unsigned int *rgba, int bw);
00663 void bpp_getbox_o (s_surface_t *surface, int id, int x, int y, int w, int h, void *dp);
00664
00665
00666 int s_event_mouse_handler_state (s_window_t *window, s_event_t *event, s_handler_mouse_t *mouse, int over);
00667 int s_event_parse_handler_over (s_window_t *window, s_event_t *event, s_handler_t *work);
00668 int s_event_parse_handler_notover (s_window_t *window, s_event_t *event, s_handler_t *work);
00669 void s_event_parse_mouse (s_window_t *window, s_event_t *event);
00670 int s_event_parse_keybd_handler (s_window_t *window, s_event_t *event, s_handler_t *work);
00671 int s_event_parse_keybd (s_window_t *window, s_event_t *event);
00672 int s_event_parse_expos (s_window_t *window, s_event_t *event);
00673 int s_event_parse_config (s_window_t *window, s_event_t *event);
00674 int s_event_parse_timer (s_window_t *window, s_event_t *event);
00675 int s_event_changed (s_window_t *window);
00676 int s_event_init (s_event_t **event);
00677 int s_event_uninit (s_event_t *event);
00678
00679
00680 int s_eventq_init (s_window_t *window);
00681 int s_eventq_uninit (s_window_t *window);
00682 int s_eventq_add (s_window_t *window, s_event_t *event);
00683 int s_eventq_get (s_window_t *window, s_event_t **event);
00684 int s_eventq_wait (s_window_t *window, s_event_t **event);
00685
00686
00687 int s_font_init (s_font_t **font, char *name);
00688 int s_font_uninit (s_font_t *font);
00689 int s_font_set_size (s_font_t *font, int size);
00690 int s_font_set_str (s_font_t *font, char *str);
00691 int s_font_set_rgb (s_font_t *font, int r, int g, int b);
00692 int s_font_get_glyph (s_font_t *font);
00693 int s_font_get_width (s_font_t *font, char *str);
00694
00695
00696 char * s_setlocale(s_window_t *window, int category, const char *locale);
00697 char * s_bindtextdomain (s_window_t *window, const char *domainname, const char *dirname);
00698 char * s_textdomain (s_window_t *window, const char *domainname);
00699 char * s_gettext (s_window_t *window, const char *str);
00700 void s_gettext_uninit (s_window_t *window);
00701 int s_gettext_init (s_window_t *window);
00702
00703
00704 long long s_gettimeofday (void);
00705
00718
00719
00720
00729 int s_rgbcolor (s_surface_t *surface, int r, int g, int b);
00730
00740 void s_colorrgb (s_surface_t *surface, int c, int *r, int *g, int *b);
00741
00750 void s_setpixel (s_surface_t *surface, int x, int y, int c);
00751
00762 void s_setpixelrgb (s_surface_t *surface, int x, int y, int r, int g, int b);
00763
00775 void s_setpixelrgba (s_surface_t *surface, int x, int y, int r, int g, int b, int a);
00776
00784 int s_getpixel (s_surface_t *surface, int x, int y);
00785
00796 void s_getpixelrgb (s_surface_t *surface, int x, int y, int *r, int *g, int *b);
00797
00807 void s_hline (s_surface_t *surface, int x1, int y, int x2, int c);
00808
00818 void s_vline (s_surface_t *surface, int x, int y1, int y2, int c);
00819
00830 void s_line (s_surface_t *surface, int x1, int y1, int x2, int y2, int c);
00831
00843 void s_fillbox (s_surface_t *surface, int x, int y, int w, int h, int c);
00844
00857 void s_putbox (s_surface_t *surface, int x, int y, int w, int h, void *sp);
00858
00873 void s_putboxmask (s_surface_t *surface, int x, int y, int w, int h, char *sp, unsigned char *sm);
00874
00889 void s_putboxalpha (s_surface_t *surface, int x, int y, int w, int h, char *sp, unsigned char *sm);
00890
00902 void s_putboxrgba (s_surface_t *surface, int x, int y, int w, int h, unsigned int *rgba);
00903
00915 void s_putboxrgb (s_surface_t *surface, int x, int y, int w, int h, unsigned int *rgb);
00916
00928 void s_getbox (s_surface_t *surface, int x, int y, int w, int h, void *dp);
00929
00947 void s_putboxpart (s_surface_t *surface, int x, int y, int w, int h, int bw, int bh, void *sp, int xo, int yo);
00948
00968 void s_putboxpartmask (s_surface_t *surface, int x, int y, int w, int h, int bw, int bh, char *sp, unsigned char *sm, int xo, int yo);
00969
00986 void s_putboxpartrgb (s_surface_t *surface, int x, int y, int w, int h, int bw, int bh, unsigned int *rgb, int xo, int yo);
00987
01004 void s_putboxpartrgba (s_surface_t *surface, int x, int y, int w, int h, int bw, int bh, unsigned int *rgba, int xo, int yo);
01005
01025 void s_putboxpartalpha (s_surface_t *surface, int x, int y, int w, int h, int bw, int bh, void *sp, unsigned char *sm, int xo, int yo);
01026
01038 void s_copybox (s_surface_t *surface, int x1, int y1, int w, int h, int x2, int y2);
01039
01051 void s_getsurfacevirtual (s_surface_t *s, int w, int h, int bitspp, void *vbuf);
01052
01064 int s_copybuffer (char *sb, int sbitspp, char **db, int dbitspp, int w, int h);
01065
01077 void s_rotatebox (s_surface_t *surface, s_rect_t *srect, void *sbuf, s_rect_t *drect, void *dbuf, int rotate);
01078
01091 void s_scalebox (s_surface_t *surface, int w1, int h1, void *_dp1, int w2, int h2, void *_dp2);
01092
01112 int s_putmaskpart (unsigned char *dp, int dw, int dh, int x, int y, int w, int h, int bw, int bh, unsigned char *sp, int xo, int yo);
01113
01156
01159 struct s_handler_keybd_s {
01161 int flag;
01163 int button;
01165 void (*p) (s_window_t *, s_event_t *, s_handler_t *);
01167 void (*r) (s_window_t *, s_event_t *, s_handler_t *);
01168 };
01169
01172 struct s_handler_mouse_s {
01174 int x;
01176 int y;
01178 int w;
01180 int h;
01182 int button;
01184 void (*p) (s_window_t *, s_event_t *, s_handler_t *);
01186 void (*r) (s_window_t *, s_event_t *, s_handler_t *);
01188 void (*c) (s_window_t *, s_event_t *, s_handler_t *);
01190 void (*o) (s_window_t *, s_event_t *, s_handler_t *);
01192 void (*ho) (s_window_t *, s_event_t *, s_handler_t *);
01194 void (*hr) (s_window_t *, s_event_t *, s_handler_t *);
01196 void (*oh) (s_window_t *, s_event_t *, s_handler_t *);
01198 void (*hoh) (s_window_t *, s_event_t *, s_handler_t *);
01200 void (*rh) (s_window_t *, s_event_t *, s_handler_t *);
01202 S_EVENT hstate;
01203 };
01204
01207 struct s_handler_s {
01209 S_HANDLER type;
01211 s_handler_mouse_t mouse;
01213 s_handler_keybd_t keybd;
01215 void *data;
01216 };
01217
01220 struct s_handlers_s {
01222 s_list_t *list;
01224 s_thread_mutex_t *mut;
01225 };
01226
01227
01234 int s_handler_init (s_handler_t **handler);
01235
01242 int s_handler_uninit (s_handler_t *handler);
01243
01250 int s_handler_add (s_window_t *window, s_handler_t *handler);
01251
01258 int s_handler_del (s_window_t *window, s_handler_t *handler);
01259
01265 int s_handlers_init (s_window_t *window);
01266
01272 int s_handlers_uninit (s_window_t *window);
01273
01320
01323 struct s_image_s {
01325 char *name;
01327 int x;
01329 int y;
01331 int w;
01333 int h;
01335 char *buf;
01337 unsigned char *mat;
01339 s_rect_t *handler;
01341 unsigned int delay;
01343 unsigned int *rgba;
01345 s_list_t *layers;
01346 };
01347
01348
01349
01355 int s_image_hex2int (char *str);
01356
01362 int s_image_get_mat (s_image_t *img);
01363
01370 int s_image_get_buf (s_surface_t *surface, s_image_t *img);
01371
01377 void s_image_get_handler (s_image_t *img);
01378
01384 int s_image_init (s_image_t **img);
01385
01391 void s_image_free_buf (s_image_t *img);
01392
01398 void s_image_free_mat (s_image_t *img);
01399
01405 void s_image_free_rgba (s_image_t *img);
01406
01412 void s_image_free_handler (s_image_t *img);
01413
01419 int s_image_uninit (s_image_t *img);
01420
01426 int s_image_layer_init (s_image_t **lyr);
01427
01433 int s_image_layer_uninit (s_image_t *lyr);
01434
01440 int s_image_layers_init (s_image_t *img);
01441
01447 int s_image_layers_uninit (s_image_t *img);
01448
01456 int s_image_img (char *file, s_image_t *img);
01457
01458
01459
01465 int s_image_gif_is (char *file);
01466
01473 int s_image_gif (char *file, s_image_t *img);
01474
01475
01476
01482 int s_image_png_is (char *file);
01483
01490 int s_image_png (char *file, s_image_t *img);
01491
01492
01493
01499 int s_image_xpm_is (char *file);
01500
01507 int s_image_xpm (char *file, s_image_t *img);
01508
01573
01576 struct s_list_node_s {
01578 void *next;
01580 void *element;
01581 };
01582
01585 struct s_list_s {
01587 int nb_elt;
01589 s_list_node_t *node;
01590 };
01591
01592
01593
01599 int s_list_init (s_list_t **li);
01600
01606 int s_list_uninit (s_list_t *li);
01607
01614 int s_list_eol (s_list_t *li, int i);
01615
01622 void * s_list_get (s_list_t *li, int pos);
01623
01630 int s_list_remove (s_list_t *li, int pos);
01631
01639 int s_list_add (s_list_t *li, void *el, int pos);
01640
01649 void * s_list_find (s_list_t *list, void *node, int (*cmp_func) (void *, void *));
01650
01657 int s_list_get_pos (s_list_t *list, void *node);
01658
01712
01715 struct s_pollfd_s {
01717 int fd;
01719 int (*pf_in) (s_window_t *, s_pollfd_t *);
01721 int (*pf_err) (s_window_t *, s_pollfd_t *);
01723 int (*pf_close) (s_window_t *, s_pollfd_t *);
01725 void *data;
01726 };
01727
01730 struct s_pollfds_s {
01732 s_list_t *list;
01734 s_thread_mutex_t *mut;
01735 };
01736
01737
01738
01745 int s_pollfd_init (s_pollfd_t **pfd);
01746
01752 int s_pollfd_uninit (s_pollfd_t *pfd);
01753
01760 s_pollfd_t * s_pollfd_find (s_window_t *window, int fd);
01761
01768 int s_pollfd_add (s_window_t *window, s_pollfd_t *pfd);
01769
01776 int s_pollfd_del (s_window_t *window, s_pollfd_t *pfd);
01777
01783 int s_pollfds_init (s_window_t *window);
01784
01790 int s_pollfds_uninit (s_window_t *window);
01791
01838
01841 struct s_rect_s {
01843 int x;
01845 int y;
01847 int w;
01849 int h;
01850 };
01851
01852
01853
01861 int s_rect_merge (s_rect_t *r1, s_rect_t *r2, s_rect_t *r);
01862
01870 int s_rect_intersect (s_rect_t *r1, s_rect_t *r2, s_rect_t *r);
01871
01883 int s_rect_clip_virtual (s_surface_t *surface, int x, int y, int w, int h, s_rect_t *coor);
01884
01896 int s_rect_clip_real (s_surface_t *surface, int x, int y, int w, int h, s_rect_t *coor);
01897
01907 int s_rect_difference_add (s_list_t *list, int x, int y, int w, int h);
01908
01916 int s_rect_difference (s_rect_t *r1, s_rect_t *r0, s_list_t *list);
01917
01931
01934 typedef enum {
01936 SOC_DATA_NOTHING = 0x0,
01938 SOC_DATA_NEW = 0x1,
01940 SOC_DATA_SHOW = 0x2,
01942 SOC_DATA_CLOSE = 0x3,
01944 SOC_DATA_EVENT = 0x4,
01946 SOC_DATA_EXPOSE = 0x5,
01948 SOC_DATA_DISPLAY = 0x6,
01950 SOC_DATA_FORMDRAW = 0x7,
01952 SOC_DATA_CONFIGURE = 0x8,
01954 SOC_DATA_DESKTOP = 0x9,
01955 } S_SOC_DATA;
01956
01957
01958
01965 int s_socket_request_new (s_window_t *window, int soc);
01966
01973 int s_socket_request_display (s_window_t *window, int soc);
01974
01982 int s_socket_request_configure (s_window_t *window, int soc, int form);
01983
01991 int s_socket_request_stream (s_window_t *window, int soc, s_rect_t *coor);
01992
02001 int s_socket_request_show (s_window_t *window, int soc, int id, int show);
02002
02010 int s_socket_request_event (s_window_t *window, int soc, s_event_t *event);
02011
02018 int s_socket_request (s_window_t *window, S_SOC_DATA req, ...);
02019
02026 int s_socket_listen_event (s_window_t *window, int soc);
02027
02034 int s_socket_listen_expose (s_window_t *window, int soc);
02035
02042 int s_socket_listen_desktop (s_window_t *window, int soc);
02043
02050 int s_socket_listen_parse (s_window_t *window, int soc);
02051
02058 int s_socket_listen_wait (s_window_t *window, int timeout);
02059
02066 int s_socket_uninit (s_window_t *window, s_pollfd_t *pfd);
02067
02074 int s_socket_in_f (s_window_t *window, s_pollfd_t *pfd);
02075
02082 int s_socket_ierr_f (s_window_t *window, s_pollfd_t *pfd);
02083
02090 int s_socket_inw_f (s_window_t *window, s_pollfd_t *pfd);
02091
02098 int s_socket_ierrw_f (s_window_t *window, s_pollfd_t *pfd);
02099
02106 int s_socket_closew_f (s_window_t *window, s_pollfd_t *pfd);
02107
02113 int s_socket_init_uds (s_window_t *window);
02114
02120 int s_socket_init_tcp (s_window_t *window);
02121
02127 int s_socket_init_wakeup (s_window_t *window);
02128
02134 int s_socket_init (s_window_t *window);
02135
02148
02151 typedef enum {
02153 SURFACE_REAL = 0x1,
02155 SURFACE_VIRTUAL = 0x2,
02157 SURFACE_NEEDEXPOSE = 0x4,
02159 SURFACE_NEEDSTREAM = 0x8
02160 } S_SURFACE_MODE;
02161
02164 struct s_surface_s {
02166 S_SURFACE_MODE mode;
02168 int bytesperpixel;
02170 int bitsperpixel;
02172 int colors;
02174 int blueoffset;
02176 int greenoffset;
02178 int redoffset;
02180 int bluelength;
02182 int greenlength;
02184 int redlength;
02186 int width;
02188 int height;
02190 unsigned char *vbuf;
02192 s_rect_t *buf;
02194 s_rect_t *win;
02196 unsigned char *linear_buf;
02198 int linear_buf_width;
02200 int linear_buf_pitch;
02202 int linear_buf_height;
02204 unsigned int linear_mem_base;
02206 unsigned int linear_mem_size;
02208 int shm_mid;
02210 unsigned char *matrix;
02212 int shm_sid;
02214 S_SURFACE_MODE need_expose;
02216 char *device;
02218 int *id;
02220 s_window_t *window;
02221 };
02222
02223
02224
02230 int s_surface_init (s_window_t *window);
02231
02237 void s_surface_create (s_window_t *window);
02238
02244 void s_surface_shm_attach (s_window_t *window);
02245
02251 void s_surface_linear (s_window_t *window);
02252
02258 void s_surface_uninit (s_window_t *window);
02259
02266 void s_surface_changed (s_window_t *window, s_rect_t *changed);
02267
02356
02357
02358
02365 int s_thread_sem_create (s_thread_sem_t **sem, int initial);
02366
02372 int s_thread_sem_destroy (s_thread_sem_t *sem);
02373
02379 int s_thread_sem_wait (s_thread_sem_t *sem);
02380
02387 int s_thread_sem_wait_timeout (s_thread_sem_t *sem, int msec);
02388
02394 int s_thread_sem_post (s_thread_sem_t *sem);
02395
02401 int s_thread_mutex_init (s_thread_mutex_t **mut);
02402
02408 int s_thread_mutex_destroy (s_thread_mutex_t *mut);
02409
02415 int s_thread_mutex_lock (s_thread_mutex_t *mut);
02416
02422 int s_thread_mutex_trylock (s_thread_mutex_t *mut);
02423
02429 int s_thread_mutex_unlock (s_thread_mutex_t *mut);
02430
02436 int s_thread_cond_init (s_thread_cond_t **cond);
02437
02443 int s_thread_cond_destroy (s_thread_cond_t *cond);
02444
02450 int s_thread_cond_signal (s_thread_cond_t *cond);
02451
02457 int s_thread_cond_broadcast (s_thread_cond_t *cond);
02458
02465 int s_thread_cond_wait (s_thread_cond_t *cond, s_thread_mutex_t *mut);
02466
02474 int s_thread_cond_timedwait (s_thread_cond_t *cond, s_thread_mutex_t *mut, int msec);
02475
02484 s_thread_t * s_thread_create (void * (*f) (void *), void *farg);
02485
02491 int s_thread_cancel (s_thread_t *tid);
02492
02501 int s_thread_join (s_thread_t *tid, void **ret);
02502
02507 int s_thread_self (void);
02508
02511 void s_thread_exit (void *ret);
02512
02563
02566 struct s_timer_s {
02568 long long timeval;
02571 long long interval;
02573 void (*cb) (s_window_t *, struct s_timer_s *);
02575 void *data;
02576 };
02577
02580 struct s_timers_s {
02582 s_list_t *timers;
02584 s_thread_mutex_t *mut;
02585 };
02586
02587
02588
02595 int s_timer_init (s_timer_t **timer);
02596
02604 int s_timer_timeval (s_window_t *window, s_timer_t *timer, int timeval);
02605
02611 int s_timer_uninit (s_timer_t *timer);
02612
02619 int s_timer_del (s_window_t *window, s_timer_t *timer);
02620
02627 int s_timer_add (s_window_t *window, s_timer_t *timer);
02628
02634 int s_timers_init (s_window_t *window);
02635
02641 int s_timers_uninit (s_window_t *window);
02642
02695
02698 typedef enum {
02700 WINDOW_NOFORM = 0x0040,
02702 WINDOW_MAIN = 0x0080,
02704 WINDOW_TEMP = 0x0100,
02706 WINDOW_CHILD = 0x0200,
02708 WINDOW_DESKTOP = 0x0400
02709 } S_WINDOW;
02710
02713 struct s_window_s {
02715 int running;
02717 int soc;
02719 int wsoc;
02721 S_WINDOW type;
02722
02724 int id;
02726 int pri;
02728 char *title;
02729
02731 int resizeable;
02733 int alwaysontop;
02735 S_MOUSE_CURSOR cursor;
02737 int mouse_entered;
02738
02740 s_surface_t *surface;
02741
02743 s_eventq_t *eventq;
02745 s_timers_t *timers;
02747 s_childs_t *childs;
02749 s_pollfds_t *pollfds;
02751 s_handlers_t *handlers;
02752
02754 s_thread_t *tid;
02756 s_window_t *parent;
02757
02759 s_event_t *event;
02761 s_thread_mutex_t *socket_mutex;
02762
02764 s_gettext_t *gettext;
02765
02767 void (*atevent) (s_window_t *, s_event_t *);
02769 void (*atexit) (s_window_t *);
02770
02772 void *data;
02773 };
02774
02775
02776
02783 void s_window_set_cursor (s_window_t *window, S_MOUSE_CURSOR cursor);
02784
02791 void s_window_set_title (s_window_t *window, char *fmt, ...);
02792
02798 void s_window_form_draw (s_window_t *window);
02799
02805 void s_window_hide (s_window_t *window);
02806
02812 void s_window_show (s_window_t *window);
02813
02824 void s_window_set_coor (s_window_t *window, int form, int x, int y, int w, int h);
02825
02832 void s_window_set_resizeable (s_window_t *window, int resizeable);
02833
02840 void s_window_set_alwaysontop (s_window_t *window, int alwaysontop);
02841
02849 int s_window_new (s_window_t *window, S_WINDOW type, s_window_t *parent);
02850
02856 int s_window_init (s_window_t **window);
02857
02863 void s_window_uninit (s_window_t *window);
02864
02870 void s_window_exit (s_window_t *window);
02871
02877 void s_window_quit (s_window_t *window);
02878
02884 int s_window_wakeup (s_window_t *window);
02885
02891 void * s_window_loop_event (void *arg);
02892
02898 void * s_window_loop (void *arg);
02899
02905 void * s_window_main (void *arg);
02906
02913 void s_window_atevent (s_window_t *window, void (*f) (s_window_t *, s_event_t *));
02914
02921 void s_window_atexit (s_window_t *window, void (*f) (s_window_t *));
02922
02925 #ifdef __cplusplus
02926 }
02927 #endif
02928
02929 #endif