xvig.c.save

来自「gsac程序包」· SAVE 代码 · 共 1,228 行 · 第 1/3 页

SAVE
1,228
字号
      case ButtonPress:          /* fprintf(stderr,"INFO (XviG) : ButtonPress event ...\n"); */          if (cursor_on)          {            if (cursor_drawn)            {              XSetFunction(display, gc, GXxor);                XSetForeground(display, gc, xhair_color);		draw_cursor( curstype,  prev_cursor_x,  prev_cursor_y, 			border+dc_ClipLeft, Ldc_top-border-dc_ClipTop, 			border+dc_ClipRight, Ldc_top-border-dc_ClipBottom);		              cursor_drawn = False;            }            cursor_on = False;          }          /* do bounds check */              prev_cursor_x = event.xmotion.x;              prev_cursor_y = event.xmotion.y;		if(prev_cursor_x < dc_left+border)			prev_cursor_x = dc_left+border;		if(prev_cursor_x > dc_right+border)			prev_cursor_x = dc_right+border;		if(prev_cursor_y > Ldc_top - border )			prev_cursor_y = Ldc_top - border ;		if(prev_cursor_y < border )			prev_cursor_y = border;		event.xmotion.x = prev_cursor_x;		event.xmotion.y = prev_cursor_y;			cur_x = event.xmotion.x;	cur_y = event.xmotion.y;          if (!XSendEvent(display, dummy_window, False, NoEventMask, &event))            fprintf(stderr,                 "ERROR (XviG) : Cannot send KeyPress or ButtonPress event.\n");	if(DoGrabKeyboard){		XUngrabKeyboard(display,CurrentTime);		DoGrabKeyboard = NO;	}          XSetWindowBorderPixmap(display, window, border_noselect);          if (sense_kbd_save)          {            sense_kbd_set = True;            XSelectInput(display, window, KeyPressMask | ExposureMask | VisibilityChangeMask);            sense_kbd = False;          }          else            XSelectInput(display, window, ExposureMask | VisibilityChangeMask);          break;      case MotionNotify:          /* fprintf(stderr,"INFO (XviG) : MotionNotify event ...\n"); */          while (XCheckMaskEvent(display, PointerMotionMask, &event));          if (cursor_on)          {            XSetFunction(display, gc, GXxor);              XSetForeground(display, gc, xhair_color);              if (cursor_drawn)              {		draw_cursor( curstype,  prev_cursor_x,  prev_cursor_y, 			border+dc_ClipLeft, Ldc_top-border-dc_ClipTop, 			border+dc_ClipRight, Ldc_top-border-dc_ClipBottom);              }              prev_cursor_x = event.xmotion.x;              prev_cursor_y = event.xmotion.y;		if(prev_cursor_x < dc_left+border)			prev_cursor_x = dc_left+border;		if(prev_cursor_x > dc_right+border)			prev_cursor_x = dc_right+border;		if(prev_cursor_y > Ldc_top - border )			prev_cursor_y = Ldc_top - border ;		if(prev_cursor_y < border )			prev_cursor_y = border;		if(inclipregion(prev_cursor_x,prev_cursor_y)){              		XDefineCursor(display, window, empty_cursor);			curstype = user_curstype;		} else			curstype = 0;		draw_cursor( curstype,  prev_cursor_x,  prev_cursor_y, 			border+dc_ClipLeft, Ldc_top-border-dc_ClipTop, 			border+dc_ClipRight, Ldc_top-border-dc_ClipBottom);            cursor_drawn = True;          }          break;      case VisibilityNotify:	  /*	fprintf(stderr,"INFO (XviG) : VisibilityNotify event ...\n"); 	fprintf(stderr,"INFO (XviG) : Visivilitystate %d\n",event.xvisibility.state);	*/	if(event.xvisibility.state == VisibilityPartiallyObscured){		/* fprintf(stderr,"VisibilityPartiallyObscured\n"); */		focus = False;		keyboard_active = False;		XUngrabKeyboard(display,CurrentTime);	} else if(event.xvisibility.state == VisibilityFullyObscured){		/* fprintf(stderr,"VisibilityFullyObscured\n"); */		focus = False;		keyboard_active = False;		XUngrabKeyboard(display,CurrentTime);	} else if(event.xvisibility.state == VisibilityUnobscured){		/* fprintf(stderr,"VisibilityUnobscured\n"); */		focus = True;		keyboard_active = True;		XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);	}          break;      case Expose:          /* 	fprintf(stderr,"INFO (XviG) : Expose event ...\n"); 	*/          if (event.xexpose.count == 0)          {            Refresh_Screen();            cursor_drawn = False;            XGetGeometry(display, window, &root_rtn, &x_rtn, &y_rtn,                         &xhair_width, &xhair_height, &bwidth_rtn, &depth_rtn);          }          break;      case ClientMessage:          /* fprintf(stderr,"INFO (XviG) : ClientMessage event ...\n"); */          if (event.xclient.message_type == MESSAGE_KEY_atom)          {DoGrabKeyboard = YES;if(keyboard_active)XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);            XSetWindowBorderPixmap(display, window, border_select);            if (cursor_type)            {              XSelectInput(display, window,  EnterWindowMask | LeaveWindowMask |                           KeyPressMask | PointerMotionMask | ExposureMask | VisibilityChangeMask);              XDefineCursor(display, window, empty_cursor);              cursor_on = True;            }            else            {              XSelectInput(display, window, KeyPressMask | ExposureMask | VisibilityChangeMask);              cursor_on = False;            }            cursor_drawn = False;            sense_kbd_set = False;            break;          }          if (event.xclient.message_type == MESSAGE_BUTTON_atom)          {            XSetWindowBorderPixmap(display, window, border_select);            if (cursor_type)            {              XSelectInput(display, window, EnterWindowMask | LeaveWindowMask |                           ButtonPressMask | PointerMotionMask | ExposureMask | VisibilityChangeMask);              XDefineCursor(display, window, empty_cursor);              cursor_on = True;            }            else            {              XSelectInput(display, window, ButtonPressMask | ExposureMask | VisibilityChangeMask);              cursor_on = False;            }            cursor_drawn = False;            break;          }          if (event.xclient.message_type == MESSAGE_KEY_BUTTON_atom)          {DoGrabKeyboard = YES;if(keyboard_active)XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);            XSetWindowBorderPixmap(display, window, border_select);            if (cursor_type)            {              XSelectInput(display, window,  EnterWindowMask | LeaveWindowMask |                           KeyPressMask | ButtonPressMask |                           PointerMotionMask | ExposureMask | VisibilityChangeMask);              XDefineCursor(display, window, empty_cursor);              cursor_on = True;            }            else            {              XSelectInput(display, window,  EnterWindowMask | LeaveWindowMask |                           KeyPressMask | ButtonPressMask | ExposureMask | VisibilityChangeMask);              cursor_on = False;            }            cursor_drawn = False;            sense_kbd_set = False;            break;          }          if (event.xclient.message_type == MESSAGE_SIZE_atom)          {            Window_Size();            break;          }          if (event.xclient.message_type == MESSAGE_SENSEKBD_ON_atom)          {            sense_kbd_set = sense_kbd_save = True;            sense_char = event.xclient.data.b[0];            XSelectInput(display, window, KeyPressMask | ExposureMask | VisibilityChangeMask);            sense_kbd = False;            break;          }          if (event.xclient.message_type == MESSAGE_SENSEKBD_OFF_atom)          {            sense_kbd_set = sense_kbd_save = False;            XSelectInput(display, window, ExposureMask | VisibilityChangeMask);            sense_kbd = False;            break;          }          if (event.xclient.message_type == MESSAGE_SENSEKBD_atom)          {            event.xclient.message_type = MESSAGE_SENSEKBD_atom;            event.xclient.format = 8;            event.xclient.data.b[0] = sense_kbd ? DATA_SENSEKBD_YES                                                : DATA_SENSEKBD_NO;            event.type = ClientMessage;            if (!XSendEvent(display, dummy_window, False, NoEventMask, &event))              fprintf(stderr,                     "ERROR (XviG) : Cannot send ClientMessage 'sense_kbd'.\n");            sense_kbd = False;            break;          }          if (event.xclient.message_type == MESSAGE_CURSOR_atom)          {            cursor_type = event.xclient.data.l[0];            if (cursor_type == DATA_CURSOR_ARROW) {		XDefineCursor(display, window, arrow_cursor);              user_curstype = 0;		old_curstype = user_curstype ;            } else if (cursor_type == DATA_CURSOR_XORARROW) {              user_curstype = 0;              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 1;		old_curstype = user_curstype ;            } else if (cursor_type == DATA_CURSOR_XHAIR) {              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 2;		old_curstype = user_curstype ;            } else if (cursor_type == DATA_CURSOR_HYPERBOLA) {              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 8;		old_curstype = user_curstype ;            } else if (cursor_type == DATA_CURSOR_PLUS) {              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 3;		old_curstype = user_curstype ;            } else if (cursor_type == DATA_CURSOR_BOX ) {              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 4;            } else if (cursor_type == DATA_CURSOR_RUBBER ) {              xhair_color = (unsigned long) event.xclient.data.l[1];              XDefineCursor(display, window, empty_cursor);              user_curstype = 5;            } else if (cursor_type == DATA_CURSOR_OFF ) {              user_curstype = old_curstype;		cur_x = -1 ; cur_y = -1 ;	    } else if (cursor_type != DATA_CURSOR_ARROW) {              cursor_width = (unsigned int) event.xclient.data.l[1];              cursor_height = (unsigned int) event.xclient.data.l[2];              cursor_hot_x = (int) event.xclient.data.l[3];              cursor_hot_y = (int) event.xclient.data.l[4];              user_curstype = 7;            }/*	NOTE UNTIL 00 12 06 this line was used - this was the wrong code for	24 bit color --- does it work for 8 bit LINUX GNOME?            xhair_color = 1;*//*            XSetFunction(display, gc, GXxor);              XSetForeground(display, gc, xhair_color);		if(inclipregion(prev_cursor_x,prev_cursor_y)){              		XDefineCursor(display, window, empty_cursor);			curstype = user_curstype;		} else			curstype = 0;		draw_cursor( curstype,  prev_cursor_x,  prev_cursor_y, 			border+dc_ClipLeft, Ldc_top-border-dc_ClipTop, 			border+dc_ClipRight, Ldc_top-border-dc_ClipBottom);              cursor_on = True;              cursor_drawn = True;*/              cursor_type = 1;            break;          }          if (event.xclient.message_type == MESSAGE_QUIT_atom)          {            do_event_loop = False;            break;          }          if (event.xclient.message_type == wm_protocols_atom)          {            if ((Atom) event.xclient.data.l[0] != wm_delete_window_atom)              fprintf(stderr,"WARNING (XviG) : Unknown Protocols message received.\n");            /*            else              fprintf(stderr,"INFO (XviG) : WM_DELETE_WINDOW received.\n");            */            break;          }          /* begin rbh extension */          if (event.xclient.message_type == MESSAGE_BOUNDS_atom)          {                border = event.xclient.data.l[0];                title  = event.xclient.data.l[1];		dc_right = Ldc_right - border - border;        	dc_top = Ldc_top -  border - border - title;            break;          }          if (event.xclient.message_type == MESSAGE_CLIP_atom)          {        	dc_ClipLeft	= event.xclient.data.l[0];        	dc_ClipBottom	= event.xclient.data.l[1];        	dc_ClipRight	= event.xclient.data.l[2];        	dc_ClipTop	= event.xclient.data.l[3];            break;          }          if (event.xclient.message_type == MESSAGE_REVERSE_atom)          {		Refresh_Screen();		printf("REVERSE %ld \n",			event.xclient.data.l[0]);            break;          }          if (event.xclient.message_type == MESSAGE_TOGRAY_atom)          {		printf("TOGRAY %ld \n",			event.xclient.data.l[0]);            break;          }          if (event.xclient.message_type == MESSAGE_LCMAP_SIZE_atom)          {		int cmapsize;        	cmapsize	= event.xclient.data.l[0];/*printf("LCMAP_SIZE %d\n",cmapsize);*/		if(color != (XColor *)NULL)			free(color);		color = (XColor *) malloc(cmapsize * sizeof(XColor));		colormap = DefaultColormap(display, screen_nr);            break;          }          if (event.xclient.message_type == MESSAGE_LCMAP_ENTRY_atom)          {		int i;        	i	= event.xclient.data.l[0];		color[i].red    =  257*event.xclient.data.l[1];		color[i].green  =  257*event.xclient.data.l[2];		color[i].blue   =  257*event.xclient.data.l[3];		color[i].flags = DoRed | DoGreen | DoBlue;		if(!XAllocColor(display, colormap, &color[i]))printf("Cannot allocate the color\n");            break;          }          if (event.xclient.message_type == MESSAGE_LCMAP_RESET_atom)          {/*printf("LCMAP_RESET\n");*/XSetWindowColormap(display,window,colormap);            break;          }          /* end   rbh extension */          /*          fprintf(stderr,"WARNING (XviG) : Unknown ClientMessage received .....\n");          */      case EnterNotify:/*printf("EnterNotify\n");*/		(keyboard_active = True);;if(keyboard_active)XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);elseXUngrabKeyboard(display,CurrentTime);		break;      case LeaveNotify:/*printf("LeaveNotify\n");*/			 (keyboard_active = False);if(keyboard_active)XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);elseXUngrabKeyboard(display,CurrentTime);		break;      case FocusIn:printf("FocusIn\n");/**/		focus = True;		keyboard_active = True;XGrabKeyboard(display,window,False,GrabModeAsync,GrabModeAsync,CurrentTime);		break;      case FocusOut:printf("FocusOut\n");/**/		focus = False;		keyboard_active = False;	XUngrabKeyboard(display,CurrentTime);		break;      default: ;    }  }  /*  -- Quit .....

⌨️ 快捷键说明

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