Subversion Repositories Kolibri OS

Rev

Rev 5372 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #ifndef __CONTROL_H__
  2. #define __CONTROL_H_
  3.  
  4. #include <pixlib2.h>
  5. #include "link.h"
  6.  
  7. typedef struct
  8. {
  9.   int  l;
  10.   int  t;
  11.   int  r;
  12.   int  b;
  13. }rect_t;
  14.  
  15. typedef struct ctx
  16. {
  17.   bitmap_t *pixmap;
  18.   int      offset_x;
  19.   int      offset_y;
  20. }ctx_t;
  21.  
  22. ctx_t *get_window_ctx();
  23.  
  24. typedef struct tag_control  ctrl_t;
  25.  
  26. typedef int (handler_t)(ctrl_t*, uint32_t, uint32_t, uint32_t);
  27.  
  28. struct tag_control
  29. {
  30.     link_t     link;
  31.     link_t     child;
  32.  
  33.     handler_t *handler;
  34.     ctrl_t    *parent;
  35.  
  36.     ctx_t     *ctx;
  37.     uint32_t   id;
  38.     uint32_t   style;
  39.  
  40.     rect_t     rc;
  41.     int        w;
  42.     int        h;
  43. };
  44.  
  45.  
  46. typedef struct timer
  47. {
  48.     link_t       link;
  49.     ctrl_t      *ctrl;
  50.     uint32_t     exp_time;            /* expiration time               */
  51.     uint32_t     tmr_arg;             /* random argument               */
  52. } ostimer_t;
  53.  
  54.  
  55. typedef struct
  56. {
  57.     ctrl_t  ctrl;
  58.  
  59.     uint32_t     state;
  60.     ostimer_t    timer;
  61.  
  62.     char        *caption;
  63.     int          capt_len;
  64.  
  65.     void        *img_default;
  66.     void        *img_hilite;
  67.     void        *img_pressed;
  68. }button_t;
  69.  
  70. typedef struct
  71. {
  72.     ctrl_t  ctrl;
  73.     float   min;
  74.     float   max;
  75.     float   current;
  76.     int     pos;
  77. }progress_t;
  78.  
  79. typedef struct
  80. {
  81.     ctrl_t  ctrl;
  82.     int     min;
  83.     int     max;
  84.     int     current;
  85.     int     pos;
  86.     int     vol;
  87.     int     visible;
  88.     void    *img_level;
  89. }level_t;
  90.  
  91. typedef struct
  92. {
  93.     ctrl_t  ctrl;
  94.     int     min;
  95.     int     max;
  96.     int     current;
  97.     int     pos;
  98.     int     mode;
  99.     void    *img_slider;
  100.     void    *img_vol_slider;
  101. }slider_t;
  102.  
  103. typedef struct
  104. {
  105.     link_t       link;
  106.     link_t       child;
  107.  
  108.     handler_t   *handler;
  109.     ctrl_t      *parent;
  110.  
  111.     ctx_t       *ctx;
  112.     uint32_t     id;
  113.     uint32_t     style;
  114.  
  115.     rect_t       rc;
  116.     int          w;
  117.     int          h;
  118.  
  119.     uint32_t     state;
  120.  
  121.     int          pix_range;
  122.  
  123.     int          min_range;
  124.     int          max_range;
  125.     int          page_size;
  126.     int          thumb_pos;
  127.  
  128.     rect_t       tl_rect;
  129.     rect_t       br_rect;
  130.  
  131.     button_t    *btn_up;
  132.     button_t    *btn_down;
  133.     button_t    *thumb;
  134. }scroller_t;
  135.  
  136. #define  bPressed              2
  137. #define  bHighlight            1
  138.  
  139. #define  MSG_PAINT         0x001
  140. #define  MSG_KEY           0x002
  141. #define  MSG_BUTTON        0x003
  142. #define  MSG_DRAW_CLIENT   0x004
  143.  
  144. #define  MSG_LBTNDOWN      0x010
  145. #define  MSG_LBTNUP        0x011
  146. #define  MSG_RBTNDOWN      0x012
  147. #define  MSG_RBTNUP        0x013
  148. #define  MSG_MBTNDOWN      0x014
  149. #define  MSG_MBTNUP        0x015
  150. #define  MSG_WHEELDOWN     0x016
  151. #define  MSG_WHEELUP       0x017
  152.  
  153. #define  MSG_LBTNDBLCLK    0x018
  154.  
  155. #define  MSG_MOUSEMOVE     0x019
  156. #define  MSG_MOUSEENTER    0x01A
  157. #define  MSG_MOUSELEAVE    0x01B
  158.  
  159. #define  MSG_SIZE          0x020
  160.  
  161. #define  MSG_COMMAND       0x030
  162. #define  MSG_TIMER         0x031
  163.  
  164. #define  LBN_DBLCLK        0x100
  165. #define  LBOX_READDIR      0x100
  166. #define  LBOX_GETFILENAME  0x101
  167.  
  168. #define  PRG_PROGRESS      0x102
  169.  
  170. #define  ID_CLOSE              1
  171. #define  ID_MINIMIZE           2
  172. #define  ID_FULLSCREEN         3
  173.  
  174. #define  ID_SCROLLER_UP       10
  175. #define  ID_SCROLLER_DOWN     11
  176. #define  ID_SCROLLER_THUMB    12
  177.  
  178. #define  send_message( ctrl, msg, arg1, arg2)              \
  179.                 (ctrl)->handler( (ctrl_t*)(ctrl),          \
  180.                 (uint32_t)(msg), (uint32_t)(arg1), (uint32_t)(arg2))
  181.  
  182. static inline handler_t *subclass_control(ctrl_t *ctrl, handler_t *handler)
  183. {
  184.     handler_t *old = ctrl->handler;
  185.     ctrl->handler = handler;
  186.     return old;
  187. };
  188.  
  189. //int inline send_message(ctrl_t *ctrl, u32_t msg, u32_t arg1, u32_t arg2)
  190. //{
  191. //  return ctrl->handler(ctrl, msg, arg1, arg2);
  192. //};
  193.  
  194. static inline int pt_in_rect(rect_t *rc, int x, int y)
  195. {
  196.     if( (x >= rc->l) && (x <  rc->r) &&
  197.         (y >= rc->t) && (y <  rc->b) )
  198.         return 1;
  199.     return 0;
  200. };
  201.  
  202. ctrl_t *get_child(ctrl_t *ctrl, int x, int y);
  203.  
  204. ctrl_t *capture_mouse(ctrl_t *newm);
  205.  
  206. void blit_raw(ctx_t *ctx, void *raw, int x, int y, int w, int h, int pitch);
  207.  
  208. #define __ALIGN_MASK(x,mask)  (((x)+(mask))&~(mask))
  209. #define ALIGN(x,a)            __ALIGN_MASK(x,(typeof(x))(a)-1)
  210.  
  211.  
  212. #endif
  213.