📄 dna.cc
字号:
{ XLookupColor(g.display, g.colormap, "MediumBlue", &exactcolor, &hdwrcolor); XSetForeground(g.display, g.gc, hdwrcolor.pixel); helix = createpixmap(126,377,win); pmap = createpixmap(126,377,win); XReadBitmapFile(g.display, helix, "/usr/X11R6/include/X11/bitmaps/dna.xbm", &width, &height, &pmap, &xhot, &yhot); } XLookupColor(g.display, g.colormap, "MediumBlue", &exactcolor, &hdwrcolor); XSetForeground(g.display, g.gc, hdwrcolor.pixel); XCopyPlane(g.display, pmap, win, g.gc, 0, 5, width-2, height-18, 1, 1, 0x01); hit = 1;}//--------------------------------------------------------------------//// add_mainbutton //// add a button on left side ////--------------------------------------------------------------------//Widget add_mainbutton(char *name, void *cb){ static int y=0; static int buttonno=0; Widget w; Arg args[100]; int n,x; if(buttonno/2*2==buttonno) x=0; else x=71; n=0; XtSetArg(args[n], XmNx, x); n++; XtSetArg(args[n], XmNy, y); n++; if(buttonno<2) { XtSetArg(args[n], XmNheight, 19.5); n++; } else { XtSetArg(args[n], XmNheight, 20); n++; } XtSetArg(args[n], XmNwidth, 69); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++; XtSetArg(args[n], XmNrecomputeSize, False); n++; XtSetArg(args[n], XmNtraversalOn, True); n++; XtSetArg(args[n], XmNhighlightThickness, 0); n++;#ifdef MOTIF2 XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_NONE); n++;#else XtSetArg(args[n], XmNindicatorOn, False); n++;#endif w = XmCreateToggleButton(g.button_drawing_area, name, args, n); g.button[buttonno]->button = buttonno; g.button[buttonno]->widget = w; g.button[buttonno]->state = OFF; XtAddCallback(w, XmNvalueChangedCallback, (XtCBP)cb, (XtP)buttonno); XtAddEventHandler(w, FocusChangeMask, False, (XtEH)focuscb, (XtP)0); XtManageChild(w); if(buttonno/2*2!=buttonno) y += 20; buttonno++; return w;}//--------------------------------------------------------------------//// reset_user_buttons //// Buttons at left whose state is read from tnimage.ini. ////--------------------------------------------------------------------//void reset_user_buttons(void){ int k; for(k=0;k<g.nbuttons;k++) { if(strcmp(g.button[k]->activate_cmd,"dna")==SAME) { XmToggleButtonSetState(g.button[k]->widget, g.sequence_mode, False); g.button[k]->state = g.sequence_mode; } }}//--------------------------------------------------------------------//// unpush_null_buttons ////--------------------------------------------------------------------//void unpush_null_buttons(void){ int k; for(k=0;k<g.nbuttons;k++) if(g.button[k]->state==ON && strcmp(g.button[k]->deactivate_cmd,"null")==SAME) unpush_main_button(k); g.getout=1;}//--------------------------------------------------------------------//// unpush_main_button ////--------------------------------------------------------------------//void unpush_main_button(int k){ XmToggleButtonSetState(g.button[k]->widget, False, False); g.button[k]->state = OFF;}//--------------------------------------------------------------------//// push_main_button ////--------------------------------------------------------------------//void push_main_button(int k){ XmToggleButtonSetState(g.button[k]->widget, True, False); g.button[k]->state = ON;}//--------------------------------------------------------------------//// addstandardbuttons ////--------------------------------------------------------------------//void addstandardbuttons(Widget form, Widget buttons[3], int *data) { addOkCancelHelpButtons(form, buttons, "Ok", 15, "Cancel", 125, "Help", 230, data);}//--------------------------------------------------------------------//// addOkCancelHelpButtons //// Must use a ptr to put data in callback - a variable would go out //// of scope when this function returns. ////--------------------------------------------------------------------//void addOkCancelHelpButtons(Widget form, Widget button[3], char *s1, int x1, char *s2, int x2, char *s3, int x3, int *data){ Arg args[100]; int n; n=0; XtSetArg(args[n],XmNtopAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++; XtSetArg(args[n],XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n],XmNrightAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNwidth, 100); n++; XtSetArg(args[n],XmNleftOffset, x1); n++; XtSetArg(args[n],XmNbottomOffset, 2); n++; XtSetArg(args[n],XmNdefaultButton, True); n++; XtSetArg(args[n],XmNsensitive, True); n++; XtSetArg(args[n],XmNnavigationType, XmNONE); n++; XtSetArg(args[n],XmNinitialFocus, True); n++; XtSetArg(args[n],XmNaccelerator, 10); n++; button[0] = XmCreatePushButton(form,s1,args,n); // OK button XtManageChild(button[0]); n=0; XtSetArg(args[n],XmNtopAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++; XtSetArg(args[n],XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n],XmNrightAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNwidth, 100); n++; XtSetArg(args[n],XmNleftOffset, x2); n++; XtSetArg(args[n],XmNbottomOffset, 2); n++; XtSetArg(args[n],XmNsensitive, True); n++; XtSetArg(args[n],XmNdefaultButton, False); n++; XtSetArg(args[n],XmNshowAsDefault, False); n++; XtSetArg(args[n],XmNnavigationType, XmNONE); n++; button[1] = XmCreatePushButton(form,s2,args,n); // Cancel button XtManageChild(button[1]); n=0; XtSetArg(args[n],XmNtopAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++; XtSetArg(args[n],XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n],XmNrightAttachment, XmATTACH_NONE); n++; XtSetArg(args[n],XmNwidth, 100); n++; XtSetArg(args[n],XmNleftOffset, x3); n++; XtSetArg(args[n],XmNbottomOffset, 2); n++; XtSetArg(args[n],XmNsensitive, True); n++; XtSetArg(args[n],XmNdefaultButton, False); n++; XtSetArg(args[n],XmNshowAsDefault, False); n++; XtSetArg(args[n],XmNnavigationType, XmNONE); n++; button[2] = XmCreatePushButton(form,s3,args,n); // Help button XtManageChild(button[2]); XtAddCallback(button[0], XmNactivateCallback, (XtCallbackProc)okcb, (XtPointer)form); XtAddCallback(button[1], XmNactivateCallback, (XtCallbackProc)cancelcb, (XtPointer)form); XtAddCallback(button[2], XmNactivateCallback, (XtCallbackProc)helpcb, (XtPointer)data); //// Make Enter & Escape Keys the same as Mouse Click On The Buttons. XtAddEventHandler(button[0], KeyPressMask, FALSE, (XtEventHandler)entercb, (XtPointer)form); XtAddEventHandler(button[1], KeyPressMask, FALSE, (XtEventHandler)entercb, (XtPointer)form); XtAddEventHandler(button[2], KeyPressMask, FALSE, (XtEventHandler)entercb, (XtPointer)form);}//--------------------------------------------------------------------//// init_xlib //// Initialize miscellaneous Xlib functions. //// Call after read_settings so want_colormaps & colors are known. ////--------------------------------------------------------------------//void init_xlib(void){ int depth; // Bits/pixel of server uint uw,uh,ubw; // width, height, bdr.width, & depth of root window Window rwin; // Window ID of root int xroot,yroot; if(setlocale(LC_ALL,"")==NULL) fprintf(stderr,"Cant set locale\n"); if(XSetLocaleModifiers("")==NULL) fprintf(stderr, "Cant set locale modifiers\n"); g.display = XtDisplay(g.main_widget); if((g.fontstruct=XLoadQueryFont(g.display, g.font)) == NULL) { fprintf(stderr, "%s: display %s cannot load font %s\ntrying fixed font", g.appname, DisplayString(g.display), g.font); strcpy(g.font, "fixed"); if((g.fontstruct=XLoadQueryFont(g.display, g.font)) == NULL) { fprintf(stderr, "%s: display %s cannot load fixed font\n", g.appname, DisplayString(g.display)); exit(1); } } g.screen = DefaultScreen(g.display); g.root_window = RootWindow(g.display,g.screen); depth = DefaultDepth(g.display, g.screen); g.visual = DefaultVisual(g.display, g.screen); g.screen = DefaultScreen(g.display); g.bitsperpixel = bits_per_pixel(); if(g.bitsperpixel>=32 && depth==24) g.sparse_packing=1; if(g.bitsperpixel == 8 && (g.visual->c_class == TrueColor || g.visual->c_class == DirectColor)) { g.bitsperpixel = 7; g.want_colormaps = 0; printf("8-bit TrueColor mode\n"); } g.colormap = DefaultColormap(g.display, g.screen); g.ximage_byte_order = ImageByteOrder(g.display); XGetGeometry(g.display, g.root_window, &rwin, &xroot, &yroot, &uw, &uh, &ubw, &g.udepth); g.xres = (int) uw; // xres of root screen g.yres = (int) uh; // yres of root screen g.off[7]=1; g.off[8]=1; g.off[15]=2; g.off[16]=2; g.off[24]=3; g.off[32]=4; }//--------------------------------------------------------------------//// bits_per_pixel ////--------------------------------------------------------------------//int bits_per_pixel(void){ int bitmap_pad = 8; // Data is byte-organized int bytesperline=0; // 0 means: scan lines are contiguous - X server // calculates it for you int xsize=10; int ysize=10; int bpp = DefaultDepth(g.display, g.screen); char *buf; if(bpp==15) return 15; buf = (char*)malloc(1200); // Must use malloc because XDestroyImage deallocates it "for" you. int offset = 0; XImage *ximage; ximage = XCreateImage(g.display, g.visual, (uint)bpp, ZPixmap, offset, buf, xsize, ysize, bitmap_pad, bytesperline); if(ximage==NULL){ fprintf(stderr, "Cant create test image\n"); exit(1); } bpp = ximage->bits_per_pixel; XDestroyImage(ximage); return bpp;}//--------------------------------------------------------------------//// xminitializemisc //// Initialize miscellaneous Xm functions. //// Must be called after create_drawing_area() so g.mainwindow & //// g.display are defined. //// Must be called after init_xlib so g.fontstruct is defined. ////--------------------------------------------------------------------//void xminitializemisc(Widget parent){ //// Get rid of those pesky messages that spew out on the screen //// all the time. XtAppSetWarningHandler(XtWidgetToApplicationContext(parent), warningmessagecb); g.spixmap = XCreatePixmap(g.display,g.main_window,200,200,g.udepth);}//--------------------------------------------------------------------//// addlabel //// Print text on a Widget (used in dialog boxes) //// Creates a Widget, don't forget to destroy it. //// 'string' is the labelString resource specified in fallbacks //// 'position' can be LEFT, CENTER, or RIGHT. //// Make boundaries as big as possible in case user changes string to //// something wide. If x2-x1 is too small for the string, Motif will //// enlarge the dialog box to gigantic size. ////--------------------------------------------------------------------//Widget addlabel(Widget parent, char *string, int position, double x1, double y1, double x2, double y2) { Widget label; Arg args[100]; int n=0; XtSetArg(args[n], XmNleftPosition, x1); n++; // % of width from left XtSetArg(args[n], XmNtopPosition, y1); n++; // % of height from top XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightPosition, x2); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomPosition, y2); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; switch(position) { case LEFT: XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; break; case CENTER: XtSetArg(args[n], XmNalignment, XmALIGNMENT_CENTER); n++; break; case RIGHT: XtSetArg(args[n], XmNalignment, XmALIGNMENT_END); n++; break; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -