server.h

00001 /***************************************************************************
00002     begin                : Sun Feb 16 2003
00003     copyright            : (C) 2003 - 2006 by Alper Akcan
00004     email                : distchx@yahoo.com
00005  ***************************************************************************/
00006 
00007 /***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU Lesser General Public License as        *
00011  *   published by the Free Software Foundation; either version 2.1 of the  *
00012  *   License, or (at your option) any later version.                       *
00013  *                                                                         *
00014  ***************************************************************************/
00015 
00016 #ifndef S_SERVER_H_
00017 #define S_SERVER_H_
00018 
00019 typedef struct s_cursor_s s_cursor_t;
00020 typedef struct s_theme_s s_theme_t;
00021 typedef struct s_video_input_data_mouse_s s_video_input_data_mouse_t;
00022 typedef struct s_video_input_data_keybd_s s_video_input_data_keybd_t;
00023 typedef union s_video_input_data_u s_video_input_data_t;
00024 typedef struct s_video_input_s s_video_input_t;
00025 typedef struct s_video_driver_s s_video_driver_t;
00026 typedef struct s_server_conf_s s_server_conf_t;
00027 typedef struct s_clients_s s_clients_t;
00028 typedef struct s_server_s s_server_t;
00029 
00030 typedef enum {
00031         VIDEO_INPUT_NONE,
00032         VIDEO_INPUT_MOUSE,
00033         VIDEO_INPUT_KEYBD,
00034         VIDEO_INPUT_IRR,
00035 } VIDEO_INPUT;
00036 
00037 struct s_video_input_data_mouse_s {
00038         int x;
00039         int y;
00040         int buttons;
00041 };
00042 
00043 struct s_video_input_data_keybd_s {
00044         int state;
00045         int button;
00046         int keycode;
00047         int scancode;
00048         int ascii;
00049 };
00050 
00051 union s_video_input_data_u {
00052         s_video_input_data_mouse_t mouse;
00053         s_video_input_data_keybd_t keybd;
00054         s_video_input_data_keybd_t irr;
00055 };
00056 
00057 struct s_video_input_s {
00058         VIDEO_INPUT type;
00059         int (*init) (s_server_conf_t *cfg);
00060         int (*update) (s_video_input_data_t *idata);
00061         void (*uninit) (void);
00062 };
00063 
00064 struct s_video_driver_s {
00065         char *driver;
00066         char *device;
00067 
00068         s_video_input_t **input;
00069 
00070         int (*server_init) (s_server_conf_t *cfg);
00071         void (*server_uninit) (void);
00072         void (*server_goto_back) (void);
00073         void (*server_comefrom_back) (void);
00074         void (*server_restore) (void);
00075         void (*server_surface_update) (s_rect_t *coor);
00076         void (*server_fullscreen) (void);
00077 
00078         void *driver_data;
00079 };
00080 
00081 typedef enum {
00082         TOP_L   = 0x0,
00083         TOP_1,
00084         TOP_2,
00085         TOP_3,
00086         TOP_4,
00087         TOP_5,
00088         TOP_R,
00089         LEFT,
00090         RIGHT,
00091         BTM_L,
00092         BTM,
00093         BTM_R,
00094         FORM_MAX
00095 } THEME_FORM;
00096 
00097 typedef enum {
00098         CLOSE   = 0x0,
00099         MAXIMIZE,
00100         HIDE,
00101         MENU,
00102         BTNS_MAX
00103 } THEME_BTN;
00104 
00105 typedef enum {
00106         INACTIVE,
00107         ACTIVE,
00108         PRESSED
00109 } THEME_STATE;
00110 
00111 typedef enum {
00112         SURFACE_CLOSE    = 0x1,
00113         SURFACE_FOCUS    = 0x2,
00114         SURFACE_REDRAW   = 0x3,
00115         SURFACE_REFRESH  = 0x4,
00116         SURFACE_CHANGED  = 0x5
00117 } S_SURFACE_CHNGF;
00118 
00119 struct s_theme_s {
00120         int title_full;
00121         int text_color[2];
00122         int text_v_off[2];
00123         s_image_t form[2][FORM_MAX];
00124         s_image_t button[3][BTNS_MAX];
00125         struct {
00126                 int h;
00127                 int w;
00128                 int w_;
00129         } form_min;
00130         s_font_t *font[2];
00131 };
00132 
00133 struct s_cursor_s {
00134         int sw;
00135         int x;
00136         int y;
00137         int xyid;
00138         int xyid_old;
00139         s_image_t *img;
00140         s_image_t images[MOUSE_CURSOR_MAX];
00141 };
00142 
00143 struct s_server_conf_s {
00144         struct {
00145                 char *driver;
00146                 char *mode;
00147                 int rotate;
00148         } general;
00149         struct {
00150                 char *type;
00151                 char *device;
00152                 int samplerate;
00153                 int scale;
00154         } mouse;
00155         struct {
00156                 char *keyboard;
00157         } keyboard;
00158         struct {
00159                 char *type;
00160                 char *device;
00161                 char *brate;
00162         } irr;
00163         struct {
00164                 float horizsync_min;
00165                 float horizsync_max;
00166                 float vertrefresh_min;
00167                 float vertrefresh_max;
00168                 unsigned int pixclock;
00169                 unsigned int left_margin;
00170                 unsigned int right_margin;
00171                 unsigned int upper_margin;
00172                 unsigned int lower_margin;
00173                 unsigned int hsync_len;
00174                 unsigned int vsync_len;
00175                 unsigned int vmode;
00176         } monitor;
00177 };
00178 
00179 struct s_clients_s {
00180         int soc;
00181         int pid; /* parent id */
00182         int resizeable;
00183         int alwaysontop;
00184         S_MOUSE_CURSOR cursor;
00185         S_WINDOW type;
00186         s_rect_t buf;
00187         s_rect_t win;
00188         /* theme related */
00189         struct {
00190                 char *str;
00191                 int hy[2];
00192                 int hh[2];
00193                 s_image_t img[2];
00194         } title;
00195         s_rect_t form[FORM_MAX];
00196         s_rect_t button[BTNS_MAX];
00197 };
00198 
00199 struct s_server_s {
00200         int mode;
00201         int id[S_CLIENTS_MAX];
00202         int pri[S_CLIENTS_MAX];
00203         s_clients_t client[S_CLIENTS_MAX];
00204         s_cursor_t cursor;
00205         s_theme_t theme;
00206         s_window_t *window;
00207         s_video_driver_t *driver;
00208 
00209         int mouse_rangex[2];
00210         int mouse_rangey[2];
00211 
00212         s_handler_t *whndl[20]; /* window move & resize handlers        */
00213         int mh;                 /* mouse hint (search for server->mh)   */
00214         int ph;                 /* priority hint (search for server->ph */
00215         int rotate;
00216         int origin_w;
00217         int origin_h;
00218         unsigned char *origin_vbuf;
00219         int rotate_shm_id;
00220 };
00221 
00222 s_server_t *server;
00223 
00224 /* event.c */
00225 void s_server_event_parse_keyboard (s_video_input_data_keybd_t *keybd);
00226 int s_server_event_parse_mouse (s_video_input_data_mouse_t *mouse);
00227 int s_event_changed_ (s_window_t *window);
00228 void s_server_event_changed (void);
00229 
00230 /* id.c */
00231 int s_server_id_get (void);
00232 int s_server_id_find (int soc);
00233 void s_server_id_del (int id);
00234 
00235 /* irr.c */
00236 int s_video_helper_irr_init (s_server_conf_t *cfg);
00237 void s_video_helper_irr_uninit (void);
00238 int s_video_helper_irr_update (s_video_input_data_t *keybd);
00239 int s_server_irr_add_code (char *key, char *code);
00240 int s_server_irr_uninit (s_window_t *window, s_pollfd_t *pfd);
00241 int s_server_irr_update (s_window_t *window, s_pollfd_t *pfd);
00242 void s_server_irr_init (s_server_conf_t *cfg, s_video_input_t *irr);
00243 
00244 /* kbd.c */
00245 void s_server_kbd_switch_handler (s_window_t *window, s_event_t *event, s_handler_t *handler);
00246 void s_server_kbd_window_close_handler (s_window_t *window, s_event_t *event, s_handler_t *handler);
00247 void s_server_kbd_server_quit_handler (s_window_t *window, s_event_t *event, s_handler_t *handler);
00248 int s_server_kbd_update (s_window_t *window, s_pollfd_t *pfd);
00249 void s_server_kbd_init (s_server_conf_t *cfg, s_video_input_t *keybd);
00250 int s_server_kbd_uninit (s_window_t *window, s_pollfd_t *pfd);
00251 S_KEYCODE_CODE s_server_keyname_to_keycode (char *name);
00252 
00253 /* mouse.c */
00254 void s_server_cursor_uninit (void);
00255 void s_server_cursor_init (void);
00256 void s_server_cursor_image_set (int which, int c0, int c1, unsigned int *c);
00257 void s_server_cursor_matrix_add (void);
00258 void s_server_cursor_draw (void);
00259 void s_server_cursor_select (S_MOUSE_CURSOR c);
00260 void s_server_cursor_position (int x, int y);
00261 int s_mouse_getx (void);
00262 int s_mouse_gety (void);
00263 void s_mouse_setxrange (s_window_t *window, int a, int b);
00264 void s_mouse_setyrange (s_window_t *window, int a, int b);
00265 void s_server_mouse_setcursor (S_MOUSE_CURSOR c);
00266 void s_server_mouse_draw (void);
00267 int s_server_mouse_uninit (s_window_t *window, s_pollfd_t *pfd);
00268 int s_server_mouse_update (s_window_t *window, s_pollfd_t *pfd);
00269 void s_server_mouse_init (s_server_conf_t *cfg, s_video_input_t *mouse);
00270 
00271 /* priority.c */
00272 void s_server_pri_set (S_SURFACE_CHNGF flag, ...);
00273 void s_server_pri_set_ (S_SURFACE_CHNGF flag, int id, s_rect_t *c0, s_rect_t *c1);
00274 int s_server_id_pri (int id);
00275 int s_server_pri_id (int pri);
00276 void s_server_pri_del (int id);
00277 
00278 /* single.c */
00279 #if defined(SINGLE_APP)
00280 void * s_server_single_app_start (void *arg);
00281 void s_server_single_start (void);
00282 void s_server_single_stop (void);
00283 #endif
00284 
00285 /* socket.c */
00286 int s_server_socket_listen_new (int id);
00287 int s_server_socket_listen_display (int id);
00288 int s_server_socket_listen_configure (int id);
00289 int s_server_socket_listen_stream (int id);
00290 int s_server_socket_listen_close (int id);
00291 int s_server_socket_listen_show (int id);
00292 int s_server_socket_listen_event (int id);
00293 int s_server_socket_listen_window_close (int soc);
00294 int s_server_socket_listen_parse (int soc);
00295 int s_server_socket_client_in_f (s_window_t *window, s_pollfd_t *pfd);
00296 int s_server_socket_client_ierr_f (s_window_t *window, s_pollfd_t *pfd);
00297 int s_server_socket_listen_accept (int soc);
00298 int s_server_socket_request_event (int id);
00299 int s_server_socket_request_close (int id);
00300 int s_server_socket_request_expose (int id, s_rect_t *changed);
00301 int s_server_socket_request_desktop (int id);
00302 int s_server_socket_request (S_SOC_DATA req, int id, ...);
00303 int s_server_socket_uninit (s_window_t *window, s_pollfd_t *pfd);
00304 int s_server_socket_in_f (s_window_t *window, s_pollfd_t *pfd);
00305 int s_server_socket_ierr_f (s_window_t *window, s_pollfd_t *pfd);
00306 int s_server_socket_init_uds (void);
00307 int s_server_socket_init_tcp (void);
00308 int s_server_socket_init_pipe (void);
00309 void s_server_socket_init (void);
00310 
00311 /* surface.c */
00312 void s_server_surface_matrix_find (s_rect_t *coor, int *dm);
00313 void s_server_surface_matrix_add_this (int id, s_rect_t *coor, s_rect_t *mcoor, unsigned char *mat);
00314 void s_server_surface_matrix_add_id (int id, s_rect_t *coor);
00315 void s_server_surface_matrix_add (int id, s_rect_t *coor);
00316 void s_server_surface_matrix_del (int id);
00317 void s_server_surface_matrix_del_coor (s_rect_t *coor);
00318 void s_server_surface_clean (s_rect_t *coor);
00319 void s_server_surface_background (s_rect_t *coor);
00320 void s_server_surface_lock_real (void);
00321 void s_server_surface_refresh (void);
00322 
00323 /* window.c */
00324 void s_server_window_new (int id);
00325 void s_server_window_title (int id, char *title);
00326 void s_server_putbox (s_window_t *window, int id, s_rect_t *coor, int x, int y, s_image_t *img);
00327 void s_server_putmat (s_window_t *window, int id, s_rect_t *coor, int x, int y, s_image_t *img);
00328 int s_server_window_form_mat_verbose (int id);
00329 void s_server_window_form_mat (int v, int id, int mi, s_rect_t *coor, void (*func) (s_window_t *, int, s_rect_t *, int, int, s_image_t *));
00330 void s_server_window_form (int id, s_rect_t *_coor_);
00331 void s_server_window_matrix (int id, int mi, s_rect_t *_coor_);
00332 void s_server_window_matrix_add (int id, s_rect_t *_coor_);
00333 void s_server_window_matrix_del (int id, s_rect_t *_coor_);
00334 void s_server_window_calculate (int id);
00335 int s_server_window_is_parent_temp (int pid, int cid);
00336 int s_server_window_temp_parent (int cid);
00337 void s_server_window_close_temps (int id);
00338 void s_server_window_close_id (int id);
00339 void s_server_window_hide_id (int id);
00340 void s_server_window_close (s_window_t *window);
00341 void s_server_window_move_resize (int id, s_rect_t *new);
00342 void s_server_window_maximize (s_window_t *window);
00343 
00344 /* window_handler.c */
00345 void s_server_window_btn_resize_oh (s_window_t *window, s_event_t *event, s_handler_t *handler);
00346 void s_server_window_btn_resize_u_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00347 void s_server_window_btn_resize_ur_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00348 void s_server_window_btn_resize_r_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00349 void s_server_window_btn_resize_dr_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00350 void s_server_window_btn_resize_d_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00351 void s_server_window_btn_resize_dl_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00352 void s_server_window_btn_resize_l_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00353 void s_server_window_btn_resize_ul_o (s_window_t *window, s_event_t *event, s_handler_t *handler);
00354 void s_server_window_btn_menu_p (s_window_t *window, s_event_t *event, s_handler_t *handler);
00355 void s_server_window_btn_menu_oh (s_window_t *window, s_event_t *event, s_handler_t *handler);
00356 void s_server_window_btn_menu_ho (s_window_t *window, s_event_t *event, s_handler_t *handler);
00357 void s_server_window_btn_menu_r (s_window_t *window, s_event_t *event, s_handler_t *handler);
00358 void s_server_window_btn_hide_p (s_window_t *window, s_event_t *event, s_handler_t *handler);
00359 void s_server_window_btn_hide_oh (s_window_t *window, s_event_t *event, s_handler_t *handler);
00360 void s_server_window_btn_hide_ho (s_window_t *window, s_event_t *event, s_handler_t *handler);
00361 void s_server_window_btn_hide_r (s_window_t *window, s_event_t *event, s_handler_t *handler);
00362 void s_server_window_btn_maximize_p (s_window_t *window, s_event_t *event, s_handler_t *handler);
00363 void s_server_window_btn_maximize_oh (s_window_t *window, s_event_t *event, s_handler_t *handler);
00364 void s_server_window_btn_maximize_ho (s_window_t *window, s_event_t *event, s_handler_t *handler);
00365 void s_server_window_btn_maximize_r (s_window_t *window, s_event_t *event, s_handler_t *handler);
00366 void s_server_window_btn_close_p (s_window_t *window, s_event_t *event, s_handler_t *handler);
00367 void s_server_window_btn_close_oh (s_window_t *window, s_event_t *event, s_handler_t *handler);
00368 void s_server_window_btn_close_ho (s_window_t *window, s_event_t *event, s_handler_t *handler);
00369 void s_server_window_btn_close_r (s_window_t *window, s_event_t *event, s_handler_t *handler);
00370 void s_server_window_btn_move (s_window_t *window, s_event_t *event, s_handler_t *handler);
00371 void s_server_window_btn_resize_up (s_window_t *window, s_event_t *event, s_handler_t *handler);
00372 void s_server_window_btn_resize_up_left (s_window_t *window, s_event_t *event, s_handler_t *handler);
00373 void s_server_window_btn_resize_up_right (s_window_t *window, s_event_t *event, s_handler_t *handler);
00374 void s_server_window_btn_resize_left (s_window_t *window, s_event_t *event, s_handler_t *handler);
00375 void s_server_window_btn_resize_right (s_window_t *window, s_event_t *event, s_handler_t *handler);
00376 void s_server_window_btn_resize_down (s_window_t *window, s_event_t *event, s_handler_t *handler);
00377 void s_server_window_btn_resize_down_left (s_window_t *window, s_event_t *event, s_handler_t *handler);
00378 void s_server_window_btn_resize_down_right (s_window_t *window, s_event_t *event, s_handler_t *handler);
00379 void s_server_window_handlers_del_mouse (void);
00380 void s_server_window_handlers_add_mouse (int id);
00381 
00382 /* window_move_resize.c */
00383 void s_server_window_lines_draw_ (s_rect_t *coor, s_rect_t *rect, int c);
00384 void s_server_window_lines_draw (s_rect_t *lnew);
00385 void s_server_window_lines_clear_ (s_rect_t *told, s_rect_t *tnew);
00386 void s_server_window_lines_clear (s_rect_t *lold, s_rect_t *lnew);
00387 void s_server_window_while (s_rect_t *move, int flag);
00388 void s_server_window_finish (int id, s_rect_t *move);
00389 void s_server_window_move (s_window_t *window);
00390 void s_server_window_resize_up (s_window_t *window);
00391 void s_server_window_resize_up_left (s_window_t *window);
00392 void s_server_window_resize_left (s_window_t *window);
00393 void s_server_window_resize_down_left (s_window_t *window);
00394 void s_server_window_resize_down (s_window_t *window);
00395 void s_server_window_resize_down_right (s_window_t *window);
00396 void s_server_window_resize_right (s_window_t *window);
00397 void s_server_window_resize_up_right (s_window_t *window);
00398 
00399 /* theme.c */
00400 void s_server_theme_init (void);
00401 void s_server_theme_set (char *name);
00402 void s_server_theme_uninit (void);
00403 
00404 /* server.c */
00405 int s_server_cfg_check_digit (char *ptr, char *digits);
00406 char * s_server_cfg_token (char **ptr);
00407 int s_server_cfg (s_server_conf_t *config);
00408 int s_server_init (void);
00409 void s_server_quit (s_window_t *window);
00410 void s_server_uninit (void);
00411 void s_server_goto_back (void);
00412 void s_server_comefrom_back (void);
00413 void s_server_restore (void);
00414 void s_server_fullscreen (void);
00415 void s_server_surface_update (s_rect_t *coor);
00416 
00417 #endif /* S_SERVER_H_ */

Generated on Wed Dec 27 17:53:06 2006 for xynth-0.8.40 by  doxygen 1.4.7