⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test8.c

📁 安装DDD之前
💻 C
字号:
/* * $Header: /cvsroot/lesstif/lesstif/test/Xm/xmstring/test8.c,v 1.7 2001/06/18 14:35:54 amai Exp $*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include <X11/Intrinsic.h>#include <X11/Shell.h>#include <Xm/Xm.h>#include <Xm/DrawingA.h>#include <Xm/Form.h>#include <Xm/List.h>static void create_gc(Widget w);static void create_shell(Display *display,                  char *app_name,                  int app_argc,                  char **app_argv);static void initialise_objects(Widget parent);static XmString string_append(XmString s1, XmString s2);Widget shell = (Widget) NULL;Widget form = (Widget) NULL;Widget list1_sw = (Widget) NULL;Widget list1 = (Widget) NULL;Widget da = (Widget) NULL;static GC  gc = (GC)NULL;static voidda_expose(Widget          w,   	  XtPointer       client_data,	  XtPointer       call_data){	XExposeEvent   *e = &((XmDrawingAreaCallbackStruct *) call_data)	->event->xexpose;	XmString       *items, *selected_items, out_string, tmp_string;	Boolean         underline;	int             item_count, selected_count;	Widget          list = (Widget) client_data;	Dimension       width, height, extent, item_extent, string_height;	int             i;	XmFontList      font_list;	XRectangle      clip;	/* Extract items, selected items and font from XmList */	XtVaGetValues(list,	              XmNitems, &items,		      XmNitemCount, &item_count,		      XmNselectedItems, &selected_items,		      XmNselectedItemCount, &selected_count,		      XmNfontList, &font_list,		      NULL);	XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, NULL);	underline = (selected_count > 0);	create_gc(w);	extent = 0;	out_string = NULL;	/*	 * Form list items into a single compound string, inserting	 * separators where needed to avoid drawing outside the XmDrawingArea	 */	for (i = 0; i < item_count; i++) {		item_extent = XmStringWidth(font_list, items[i]);		if (out_string != NULL && (extent + item_extent > width)) {			extent = 0;			out_string = string_append(out_string,						 XmStringSeparatorCreate());		}		tmp_string = XmStringConcat(out_string, items[i]);		XmStringFree(out_string);		out_string = tmp_string;		extent = extent + item_extent;	}	string_height = XmStringHeight(font_list, out_string);	clip.x = e->x;	clip.y = e->y;	clip.width = e->width;	clip.height = e->height;	XSetClipRectangles(XtDisplay(w), gc, 0, 0, &clip, 1, YXBanded);	/* Draw compound string, underlining the selected item if any */	if (underline)		XmStringDrawUnderline(XtDisplay(w), XtWindow(w), font_list,		     out_string, gc, 0, (height - string_height) / 2, width,				      XmALIGNMENT_CENTER,				      XmSTRING_DIRECTION_L_TO_R, NULL,				      selected_items[0]);	else		XmStringDraw(XtDisplay(w), XtWindow(w), font_list, out_string, gc,			     0, (height - string_height) / 2, width,			     XmALIGNMENT_CENTER,			     XmSTRING_DIRECTION_L_TO_R, NULL);	XmStringFree(out_string);}static XmStringstring_append(XmString s1, XmString s2){	XmString        s3 = XmStringConcat(s1, s2);	XmStringFree(s1);	XmStringFree(s2);	return (s3);}static void create_gc(Widget w){	XGCValues       values;	XmFontList      fontlist;	XFontStruct    *font, **font_struct_list;	XFontSet        fontset;	char          **font_name_list, *tag;	XtPointer       t;	XmFontContext   context;	XmFontListEntry first_entry, entry;	XmFontType      font_type;	int             font_count;	if (gc)		return;	/* Assume parent is Shell or BulletinBoard */	XtVaGetValues(XtParent(w), XmNlabelFontList, &fontlist, NULL);	if (fontlist)		if (XmFontListInitFontContext(&context, fontlist)) {			/* Get first entry */			entry = XmFontListNextEntry(context);			first_entry = entry;			/* Walk down list looking for "Drawing" */			while (entry) {				tag = XmFontListEntryGetTag(entry);				if (strcmp(tag, "Drawing") == 0) {					XtFree(tag);					break;				}				XtFree(tag);				entry = XmFontListNextEntry(context);			}			XmFontListFreeFontContext(context);			/* If we didn't find it use first entry */			if (!entry)				entry = first_entry;			/* Get the font */			t = XmFontListEntryGetFont(entry, &font_type);			if (font_type == XmFONT_IS_FONT)				font = (XFontStruct *) t;			else {				/*				 * It's a font set - use the first one in the				 * set				 */				fontset = (XFontSet) t;				font_count = XFontsOfFontSet(fontset, &font_struct_list,							   &font_name_list);				font = font_struct_list[0];			}			values.font = font->fid;			values.foreground = BlackPixelOfScreen(XtScreen(w));			gc = XCreateGC(XtDisplay(w), XtWindow(w),				       GCFont | GCForeground, &values);		}}static  XmFontList f1;static voidinitialise_objects(Widget parent){	const char from_s[] = "-*-fixed-*-*-*-*-24-*-*-*-*-*-*-*=japanese,-*-lucidabright-medium-i-*-*-24-*-*-*-*-*-*-*=large_italic,-*-lucidabright-demibold-r-*-*-24-*-*-*-*-*-*-*=large_bold,-*-lucidabright-demibold-i-*-*-14-*-*-*-*-*-*-*=small_italic,-*-lucidabright-demibold-r-*-*-14-*-*-*-*-*-*-*=small_bold";	XrmValue from, to;        static int _xd_initialised = 0;	if ( _xd_initialised ) return;	_xd_initialised = 1;	from.size = strlen(from_s)+1;	from.addr = XtMalloc ( from.size );	strcpy ( from.addr, from_s );	to.addr=NULL;	XtConvert( parent, XmRString, &from, XmRFontList, &to);	XtFree ( from.addr );        f1 = *(XmFontList*)to.addr;}static voidcreate_shell(Display *display,             char *app_name,             int app_argc,             char **app_argv){	Arg al[12];                    /* Arg List */	int ac;           /* Arg Count */	XmString *list_items;          /* For list items */	int list_item;                 /* Index for list_items */	/* XmFontList f1; */	ac = 0;	XtSetArg(al[ac], XmNallowShellResize, TRUE); ac++;	XtSetArg(al[ac], XmNargc, app_argc); ac++;	XtSetArg(al[ac], XmNargv, app_argv); ac++;	shell = XtAppCreateShell ( app_name, "XApplication", applicationShellWidgetClass, display, al, ac );	initialise_objects ( shell );		ac = 0;	XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++;	XtSetArg(al[ac], XmNlabelFontList, f1); ac++;	XtSetArg(al[ac], XmNheight, 400); ac++;	form = XmCreateForm ( shell, "form", al, ac );	ac = 0;	XtSetArg(al[ac], XmNfontList, f1); ac++;	XtSetArg(al[ac], XmNselectionPolicy, XmSINGLE_SELECT); ac++;	XtSetArg(al[ac], XmNlistSizePolicy, XmRESIZE_IF_POSSIBLE); ac++;	XtSetArg(al[ac], XmNitemCount, 5); ac++;	list_items = (XmString *) XtMalloc ( sizeof (XmString) * 5 );	list_items[0] = XmStringCreateLtoR("The", "large_italic");	list_items[1] = XmStringCreateLtoR("Quick", "small_bold");	/*list_items[2] = XmStringCreateLtoR("\033$BF|\033(B\033$BK\\\033(B", "japanese" );*/	list_items[2] = XmStringCreateLtoR("F|  K\\", "japanese" );	list_items[3] = XmStringCreateLtoR("Brown", "small_italic");	list_items[4] = XmStringCreateLtoR("Fox", "large_bold");	XtSetArg(al[ac], XmNitems, list_items); ac++;	list1 = XmCreateScrolledList ( form, "list1", al, ac );	list1_sw = XtParent ( list1 );	for (list_item = 0; list_item < 5; list_item++ )		XmStringFree (list_items [list_item]);	XtFree ( (char *) list_items ); 	da = XmCreateDrawingArea ( form, "da", al, 0 );	ac = 0;	XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;	XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_POSITION); ac++;	XtSetArg(al[ac], XmNbottomPosition, 65); ac++;	XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;	XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;	XtSetValues ( list1_sw,al, ac );	ac = 0;	XtSetArg(al[ac], XmNtopAttachment, XmATTACH_POSITION); ac++;	XtSetArg(al[ac], XmNtopPosition, 65); ac++;	XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;	XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;	XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;	XtSetValues ( da,al, ac );	XtManageChild(list1);	XtAddCallback (da, XmNexposeCallback, da_expose, list1);	XtManageChild(da);	XtManageChild ( form);}XtAppContext app_context;Display *display;       /*  Display             */intmain (int argc, char *argv[]){	XtSetLanguageProc ( (XtAppContext) NULL, (XtLanguageProc) NULL, (XtPointer) NULL );	XtToolkitInitialize ();	app_context = XtCreateApplicationContext ();	display = XtOpenDisplay (app_context, NULL, argv[0], "XApplication",				 NULL, 0, &argc, argv);	if (!display)	{	    printf("%s: can't open display, exiting...\n", argv[0]);	    exit (-1);	}	create_shell ( display, argv[0], argc, argv );	XtRealizeWidget (shell);	/* Note: the following values are the result of * querying the current geometry. */{static XtWidgetGeometry Expected[] = {   CWWidth | CWHeight            ,  361,  266,   74,  400, 0,0,0, /* form */   CWWidth | CWHeight | CWX | CWY,    0,    0,   74,  260, 0,0,0, /* list1SW */   CWWidth | CWHeight | CWX | CWY,    0,    0,   74,  260, 0,0,0, /* list1 */   CWWidth | CWHeight | CWX | CWY,    0,  260,   74,  140, 0,0,0, /* da */};/* toplevel should be replaced with to correct applicationShell */PrintDetails(shell, Expected);}	LessTifTestMainLoop(shell);	exit (0);}

⌨️ 快捷键说明

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