kolibrios/programs/develop/libraries/libGUI/SRC/libGUI.h
andrew_programmer 66bf88987d bugfix of last SVN revision
git-svn-id: svn://kolibrios.org@1176 a494cfbc-eb01-0410-851d-a64ba20cac60
2009-09-24 22:01:05 +00:00

581 lines
18 KiB
C

/*
service structures of libGUI
*/
static DWORD ID;
//screen's parameters
#define BYTES_PER_PIXEL 4
//platform parameters
#define KOLIBRIOS 1
//#define DEBUG
//boolean constants
#define TRUE 0x1
#define FALSE 0x0
//maximum callbacks for one check of callback
#define MAX_CALLBACKS 255
/////////////////////////////////////////////////////////////////////////
// libGUI sysyem messages types
/////////////////////////////////////////////////////////////////////////
#define MESSAGE_FULL_REDRAW_ALL 1
#define MESSAGE_KEYS_EVENT 2
#define MESSAGE_SPECIALIZED 3
#define MESSAGE_SET_FOCUSE 4
#define MESSAGE_CHANGE_FOCUSE 5
#define MESSAGE_MOUSE_EVENT 6
#define MESSAGE_CHANGE_POSITION_EVENT 7
#define MESSAGE_CHANGESIZE_EVENT 8
#define MESSAGE_CALL_TIMER_EVENT 9
#define MESSAGE_FULL_REDRAW_ALL_WITH_FINITION 10
#define MESSAGE_SET_MAIN_PARENT 11
#define MESSAGE_DESTROY_CONTROL -1
/////////////////////////////////////////////////////////////////////////
// system flags of controls
/////////////////////////////////////////////////////////////////////////
#define FLAG_SHOW_CONTROL 0x1
#define FLAG_HIDE_CONTROL 0xfffe
#define FLAG_FOCUSE_INPUT_SUPPOROTE 0x2
#define FLAG_FOCUSE_INPUT_NOTSUPPOROTE 0xfffd
#define FLAG_FOCUSE_INPUT_ON 0x4
#define FLAG_FOCUSE_INPUT_OFF 0xfffb
#define FLAG_CONNECT_EVENT_ON 0x8
#define FLAG_CONNECT_EVENT_OFF 0xfff7
#define FLAG_MOUSE_BLOCKED_ON 0x10
#define FLAG_MOUSE_BLOCKED_OFF 0xffef
#define FLAG_GET_SPECIALIZED_MESSAGE_ON 0x20
#define FLAG_GET_SPECIALIZED_MESSAGE_OFF 0xffdf
/////////////////////////////////////////////////////////////////////////
// system flags of callback functions
/////////////////////////////////////////////////////////////////////////
#define FLAG_BLOCK_CALLBACK_ON 0x1
#define FLAG_BLOCK_CALLBACK_OFF 0xfe
/////////////////////////////////////////////////////////////////////////
// system flags of main wondow for timers
/////////////////////////////////////////////////////////////////////////
#define FLAG_TIMER_ON 0x1
#define FLAG_TIMER_OFF 0xfe
/////////////////////////////////////////////////////////////////////////
// system keys states
/////////////////////////////////////////////////////////////////////////
#define KEY_DOWN 16
#define KEY_UP 17
#define KEY_HOTKEY 18
/////////////////////////////////////////////////////////////////////////
// system mouse buttons states
/////////////////////////////////////////////////////////////////////////
#define MOUSE_LEFT_BUTTON_DOWN 19
#define MOUSE_LEFT_BUTTON_UP 20
#define MOUSE_RIGHT_BUTTON_DOWN 21
#define MOUSE_RIGHT_BUTTON_UP 22
#define MOUSE_MIDDLE_BUTTON_DOWN 23
#define MOUSE_MIDDLE_BUTTON_UP 24
#define MOUSE_4_BUTTON_DOWN 25
#define MOUSE_4_BUTTON_UP 26
#define MOUSE_5_BUTTON_DOWN 27
#define MOUSE_5_BUTTON_UP 28
/////////////////////////////////////////////////////////////////
// CONNECT EVENTS FOR CALLBACKs
/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define BUTTON_ENTER_EVENT 29
#define BUTTON_LEAVE_EVENT 30
#define BUTTON_PRESSED_EVENT 31
#define BUTTON_RELEASED_EVENT 32
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define SCROLLBAR_CHANGED_EVENT 33
////////////////////////////////////////////////////////////////
// connect events for main parent window
////////////////////////////////////////////////////////////////
#define DELETE_EVENT 36
////////////////////////////////////////////////////////////////////
//screen buffer parameters
////////////////////////////////////////////////////////////////////
#define DRAW_OUTPUT_SCREEN 0
#define DRAW_OUTPUT_BUFFER 1
static struct SCREEN
{
DWORD bits_per_pixel;
DWORD bytes_per_pixel;
DWORD draw_output;
int x;
int y;
int size_x;
int size_y;
int skin_height;
int display_size_x;
int display_size_y;
char *buffer;
}screen;
////////////////////////////////////////////////////////////////
// header of parent of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADERPARENT
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD **control_for_callback_function;
DWORD **callback_for_control_callback;
DWORD number_callbacks;
DWORD *global_active_control_for_keys;
DWORD *message;
DWORD *timer_bk;
DWORD *timer_fd;
DWORD number_timers_for_controls;
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *IDL_func;
DWORD *IDL_func_data;
};
#pragma pack(pop)
typedef struct HEADERPARENT parent_t;
////////////////////////////////////////////////////////////////
// header of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADER
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
};
#pragma pack(pop)
typedef struct HEADER header_t;
////////////////////////////////////////////////////////////////
// callback structure for callback function of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACK
{
DWORD *clb_bk;
DWORD *clb_fd;
DWORD *clb_control;
DWORD *func;
DWORD *func_data;
DWORD connect_event;
DWORD flags;
};
#pragma pack(pop)
typedef struct CALLBACK gui_callback_t;
////////////////////////////////////////////////////////////////
// timer
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct TIMER
{
DWORD *tmr_bk;
DWORD *tmr_fd;
DWORD *tmr_parent;
DWORD *func;
DWORD *func_data;
DWORD last_time;
DWORD time_tick;
DWORD flags;
};
#pragma pack(pop)
typedef struct TIMER gui_timer_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACKEVENT
{
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *calev_parent;
DWORD *func;
DWORD *func_data;
DWORD event_type;
};
#pragma pack(pop)
typedef struct CALLBACKEVENT gui_callbackevent_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct FINITION
{
DWORD x;
DWORD y;
DWORD sizex;
DWORD sizey;
char flags;
};
#pragma pack(pop)
typedef struct FINITION finition_t;
////////////////////////////////////////////////////////////////
// type of data - structure message
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct MESSAGE
{
DWORD type;
DWORD arg1;
DWORD arg2;
DWORD arg3;
DWORD arg4;
};
#pragma pack(pop)
typedef struct MESSAGE gui_message_t;
////////////////////////////////////////////////////////////////
// prototype of functions
////////////////////////////////////////////////////////////////
void (*ControlProc)(void *Control,gui_message_t *message);
void (*CallbackFunction)(header_t *Control,void *data);
void (*TimerCallbackFunction)(void *data);
void (*CallbackFunctionForEvent)(gui_message_t *message,void *data);
void (*IDL_Function)(void *data);
////////////////////////////////////////////////////////////////
// button
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlButton
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//button's data
unsigned char btn_flags; };
#pragma pack(pop)
typedef struct ControlButton gui_button_t;
// information for creating control Button
#pragma pack(push,1)
struct ButtonData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ButtonData gui_button_data_t;
////////////////////////////////////////////////////////////////
// scroller
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrollBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scroll bar's data
float ruller_size;
float ruller_pos;
float ruller_step;
unsigned char scb_flags;
};
#pragma pack(pop)
typedef struct ControlScrollBar gui_scroll_bar_t;
#pragma pack(push,1)
struct ScrollBarData
{
int x;
int y;
int width;
int height;
float ruller_size;
float ruller_pos;
float ruller_step;
};
#pragma pack(pop)
typedef struct ScrollBarData gui_scroll_bar_data_t;
////////////////////////////////////////////////////////////////
// progressbar
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlProgressBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//progress bar's data
float progress;
unsigned char prb_flags;
};
#pragma pack(pop)
typedef struct ControlProgressBar gui_progress_bar_t;
#pragma pack(push,1)
struct ProgressBarData
{
int x;
int y;
int width;
int height;
float progress;
};
#pragma pack(pop)
typedef struct ProgressBarData gui_progress_bar_data_t;
////////////////////////////////////////////////////////////////
// scrolled window
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrolledWindow
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scrolled windows's data
DWORD virtual_x;
DWORD virtual_y;
DWORD virtual_sizex;
DWORD virtual_sizey;
DWORD *virtual_controls_x;
DWORD *virtual_controls_y;
DWORD number_virtual_controls;
DWORD scroll_arrea_sizex;
DWORD scroll_arrea_sizey;
DWORD *horizontal_scroll;
DWORD *vertical_scroll;
unsigned char scw_flags;
};
#pragma pack(pop)
typedef struct ControlScrolledWindow gui_scrolled_window_t;
#pragma pack(push,1)
struct ScrolledWindowData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ScrolledWindowData gui_scrolled_window_data_t;
////////////////////////////////////////////////////////////////
// image
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlImage
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
char bits_per_pixel;
char bytes_per_pixel;
char *img;
};
#pragma pack(pop)
typedef struct ControlImage gui_image_t;
#pragma pack(push,1)
struct ImageData
{
int x;
int y;
int width;
int height;
char bits_per_pixel;
};
#pragma pack(pop)
typedef struct ImageData gui_image_data_t;
////////////////////////////////////////////////////////////////
// text
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlText
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD *font;
DWORD color;
DWORD background_color;
char *text;
BYTE txt_flags;
};
#pragma pack(pop)
typedef struct ControlText gui_text_t;
#pragma pack(push,1)
struct TextData
{
int x;
int y;
DWORD *font;
DWORD color;
DWORD background_color;
char background;
char *text;
};
#pragma pack(pop)
typedef struct TextData gui_text_data_t;
/////////////////////////////////////////////////////////////////////////////
// prototips of some service functions
/////////////////////////////////////////////////////////////////////////////
char CheckCrossRectangles(int x1,int y1,int sizex1,int sizey1,int x2,int y2,int sizex2,int sizey2);