📄 xwinplt.c
字号:
if (first_time) { XSelectInput (display, MCWindow, ButtonPressMask | ButtonReleaseMask | ExposureMask | PointerMotionMask); first_time = 0; } XQueryPointer (display, MCWindow, &root, &child, &root_x, &root_y, &x_start, &win_y, &mask); save_start = new_start = beginplot + (points * (x_start - box_start) / (box_end - box_start)); LeftMark_x = mark_x = x_start; if (debug & 0x4) fprintf (stderr, "x_start = %d, win_y = %d; new_start = %d\n", x_start, win_y, new_start); draw_line (display, screen, MCWindow, LeftMark_x, box_top, LeftMark_x, box_bottom);/* draw_line (display, screen, MCWindow, x_start, box_top, x_start, box_bottom);*/ lines_drawn = 0; sprintf (RangeString, "Range selected: %d ", new_start); s_imagetext (RangeString, 5, 40); if (debug & 0x1) fprintf (stderr, "%s: tracking the mouse . . .\n", Module); Button1Down = 1; while (Button1Down) { /* get rid of any other motion events still on queue */ while (XCheckMaskEvent (display, PointerMotionMask, &report)) ; if (lines_drawn) { undraw_line (display, screen, MCWindow, x_start, box_top, x_start, box_bottom); /* lines_drawn = 0; */ } XQueryPointer (display, MCWindow, &root, &child, &root_x, &root_y, &x_start, &win_y, &mask); new_start = beginplot + (points * (x_start - box_start) / (box_end - box_start)); if (x_start >= box_start && x_start <= box_end) { draw_line (display, screen, MCWindow, x_start, box_top, x_start, box_bottom); lines_drawn = 1; } RightMark_x = mark_x = x_start; sprintf (RangeString, "Range selected: %d to %d", save_start, new_start); s_imagetext (RangeString, 5, 40); if (debug & 0x1) fprintf (stderr, "%s: Range selected: %d to %d\n", Module, save_start, new_start); XMaskEvent (display, ButtonReleaseMask | PointerMotionMask, &report); /* XtNextEvent (&report); */ if (report.type == ButtonRelease) break; } /* end while */ lines_drawn = 0; new_nan = new_start; new_start = save_start; { Arg arg[1]; Cardinal i; /* Clear the "Select/Range Mode" toggle switch */ i = 0; XtSetArg (arg[i], XtNset, False); i++; XtSetValues ((Widget) SRW, arg, (Cardinal) i); OptionSelected = NONE; RangeShown = 1; /* Display "Clear Range" PushButton */ i = 0; XtSetArg (arg[i], XtNlabel, (caddr_t) "Clear Range"); i++; XtSetValues ((Widget) RRW, arg, (Cardinal) i); } /* Load in default mouse pointer */ MousePointer = XCreateFontCursor (display, XC_top_left_arrow); XDefineCursor (display, MCWindow, MousePointer);}void EndRange(widget, closure, callData) Widget widget; /* unused */ caddr_t closure; /* unused */ caddr_t callData; /* unused */{ if (OptionSelected != SELECT_RANGE) return; fprintf (stderr, "End range selected\n");}void DrawPlot(widget, closure, callData) Widget widget; /* unused */ caddr_t closure; /* unused */ caddr_t callData; /* unused */{ char *Module = "DrawPlot"; XGCValues values; XtGCMask valuemask = 0; static int count = 0; if (debug & 0x1) fprintf (stderr, "%s: Number of times WorkSpace Widget exposed: %d\n", Module, ++count); display = XtDisplay (widget); MCWindow = XtWindow (widget); /* Load in left arrow as default mouse pointer */ MousePointer = XCreateFontCursor (display, XC_top_left_arrow); XDefineCursor (display, MCWindow, MousePointer); if (debug & 512) fprintf (stderr, "%s: create Graphics Context\n", Module); mc_gc = XtGetGC (widget, valuemask, &values); repaint_canvas ();}init_device(){ char *Module = "xmcd";/* XGCValues values; unsigned long valuemask = 0;*/ int MCWinWidth, MCWinHeight; Cardinal i; Arg arg[10]; static XtCallbackRec Quitcallbacks[] = { { Quit, NULL}, {NULL, NULL} }; static XtCallbackRec SRcallbacks[] = { { SelectRange, NULL}, {NULL, NULL} }; static XtCallbackRec PRcallbacks[] = { { PlayRange, NULL}, {NULL, NULL} }; static XtCallbackRec Refreshcallbacks[] = { { Refresh, NULL}, {NULL, NULL} }; static XtCallbackRec ZoomIncallbacks[] = { { ZoomIn, NULL}, {NULL, NULL} }; static XtCallbackRec ZoomOutcallbacks[] = { { ZoomOut, NULL}, {NULL, NULL} }; static XtCallbackRec Savecallbacks[] = { { SaveRange, NULL}, {NULL, NULL} }; static XtCallbackRec ERcallbacks[] = { { ReselectRange, NULL}, {NULL, NULL} }; static XtCallbackRec WSexposecallbacks[] = { { DrawPlot, NULL}, {NULL, NULL} }; static XtCallbackRec WSselectcallbacks[] = { { StartRange, NULL}, {NULL, NULL} }; static XtCallbackRec WSreleasecallbacks[] = { { EndRange, NULL}, {NULL, NULL} }; if (debug & 0x1) fprintf (stderr, "%s: initialize device...\n", Module);/* toplevel = XtInitialize (NULL, "XMcd", options, XtNumber(options), * &Argc, Argv); */ display = XtDisplay (toplevel); screen = DefaultScreen (display); width = DisplayWidth (display, screen); height = DisplayHeight (display, screen); i = 0; XtSetArg( arg[i], XtNwidth, 200); i++; outer = XtCreateManagedWidget ("Paned", XwvPanedWidgetClass, toplevel, arg, i); /* XtAddCallback (outer, XtNdestroyCallback, Destroyed, NULL); */ if (debug & 0x1) fprintf (stderr, "%s: screen = %d, width = %d, height = %d\n", Module, screen, width, height); if ((font_info = XLoadQueryFont (display, "6x10")) == NULL) { if ((font_info = XLoadQueryFont (display, "6x13")) == NULL) { fprintf(stderr,"%s: can't load font.\n", Module); exit(1); } } Texth = font_info->max_bounds.ascent + font_info->max_bounds.descent; /*******************************/ /* C R E A T E W I D G E T S */ /*******************************/ /* Create Label Widget for displaying title */ { int LabelHeight = 12; i = 0; XtSetArg (arg[i], XtNlabel, title); i++; /* The following is used to prevent the vPaned widget from displaying * sashes (control widgets) in the bottom right corner of each pane. */ XtSetArg( arg[i], XtNmin, LabelHeight); i++; XtSetArg( arg[i], XtNmax, LabelHeight); i++; XtSetArg (arg[i], XtNbackground, NameToPixel (display, screen, "blue", WhitePixel (display, screen))); i++; XtSetArg (arg[i], XtNforeground, NameToPixel (display, screen, "white", WhitePixel (display, screen))); i++; /* XtCreateManagedWidget ("Title", labelWidgetClass, outer, arg, i); */ XtCreateManagedWidget ("Title", XwstatictextWidgetClass, outer, arg, i); } /* Create a Form Widget for placing Toggle Widgets at proper place */ { int FormHeight = 20; i = 0; XtSetArg (arg[i], XtNwidgetType, XwWORK_SPACE); i++; XtSetArg( arg[i], XtNmin, FormHeight); i++; XtSetArg( arg[i], XtNmax, FormHeight); i++; FormW = XtCreateManagedWidget ("Form", XwformWidgetClass, outer, arg, i); } { i = 0; XtSetArg (arg[i], XtNlabel, "Quit"); i++; XtSetArg (arg[i], XtNxRefWidget, FormW); i++; XtSetArg (arg[i], XtNxResizable, True); i++; XtSetArg (arg[i], XtNyRefWidget, FormW); i++; XtSetArg (arg[i], XtNyResizable, True); i++; XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; XtSetArg (arg[i], XtNrelease, Quitcallbacks); i++; PrevW = QuitW = XtCreateManagedWidget ("Quit", XwpushButtonWidgetClass, FormW, arg, i); } if (R_flag || P_flag) { i = 0; XtSetArg (arg[i], XtNlabel, "Clear Range"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; /* XtSetArg (arg[i], XtNsquare, False); i++; */ XtSetArg (arg[i], XtNselect, ERcallbacks); i++; PrevW = RRW = XtCreateManagedWidget ("RR", XwpushButtonWidgetClass, FormW, arg, i); } if (P_flag) { i = 0; XtSetArg (arg[i], XtNlabel, "Play selected range"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxResizable, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; /* XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; */ XtSetArg (arg[i], XtNsquare, False); i++; XtSetArg (arg[i], XtNselect, PRcallbacks); i++; PrevW = PRW = XtCreateManagedWidget ("PR", XwtoggleWidgetClass, FormW, arg, i); } /* Create Refresh pushButton Widget */ { i = 0; XtSetArg (arg[i], XtNlabel, "Refresh"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxAttachRight, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; XtSetArg (arg[i], XtNselect, Refreshcallbacks); i++; RefreshW = XtCreateManagedWidget ("Refresh", XwpushButtonWidgetClass, FormW, arg, i); } /* Create a Form Widget for placing Toggle Widgets at proper place */ if (R_flag || P_flag) { int FormHeight = 20; i = 0; XtSetArg (arg[i], XtNwidgetType, XwWORK_SPACE); i++; XtSetArg( arg[i], XtNmin, FormHeight); i++; XtSetArg( arg[i], XtNmax, FormHeight); i++; Form2W = XtCreateManagedWidget ("Form2", XwformWidgetClass, outer, arg, i); } if (R_flag || P_flag) { i = 0; XtSetArg (arg[i], XtNlabel, "Save Range"); i++; XtSetArg (arg[i], XtNxRefWidget, Form2W); i++; XtSetArg (arg[i], XtNxResizable, True); i++; XtSetArg (arg[i], XtNyRefWidget, Form2W); i++; XtSetArg (arg[i], XtNyResizable, True); i++; XtSetArg (arg[i], XtNsquare, False); i++; XtSetArg (arg[i], XtNselect, Savecallbacks); i++; PrevW = SaveW = XtCreateManagedWidget ("Save", XwtoggleWidgetClass, Form2W, arg, i); } if (R_flag || P_flag) { i = 0; XtSetArg (arg[i], XtNlabel, "Select/Range Mode"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxResizable, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; /* XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; */ XtSetArg (arg[i], XtNsquare, False); i++; XtSetArg (arg[i], XtNselect, SRcallbacks); i++; PrevW = SRW = XtCreateManagedWidget ("SR", XwtoggleWidgetClass, Form2W, arg, i); } if (R_flag || P_flag ) { i = 0; XtSetArg (arg[i], XtNlabel, "Zoom In"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; /* XtSetArg (arg[i], XtNxAttachRight, True); i++; */ XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; XtSetArg (arg[i], XtNsquare, False); i++; XtSetArg (arg[i], XtNselect, ZoomIncallbacks); i++; PrevW = ZoomInW = XtCreateManagedWidget ("ZoomIn", XwtoggleWidgetClass, Form2W, arg, i); } if (R_flag || P_flag ) { i = 0; XtSetArg (arg[i], XtNlabel, "Zoom Out"); i++; XtSetArg (arg[i], XtNxRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNyRefWidget, (caddr_t) PrevW); i++; XtSetArg (arg[i], XtNxAttachRight, True); i++; XtSetArg (arg[i], XtNxAddWidth, True); i++; XtSetArg (arg[i], XtNxVaryOffset, True); i++; XtSetArg (arg[i], XtNsquare, False); i++; XtSetArg (arg[i], XtNselect, ZoomOutcallbacks); i++; PrevW = ZoomOutW = XtCreateManagedWidget ("ZoomOut", XwtoggleWidgetClass, Form2W, arg, i); } /* Create a WorkSpace Widget for drawing */ i = 0; XtSetArg (arg[i], XtNexpose, WSexposecallbacks); i++; XtSetArg (arg[i], XtNtraversalType, XwHIGHLIGHT_ENTER); i++; XtSetArg (arg[i], XtNselect, WSselectcallbacks); i++; XtSetArg (arg[i], XtNrelease, WSreleasecallbacks); i++; XtSetArg (arg[i], XtNwidth, DEFAULT_WIDTH); i++; XtSetArg (arg[i], XtNheight, DEFAULT_HEIGHT); i++; WSW = XtCreateManagedWidget ("WorkSpace", XwworkSpaceWidgetClass, outer, arg, i); xorig = yorig = 1; if (debug & 0x1) fprintf (stderr, "%s: device initialized\n", Module); /* OLD Method: * MCWindow = XCreateSimpleWindow (display, RootWindow (display, screen), * 0, 0, * MCWinWidth, MCWinHeight, * 1, BlackPixel (display, screen), * WhitePixel (display, screen)); * * XSetStandardProperties (display, MCWindow, Module, Module, * None, NULL, 0, &szhint); * XMapWindow (display, MCWindow); *//* XSelectInput (display, MCWindow, * KeyPressMask | ButtonPressMask | ExposureMask | ResizeRedirectMask); */ /* mc_gc = XCreateGC (display, MCWindow, valuemask, &values); */}erase(){ if (WidgetsCreated) XClearWindow (display, MCWindow);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -