window_handler.c

来自「CS架构的多平台的GUI系统」· C语言 代码 · 共 478 行 · 第 1/2 页

C
478
字号
/***************************************************************************    begin                : Mon Aug 9 2004    copyright            : (C) 2004 - 2005 by Alper Akcan    email                : distchx@yahoo.com ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU Lesser General Public License as        * *   published by the Free Software Foundation; either version 2.1 of the  * *   License, or (at your option) any later version.                       * *                                                                         * ***************************************************************************/#include "../lib/xynth_.h"#include "server.h"#define s_server_window_btn_y(a)\	int id = s_server_pri_id(0);\	if (id < 0) {\		return;\	}\	if (id == server->cursor.xyid) {\		s_server_mouse_setcursor(a);\	} else {\		s_server_mouse_setcursor(MOUSE_CURSOR_ARROW);\	}void s_server_window_btn_resize_oh (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_mouse_setcursor(MOUSE_CURSOR_ARROW);}void s_server_window_btn_resize_u_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEV);}void s_server_window_btn_resize_ur_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZES);}void s_server_window_btn_resize_r_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEH);}void s_server_window_btn_resize_dr_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEB);}void s_server_window_btn_resize_d_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEV);}void s_server_window_btn_resize_dl_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZES);}void s_server_window_btn_resize_l_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEH);}void s_server_window_btn_resize_ul_o (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_y(MOUSE_CURSOR_SIZEB);}#define s_server_window_btn_x(a, b)\	int id;\	s_rect_t coor;\	id = s_server_pri_id(0);\	if (id < 0) {\		return;\	}\	coor.x = server->client[id].button[b].x;\	coor.y = server->client[id].button[b].y;\	coor.w = server->client[id].button[b].w;\	coor.h = server->client[id].button[b].h;\	s_server_putbox(window, id, &coor, coor.x, coor.y, &server->theme.button[a][b]);\	s_server_surface_update(&coor);#define s_server_window_btn_x_(a, b)\	if ((event->mouse->px >= handler->mouse.x) &&\	    (event->mouse->px <= (handler->mouse.x + handler->mouse.w)) &&\	    (event->mouse->py >= handler->mouse.y) &&\	    (event->mouse->py <= (handler->mouse.y + handler->mouse.h))) {\		s_server_window_btn_x(a, b);\	}void s_server_window_btn_menu_p (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(2, MENU);}void s_server_window_btn_menu_ho (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x_(2, MENU);}void s_server_window_btn_menu_oh (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(1, MENU);}void s_server_window_btn_menu_r (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_menu_oh(window, event, handler);}void s_server_window_btn_hide_p (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(2, HIDE);}void s_server_window_btn_hide_ho (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x_(2, HIDE);}void s_server_window_btn_hide_oh (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(1, HIDE);}void s_server_window_btn_hide_r (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_hide_oh(window, event, handler);}void s_server_window_btn_maximize_p (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(2, MAXIMIZE);}void s_server_window_btn_maximize_ho (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x_(2, MAXIMIZE);}void s_server_window_btn_maximize_oh (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(1, MAXIMIZE);}void s_server_window_btn_maximize_r (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_maximize_oh(window, event, handler);	s_server_window_maximize(window);}void s_server_window_btn_close_p (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(2, CLOSE);}void s_server_window_btn_close_ho (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x_(2, CLOSE);}void s_server_window_btn_close_oh (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_btn_x(1, CLOSE);}void s_server_window_btn_close_r (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_close(window);}void s_server_window_btn_move (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_move(window);}void s_server_window_btn_resize_up (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_up(window);}void s_server_window_btn_resize_up_left (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_up_left(window);}void s_server_window_btn_resize_up_right (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_up_right(window);}void s_server_window_btn_resize_left (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_left(window);}void s_server_window_btn_resize_right (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_right(window);}void s_server_window_btn_resize_down (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_down(window);}void s_server_window_btn_resize_down_left (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_down_left(window);}void s_server_window_btn_resize_down_right (s_window_t *window, s_event_t *event, s_handler_t *handler){	s_server_window_resize_down_right(window);}void s_server_window_handlers_del_mouse (void){	int i;	for (i = 0; i < 20; i++) {		s_handler_del(server->window, server->whndl[i]);	}}void s_server_window_handlers_add_mouse (int id){        int v = 1;	s_handler_t *hndl;	/* menu */        hndl = server->whndl[0];        hndl->type = MOUSE_HANDLER;	hndl->mouse.x = server->client[id].button[MENU].x + server->theme.button[v][MENU].handler.x;	hndl->mouse.y = server->client[id].button[MENU].y + server->theme.button[v][MENU].handler.y;	hndl->mouse.w = server->theme.button[v][MENU].handler.w;	hndl->mouse.h = server->theme.button[v][MENU].handler.h;	hndl->mouse.button = MOUSE_LEFTBUTTON;	hndl->mouse.p = s_server_window_btn_menu_p;	hndl->mouse.r = s_server_window_btn_menu_r;	hndl->mouse.oh = s_server_window_btn_menu_oh;	hndl->mouse.ho = s_server_window_btn_menu_ho;	hndl->mouse.hoh = s_server_window_btn_menu_oh;	s_handler_add(server->window, hndl);        /* hide */        hndl = server->whndl[1];        hndl->type = MOUSE_HANDLER;	hndl->mouse.x = server->client[id].button[HIDE].x + server->theme.button[v][HIDE].handler.x;	hndl->mouse.y = server->client[id].button[HIDE].y + server->theme.button[v][HIDE].handler.y;	hndl->mouse.w = server->theme.button[v][HIDE].handler.w;	hndl->mouse.h = server->theme.button[v][HIDE].handler.h;	hndl->mouse.button = MOUSE_LEFTBUTTON;	hndl->mouse.p = s_server_window_btn_hide_p;	hndl->mouse.r = s_server_window_btn_hide_r;	hndl->mouse.oh = s_server_window_btn_hide_oh;	hndl->mouse.ho = s_server_window_btn_hide_ho;	hndl->mouse.hoh = s_server_window_btn_hide_oh;	s_handler_add(server->window, hndl);        /* close */        hndl = server->whndl[2];        hndl->type = MOUSE_HANDLER;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?